Skip to content

Commit 511c664

Browse files
authored
Merge pull request #1812 from SciML/baggepinnen-patch-1
`nameof` -> `Symbol`
2 parents 9f20b03 + c4189be commit 511c664

File tree

2 files changed

+51
-2
lines changed

2 files changed

+51
-2
lines changed

src/systems/optimization/optimizationsystem.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ function DiffEqBase.OptimizationProblem{iip}(sys::OptimizationSystem, u0map,
268268

269269
_f = DiffEqBase.OptimizationFunction{iip}(f,
270270
sys = sys,
271-
syms = nameof.(states(sys)),
271+
syms = Symbol.(states(sys)),
272272
SciMLBase.NoAD();
273273
grad = _grad,
274274
hess = _hess,
@@ -283,7 +283,7 @@ function DiffEqBase.OptimizationProblem{iip}(sys::OptimizationSystem, u0map,
283283
else
284284
_f = DiffEqBase.OptimizationFunction{iip}(f,
285285
sys = sys,
286-
syms = nameof.(states(sys)),
286+
syms = Symbol.(states(sys)),
287287
SciMLBase.NoAD();
288288
grad = _grad,
289289
hess = _hess,

test/optimizationsystem.jl

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,3 +125,52 @@ OBS2 = OBS
125125
@test isequal(equations(sys), (sys1.x - 1)^2 + (sys2.y - 1 / 2)^2)
126126
@test isequal(states(sys), [sys1.x, sys2.y])
127127
end
128+
129+
@testset "time dependent var" begin
130+
@parameters t
131+
@variables x(t) y
132+
@parameters a b
133+
loss = (a - x)^2 + b * (y - x^2)^2
134+
sys1 = OptimizationSystem(loss, [x, y], [a, b], name = :sys1)
135+
136+
cons2 = [x^2 + y^2 ~ 0, y * sin(x) - x ~ 0]
137+
sys2 = OptimizationSystem(loss, [x, y], [a, b], name = :sys2, constraints = cons2)
138+
139+
@variables z
140+
@parameters β
141+
loss2 = sys1.x - sys2.y + z * β
142+
combinedsys = OptimizationSystem(loss2, [z], [β], systems = [sys1, sys2],
143+
name = :combinedsys)
144+
145+
u0 = [sys1.x => 1.0
146+
sys1.y => 2.0
147+
sys2.x => 3.0
148+
sys2.y => 4.0
149+
z => 5.0]
150+
p = [sys1.a => 6.0
151+
sys1.b => 7.0
152+
sys2.a => 8.0
153+
sys2.b => 9.0
154+
β => 10.0]
155+
156+
prob = OptimizationProblem(combinedsys, u0, p, grad = true)
157+
@test prob.f.sys === combinedsys
158+
sol = solve(prob, NelderMead())
159+
@test sol.minimum < -1e5
160+
161+
prob2 = remake(prob, u0 = sol.minimizer)
162+
sol = solve(prob, BFGS(initial_stepnorm = 0.0001), allow_f_increases = true)
163+
@test sol.minimum < -1e8
164+
sol = solve(prob2, BFGS(initial_stepnorm = 0.0001), allow_f_increases = true)
165+
@test sol.minimum < -1e9
166+
167+
#inequality constraint, the bounds for constraints lcons !== ucons
168+
prob = OptimizationProblem(sys2, [x => 0.0, y => 0.0], [a => 1.0, b => 100.0],
169+
lcons = [-1.0, -1.0], ucons = [500.0, 500.0], grad = true,
170+
hess = true)
171+
@test prob.f.sys === sys2
172+
sol = solve(prob, IPNewton(), allow_f_increases = true)
173+
@test sol.minimum < 1.0
174+
sol = solve(prob, Ipopt.Optimizer())
175+
@test sol.minimum < 1.0
176+
end

0 commit comments

Comments
 (0)