Skip to content

comparaison test between JuMP and OptimalControl Models #79

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 14 commits into
base: main
Choose a base branch
from
Draft
1 change: 1 addition & 0 deletions available_problems_cache.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
dielectrophoretic_particle
14 changes: 7 additions & 7 deletions ext/JuMPModels/cart_pendulum.jl
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ function OptimalControlProblems.cart_pendulum(::JuMPBackend; nh::Int64=100)
@variables(
model,
begin
0.0 <= tf
ddx
-max_x <= x[0:nh] <= max_x
-max_v <= dx[0:nh] <= max_v
theta[0:nh]
omega[0:nh]
-max_f <= Fex[0:nh] <= max_f
0.0 <= tf, (start = 0.1)
ddx, (start = 0.1)
-max_x <= x[0:nh] <= max_x, (start = 0.1)
-max_v <= dx[0:nh] <= max_v, (start = 0.1)
theta[0:nh], (start = 0.1)
omega[0:nh], (start = 0.1)
-max_f <= Fex[0:nh] <= max_f, (start = 0.1)
end
)

Expand Down
10 changes: 5 additions & 5 deletions ext/JuMPModels/double_oscillator.jl
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ function OptimalControlProblems.double_oscillator(::JuMPBackend; nh::Int=100)
@variables(
model,
begin
x1[0:nh]
x2[0:nh]
x3[0:nh]
x4[0:nh]
-1.0 <= u[0:nh] <= 1.0
x1[0:nh], (start = 0.1)
x2[0:nh], (start = 0.1)
x3[0:nh], (start = 0.1)
x4[0:nh], (start = 0.1)
-1.0 <= u[0:nh] <= 1.0, (start = 0.1)
end
)

Expand Down
16 changes: 8 additions & 8 deletions ext/JuMPModels/ducted_fan.jl
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@ function OptimalControlProblems.ducted_fan(::JuMPBackend; nh::Int=100)

model = Model()

@variable(model, x1[0:nh])
@variable(model, v1[0:nh])
@variable(model, x2[0:nh])
@variable(model, v2[0:nh])
@variable(model, -deg2rad(30.0) <= α[0:nh] <= deg2rad(30.0)) # radian
@variable(model, vα[0:nh])
@variable(model, -5.0 <= u1[0:nh] <= 5.0) # [nh]
@variable(model, 0.0 <= u2[0:nh] <= 17.0) # [nh]
@variable(model, x1[0:nh], start = 0.1)
@variable(model, v1[0:nh], start = 0.1)
@variable(model, x2[0:nh], start = 0.1)
@variable(model, v2[0:nh], start = 0.1)
@variable(model, -deg2rad(30.0) <= α[0:nh] <= deg2rad(30.0), start = 0.1) # radian
@variable(model, vα[0:nh], start = 0.1)
@variable(model, -5.0 <= u1[0:nh] <= 5.0, start = 0.1) # [nh]
@variable(model, 0.0 <= u2[0:nh] <= 17.0, start = 0.1) # [nh]
@variable(model, 0 <= tf, start = 1.0)

@objective(model, Min, tf / nh * sum(2 * u1[t]^2 + u2[t]^2 for t in 0:nh) + μ * tf)
Expand Down
6 changes: 3 additions & 3 deletions ext/JuMPModels/electrical_vehicle.jl
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ function OptimalControlProblems.electrical_vehicle(::JuMPBackend; nh::Int=100)

model = Model()

@variable(model, x[0:nh])
@variable(model, v[0:nh])
@variable(model, u[0:nh])
@variable(model, x[0:nh], start = 0.1)
@variable(model, v[0:nh], start = 0.1)
@variable(model, u[0:nh], start = 0.1)

@objective(model, Min, sum(b1 * u[t] * v[t] + b2 * u[t]^2 for t in 0:nh))

