@@ -35,7 +35,9 @@ using DataInterpolations
35
35
osol2 = solve (oprob, ImplicitEuler (), dt = 0.01 , adaptive = false ) # 129.375 μs, 61.91 KiB
36
36
@test ≈ (jsol2. sol. u, osol2. u, rtol = 0.001 )
37
37
iprob = InfiniteOptControlProblem (sys, u0map, tspan, parammap, dt = 0.01 )
38
- isol = solve (iprob, Ipopt. Optimizer, derivative_method = InfiniteOpt. FiniteDifference (InfiniteOpt. Backward ()), silent = true ) # 11.540 ms, 4.00 MiB
38
+ isol = solve (iprob, Ipopt. Optimizer,
39
+ derivative_method = InfiniteOpt. FiniteDifference (InfiniteOpt. Backward ()),
40
+ silent = true ) # 11.540 ms, 4.00 MiB
39
41
@test ≈ (jsol2. sol. u, osol2. u, rtol = 0.001 )
40
42
41
43
# With a constraint
@@ -52,7 +54,8 @@ using DataInterpolations
52
54
53
55
iprob = InfiniteOptControlProblem (
54
56
lksys, u0map, tspan, parammap; guesses = guess, dt = 0.01 )
55
- isol = solve (iprob, Ipopt. Optimizer, derivative_method = InfiniteOpt. OrthogonalCollocation (3 ), silent = true ) # 48.564 ms, 9.58 MiB
57
+ isol = solve (iprob, Ipopt. Optimizer,
58
+ derivative_method = InfiniteOpt. OrthogonalCollocation (3 ), silent = true ) # 48.564 ms, 9.58 MiB
56
59
sol = isol. sol
57
60
@test sol (0.6 )[1 ] ≈ 3.5
58
61
@test sol (0.3 )[1 ] ≈ 7.0
@@ -62,7 +65,8 @@ using DataInterpolations
62
65
@mtkbuild lksys = ODESystem (eqs, t; constraints = constr)
63
66
iprob = InfiniteOptControlProblem (
64
67
lksys, u0map, tspan, parammap; guesses = guess, dt = 0.01 )
65
- isol = solve (iprob, Ipopt. Optimizer, derivative_method = InfiniteOpt. OrthogonalCollocation (3 ), silent = true ) # 48.564 ms, 9.58 MiB
68
+ isol = solve (iprob, Ipopt. Optimizer,
69
+ derivative_method = InfiniteOpt. OrthogonalCollocation (3 ), silent = true ) # 48.564 ms, 9.58 MiB
66
70
@test all (u -> u > [1 , 1 ], isol. sol. u)
67
71
68
72
jprob = JuMPControlProblem (lksys, u0map, tspan, parammap; guesses = guess, dt = 0.01 )
93
97
constr = [v (1.0 ) ~ 0.0 ]
94
98
cost = [- x (1.0 )] # Maximize the final distance.
95
99
@named block = ODESystem (
96
- [D (x (t)) ~ v (t), D (v (t)) ~ u (t)], t; costs = cost, constraints = constr)
100
+ [D (x (t)) ~ v (t), D (v (t)) ~ u (t)], t; costs = cost, constraints = constr)
97
101
block, input_idxs = structural_simplify (block, ([u (t)], []))
98
102
99
103
u0map = [x (t) => 0.0 , v (t) => 0.0 ]
146
150
147
151
@parameters (α_interp:: LinearInterpolation )(.. )
148
152
eqs = [D (w (t)) ~ - μ * w (t) + b * s * α_interp (t) * w (t),
149
- D (q (t)) ~ - ν * q (t) + c * (1 - α_interp (t)) * s * w (t)]
153
+ D (q (t)) ~ - ν * q (t) + c * (1 - α_interp (t)) * s * w (t)]
150
154
@mtkbuild beesys_ode = ODESystem (eqs, t)
151
- oprob = ODEProblem (beesys_ode, u0map, tspan, merge (Dict (pmap), Dict (α_interp => ctrl_to_spline (jsol. input_sol, LinearInterpolation))))
155
+ oprob = ODEProblem (beesys_ode,
156
+ u0map,
157
+ tspan,
158
+ merge (Dict (pmap),
159
+ Dict (α_interp => ctrl_to_spline (jsol. input_sol, LinearInterpolation))))
152
160
osol = solve (oprob, Tsit5 (); dt = 0.01 , adaptive = false )
153
161
@test ≈ (osol. u, jsol. sol. u, rtol = 0.01 )
154
162
osol2 = solve (oprob, ImplicitEuler (); dt = 0.01 , adaptive = false )
@@ -182,10 +190,12 @@ end
182
190
jsol = solve (jprob, Ipopt. Optimizer, :RadauIIA5 , silent = true )
183
191
@test jsol. sol. u[end ][1 ] > 1.012
184
192
185
- iprob = InfiniteOptControlProblem (rocket, u0map, (ts, te), pmap; dt = 0.005 , cse = false )
186
- isol = solve (iprob, Ipopt. Optimizer, derivative_method = InfiniteOpt. OrthogonalCollocation (3 ), silent = true )
193
+ iprob = InfiniteOptControlProblem (
194
+ rocket, u0map, (ts, te), pmap; dt = 0.005 , cse = false )
195
+ isol = solve (iprob, Ipopt. Optimizer,
196
+ derivative_method = InfiniteOpt. OrthogonalCollocation (3 ), silent = true )
187
197
@test isol. sol. u[end ][1 ] > 1.012
188
-
198
+
189
199
# Test solution
190
200
@parameters (T_interp:: CubicSpline )(.. )
191
201
eqs = [D (h (t)) ~ v (t),
@@ -229,16 +239,16 @@ end
229
239
230
240
s = sin (θ (t))
231
241
c = cos (θ (t))
232
- H = [mₖ+ mₚ mₚ* l* c
242
+ H = [mₖ+ mₚ mₚ* l* c
233
243
mₚ* l* c mₚ* l^ 2 ]
234
244
C = [0 - mₚ* D (θ (t))* l* s
235
- 0 0 ]
245
+ 0 0 ]
236
246
qd = [D (x (t)), D (θ (t))]
237
- G = [0 , mₚ* g * l * s]
247
+ G = [0 , mₚ * g * l * s]
238
248
B = [1 , 0 ]
239
249
240
250
tf = 5
241
- rhss = - H \ Vector (C* qd + G - B* u)
251
+ rhss = - H \ Vector (C * qd + G - B * u)
242
252
eqs = [D (D (x (t))) ~ rhss[1 ], D (D (θ (t))) ~ rhss[2 ]]
243
253
cons = [θ (tf) ~ π, x (tf) ~ 0 , D (θ (tf)) ~ 0 , D (x (tf)) ~ 0 ]
244
254
costs = [∫ (u^ 2 )]
247
257
@named cartpole = ODESystem (eqs, t; costs, constraints = cons)
248
258
cartpole, input_idxs = structural_simplify (cartpole, ([u], []))
249
259
250
- u0map = [D (x (t)) => 0. , D (θ (t)) => 0. , θ (t) => 0. , x (t) => 0. ]
251
- pmap = [mₖ => 1. , mₚ => 0.2 , l => 0.5 , g => 9.81 , u => 0 ]
260
+ u0map = [D (x (t)) => 0.0 , D (θ (t)) => 0.0 , θ (t) => 0.0 , x (t) => 0.0 ]
261
+ pmap = [mₖ => 1.0 , mₚ => 0.2 , l => 0.5 , g => 9.81 , u => 0 ]
252
262
jprob = JuMPControlProblem (cartpole, u0map, tspan, pmap; dt = 0.04 )
253
263
jsol = solve (jprob, Ipopt. Optimizer, :RK4 )
254
264
@test jsol. sol. u[end ] ≈ [π, 0 , 0 , 0 ]
0 commit comments