Skip to content

Commit 9d92d1f

Browse files
Merge pull request #3817 from AayushSabharwal/as/casadi-lts
test: disable CasADi tests on Julia-v1.10
2 parents bbc1cbc + a77cac9 commit 9d92d1f

File tree

2 files changed

+70
-43
lines changed

2 files changed

+70
-43
lines changed

test/extensions/dynamic_optimization.jl

Lines changed: 68 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ using Pyomo
1111
import DiffEqBase: solve
1212
const M = ModelingToolkit
1313

14+
const ENABLE_CASADI = VERSION >= v"1.11"
15+
1416
@testset "ODE Solution, no cost" begin
1517
# Test solving without anything attached.
1618
@parameters α=1.5 β=1.0 γ=3.0 δ=1.0
@@ -31,10 +33,13 @@ const M = ModelingToolkit
3133
jsol = solve(jprob, JuMPCollocation(Ipopt.Optimizer, constructRK4()))
3234
oprob = ODEProblem(sys, [u0map; parammap], tspan)
3335
osol = solve(oprob, SimpleRK4(), dt = 0.01)
34-
cprob = CasADiDynamicOptProblem(sys, [u0map; parammap], tspan, dt = 0.01)
35-
csol = solve(cprob, CasADiCollocation("ipopt", constructRK4()))
36+
3637
@test jsol.sol.u osol.u
37-
@test csol.sol.u osol.u
38+
if ENABLE_CASADI
39+
cprob = CasADiDynamicOptProblem(sys, [u0map; parammap], tspan, dt = 0.01)
40+
csol = solve(cprob, CasADiCollocation("ipopt", constructRK4()))
41+
@test csol.sol.u osol.u
42+
end
3843

3944
# Implicit method.
4045
osol2 = solve(oprob, ImplicitEuler(), dt = 0.01, adaptive = false)
@@ -43,8 +48,10 @@ const M = ModelingToolkit
4348
iprob = InfiniteOptDynamicOptProblem(sys, [u0map; parammap], tspan, dt = 0.01)
4449
isol = solve(iprob, InfiniteOptCollocation(Ipopt.Optimizer))
4550
@test (isol.sol.u, osol2.u, rtol = 0.001)
46-
csol2 = solve(cprob, CasADiCollocation("ipopt", constructImplicitEuler()))
47-
@test (csol2.sol.u, osol2.u, rtol = 0.001)
51+
if ENABLE_CASADI
52+
csol2 = solve(cprob, CasADiCollocation("ipopt", constructImplicitEuler()))
53+
@test (csol2.sol.u, osol2.u, rtol = 0.001)
54+
end
4855
pprob = PyomoDynamicOptProblem(sys, [u0map; parammap], tspan, dt = 0.01)
4956
psol = solve(pprob, PyomoCollocation("ipopt", BackwardEuler()))
5057
@test all([(psol.sol(t), osol2(t), rtol = 1e-2) for t in 0.0:0.01:1.0])
@@ -61,11 +68,13 @@ const M = ModelingToolkit
6168
@test jsol.sol(0.6; idxs = x(t)) 3.5
6269
@test jsol.sol(0.3; idxs = x(t)) 7.0
6370

64-
cprob = CasADiDynamicOptProblem(
65-
lksys, [u0map; parammap], tspan; guesses = guess, dt = 0.01)
66-
csol = solve(cprob, CasADiCollocation("ipopt", constructTsitouras5()))
67-
@test csol.sol(0.6; idxs = x(t)) 3.5
68-
@test csol.sol(0.3; idxs = x(t)) 7.0
71+
if ENABLE_CASADI
72+
cprob = CasADiDynamicOptProblem(
73+
lksys, [u0map; parammap], tspan; guesses = guess, dt = 0.01)
74+
csol = solve(cprob, CasADiCollocation("ipopt", constructTsitouras5()))
75+
@test csol.sol(0.6; idxs = x(t)) 3.5
76+
@test csol.sol(0.3; idxs = x(t)) 7.0
77+
end
6978

7079
pprob = PyomoDynamicOptProblem(
7180
lksys, [u0map; parammap], tspan; guesses = guess, dt = 0.01)
@@ -100,10 +109,12 @@ const M = ModelingToolkit
100109
psol = solve(pprob, PyomoCollocation("ipopt", MidpointEuler()))
101110
@test all(u -> u > [1, 1], psol.sol.u)
102111

103-
cprob = CasADiDynamicOptProblem(
104-
lksys, [u0map; parammap], tspan; guesses = guess, dt = 0.01)
105-
csol = solve(cprob, CasADiCollocation("ipopt", constructRadauIA3()))
106-
@test all(u -> u > [1, 1], csol.sol.u)
112+
if ENABLE_CASADI
113+
cprob = CasADiDynamicOptProblem(
114+
lksys, [u0map; parammap], tspan; guesses = guess, dt = 0.01)
115+
csol = solve(cprob, CasADiCollocation("ipopt", constructRadauIA3()))
116+
@test all(u -> u > [1, 1], csol.sol.u)
117+
end
107118
end
108119

