Skip to content

Commit b734195

Browse files
fixes nested systems for more than two levels
1 parent fb3e164 commit b734195

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

src/systems/optimization/optimizationsystem.jl

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,18 @@ function generate_function(sys::OptimizationSystem, vs = states(sys), ps = param
143143
conv = AbstractSysToExpr(sys), kwargs...)
144144
end
145145

146+
function namespace_objective(sys::AbstractSystem)
147+
op = objective(sys)
148+
namespace_expr(op, sys)
149+
end
150+
146151
function objective(sys)
147152
op = get_op(sys)
148153
systems = get_systems(sys)
149154
if isempty(systems)
150155
op
151156
else
152-
op + reduce(+, map(sys_ -> namespace_expr(get_op(sys_), sys_), systems))
157+
op + reduce(+, map(sys_ -> namespace_objective(sys_), systems))
153158
end
154159
end
155160

@@ -166,7 +171,9 @@ function namespace_inequality(ineq::Inequality, sys, n = nameof(sys))
166171
end
167172

168173
function namespace_constraints(sys)
169-
namespace_constraint.(get_constraints(sys), Ref(sys))
174+
cstrs = constraints(sys)
175+
isempty(cstrs) && return Vector{Union{Equation, Inequality}}(undef,0)
176+
map(cstr -> namespace_constraint(cstr, sys), cstrs)
170177
end
171178

172179
function constraints(sys)

test/optimizationsystem.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,16 @@ end
165165
@test isequal(prob_.p, [2.0])
166166
end
167167

168+
@testset "nested systems" begin
169+
@variables x1 x2 x3 x4
170+
@named sys1 = OptimizationSystem(x1, [x1], [])
171+
@named sys2 = OptimizationSystem(x2, [x2], [], systems=[sys1])
172+
@named sys3 = OptimizationSystem(x3, [x3], [], systems=[sys2])
173+
@named sys4 = OptimizationSystem(x4, [x4], [], systems=[sys3])
174+
175+
@test isequal(equations(sys4), sys3.sys2.sys1.x1 + sys3.sys2.x2 + sys3.x3 + x4)
176+
end
177+
168178
@testset "time dependent var" begin
169179
@parameters t
170180
@variables x(t) y

0 commit comments

Comments
 (0)