Expand Down
4 changes: 2 additions & 2 deletions ext/JuMPModels/glider.jl
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ function OptimalControlProblems.glider(::JuMPBackend; nh::Int64=100)
@variables(
model,
begin
0 <= t_f, (start = 1.0)
0 <= tf, (start = 1.0)
0.0 <= x[k=0:nh], (start = x_0 + vx_0 * (k / nh))
y[k=0:nh], (start = y_0 + (k / nh) * (y_f - y_0))
0.0 <= vx[k=0:nh], (start = vx_0)
Expand All @@ -44,7 +44,7 @@ function OptimalControlProblems.glider(::JuMPBackend; nh::Int64=100)
@expressions(
model,
begin
step, t_f / nh
step, tf / nh
r[i=0:nh], (x[i] / r_0 - 2.5)^2
u[i=0:nh], u_c * (1 - r[i]) * exp(-r[i])
w[i=0:nh], vy[i] - u[i]
Expand Down
14 changes: 7 additions & 7 deletions ext/JuMPModels/moonlander.jl
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,14 @@ function OptimalControlProblems.moonlander(
@variables(
model,
begin
0.0 <= step
0.0 <= step, (start = 0.1)
# state variables
p1[k=0:nh]
p2[k=0:nh]
dp1[k=0:nh]
dp2[k=0:nh]
theta[k=0:nh]
dtheta[k=0:nh]
p1[k=0:nh], (start = 0.1)
p2[k=0:nh], (start = 0.1)
dp1[k=0:nh], (start = 0.1)
dp2[k=0:nh], (start = 0.1)
theta[k=0:nh], (start = 0.1)
dtheta[k=0:nh], (start = 0.1)
# control variables
0 <= F1[k=0:nh] <= max_thrust, (start = 5.0)
0 <= F2[k=0:nh] <= max_thrust, (start = 5.0)
Expand Down
20 changes: 10 additions & 10 deletions ext/JuMPModels/quadrotor.jl
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,17 @@ function OptimalControlProblems.quadrotor(::JuMPBackend; nh::Int64=60)
@variables(
model,
begin
0.0 <= tf
p1[0:nh]
p2[0:nh]
p3[0:nh]
v1[0:nh]
v2[0:nh]
v3[0:nh]
0.0 <= tf, (start = 0.1)
p1[0:nh], (start = 0.1)
p2[0:nh], (start = 0.1)
p3[0:nh], (start = 0.1)
v1[0:nh], (start = 0.1)
v2[0:nh], (start = 0.1)
v3[0:nh], (start = 0.1)
atmin <= at[0:nh] <= atmax, (start = 10.0)
-pi / 2 <= ϕ[0:nh] <= pi / 2
-pi / 2 <= θ[0:nh] <= pi / 2
ψ[0:nh]
-pi / 2 <= ϕ[0:nh] <= pi / 2, (start = 0.1)
-pi / 2 <= θ[0:nh] <= pi / 2, (start = 0.1)
ψ[0:nh], (start = 0.1)
end
)

Expand Down
28 changes: 17 additions & 11 deletions ext/JuMPModels/steering.jl
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,11 @@ function OptimalControlProblems.steering(::JuMPBackend; nh::Int64=100)
model = JuMP.Model()

@variable(model, u_min <= u[i=1:(nh + 1)] <= u_max, start = 0.0) # control
@variable(model, x[i=1:(nh + 1), j=1:4], start = gen_x0(i, j)) # state
@variable(model, tf, start = 1.0) # final time
@variable(model, x1[i=1:(nh + 1)], start = gen_x0(i, 1)) # state x1
@variable(model, x2[i=1:(nh + 1)], start = gen_x0(i, 2)) # state x2
@variable(model, x3[i=1:(nh + 1)], start = gen_x0(i, 3)) # state x3
@variable(model, x4[i=1:(nh + 1)], start = gen_x0(i, 4)) # state x4
@variable(model, tf, start = 1.0) # final time

@expression(model, h, tf / nh) # step size
@objective(model, Min, tf)
Expand All @@ -35,18 +38,21 @@ function OptimalControlProblems.steering(::JuMPBackend; nh::Int64=100)
@constraints(
model,
begin
con_x1[i=1:nh], x[i + 1, 1] == x[i, 1] + 0.5 * h * (x[i, 3] + x[i + 1, 3])
con_x2[i=1:nh], x[i + 1, 2] == x[i, 2] + 0.5 * h * (x[i, 4] + x[i + 1, 4])
con_x3[i=1:nh],
x[i + 1, 3] == x[i, 3] + 0.5 * h * (a * cos(u[i]) + a * cos(u[i + 1]))
con_x4[i=1:nh],
x[i + 1, 4] == x[i, 4] + 0.5 * h * (a * sin(u[i]) + a * sin(u[i + 1]))
con_x1[i=1:nh], x1[i + 1] == x1[i] + 0.5 * h * (x3[i] + x3[i + 1])
con_x2[i=1:nh], x2[i + 1] == x2[i] + 0.5 * h * (x4[i] + x4[i + 1])
con_x3[i=1:nh], x3[i + 1] == x3[i] + 0.5 * h * (a * cos(u[i]) + a * cos(u[i + 1]))
con_x4[i=1:nh], x4[i + 1] == x4[i] + 0.5 * h * (a * sin(u[i]) + a * sin(u[i + 1]))
end
)

# Boundary conditions
@constraint(model, [j = 1:4], x[1, j] == xs[j])
@constraint(model, [j = 2:4], x[nh + 1, j] == xf[j])
@constraint(model, x1[1] == xs[1])
@constraint(model, x2[1] == xs[2])
@constraint(model, x3[1] == xs[3])
@constraint(model, x4[1] == xs[4])
@constraint(model, x2[nh + 1] == xf[2])
@constraint(model, x3[nh + 1] == xf[3])
@constraint(model, x4[nh + 1] == xf[4])

return model
end
end
8 changes: 4 additions & 4 deletions ext/JuMPModels/truck_trailer.jl
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,16 @@ function OptimalControlProblems.truck_trailer(
model,
begin
# Final time
0.0 <= tf
0.0 <= tf, (start = 0.1)
# State variables
x2[0:nh]
y2[0:nh]
x2[0:nh], (start = 0.1)
y2[0:nh], (start = 0.1)
-pi / 2 <= theta0[0:nh] <= pi / 2, (start = 0.1)
-pi / 2 <= theta1[0:nh] <= pi / 2, (start = 0.0)
theta2[0:nh], (start = 0.0)
# Control variables
-0.2 * speedf <= v0[0:nh] <= 0.2 * speedf, (start = -0.2)
-pi / 6 <= delta0[0:nh] <= pi / 6
-pi / 6 <= delta0[0:nh] <= pi / 6, (start = 0.1)
end
)

Expand Down
6 changes: 3 additions & 3 deletions ext/JuMPModels/vanderpol.jl
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ function OptimalControlProblems.vanderpol(::JuMPBackend; nh::Int=100)
@variables(
model,
begin
x1[0:nh]
x2[0:nh]
u[0:nh]
x1[0:nh], (start = 0.1)
x2[0:nh], (start = 0.1)
u[0:nh], (start = 0.1)
step[0:nh] == tf / nh
end
)
Expand Down
12 changes: 11 additions & 1 deletion ext/MetaData/beam.jl
Original file line number Diff line number Diff line change
@@ -1 +1,11 @@
beam_meta = Dict(:name => "beam", :nh => 100, :nvar => 404, :ncon => 305, :minimize => true)
beam_meta = Dict(
:name => "beam",
:nh => 100,
:nvar => 404,
:ncon => 305,
:minimize => true,
:state_name => ["x1", "x2"],
:costate_name => ["con_x1", "con_x2"],
:control_name => ["u"],
:time => ("final_time", "tf", 1.0)
)
12 changes: 10 additions & 2 deletions ext/MetaData/bioreactor.jl
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
bioreactor_meta = Dict(
:name => "bioreactor", :nh => 100, :nvar => 505, :ncon => 404, :minimize => false
)
:name => "bioreactor",
:nh => 100,
:nvar => 505,
:ncon => 404,
:minimize => false,
:state_name => ["y", "s", "b"],
:costate_name => ["con_y", "con_s", "con_b"],
:control_name => ["u"],
:time => ("final_time", "T", 300.0) # T = 10 * N where N = 30 by default
)
12 changes: 10 additions & 2 deletions ext/MetaData/cart_pendulum.jl
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
cart_pendulum_meta = Dict(
:name => "cart_pendulum", :nh => 100, :nvar => 507, :ncon => 405, :minimize => true
)
:name => "cart_pendulum",
:nh => 100,
:nvar => 507,
:ncon => 405,
:minimize => true,
:state_name => ["x", "dx", "theta", "omega"],
:costate_name => ["d_x", "d_dx", "d_theta", "d_omega"],
:control_name => "Fex",
:time => ("final_time", "tf", nothing)
)
12 changes: 10 additions & 2 deletions ext/MetaData/chain.jl
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
chain_meta = Dict(
:name => "chain", :nh => 100, :nvar => 404, :ncon => 305, :minimize => true
)
:name => "chain",
:nh => 100,
:nvar => 404,
:ncon => 305,
:minimize => true,
:state_name => ["x1", "x2", "x3"],
:costate_name => ["con_x1", "con_x2", "con_x3"],
:control_name => ["u"],
:time => ("final_time", "tf", 1.0)
)
6 changes: 5 additions & 1 deletion ext/MetaData/dielectrophoretic_particle.jl
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,8 @@ dielectrophoretic_particle_meta = Dict(
:nvar => 304,
:ncon => 203,
:minimize => true,
)
:state_name => ["x", "y"],
:costate_name => ["con_x", "con_y"],
:control_name => "u",
:time => ("final_time", "tf", nothing)
)
8 changes: 6 additions & 2 deletions ext/MetaData/double_oscillator.jl
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
double_oscillator_meta = Dict(
:name => "double_oscillator",
:nh => nothing,
:nh => 100, #:nh => nothing,
:nvar => nothing,
:ncon => nothing,
:minimize => true,
)
:state_name => ["x1", "x2", "x3", "x4"],
:costate_name => ["con_x1", "con_x2", "con_x3", "con_x4"],
:control_name => "u",
:time => ("final_time", "tf", 2π)
)
8 changes: 6 additions & 2 deletions ext/MetaData/ducted_fan.jl
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
ducted_fan_meta = Dict(
:name => "ducted_fan",
:nh => nothing,
:nh => 100, # :nh => nothing,
:nvar => nothing,
:ncon => nothing,
:minimize => true,
)
:state_name => ["x1", "v1", "x2", "v2", "α", "vα"],
:costate_name => ["con_x1", "con_v1", "con_x2", "con_v2", "con_α", "con_vα"],
:control_name => ["u1", "u2"],
:time => ("final_time", "tf", nothing)
)
8 changes: 6 additions & 2 deletions ext/MetaData/electrical_vehicle.jl
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
electrical_vehicle_meta = Dict(
:name => "electrical_vehicle",
:nh => nothing,
:nh => 100, #:nh => nothing,
:nvar => nothing,
:ncon => nothing,
:minimize => true,
)
:state_name => ["x", "v"],
:costate_name => ["cond_x", "cond_v"],
:control_name => "u",
:time => ("final_time", "tf", 1.0)
)
12 changes: 10 additions & 2 deletions ext/MetaData/glider.jl
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
glider_meta = Dict(
:name => "glider", :nh => 100, :nvar => 506, :ncon => 407, :minimize => false
)
:name => "glider",
:nh => 100,
:nvar => 506,
:ncon => 407,
:minimize => false,
:state_name => ["x", "y", "vx", "vy"],
:costate_name => ["x_eqn", "y_eqn", "vx_eqn", "vy_eqn"],
:control_name => "cL",
:time => ("final_time", "tf", nothing)
)
12 changes: 10 additions & 2 deletions ext/MetaData/insurance.jl
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
insurance_meta = Dict(
:name => "insurance", :nh => 100, :nvar => 910, :ncon => 809, :minimize => false
)
:name => "insurance",
:nh => 100, #:nh => nothing,
:nvar => nothing,
:ncon => nothing,
:minimize => false,
:state_name => ["I", "m", "x3"],
:costate_name => ["con_dI", "con_dm", "con_dx3"],
:control_name => ["h", "R", "H", "U", "dUdR"],
:time => ("final_time", "tf", 10)
)
12 changes: 10 additions & 2 deletions ext/MetaData/jackson.jl
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
jackson_meta = Dict(
:name => "jackson", :nh => 100, :nvar => 404, :ncon => 303, :minimize => false
)
:name => "jackson",
:nh => 100,
:nvar => 404,
:ncon => 303,
:minimize => false,
:state_name => ["a", "b", "x3"],
:costate_name => ["con_da", "con_db", "con_dx3"],
:control_name => ["u"],
:time => ("final_time", "tf", 4.0)
)
12 changes: 10 additions & 2 deletions ext/MetaData/moonlander.jl
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
moonlander_meta = Dict(
:name => "moonlander", :nh => 100, :nvar => 610, :ncon => 809, :minimize => true
)
:name => "moonlander",
:nh => 100,
:nvar => 610,
:ncon => 809,
:minimize => true,
:state_name => ["p1", "p2", "dp1", "dp2", "theta", "dtheta"],
:costate_name => ["d_p1", "d_p2", "d_dp1", "d_dp2", "d_theta", "d_dtheta"],
:control_name => ["F1", "F2"],
:time => ("final_time", "tf", nothing)
)
Loading
Loading