109120
function is_bangbang(input_sol, lbounds, ubounds, rtol = 1e-4)
@@ -143,11 +154,13 @@ end
143154
# Test reached final position.
144155
@test (jsol.sol[x(t)][end], 0.25, rtol = 1e-5)
145156

146-
cprob = CasADiDynamicOptProblem(block, [u0map; parammap], tspan; dt = 0.01)
147-
csol = solve(cprob, CasADiCollocation("ipopt", constructVerner8()))
148-
@test is_bangbang(csol.input_sol, [-1.0], [1.0])
149-
# Test reached final position.
150-
@test (csol.sol[x(t)][end], 0.25, rtol = 1e-5)
157+
if ENABLE_CASADI
158+
cprob = CasADiDynamicOptProblem(block, [u0map; parammap], tspan; dt = 0.01)
159+
csol = solve(cprob, CasADiCollocation("ipopt", constructVerner8()))
160+
@test is_bangbang(csol.input_sol, [-1.0], [1.0])
161+
# Test reached final position.
162+
@test (csol.sol[x(t)][end], 0.25, rtol = 1e-5)
163+
end
151164

152165
# Test dynamics
153166
@parameters (u_interp::ConstantInterpolation)(..)
@@ -156,7 +169,9 @@ end
156169
oprob = ODEProblem(block_ode, [u0map; [u_interp => spline]], tspan)
157170
osol = solve(oprob, Vern8(), dt = 0.01, adaptive = false)
158171
@test (jsol.sol.u, osol.u, rtol = 0.05)
159-
@test (csol.sol.u, osol.u, rtol = 0.05)
172+
if ENABLE_CASADI
173+
@test (csol.sol.u, osol.u, rtol = 0.05)
174+
end
160175

161176
iprob = InfiniteOptDynamicOptProblem(block, [u0map; parammap], tspan; dt = 0.01)
162177
isol = solve(iprob, InfiniteOptCollocation(Ipopt.Optimizer))
@@ -196,9 +211,11 @@ end
196211
iprob = InfiniteOptDynamicOptProblem(beesys, [u0map; pmap], tspan, dt = 0.01)
197212
isol = solve(iprob, InfiniteOptCollocation(Ipopt.Optimizer))
198213
@test is_bangbang(isol.input_sol, [0.0], [1.0])
199-
cprob = CasADiDynamicOptProblem(beesys, [u0map; pmap], tspan; dt = 0.01)
200-
csol = solve(cprob, CasADiCollocation("ipopt", constructTsitouras5()))
201-
@test is_bangbang(csol.input_sol, [0.0], [1.0])
214+
if ENABLE_CASADI
215+
cprob = CasADiDynamicOptProblem(beesys, [u0map; pmap], tspan; dt = 0.01)
216+
csol = solve(cprob, CasADiCollocation("ipopt", constructTsitouras5()))
217+
@test is_bangbang(csol.input_sol, [0.0], [1.0])
218+
end
202219
pprob = PyomoDynamicOptProblem(beesys, [u0map; pmap], tspan, dt = 0.01)
203220
psol = solve(pprob, PyomoCollocation("ipopt", BackwardEuler()))
204221
@test is_bangbang(psol.input_sol, [0.0], [1.0])
@@ -213,7 +230,9 @@ end
213230
tspan)
214231
osol = solve(oprob, Tsit5(); dt = 0.01, adaptive = false)
215232
@test (osol.u, jsol.sol.u, rtol = 0.01)
216-
@test (osol.u, csol.sol.u, rtol = 0.01)
233+
if ENABLE_CASADI
234+
@test (osol.u, csol.sol.u, rtol = 0.01)
235+
end
217236
osol2 = solve(oprob, ImplicitEuler(); dt = 0.01, adaptive = false)
218237
@test (osol2.u, isol.sol.u, rtol = 0.01)
219238
@test all([(psol.sol(t), osol2(t), rtol = 0.01) for t in 0.0:0.01:4.0])
@@ -246,10 +265,12 @@ end
246265
jsol = solve(jprob, JuMPCollocation(Ipopt.Optimizer, constructRadauIIA5()))
247266
@test jsol.sol[h(t)][end] > 1.012
248267

249-
cprob = CasADiDynamicOptProblem(
250-
rocket, [u0map; pmap], (ts, te); dt = 0.001, cse = false)
251-
csol = solve(cprob, CasADiCollocation("ipopt"))
252-
@test csol.sol[h(t)][end] > 1.012
268+
if ENABLE_CASADI
269+
cprob = CasADiDynamicOptProblem(
270+
rocket, [u0map; pmap], (ts, te); dt = 0.001, cse = false)
271+
csol = solve(cprob, CasADiCollocation("ipopt"))
272+
@test csol.sol[h(t)][end] > 1.012
273+
end
253274

