@@ -125,3 +125,52 @@ OBS2 = OBS
125
125
@test isequal (equations (sys), (sys1. x - 1 )^ 2 + (sys2. y - 1 / 2 )^ 2 )
126
126
@test isequal (states (sys), [sys1. x, sys2. y])
127
127
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