254275
iprob = InfiniteOptDynamicOptProblem(rocket, [u0map; pmap], (ts, te); dt = 0.001)
255276
isol = solve(iprob, InfiniteOptCollocation(Ipopt.Optimizer))
@@ -269,7 +290,9 @@ end
269290
oprob = ODEProblem(rocket_ode, merge(Dict(u0map), Dict(pmap), interpmap), (ts, te))
270291
osol = solve(oprob, RadauIIA5(); adaptive = false, dt = 0.001)
271292
@test (jsol.sol.u, osol.u, rtol = 0.02)
272-
@test (csol.sol.u, osol.u, rtol = 0.02)
293+
if ENABLE_CASADI
294+
@test (csol.sol.u, osol.u, rtol = 0.02)
295+
end
273296

274297
interpmap1 = Dict(T_interp => ctrl_to_spline(isol.input_sol, CubicSpline))
275298
oprob1 = ODEProblem(rocket_ode, merge(Dict(u0map), Dict(pmap), interpmap1), (ts, te))
@@ -302,10 +325,12 @@ end
302325
@test isapprox(jsol.sol.t[end], 10.0, rtol = 1e-3)
303326
@test (M.objective_value(jsol), -92.75, atol = 0.25)
304327

305-
cprob = CasADiDynamicOptProblem(rocket, [u0map; pmap], (0, tf); steps = 201)
306-
csol = solve(cprob, CasADiCollocation("ipopt", constructTsitouras5()))
307-
@test isapprox(csol.sol.t[end], 10.0, rtol = 1e-3)
308-
@test (M.objective_value(csol), -92.75, atol = 0.25)
328+
if ENABLE_CASADI
329+
cprob = CasADiDynamicOptProblem(rocket, [u0map; pmap], (0, tf); steps = 201)
330+
csol = solve(cprob, CasADiCollocation("ipopt", constructTsitouras5()))
331+
@test isapprox(csol.sol.t[end], 10.0, rtol = 1e-3)
332+
@test (M.objective_value(csol), -92.75, atol = 0.25)
333+
end
309334

310335
iprob = InfiniteOptDynamicOptProblem(rocket, [u0map; pmap], (0, tf); steps = 200)
311336
isol = solve(iprob, InfiniteOptCollocation(Ipopt.Optimizer))
@@ -334,9 +359,11 @@ end
334359
jsol = solve(jprob, JuMPCollocation(Ipopt.Optimizer, constructVerner8()))
335360
@test isapprox(jsol.sol.t[end], 2.0, atol = 1e-5)
336361

337-
cprob = CasADiDynamicOptProblem(block, [u0map; parammap], (0, tf); steps = 51)
338-
csol = solve(cprob, CasADiCollocation("ipopt", constructVerner8()))
339-
@test isapprox(csol.sol.t[end], 2.0, atol = 1e-5)
362+
if ENABLE_CASADI
363+
cprob = CasADiDynamicOptProblem(block, [u0map; parammap], (0, tf); steps = 51)
364+
csol = solve(cprob, CasADiCollocation("ipopt", constructVerner8()))
365+
@test isapprox(csol.sol.t[end], 2.0, atol = 1e-5)
366+
end
340367

341368
iprob = InfiniteOptDynamicOptProblem(block, [u0map; parammap], tspan; steps = 51)
342369
isol = solve(iprob, InfiniteOptCollocation(Ipopt.Optimizer), verbose = true)
@@ -380,9 +407,11 @@ end
380407
jsol = solve(jprob, JuMPCollocation(Ipopt.Optimizer, constructRK4()))
381408
@test jsol.sol.u[end] [π, 0, 0, 0]
382409

383-
cprob = CasADiDynamicOptProblem(cartpole, [u0map; pmap], tspan; dt = 0.04)
384-
csol = solve(cprob, CasADiCollocation("ipopt", constructRK4()))
385-
@test csol.sol.u[end] [π, 0, 0, 0]
410+
if ENABLE_CASADI
411+
cprob = CasADiDynamicOptProblem(cartpole, [u0map; pmap], tspan; dt = 0.04)
412+
csol = solve(cprob, CasADiCollocation("ipopt", constructRK4()))
413+
@test csol.sol.u[end] [π, 0, 0, 0]
414+
end
386415

387416
iprob = InfiniteOptDynamicOptProblem(cartpole, [u0map; pmap], tspan; dt = 0.04)
388417
isol = solve(iprob,

test/linearproblem.jl

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ ps = [p => A, q => b]
3535
@test prob.ps[p * q] A * b
3636

3737
sol = solve(prob)
38-
# https://github.com/SciML/LinearSolve.jl/issues/532
39-
@test_broken SciMLBase.successful_retcode(sol)
38+
@test SciMLBase.successful_retcode(sol)
4039
@test prob.A * sol.u - prob.bzeros(3) atol=1e-10
4140

4241
A2 = rand(3, 3)
@@ -73,8 +72,7 @@ ps = [p => A, q => b]
7372
@test prob3.ps[p * q] A * b
7473

7574
sol = solve(prob3)
76-
# https://github.com/SciML/LinearSolve.jl/issues/532
77-
@test_broken SciMLBase.successful_retcode(sol)
75+
@test SciMLBase.successful_retcode(sol)
7876
@test prob3.A * sol.u - prob3.bzeros(3) atol=1e-10
7977
end
8078
end

0 commit comments

Comments
 (0)