From 325682c3e17231fcc69eed35bf8f00ae793c7edb Mon Sep 17 00:00:00 2001 From: Olivier Cots Date: Fri, 12 Sep 2025 16:43:01 +0200 Subject: [PATCH 1/4] parameters in common --- docs/src/dev-add.md | 6 +- ext/JuMPModels.jl | 25 +--- ext/JuMPModels/beam.jl | 37 +++-- ext/JuMPModels/bioreactor.jl | 58 +++++--- ext/JuMPModels/cart_pendulum.jl | 31 ++-- ext/JuMPModels/chain.jl | 38 +++-- ext/JuMPModels/dielectrophoretic_particle.jl | 25 +++- ext/JuMPModels/double_oscillator.jl | 30 +++- ext/JuMPModels/ducted_fan.jl | 27 +++- ext/JuMPModels/electric_vehicle.jl | 37 +++-- ext/JuMPModels/glider.jl | 51 ++++--- ext/JuMPModels/insurance.jl | 36 +++-- ext/JuMPModels/jackson.jl | 26 +++- ext/JuMPModels/moonlander.jl | 29 +++- ext/JuMPModels/robbins.jl | 26 +++- ext/JuMPModels/robot.jl | 31 ++-- ext/JuMPModels/rocket.jl | 35 +++-- ext/JuMPModels/space_shuttle.jl | 93 +++++++----- ext/JuMPModels/steering.jl | 27 +++- ext/JuMPModels/vanderpol.jl | 24 +++- ext/MetaData/beam.jl | 16 ++- ext/MetaData/bioreactor.jl | 25 +++- ext/MetaData/cart_pendulum.jl | 18 ++- ext/MetaData/chain.jl | 15 +- ext/MetaData/dielectrophoretic_particle.jl | 15 +- ext/MetaData/double_oscillator.jl | 17 ++- ext/MetaData/ducted_fan.jl | 16 ++- ext/MetaData/electric_vehicle.jl | 22 ++- ext/MetaData/glider.jl | 28 +++- ext/MetaData/insurance.jl | 20 ++- ext/MetaData/jackson.jl | 15 +- ext/MetaData/moonlander.jl | 17 ++- ext/MetaData/robbins.jl | 15 +- ext/MetaData/robot.jl | 20 ++- ext/MetaData/rocket.jl | 19 ++- ext/MetaData/space_shuttle.jl | 41 +++++- ext/MetaData/steering.jl | 16 ++- ext/MetaData/vanderpol.jl | 14 +- ext/OptimalControlModels/beam.jl | 19 ++- ext/OptimalControlModels/bioreactor.jl | 74 +++++----- ext/OptimalControlModels/cart_pendulum.jl | 26 ++-- ext/OptimalControlModels/chain.jl | 35 ++--- .../dielectrophoretic_particle.jl | 27 ++-- ext/OptimalControlModels/double_oscillator.jl | 27 ++-- ext/OptimalControlModels/ducted_fan.jl | 35 ++--- ext/OptimalControlModels/electric_vehicle.jl | 28 ++-- ext/OptimalControlModels/glider.jl | 59 ++++---- ext/OptimalControlModels/insurance.jl | 25 ++-- ext/OptimalControlModels/jackson.jl | 15 +- ext/OptimalControlModels/moonlander.jl | 41 +++--- ext/OptimalControlModels/robbins.jl | 15 +- ext/OptimalControlModels/robot.jl | 57 ++++---- ext/OptimalControlModels/rocket.jl | 41 +++--- ext/OptimalControlModels/space_shuttle.jl | 131 ++++++++--------- ext/OptimalControlModels/steering.jl | 23 +-- ext/OptimalControlModels/vanderpol.jl | 15 +- ext/OptimalControlModels_s/beam_s.jl | 19 ++- ext/OptimalControlModels_s/chain_s.jl | 33 ++--- .../dielectrophoretic_particle_s.jl | 28 ++-- .../double_oscillator_s.jl | 28 ++-- ext/OptimalControlModels_s/ducted_fan_s.jl | 36 ++--- .../electric_vehicle_s.jl | 29 ++-- ext/OptimalControlModels_s/glider_s.jl | 59 ++++---- ext/OptimalControlModels_s/insurance_s.jl | 25 ++-- ext/OptimalControlModels_s/jackson_s.jl | 15 +- ext/OptimalControlModels_s/robbins_s.jl | 15 +- ext/OptimalControlModels_s/robot_s.jl | 57 ++++---- ext/OptimalControlModels_s/rocket_s.jl | 41 +++--- ext/OptimalControlModels_s/space_shuttle_s.jl | 132 +++++++++--------- ext/OptimalControlModels_s/steering_s.jl | 25 ++-- ext/OptimalControlModels_s/vanderpol_s.jl | 13 +- src/OptimalControlProblems.jl | 65 ++++----- test/figures/init/beam.pdf | Bin 282329 -> 278752 bytes test/figures/solution/beam.pdf | Bin 273219 -> 273215 bytes test/runtests.jl | 9 +- test/test_OptimalControl_s.jl | 4 +- test/test_parameters.jl | 70 ++++++++++ 77 files changed, 1559 insertions(+), 878 deletions(-) create mode 100644 test/test_parameters.jl diff --git a/docs/src/dev-add.md b/docs/src/dev-add.md index 841967b8..1abfbf8c 100644 --- a/docs/src/dev-add.md +++ b/docs/src/dev-add.md @@ -6,14 +6,12 @@ To add a new problem to **OptimalControlProblems**, you must follow these steps: ```julia new_problem_meta = OrderedDict( - :name => "new_problem", # Problem name - :N => 100, # Number of steps - :minimise => true, # Whether we minimise (true) or maximise (false) + :N => 100, # Number of steps # Whether we minimise (true) or maximise (false) :state_name => ["x1", "x2"], # Names of the state components :costate_name => ["∂x1", "∂x2"], # Names of the dynamics constraints (for the costate) :control_name => ["u"], # Names of the control components :variable_name => ["v"], # Names of the optimisation variables - :final_time => (:fixed, 1), # Final time information + :parameters => (tf = 1, ), # Final time information ) ``` diff --git a/ext/JuMPModels.jl b/ext/JuMPModels.jl index 74e532d3..01934dba 100644 --- a/ext/JuMPModels.jl +++ b/ext/JuMPModels.jl @@ -38,27 +38,12 @@ julia> tgrid = OptimalControlProblems.time_grid(:my_problem, model) 0.0:0.1:1.0 ``` """ -function OptimalControlProblems.time_grid(problem::Symbol, model::JuMP.GenericModel) - - # get N - x_vars = metadata[problem][:state_name] - x_jp_var = JuMP.value.(model[Symbol(x_vars[1])]) - N = length(x_jp_var) - 1 - - ## time grid: we assume that t0 = 0 - time_data, time_value_or_index = metadata[problem][:final_time] - - t0 = 0 - tf = if time_data == :fixed - time_value_or_index - elseif time_data == :free - v_vars = metadata[problem][:variable_name] - value.(model[Symbol(v_vars[time_value_or_index])]) - else - error("the final time must be :fixed or :free, not: ", time_data) - end +function OptimalControlProblems.time_grid(::Symbol, model::JuMP.GenericModel) + t_grid_vars = metadata[problem][:time_grid_name] + t0 = value.(model[Symbol(t_grid_vars[:initial_time])]) + tf = value.(model[Symbol(t_grid_vars[:final_time])]) + N = value.(model[Symbol(t_grid_vars[:steps_number])]) t_jp = range(t0, tf, N+1) - return t_jp end diff --git a/ext/JuMPModels/beam.jl b/ext/JuMPModels/beam.jl index cddc2e21..49b83275 100644 --- a/ext/JuMPModels/beam.jl +++ b/ext/JuMPModels/beam.jl @@ -28,21 +28,41 @@ julia> model = OptimalControlProblems.beam(JuMPBackend(); N=100) - Problem formulation available at: https://github.com/control-toolbox/bocop/tree/main/bocop """ function OptimalControlProblems.beam( - ::JuMPBackend, args...; N::Int=steps_number_data(:beam), kwargs... + ::JuMPBackend, args...; + N::Int=steps_number_data(:beam), + parameters::Union{Nothing, NamedTuple}=nothing, + kwargs... ) # parameters - tf = final_time_data(:beam) - step = tf / N # t0 = 0 + params = parameters_data(:beam, parameters) + t0 = params[:t0] + tf = params[:tf] + x_t0 = params[:x_t0] + x_tf = params[:x_tf] + x₁_l = params[:x₁_l] + x₁_u = params[:x₁_u] # model model = JuMP.Model(args...; kwargs...) + # ------------------------------------------------ + # expressions to get grid time infos + @expressions( + model, + begin + t0, t0 # (required if the initial time is fixed) + tf, tf # (required if the final time is fixed) + N, N # (required) + end + ) + # ------------------------------------------------ + # variables and initial guess @variables( model, begin - 0.0 <= x1[0:N] <= 0.1, (start = 0.05) + x₁_l <= x1[0:N] <= x₁_u, (start = 0.05) x2[0:N], (start = 0.1) u[0:N], (start = 0.1) end @@ -52,14 +72,15 @@ function OptimalControlProblems.beam( @constraints( model, begin - x1[0] == 0 - x2[0] == 1 - x1[N] == 0 - x2[N] == -1 + x1[0] == x_t0[1] + x2[0] == x_t0[2] + x1[N] == x_tf[1] + x2[N] == x_tf[2] end ) # dynamics + step = (tf - t0) / N @constraints( model, begin diff --git a/ext/JuMPModels/bioreactor.jl b/ext/JuMPModels/bioreactor.jl index 68613873..e1514de8 100644 --- a/ext/JuMPModels/bioreactor.jl +++ b/ext/JuMPModels/bioreactor.jl @@ -31,31 +31,53 @@ julia> model = OptimalControlProblems.bioreactor(JuMPBackend(); N=100) - [control-toolbox/bocop](https://github.com/control-toolbox/bocop/tree/main/bocop) """ function OptimalControlProblems.bioreactor( - ::JuMPBackend, args...; N::Int=steps_number_data(:bioreactor), kwargs... + ::JuMPBackend, args...; + N::Int=steps_number_data(:bioreactor), + parameters::Union{Nothing, NamedTuple}=nothing, + kwargs... ) # parameters - β = 1 - c = 2 - γ = 1 - halfperiod = 5 - Ks = 0.05 - μ2m = 0.1 - μbar = 1 - r = 0.005 - T = final_time_data(:bioreactor) + params = parameters_data(:bioreactor, parameters) + t0 = params[:t0] + T = params[:T] + β = params[:β] + c = params[:c] + γ = params[:γ] + halfperiod = params[:halfperiod] + Ks = params[:Ks] + μ2m = params[:μ2m] + μbar = params[:μbar] + r = params[:r] + x_l = params[:x_l] + u_l = params[:u_l] + u_u = params[:u_u] + x0_l = params[:x0_l] + x0_u = params[:x0_u] # model model = JuMP.Model(args...; kwargs...) + # ------------------------------------------------ + # expressions to get grid time infos + @expressions( + model, + begin + t0, t0 # (required if the initial time is fixed) + T, T # (required if the final time is fixed) + N, N # (required) + end + ) + # ------------------------------------------------ + # variables and initial guess @variables( model, begin - y[0:N] >= 0, (start = 50) - s[0:N] >= 0, (start = 50) - b[0:N] >= 0.001, (start = 50) - 0 <= u[0:N] <= 1, (start = 0.5) + y[0:N] >= x_l[1], (start = 50) + s[0:N] >= x_l[2], (start = 50) + b[0:N] >= x_l[3], (start = 50) + u_l <= u[0:N] <= u_u, (start = 0.5) end ) @@ -63,9 +85,9 @@ function OptimalControlProblems.bioreactor( @constraints( model, begin - 0.05 <= y[0] <= 0.25 - 0.5 <= s[0] <= 5 - 0.5 <= b[0] <= 3 + x0_l[1] <= y[0] <= x0_u[1] + x0_l[2] <= s[0] <= x0_u[2] + x0_l[3] <= b[0] <= x0_u[3] end ) @@ -75,7 +97,7 @@ function OptimalControlProblems.bioreactor( begin # - step, T / N + step, (T-t0) / N # intermediate variables growth[k = 0:N], μ2m * s[k] / (s[k] + Ks) diff --git a/ext/JuMPModels/cart_pendulum.jl b/ext/JuMPModels/cart_pendulum.jl index 517b42df..c8517038 100644 --- a/ext/JuMPModels/cart_pendulum.jl +++ b/ext/JuMPModels/cart_pendulum.jl @@ -28,22 +28,37 @@ julia> model = OptimalControlProblems.cart_pendulum(JuMPBackend(); N=200) - [Cart–Pendulum Optimal Control Problem](https://arxiv.org/pdf/2303.16746) """ function OptimalControlProblems.cart_pendulum( - ::JuMPBackend, args...; N::Int=steps_number_data(:cart_pendulum), kwargs... + ::JuMPBackend, args...; N::Int=steps_number_data(:cart_pendulum), + parameters::Union{Nothing, NamedTuple}=nothing, + kwargs... ) # parameters - g = 9.81 # gravitation [m/s^2] - L = 1 # pendulum length [m] - m = 1 # pendulum mass [kg] + params = parameters_data(:cart_pendulum, parameters) + t0 = params[:t0] + g = params[:g] + L = params[:L] + m = params[:m] I = m * L^2 / 12 # pendulum moment of inertia - mcart = 0.5 # cart mass [kg] - max_f = 5 - max_x = 1 - max_v = 2 + mcart = params[:mcart] + max_f = params[:max_f] + max_x = params[:max_x] + max_v = params[:max_v] # model model = JuMP.Model(args...; kwargs...) + # ------------------------------------------------ + # expressions to get grid time infos + @expressions( + model, + begin + t0, t0 # (required if the initial time is fixed) + N, N # (required) + end + ) + # ------------------------------------------------ + # variables and initial guess @variables( model, diff --git a/ext/JuMPModels/chain.jl b/ext/JuMPModels/chain.jl index fefec281..d56745ab 100644 --- a/ext/JuMPModels/chain.jl +++ b/ext/JuMPModels/chain.jl @@ -28,14 +28,18 @@ julia> model = OptimalControlProblems.chain(JuMPBackend(); N=300) - [COPS Benchmark Problems – Hanging Chain](https://www.mcs.anl.gov/~more/cops/) """ function OptimalControlProblems.chain( - ::JuMPBackend, args...; N::Int=steps_number_data(:chain), kwargs... + ::JuMPBackend, args...; N::Int=steps_number_data(:chain), + parameters::Union{Nothing, NamedTuple}=nothing, + kwargs... ) # parameters - L = 4 - a = 1 - b = 3 - tf = final_time_data(:chain) + params = parameters_data(:chain, parameters) + t0 = params[:t0] + tf = params[:tf] + L = params[:L] + a = params[:a] + b = params[:b] # tmin = b > a ? 1 / 4 : 3 / 4 @@ -43,11 +47,23 @@ function OptimalControlProblems.chain( # model model = JuMP.Model(args...; kwargs...) + # ------------------------------------------------ + # expressions to get grid time infos + @expressions( + model, + begin + t0, t0 # (required if the initial time is fixed) + tf, tf # (required if the final time is fixed) + N, N # (required) + end + ) + # ------------------------------------------------ + # time @expressions( model, begin - t[k = 0:N], k * tf / N + t[k = 0:N], t0 + k * (tf-t0) / N end ) @@ -55,16 +71,16 @@ function OptimalControlProblems.chain( @variables( model, begin - u[k = 0:N], (start = 4 * abs(b - a) * (t[k] / tf - tmin)) + u[k = 0:N], (start = 4 * abs(b - a) * ((t[k] - t0) / (tf - t0) - tmin)) x1[k = 0:N], - (start = 4 * abs(b - a) * t[k] / tf * (0.5 * t[k] / tf - tmin) + a) + (start = 4 * abs(b - a) * (t[k] - t0) / (tf - t0) * (0.5 * (t[k] - t0) / (tf - t0) - tmin) + a) x2[k = 0:N], ( start = - (4 * abs(b - a) * t[k] / tf * (0.5 * t[k] / tf - tmin) + a) * - (4 * abs(b - a) * (t[k] / tf - tmin)) + (4 * abs(b - a) * (t[k] - t0) / (tf - t0) * (0.5 * (t[k] - t0) / (tf - t0) - tmin) + a) * + (4 * abs(b - a) * ((t[k] - t0) / (tf - t0) - tmin)) ) - x3[k = 0:N], (start = 4 * abs(b - a) * (t[k] / tf - tmin)) + x3[k = 0:N], (start = 4 * abs(b - a) * ((t[k] - t0) / (tf - t0) - tmin)) end ) diff --git a/ext/JuMPModels/dielectrophoretic_particle.jl b/ext/JuMPModels/dielectrophoretic_particle.jl index cf98a71d..3186e760 100644 --- a/ext/JuMPModels/dielectrophoretic_particle.jl +++ b/ext/JuMPModels/dielectrophoretic_particle.jl @@ -29,18 +29,33 @@ julia> model = OptimalControlProblems.dielectrophoretic_particle(JuMPBackend(); IEEE Transactions on Automatic Control, 51(7), 1100–1114. """ function OptimalControlProblems.dielectrophoretic_particle( - ::JuMPBackend, args...; N::Int=steps_number_data(:dielectrophoretic_particle), kwargs... + ::JuMPBackend, args...; N::Int=steps_number_data(:dielectrophoretic_particle), + parameters::Union{Nothing, NamedTuple}=nothing, + kwargs... ) # parameters - x0 = 1 - xf = 2 - α = -0.75 - c = 1 + params = parameters_data(:dielectrophoretic_particle, parameters) + t0 = params[:t0] + x0 = params[:x0] + xf = params[:xf] + α = params[:α] + c = params[:c] # model model = JuMP.Model(args...; kwargs...) + # ------------------------------------------------ + # expressions to get grid time infos + @expressions( + model, + begin + t0, t0 # (required if the initial time is fixed) + N, N # (required) + end + ) + # ------------------------------------------------ + # state, control and variable (final time) @variable(model, x[0:N], start = 1) @variable(model, y[0:N], start = 1) diff --git a/ext/JuMPModels/double_oscillator.jl b/ext/JuMPModels/double_oscillator.jl index c7c60c1c..20fd101c 100644 --- a/ext/JuMPModels/double_oscillator.jl +++ b/ext/JuMPModels/double_oscillator.jl @@ -29,20 +29,36 @@ julia> model = OptimalControlProblems.double_oscillator(JuMPBackend(); N=200) IFAC-PapersOnLine, 51(2), 49–54. """ function OptimalControlProblems.double_oscillator( - ::JuMPBackend, args...; N::Int=steps_number_data(:double_oscillator), kwargs... + ::JuMPBackend, args...; N::Int=steps_number_data(:double_oscillator), + parameters::Union{Nothing, NamedTuple}=nothing, + kwargs... ) # parameters - m1 = 100 # [kg] - m2 = 2 # [kg] - c = 0.5 # [Ns/m] - k1 = 100 # [N/m] - k2 = 3 # [N/m] - tf = final_time_data(:double_oscillator) + params = parameters_data(:double_oscillator, parameters) + t0 = params[:t0] + tf = params[:tf] + m1 = params[:m1] + m2 = params[:m2] + c = params[:c] + k1 = params[:k1] + k2 = params[:k2] # model model = JuMP.Model(args...; kwargs...) + # ------------------------------------------------ + # expressions to get grid time infos + @expressions( + model, + begin + t0, t0 # (required if the initial time is fixed) + T, T # (required if the final time is fixed) + N, N # (required) + end + ) + # ------------------------------------------------ + # state, control and initial guess @variables( model, diff --git a/ext/JuMPModels/ducted_fan.jl b/ext/JuMPModels/ducted_fan.jl index 3208486d..71906247 100644 --- a/ext/JuMPModels/ducted_fan.jl +++ b/ext/JuMPModels/ducted_fan.jl @@ -29,19 +29,34 @@ julia> model = OptimalControlProblems.ducted_fan(JuMPBackend(); N=100) Optimal Control Applications and Methods, 30(6), 537–561. [GP2009] """ function OptimalControlProblems.ducted_fan( - ::JuMPBackend, args...; N::Int=steps_number_data(:ducted_fan), kwargs... + ::JuMPBackend, args...; N::Int=steps_number_data(:ducted_fan), + parameters::Union{Nothing, NamedTuple}=nothing, + kwargs... ) # parameters - r = 0.2 # [m] - J = 0.05 # [kg.m2] - m = 2.2 # [kg] - mg = 4 # [N] - μ = 1000 + params = parameters_data(:ducted_fan, parameters) + t0 = params[:t0] + r = params[:r] + J = params[:J] + m = params[:m] + mg = params[:mg] + μ = params[:μ] # model model = JuMP.Model(args...; kwargs...) + # ------------------------------------------------ + # expressions to get grid time infos + @expressions( + model, + begin + t0, t0 # (required if the initial time is fixed) + N, N # (required) + end + ) + # ------------------------------------------------ + # state, control, variable (final time) and initial guess @variable(model, x₁[0:N], start = 0.1) @variable(model, v₁[0:N], start = 0.1) diff --git a/ext/JuMPModels/electric_vehicle.jl b/ext/JuMPModels/electric_vehicle.jl index 18716527..4e96524e 100644 --- a/ext/JuMPModels/electric_vehicle.jl +++ b/ext/JuMPModels/electric_vehicle.jl @@ -28,22 +28,41 @@ julia> model = OptimalControlProblems.electric_vehicle(JuMPBackend(); N=100) - Petit, N., & Sciarretta, A. (2011). *Optimal drive of electric vehicles using an inversion-based trajectory generation approach.* IFAC Proceedings Volumes, 44(1), 14519–14526. [PS2011] """ function OptimalControlProblems.electric_vehicle( - ::JuMPBackend, args...; N::Int=steps_number_data(:electric_vehicle), kwargs... + ::JuMPBackend, args...; N::Int=steps_number_data(:electric_vehicle), + parameters::Union{Nothing, NamedTuple}=nothing, + kwargs... ) # parameters - tf = final_time_data(:electric_vehicle) - D = 10 - b1 = 1e0 - b2 = 1e0 - h0 = 0.1 - h1 = 1 - h2 = 1e-3 - α0, α1, α2, α3 = (3, 0.4, -1, 0.1) + params = parameters_data(:electric_vehicle, parameters) + t0 = params[:t0] + tf = params[:tf] + D = params[:D] + b1 = params[:b1] + b2 = params[:b2] + h0 = params[:h0] + h1 = params[:h1] + h2 = params[:h2] + α0 = params[:α0] + α1 = params[:α1] + α2 = params[:α2] + α3 = params[:α3] # model model = JuMP.Model(args...; kwargs...) + # ------------------------------------------------ + # expressions to get grid time infos + @expressions( + model, + begin + t0, t0 # (required if the initial time is fixed) + tf, tf # (required if the final time is fixed) + N, N # (required) + end + ) + # ------------------------------------------------ + # state, control and initial guess @variable(model, x[0:N], start = 0.1) @variable(model, v[0:N], start = 0.1) diff --git a/ext/JuMPModels/glider.jl b/ext/JuMPModels/glider.jl index ab6f607f..c478c79c 100644 --- a/ext/JuMPModels/glider.jl +++ b/ext/JuMPModels/glider.jl @@ -28,31 +28,46 @@ julia> model = OptimalControlProblems.glider(JuMPBackend(); N=100) - Hang Glider Problem formulation as in: https://www.mcs.anl.gov/~more/cops/ """ function OptimalControlProblems.glider( - ::JuMPBackend, args...; N::Int=steps_number_data(:glider), kwargs... + ::JuMPBackend, args...; N::Int=steps_number_data(:glider), + parameters::Union{Nothing, NamedTuple}=nothing, + kwargs... ) # parameters - x_0 = 0 - y_0 = 1000 - y_f = 900 - vx_0 = 13.23 - vx_f = 13.23 - vy_0 = -1.288 - vy_f = -1.288 - u_c = 2.5 - r_0 = 100 - m = 100 - g = 9.81 - c0 = 0.034 - c1 = 0.069662 - S = 14 - ρ = 1.13 - cL_min = 0 - cL_max = 1.4 + params = parameters_data(:glider, parameters) + t0 = params[:t0] + x_0 = params[:x_0] + y_0 = params[:y_0] + y_f = params[:y_f] + vx_0 = params[:vx_0] + vx_f = params[:vx_f] + vy_0 = params[:vy_0] + vy_f = params[:vy_f] + u_c = params[:u_c] + r_0 = params[:r_0] + m = params[:m] + g = params[:g] + c0 = params[:c0] + c1 = params[:c1] + S = params[:S] + ρ = params[:ρ] + cL_min = params[:cL_min] + cL_max = params[:cL_max] # model model = JuMP.Model(args...; kwargs...) + # ------------------------------------------------ + # expressions to get grid time infos + @expressions( + model, + begin + t0, t0 # (required if the initial time is fixed) + N, N # (required) + end + ) + # ------------------------------------------------ + # state, control, variable (final time) and initial guess @variables( model, diff --git a/ext/JuMPModels/insurance.jl b/ext/JuMPModels/insurance.jl index b24b0daf..cb68d695 100644 --- a/ext/JuMPModels/insurance.jl +++ b/ext/JuMPModels/insurance.jl @@ -28,23 +28,39 @@ julia> model = OptimalControlProblems.insurance(JuMPBackend(); N=100) - Problem formulation available at: https://github.com/control-toolbox/bocop/tree/main/bocop """ function OptimalControlProblems.insurance( - ::JuMPBackend, args...; N::Int=steps_number_data(:insurance), kwargs... + ::JuMPBackend, args...; N::Int=steps_number_data(:insurance), + parameters::Union{Nothing, NamedTuple}=nothing, + kwargs... ) # parameters - tf = final_time_data(:insurance) - γ = 0.2 - λ = 0.25 - h0 = 1.5 - w = 1 - s = 10 - k = 0 - σ = 0 - α = 4 + params = parameters_data(:insurance, parameters) + t0 = params[:t0] + tf = params[:tf] + γ = params[:γ] + λ = params[:λ] + h0 = params[:h0] + w = params[:w] + s = params[:s] + k = params[:k] + σ = params[:σ] + α = params[:α] # model model = JuMP.Model(args...; kwargs...) + # ------------------------------------------------ + # expressions to get grid time infos + @expressions( + model, + begin + t0, t0 # (required if the initial time is fixed) + tf, tf # (required if the final time is fixed) + N, N # (required) + end + ) + # ------------------------------------------------ + # state, control and initial guess @variables( model, diff --git a/ext/JuMPModels/jackson.jl b/ext/JuMPModels/jackson.jl index 64b54b94..b441adca 100644 --- a/ext/JuMPModels/jackson.jl +++ b/ext/JuMPModels/jackson.jl @@ -29,18 +29,34 @@ julia> model = OptimalControlProblems.jackson(JuMPBackend(); N=100) - Problem formulation available at: https://github.com/control-toolbox/bocop/tree/main/bocop """ function OptimalControlProblems.jackson( - ::JuMPBackend, args...; N::Int=steps_number_data(:jackson), kwargs... + ::JuMPBackend, args...; N::Int=steps_number_data(:jackson), + parameters::Union{Nothing, NamedTuple}=nothing, + kwargs... ) # parameters - tf = final_time_data(:jackson) - k1 = 1 - k2 = 10 - k3 = 1 + params = parameters_data(:jackson, parameters) + t0 = params[:t0] + tf = params[:tf] + k1 = params[:k1] + k2 = params[:k2] + k3 = params[:k3] # model model = JuMP.Model(args...; kwargs...) + # ------------------------------------------------ + # expressions to get grid time infos + @expressions( + model, + begin + t0, t0 # (required if the initial time is fixed) + tf, tf # (required if the final time is fixed) + N, N # (required) + end + ) + # ------------------------------------------------ + @variables( model, begin diff --git a/ext/JuMPModels/moonlander.jl b/ext/JuMPModels/moonlander.jl index be89759a..640ebe2c 100644 --- a/ext/JuMPModels/moonlander.jl +++ b/ext/JuMPModels/moonlander.jl @@ -29,20 +29,35 @@ julia> model = OptimalControlProblems.moonlander(JuMPBackend(); N=100) - Problem formulation available at: https://arxiv.org/pdf/2303.16746 """ function OptimalControlProblems.moonlander( - ::JuMPBackend, args...; N::Int=steps_number_data(:moonlander), kwargs... + ::JuMPBackend, args...; N::Int=steps_number_data(:moonlander), + parameters::Union{Nothing, NamedTuple}=nothing, + kwargs... ) # parameters - target=[5.0, 5.0] - m = 1 - g = 9.81 - I = 0.1 - D = 1 - max_thrust = 2g + params = parameters_data(:moonlander, parameters) + t0 = params[:t0] + target = params[:target] + m = params[:m] + g = params[:g] + I = params[:I] + D = params[:D] + max_thrust = params[:max_thrust] # define the problem model = JuMP.Model(args...; kwargs...) + # ------------------------------------------------ + # expressions to get grid time infos + @expressions( + model, + begin + t0, t0 # (required if the initial time is fixed) + N, N # (required) + end + ) + # ------------------------------------------------ + # state, control and final time variables @variables( model, diff --git a/ext/JuMPModels/robbins.jl b/ext/JuMPModels/robbins.jl index 5beaa746..3c476be4 100644 --- a/ext/JuMPModels/robbins.jl +++ b/ext/JuMPModels/robbins.jl @@ -28,14 +28,18 @@ julia> model = OptimalControlProblems.robbins(JuMPBackend(); N=100) - Problem formulation available at: https://github.com/control-toolbox/bocop/tree/main/bocop """ function OptimalControlProblems.robbins( - ::JuMPBackend, args...; N::Int=steps_number_data(:robbins), kwargs... + ::JuMPBackend, args...; N::Int=steps_number_data(:robbins), + parameters::Union{Nothing, NamedTuple}=nothing, + kwargs... ) # parameters - tf = final_time_data(:robbins) - α = 3 - β = 0 - γ = 0.5 + params = parameters_data(:robbins, parameters) + t0 = params[:t0] + tf = params[:tf] + α = params[:α] + β = params[:β] + γ = params[:γ] # step = tf / N @@ -43,6 +47,18 @@ function OptimalControlProblems.robbins( # model model = JuMP.Model(args...; kwargs...) + # ------------------------------------------------ + # expressions to get grid time infos + @expressions( + model, + begin + t0, t0 # (required if the initial time is fixed) + tf, tf # (required if the final time is fixed) + N, N # (required) + end + ) + # ------------------------------------------------ + # state, control and initial guess @variables( model, diff --git a/ext/JuMPModels/robot.jl b/ext/JuMPModels/robot.jl index 68e94655..43cf3da9 100644 --- a/ext/JuMPModels/robot.jl +++ b/ext/JuMPModels/robot.jl @@ -28,27 +28,42 @@ julia> model = OptimalControlProblems.robot(JuMPBackend(); N=100) - Problem formulation available at: https://github.com/MadNLP/COPSBenchmark.jl/blob/main/src/robot.jl """ function OptimalControlProblems.robot( - ::JuMPBackend, args...; N::Int=steps_number_data(:robot), kwargs... + ::JuMPBackend, args...; N::Int=steps_number_data(:robot), + parameters::Union{Nothing, NamedTuple}=nothing, + kwargs... ) # parameters + params = parameters_data(:robot, parameters) + t0 = params[:t0] # total length of arm - L = 5 + L = params[:L] # Upper bounds on the controls - max_uρ = 1 - max_uθ = 1 - max_uϕ = 1 + max_uρ = params[:max_uρ] + max_uθ = params[:max_uθ] + max_uϕ = params[:max_uϕ] # Initial positions of the length and the angles for the robot arm - ρ0 = 4.5 - ϕ0 = π/4 - θf = 2π/3 + ρ0 = params[:ρ0] + ϕ0 = params[:ϕ0] + θf = params[:θf] # model model = JuMP.Model(args...; kwargs...) + # ------------------------------------------------ + # expressions to get grid time infos + @expressions( + model, + begin + t0, t0 # (required if the initial time is fixed) + N, N # (required) + end + ) + # ------------------------------------------------ + # state, control, variable (final time) and initial guess @variables( model, diff --git a/ext/JuMPModels/rocket.jl b/ext/JuMPModels/rocket.jl index 330366d6..810fcf66 100644 --- a/ext/JuMPModels/rocket.jl +++ b/ext/JuMPModels/rocket.jl @@ -28,18 +28,24 @@ julia> model = OptimalControlProblems.rocket(JuMPBackend(); N=200) - Problem formulation available at: https://github.com/MadNLP/COPSBenchmark.jl/blob/main/src/rocket.jl """ function OptimalControlProblems.rocket( - ::JuMPBackend, args...; N::Int=steps_number_data(:rocket), kwargs... + ::JuMPBackend, args...; N::Int=steps_number_data(:rocket), + parameters::Union{Nothing, NamedTuple}=nothing, + kwargs... ) # parameters - h0 = 1 - v0 = 0 - m0 = 1 - g0 = 1 - Tc = 3.5 - hc = 500 - vc = 620 - mc = 0.6 + params = parameters_data(:rocket, parameters) + t0 = params[:t0] + h0 = params[:h0] + v0 = params[:v0] + m0 = params[:m0] + g0 = params[:g0] + Tc = params[:Tc] + hc = params[:hc] + vc = params[:vc] + mc = params[:mc] + + # c = 0.5 * sqrt(g0 * h0) mf = mc * m0 Dc = 0.5 * vc * (m0 / g0) @@ -48,6 +54,17 @@ function OptimalControlProblems.rocket( # model model = JuMP.Model(args...; kwargs...) + # ------------------------------------------------ + # expressions to get grid time infos + @expressions( + model, + begin + t0, t0 # (required if the initial time is fixed) + N, N # (required) + end + ) + # ------------------------------------------------ + # state, control, variable (final time) and initial guess @variables( model, diff --git a/ext/JuMPModels/space_shuttle.jl b/ext/JuMPModels/space_shuttle.jl index 697f072c..e6480f24 100644 --- a/ext/JuMPModels/space_shuttle.jl +++ b/ext/JuMPModels/space_shuttle.jl @@ -29,65 +29,82 @@ julia> model = OptimalControlProblems.space_shuttle(JuMPBackend(); N=200) - Problem formulation and tutorial available at: https://jump.dev/JuMP.jl/stable/tutorials/nonlinear/space_shuttle_reentry_trajectory/ """ function OptimalControlProblems.space_shuttle( - ::JuMPBackend, args...; N::Int=steps_number_data(:space_shuttle), kwargs... + ::JuMPBackend, args...; N::Int=steps_number_data(:space_shuttle), + parameters::Union{Nothing, NamedTuple}=nothing, + kwargs... ) - ## Global variables - w = 203000.0 # weight (lb) - g₀ = 32.174 # acceleration (ft/sec^2) + # Parameters + params = parameters_data(:space_shuttle, parameters) + t0 = params[:t0] + + ## + w = params[:w] + g₀ = params[:g₀] m = w / g₀ # mass (slug) ## Aerodynamic and atmospheric forces on the vehicle - ρ₀ = 0.002378 - hᵣ = 23800 - Rₑ = 20902900 - μ = 0.14076539e17 - S = 2690 - a₀ = -0.20704 - a₁ = 0.029244 - b₀ = 0.07854 - b₁ = -0.61592e-2 - b₂ = 0.621408e-3 - # c₀ = 1.0672181 - # c₁ = -0.19213774e-1 - # c₂ = 0.21286289e-3 - # c₃ = -0.10117249e-5 + ρ₀ = params[:ρ₀] + hᵣ = params[:hᵣ] + Rₑ = params[:Rₑ] + μ = params[:μ] + S = params[:S] + a₀ = params[:a₀] + a₁ = params[:a₁] + b₀ = params[:b₀] + b₁ = params[:b₁] + b₂ = params[:b₂] # - Δt_min = 3.5 - Δt_max = 4.5 - tf_min = 500*Δt_min - tf_max = 500*Δt_max + Δt_min = params[:Δt_min] + Δt_max = params[:Δt_max] + tf_min = N*Δt_min + tf_max = N*Δt_max ## Initial conditions - h_s = 2.6 # altitude (ft) / 1e5 - ϕ_s = deg2rad(0) # longitude (rad) - θ_s = deg2rad(0) # latitude (rad) - v_s = 2.56 # velocity (ft/sec) / 1e4 - γ_s = deg2rad(-1) # flight path angle (rad) - ψ_s = deg2rad(90) # azimuth (rad) - α_s = deg2rad(0) # angle of attack (rad) - β_s = deg2rad(0) # bank angle (rad) - t_s = 1.00 # time step (sec) + h_s = params[:h_s] + ϕ_s = params[:ϕ_s] + θ_s = params[:θ_s] + v_s = params[:v_s] + γ_s = params[:γ_s] + ψ_s = params[:ψ_s] + α_s = params[:α_s] + β_s = params[:β_s] + t_s = params[:t_s] ## Final conditions, the so-called Terminal Area Energy Management (TAEM) - h_t = 0.8 # altitude (ft) / 1e5 - v_t = 0.25 # velocity (ft/sec) / 1e4 - γ_t = deg2rad(-5) # flight path angle (rad) + h_t = params[:h_t] + v_t = params[:v_t] + γ_t = params[:γ_t] + + ## Scalings + scaling_h = 1e5 + scaling_v = 1e4 # model model = JuMP.Model(args...; kwargs...) + # ------------------------------------------------ + # expressions to get grid time infos + @expressions( + model, + begin + t0, t0 # (required if the initial time is fixed) + N, N # (required) + end + ) + # ------------------------------------------------ + # state, control and variable (final time) @variables( model, begin # state - 0 ≤ scaled_h[0:N] # altitude (ft) / 1e5 + 0 ≤ scaled_h[0:N] # altitude (ft) / scaling_h -2π ≤ ϕ[0:N] ≤ 2π # longitude (rad) deg2rad(-89) ≤ θ[0:N] ≤ deg2rad(89) # latitude (rad) - 1e-4 ≤ scaled_v[0:N] # velocity (ft/sec) / 1e4 + 1e-4 ≤ scaled_v[0:N] # velocity (ft/sec) / scaling_v deg2rad(-89) ≤ γ[0:N] ≤ deg2rad(89) # flight path angle (rad) -2π ≤ ψ[0:N] ≤ 2π # azimuth (rad) @@ -164,8 +181,8 @@ function OptimalControlProblems.space_shuttle( #set_start_value.(model[:Δt], vec(initial_guess[1:(end - 1), 9])) ## Functions to restore `h` and `v` to their true scale - @expression(model, h[j = 0:N], scaled_h[j] * 1e5) - @expression(model, v[j = 0:N], scaled_v[j] * 1e4) + @expression(model, h[j = 0:N], scaled_h[j] * scaling_h) + @expression(model, v[j = 0:N], scaled_v[j] * scaling_v) # Helper functions @expression(model, c_L[j = 0:N], a₀ + a₁ * rad2deg(α[j])) diff --git a/ext/JuMPModels/steering.jl b/ext/JuMPModels/steering.jl index a9878536..76b20dca 100644 --- a/ext/JuMPModels/steering.jl +++ b/ext/JuMPModels/steering.jl @@ -28,15 +28,19 @@ julia> model = OptimalControlProblems.steering(JuMPBackend(); N=200) - Problem formulation available at: https://github.com/MadNLP/COPSBenchmark.jl/blob/main/src/steering.jl """ function OptimalControlProblems.steering( - ::JuMPBackend, args...; N::Int=steps_number_data(:steering), kwargs... + ::JuMPBackend, args...; N::Int=steps_number_data(:steering), + parameters::Union{Nothing, NamedTuple}=nothing, + kwargs... ) # parameters - a = 100 - u_min = -π/2 - u_max = π/2 - xs = zeros(4) - xf = [5, 45, 0] + params = parameters_data(:steering, parameters) + t0 = params[:t0] + a = params[:a] + u_min = params[:u_min] + u_max = params[:u_max] + xs = params[:xs] + xf = params[:xf] tf_start = 1 @@ -53,6 +57,17 @@ function OptimalControlProblems.steering( # model model = JuMP.Model(args...; kwargs...) + # ------------------------------------------------ + # expressions to get grid time infos + @expressions( + model, + begin + t0, t0 # (required if the initial time is fixed) + N, N # (required) + end + ) + # ------------------------------------------------ + @variable(model, u_min <= u[i = 1:(N + 1)] <= u_max, start = 0) # control @variable(model, x1[i = 1:(N + 1)], start = gen_x0(i, 1)) # state x1 @variable(model, x2[i = 1:(N + 1)], start = gen_x0(i, 2)) # state x2 diff --git a/ext/JuMPModels/vanderpol.jl b/ext/JuMPModels/vanderpol.jl index 8e4eeda6..175f7759 100644 --- a/ext/JuMPModels/vanderpol.jl +++ b/ext/JuMPModels/vanderpol.jl @@ -27,17 +27,33 @@ julia> model = OptimalControlProblems.vanderpol(JuMPBackend(); N=100) - Problem formulation available at: https://github.com/control-toolbox/bocop/tree/main/bocop """ function OptimalControlProblems.vanderpol( - ::JuMPBackend, args...; N::Int=steps_number_data(:vanderpol), kwargs... + ::JuMPBackend, args...; N::Int=steps_number_data(:vanderpol), + parameters::Union{Nothing, NamedTuple}=nothing, + kwargs... ) # parameters - tf = final_time_data(:vanderpol) - ω = 1 - ε = 1 + params = parameters_data(:vanderpol, parameters) + t0 = params[:t0] + tf = params[:tf] + ω = params[:ω] + ε = params[:ε] # model model = JuMP.Model(args...; kwargs...) + # ------------------------------------------------ + # expressions to get grid time infos + @expressions( + model, + begin + t0, t0 # (required if the initial time is fixed) + tf, tf # (required if the final time is fixed) + N, N # (required) + end + ) + # ------------------------------------------------ + # state, control and initial guess @variables( model, diff --git a/ext/MetaData/beam.jl b/ext/MetaData/beam.jl index 27804ebe..573768ce 100644 --- a/ext/MetaData/beam.jl +++ b/ext/MetaData/beam.jl @@ -1,10 +1,20 @@ beam_meta = OrderedDict( - :name => "beam", :N => 500, - :minimise => true, :state_name => ["x1", "x2"], :costate_name => ["∂x1", "∂x2"], :control_name => ["u"], :variable_name => nothing, - :final_time => (:fixed, 1), + :time_grid_name => Dict( + :initial_time => "t0", + :final_time => "tf", + :steps_number => "N" + ), + :parameters => ( + t0 = 0, + tf = 1, + x_t0 = [0, 1], + x_tf = [0, -1], + x₁_l = 0, + x₁_u = 0.1, + ), ) diff --git a/ext/MetaData/bioreactor.jl b/ext/MetaData/bioreactor.jl index ca363bc0..d5ef3420 100644 --- a/ext/MetaData/bioreactor.jl +++ b/ext/MetaData/bioreactor.jl @@ -1,10 +1,29 @@ bioreactor_meta = OrderedDict( - :name => "bioreactor", :N => 600, - :minimise => false, :state_name => ["y", "s", "b"], :costate_name => ["∂y", "∂s", "∂b"], :control_name => ["u"], :variable_name => nothing, - :final_time => (:fixed, 200), # the final time is 10N where N = 20 by default + :time_grid_name => Dict( + :initial_time => "t0", + :final_time => "T", + :steps_number => "N" + ), + :parameters => ( + t0 = 0, + T = 200, # the final time is 10N where N = 20 by default + β = 1, + c = 2, + γ = 1, + halfperiod = 5, + Ks = 0.05, + μ2m = 0.1, + μbar = 1, + r = 0.005, + x_l = [0, 0, 0.001], + u_l = 0, + u_u = 1, + x0_l = [0.05, 0.5, 0.5], + x0_u = [0.25, 5, 3], + ), ) diff --git a/ext/MetaData/cart_pendulum.jl b/ext/MetaData/cart_pendulum.jl index 7a154d6c..4e6481ac 100644 --- a/ext/MetaData/cart_pendulum.jl +++ b/ext/MetaData/cart_pendulum.jl @@ -1,10 +1,22 @@ cart_pendulum_meta = OrderedDict( - :name => "cart_pendulum", :N => 500, - :minimise => true, :state_name => ["x", "v", "θ", "ω"], :costate_name => ["∂x", "∂v", "∂θ", "∂ω"], :control_name => ["Fex"], :variable_name => ["tf", "ddx"], - :final_time => (:free, 1), # first component of the variable + :time_grid_name => Dict( + :initial_time => "t0", + :final_time => "tf", + :steps_number => "N", + ), + :parameters => ( + t0 = 0, + g = 9.81, # gravitation [m/s^2] + L = 1, # pendulum length [m] + m = 1, # pendulum mass [kg] + mcart = 0.5, # cart mass [kg] + max_f = 5, + max_x = 1, + max_v = 2, + ), ) diff --git a/ext/MetaData/chain.jl b/ext/MetaData/chain.jl index 99183aa4..208bb65c 100644 --- a/ext/MetaData/chain.jl +++ b/ext/MetaData/chain.jl @@ -1,10 +1,19 @@ chain_meta = OrderedDict( - :name => "chain", :N => 500, - :minimise => true, :state_name => ["x1", "x2", "x3"], :costate_name => ["∂x1", "∂x2", "∂x3"], :control_name => ["u"], :variable_name => nothing, - :final_time => (:fixed, 1), + :time_grid_name => Dict( + :initial_time => "t0", + :final_time => "tf", + :steps_number => "N" + ), + :parameters => ( + t0 = 0, + tf = 1, + L = 4, + a = 1, + b = 3, + ), ) diff --git a/ext/MetaData/dielectrophoretic_particle.jl b/ext/MetaData/dielectrophoretic_particle.jl index a7156f59..aa3622a5 100644 --- a/ext/MetaData/dielectrophoretic_particle.jl +++ b/ext/MetaData/dielectrophoretic_particle.jl @@ -1,10 +1,19 @@ dielectrophoretic_particle_meta = OrderedDict( - :name => "dielectrophoretic_particle", :N => 500, - :minimise => true, :state_name => ["x", "y"], :costate_name => ["∂x", "∂y"], :control_name => ["u"], :variable_name => ["tf"], - :final_time => (:free, 1), # first component of the variable + :time_grid_name => Dict( + :initial_time => "t0", + :final_time => "tf", + :steps_number => "N" + ), + :parameters => ( + t0 = 0, + x0 = 1, + xf = 2, + α = -0.75, + c = 1, + ), ) diff --git a/ext/MetaData/double_oscillator.jl b/ext/MetaData/double_oscillator.jl index 41416d8c..cf166a6a 100644 --- a/ext/MetaData/double_oscillator.jl +++ b/ext/MetaData/double_oscillator.jl @@ -1,10 +1,21 @@ double_oscillator_meta = OrderedDict( - :name => "double_oscillator", :N => 500, - :minimise => true, :state_name => ["x1", "x2", "x3", "x4"], :costate_name => ["∂x1", "∂x2", "∂x3", "∂x4"], :control_name => ["u"], :variable_name => nothing, - :final_time => (:fixed, 2π), + :time_grid_name => Dict( + :initial_time => "t0", + :final_time => "T", + :steps_number => "N" + ), + :parameters => ( + t0 = 0, + T = 2π, + m1 = 100, # [kg] + m2 = 2, # [kg] + c = 0.5, # [Ns/m] + k1 = 100, # [N/m] + k2 = 3, # [N/m] + ), ) diff --git a/ext/MetaData/ducted_fan.jl b/ext/MetaData/ducted_fan.jl index c5d36a1d..188789bb 100644 --- a/ext/MetaData/ducted_fan.jl +++ b/ext/MetaData/ducted_fan.jl @@ -1,10 +1,20 @@ ducted_fan_meta = OrderedDict( - :name => "ducted_fan", :N => 250, - :minimise => true, :state_name => ["x₁", "v₁", "x₂", "v₂", "α", "vα"], :costate_name => ["∂x₁", "∂v₁", "∂x₂", "∂v₂", "∂α", "∂vα"], :control_name => ["u₁", "u₂"], :variable_name => ["tf"], - :final_time => (:free, 1), # first component of the variable + :time_grid_name => Dict( + :initial_time => "t0", + :final_time => "tf", + :steps_number => "N" + ), + :parameters => ( + t0 = 0, + r = 0.2, # [m] + J = 0.05, # [kg.m2] + m = 2.2, # [kg] + mg = 4, # [N] + μ = 1000, + ), ) diff --git a/ext/MetaData/electric_vehicle.jl b/ext/MetaData/electric_vehicle.jl index 28ecd810..66d62395 100644 --- a/ext/MetaData/electric_vehicle.jl +++ b/ext/MetaData/electric_vehicle.jl @@ -1,10 +1,26 @@ electric_vehicle_meta = OrderedDict( - :name => "electric_vehicle", :N => 500, - :minimise => true, :state_name => ["x", "v"], :costate_name => ["∂x", "∂v"], :control_name => ["u"], :variable_name => nothing, - :final_time => (:fixed, 1), + :time_grid_name => Dict( + :initial_time => "t0", + :final_time => "tf", + :steps_number => "N" + ), + :parameters => ( + t0 = 0, + tf = 1, + D = 10, + b1 = 1e0, + b2 = 1e0, + h0 = 0.1, + h1 = 1, + h2 = 1e-3, + α0 = 3, + α1 = 0.4, + α2 = -1, + α3 = 0.1, + ), ) diff --git a/ext/MetaData/glider.jl b/ext/MetaData/glider.jl index 0522917b..6eb3d9c7 100644 --- a/ext/MetaData/glider.jl +++ b/ext/MetaData/glider.jl @@ -1,10 +1,32 @@ glider_meta = OrderedDict( - :name => "glider", :N => 500, - :minimise => false, :state_name => ["x", "y", "vx", "vy"], :costate_name => ["∂x", "∂y", "∂vx", "∂vy"], :control_name => ["cL"], :variable_name => ["tf"], - :final_time => (:free, 1), # first component of the variable + :time_grid_name => Dict( + :initial_time => "t0", + :final_time => "tf", + :steps_number => "N" + ), + :parameters => ( + t0 = 0, + x_0 = 0, + y_0 = 1000, + y_f = 900, + vx_0 = 13.23, + vx_f = 13.23, + vy_0 = -1.288, + vy_f = -1.288, + u_c = 2.5, + r_0 = 100, + m = 100, + g = 9.81, + c0 = 0.034, + c1 = 0.069662, + S = 14, + ρ = 1.13, + cL_min = 0, + cL_max = 1.4, + ), ) diff --git a/ext/MetaData/insurance.jl b/ext/MetaData/insurance.jl index c7e17882..ac71713d 100644 --- a/ext/MetaData/insurance.jl +++ b/ext/MetaData/insurance.jl @@ -1,10 +1,24 @@ insurance_meta = OrderedDict( - :name => "insurance", :N => 500, - :minimise => false, :state_name => ["I", "m", "x₃"], :costate_name => ["∂I", "∂m", "∂x₃"], :control_name => ["h", "R", "H", "U", "dUdR"], :variable_name => nothing, - :final_time => (:fixed, 10), + :time_grid_name => Dict( + :initial_time => "t0", + :final_time => "tf", + :steps_number => "N" + ), + :parameters => ( + t0 = 0, + tf = 10, + γ = 0.2, + λ = 0.25, + h0 = 1.5, + w = 1, + s = 10, + k = 0, + σ = 0, + α = 4, + ), ) diff --git a/ext/MetaData/jackson.jl b/ext/MetaData/jackson.jl index ddf75f85..41b66894 100644 --- a/ext/MetaData/jackson.jl +++ b/ext/MetaData/jackson.jl @@ -1,10 +1,19 @@ jackson_meta = OrderedDict( - :name => "jackson", :N => 500, - :minimise => false, :state_name => ["a", "b", "x3"], :costate_name => ["∂a", "∂b", "∂x3"], :control_name => ["u"], :variable_name => nothing, - :final_time => (:fixed, 4), + :time_grid_name => Dict( + :initial_time => "t0", + :final_time => "tf", + :steps_number => "N" + ), + :parameters => ( + t0 = 0, + tf = 4, + k1 = 1, + k2 = 10, + k3 = 1, + ), ) diff --git a/ext/MetaData/moonlander.jl b/ext/MetaData/moonlander.jl index 1cb1e371..acea3273 100644 --- a/ext/MetaData/moonlander.jl +++ b/ext/MetaData/moonlander.jl @@ -1,10 +1,21 @@ moonlander_meta = OrderedDict( - :name => "moonlander", :N => 500, - :minimise => true, :state_name => ["p1", "p2", "dp1", "dp2", "θ", "dθ"], :costate_name => ["∂p1", "∂p2", "∂dp1", "∂dp2", "∂θ", "∂dθ"], :control_name => ["F1", "F2"], :variable_name => ["tf"], - :final_time => (:free, 1), # first component of the variable + :time_grid_name => Dict( + :initial_time => "t0", + :final_time => "tf", + :steps_number => "N" + ), + :parameters => ( + t0 = 0, + target=[5.0, 5.0], + m = 1, + g = 9.81, + I = 0.1, + D = 1, + max_thrust = 2*9.81, + ), ) diff --git a/ext/MetaData/robbins.jl b/ext/MetaData/robbins.jl index 19932b55..8088402d 100644 --- a/ext/MetaData/robbins.jl +++ b/ext/MetaData/robbins.jl @@ -1,10 +1,19 @@ robbins_meta = OrderedDict( - :name => "robbins", :N => 500, - :minimise => true, :state_name => ["x1", "x2", "x3"], :costate_name => ["∂x1", "∂x2", "∂x3"], :control_name => ["u"], :variable_name => nothing, - :final_time => (:fixed, 10), + :time_grid_name => Dict( + :initial_time => "t0", + :final_time => "tf", + :steps_number => "N" + ), + :parameters => ( + t0 = 0, + tf = 10, + α = 3, + β = 0, + γ = 0.5, + ), ) diff --git a/ext/MetaData/robot.jl b/ext/MetaData/robot.jl index e572b558..bf847867 100644 --- a/ext/MetaData/robot.jl +++ b/ext/MetaData/robot.jl @@ -1,10 +1,24 @@ robot_meta = OrderedDict( - :name => "robot", :N => 250, - :minimise => true, :state_name => ["ρ", "dρ", "θ", "dθ", "ϕ", "dϕ"], :costate_name => ["∂ρ", "∂dρ", "∂θ", "∂dθ", "∂ϕ", "∂dϕ"], :control_name => ["uρ", "uθ", "uϕ"], :variable_name => ["tf"], - :final_time => (:free, 1), # first component of the variable + :time_grid_name => Dict( + :initial_time => "t0", + :final_time => "tf", + :steps_number => "N" + ), + :parameters => ( + t0 = 0, + L = 5, + # Upper bounds on the controls, + max_uρ = 1, + max_uθ = 1, + max_uϕ = 1, + # Initial positions of the length and the angles for the robot arm, + ρ0 = 4.5, + ϕ0 = π/4, + θf = 2π/3, + ), ) diff --git a/ext/MetaData/rocket.jl b/ext/MetaData/rocket.jl index b55d126b..601e78b1 100644 --- a/ext/MetaData/rocket.jl +++ b/ext/MetaData/rocket.jl @@ -1,10 +1,23 @@ rocket_meta = OrderedDict( - :name => "rocket", :N => 500, - :minimise => false, :state_name => ["h", "v", "m"], :costate_name => ["∂h", "∂v", "∂m"], :control_name => ["T"], :variable_name => ["tf"], - :final_time => (:free, 1), # first component of the variable + :time_grid_name => Dict( + :initial_time => "t0", + :final_time => "tf", + :steps_number => "N" + ), + :parameters => ( + t0 = 0, + h0 = 1, + v0 = 0, + m0 = 1, + g0 = 1, + Tc = 3.5, + hc = 500, + vc = 620, + mc = 0.6, + ), ) diff --git a/ext/MetaData/space_shuttle.jl b/ext/MetaData/space_shuttle.jl index 7c43dca3..8d00d20b 100644 --- a/ext/MetaData/space_shuttle.jl +++ b/ext/MetaData/space_shuttle.jl @@ -1,10 +1,45 @@ space_shuttle_meta = OrderedDict( - :name => "space_shuttle", :N => 500, - :minimise => false, :state_name => ["scaled_h", "ϕ", "θ", "scaled_v", "γ", "ψ"], :costate_name => ["∂h", "∂ϕ", "∂θ", "∂v", "∂γ", "∂ψ"], :control_name => ["α", "β"], :variable_name => ["tf"], - :final_time => (:free, 1), # first component of the variable + :time_grid_name => Dict( + :initial_time => "t0", + :final_time => "tf", + :steps_number => "N" + ), + :parameters => ( + t0 = 0, + w = 203000.0, # weight (lb), + g₀ = 32.174, # acceleration (ft/sec^2), + ## Aerodynamic and atmospheric forces on the vehicle, + ρ₀ = 0.002378, + hᵣ = 23800, + Rₑ = 20902900, + μ = 0.14076539e17, + S = 2690, + a₀ = -0.20704, + a₁ = 0.029244, + b₀ = 0.07854, + b₁ = -0.61592e-2, + b₂ = 0.621408e-3, + # , + Δt_min = 3.5, + Δt_max = 4.5, + ## Initial conditions, + h_s = 2.6, # altitude (ft) / 1e5, + ϕ_s = deg2rad(0), # longitude (rad), + θ_s = deg2rad(0), # latitude (rad), + v_s = 2.56, # velocity (ft/sec) / 1e4, + γ_s = deg2rad(-1), # flight path angle (rad), + ψ_s = deg2rad(90), # azimuth (rad), + α_s = deg2rad(0), # angle of attack (rad), + β_s = deg2rad(0), # bank angle (rad), + t_s = 1.00, # time step (sec), + ## Final conditions, the so-called Terminal Area Energy Management (TAEM), + h_t = 0.8, # altitude (ft) / 1e5, + v_t = 0.25, # velocity (ft/sec) / 1e4, + γ_t = deg2rad(-5), # flight path angle (rad), + ), ) diff --git a/ext/MetaData/steering.jl b/ext/MetaData/steering.jl index 19138cb8..8999d1fd 100644 --- a/ext/MetaData/steering.jl +++ b/ext/MetaData/steering.jl @@ -1,10 +1,20 @@ steering_meta = OrderedDict( - :name => "steering", :N => 500, - :minimise => true, :state_name => ["x1", "x2", "x3", "x4"], :costate_name => ["∂x1", "∂x2", "∂x3", "∂x4"], :control_name => ["u"], :variable_name => ["tf"], - :final_time => (:free, 1), # first component of the variable + :time_grid_name => Dict( + :initial_time => "t0", + :final_time => "tf", + :steps_number => "N" + ), + :parameters => ( + t0 = 0, + a = 100, + u_min = -π/2, + u_max = π/2, + xs = zeros(4), + xf = [5, 45, 0], + ), ) diff --git a/ext/MetaData/vanderpol.jl b/ext/MetaData/vanderpol.jl index 45623ad8..69b246f6 100644 --- a/ext/MetaData/vanderpol.jl +++ b/ext/MetaData/vanderpol.jl @@ -1,10 +1,18 @@ vanderpol_meta = OrderedDict( - :name => "vanderpol", :N => 500, - :minimise => true, :state_name => ["x1", "x2"], :costate_name => ["∂x1", "∂x2"], :control_name => ["u"], :variable_name => nothing, - :final_time => (:fixed, 2), + :time_grid_name => Dict( + :initial_time => "t0", + :final_time => "tf", + :steps_number => "N" + ), + :parameters => ( + t0 = 0, + tf = 2, + ω = 1, + ε = 1, + ), ) diff --git a/ext/OptimalControlModels/beam.jl b/ext/OptimalControlModels/beam.jl index 766c8328..99cfcf4c 100644 --- a/ext/OptimalControlModels/beam.jl +++ b/ext/OptimalControlModels/beam.jl @@ -31,21 +31,28 @@ function OptimalControlProblems.beam( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:beam), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) - # - tf = final_time_data(:beam) + # parameters + params = parameters_data(:beam, parameters) + t0 = params[:t0] + tf = params[:tf] + x_t0 = params[:x_t0] + x_tf = params[:x_tf] + x₁_l = params[:x₁_l] + x₁_u = params[:x₁_u] # model ocp = @def begin - t ∈ [0, tf], time + t ∈ [t0, tf], time x ∈ R², state u ∈ R, control - x(0) == [0, 1] - x(tf) == [0, -1] + x(t0) == x_t0 + x(tf) == x_tf ẋ(t) == [x₂(t), u(t)] - 0 ≤ x₁(t) ≤ 0.1 + x₁_l ≤ x₁(t) ≤ x₁_u ∫(u(t)^2) → min end diff --git a/ext/OptimalControlModels/bioreactor.jl b/ext/OptimalControlModels/bioreactor.jl index 99e5bd28..481e7f12 100644 --- a/ext/OptimalControlModels/bioreactor.jl +++ b/ext/OptimalControlModels/bioreactor.jl @@ -31,50 +31,38 @@ function OptimalControlProblems.bioreactor( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:bioreactor), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) - # METHANE PROBLEM - # μ2 according to growth model - # μ according to light model - # time scale is [0,10] for 24h (day then night) - - # growth model MONOD - function growth(s, μ2m, Ks) - return μ2m * s / (s + Ks) - end - - # light model: max^2 (0,sin) * μbar - # DAY/NIGHT CYCLE: [0,2 halfperiod] rescaled to [0,2pi] - function light(time, halfperiod) - days = time / (halfperiod * 2) - tau = (days - floor(days)) * 2π - return max(0, sin(tau))^2 - end - # parameters - β = 1 - c = 2 - γ = 1 - halfperiod = 5 - Ks = 0.05 - μ2m = 0.1 - μbar = 1 - r = 0.005 - T = final_time_data(:bioreactor) + params = parameters_data(:bioreactor, parameters) + t0 = params[:t0] + T = params[:T] + β = params[:β] + c = params[:c] + γ = params[:γ] + halfperiod = params[:halfperiod] + Ks = params[:Ks] + μ2m = params[:μ2m] + μbar = params[:μbar] + r = params[:r] + x_l = params[:x_l] + u_l = params[:u_l] + u_u = params[:u_u] + x0_l = params[:x0_l] + x0_u = params[:x0_u] # Model ocp = @def begin - t ∈ [0, T], time + t ∈ [t0, T], time x = (y, s, b) ∈ R³, state u ∈ R, control - x(t) ≥ [0, 0, 0.001] - 0 ≤ u(t) ≤ 1 - - 0.05 ≤ y(0) ≤ 0.25 - 0.5 ≤ s(0) ≤ 5 - 0.5 ≤ b(0) ≤ 3 + x(t) ≥ x_l + u_l ≤ u(t) ≤ u_u + + x0_l ≤ x(t0) ≤ x0_u μ = light(t, halfperiod) * μbar μ2 = growth(s(t), μ2m, Ks) @@ -88,6 +76,24 @@ function OptimalControlProblems.bioreactor( -∫(μ2 * b(t) / (β + c)) → min end + # METHANE PROBLEM + # μ2 according to growth model + # μ according to light model + # time scale is [0,10] for 24h (day then night) + + # growth model MONOD + function growth(s, μ2m, Ks) + return μ2m * s / (s + Ks) + end + + # light model: max^2 (0,sin) * μbar + # DAY/NIGHT CYCLE: [0,2 halfperiod] rescaled to [0,2pi] + function light(time, halfperiod) + days = time / (halfperiod * 2) + tau = (days - floor(days)) * 2π + return max(0, sin(tau))^2 + end + # initial guess init = (state=[50, 50, 50], control=0.5) diff --git a/ext/OptimalControlModels/cart_pendulum.jl b/ext/OptimalControlModels/cart_pendulum.jl index a551f98f..13fa5992 100644 --- a/ext/OptimalControlModels/cart_pendulum.jl +++ b/ext/OptimalControlModels/cart_pendulum.jl @@ -31,24 +31,26 @@ function OptimalControlProblems.cart_pendulum( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:cart_pendulum), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - g = 9.81 # gravitation [m/s^2] - L = 1 # pendulum length [m] - m = 1 # pendulum mass [kg] + params = parameters_data(:cart_pendulum, parameters) + t0 = params[:t0] + g = params[:g] + L = params[:L] + m = params[:m] I = m * L^2 / 12 # pendulum moment of inertia - mcart = 0.5 # cart mass [kg] - max_f = 5 - max_x = 1 - max_v = 2 + mcart = params[:mcart] + max_f = params[:max_f] + max_x = params[:max_x] + max_v = params[:max_v] ocp = @def begin - # time, variable, state and control w = (tf, ddx) ∈ R², variable - t ∈ [0, tf], time + t ∈ [t0, tf], time y = (x, v, θ, ω) ∈ R⁴, state Fex ∈ R, control @@ -63,9 +65,9 @@ function OptimalControlProblems.cart_pendulum( tf ≥ 0.1, (tf_con) # initial conditions - x(0) == 0, (x_ic) - θ(0) == 0, (θ_ic) - ω(0) == 0, (ω_ic) + x(t0) == 0, (x_ic) + θ(t0) == 0, (θ_ic) + ω(t0) == 0, (ω_ic) # final conditions θ(tf) == π, (θ_fc) diff --git a/ext/OptimalControlModels/chain.jl b/ext/OptimalControlModels/chain.jl index e4111be6..b18b1a02 100644 --- a/ext/OptimalControlModels/chain.jl +++ b/ext/OptimalControlModels/chain.jl @@ -32,31 +32,32 @@ function OptimalControlProblems.chain( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:chain), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - L = 4 - a = 1 - b = 3 - tf = final_time_data(:chain) + params = parameters_data(:chain, parameters) + t0 = params[:t0] + tf = params[:tf] + L = params[:L] + a = params[:a] + b = params[:b] # model ocp = @def begin - - # - t ∈ [0, tf], time + t ∈ [t0, tf], time x ∈ R³, state u ∈ R, control # initial conditions - x₁(0) == a, (x1_ic) - x₂(0) == 0, (x2_ic) - x₃(0) == 0, (x3_ic) + x₁(t0) == a, (x1_i) + x₂(t0) == 0, (x2_i) + x₃(t0) == 0, (x3_i) # final conditions - x₁(tf) == b, (x1_con) - x₃(tf) == L, (x3_con) + x₁(tf) == b, (x1_f) + x₃(tf) == L, (x3_f) # dynamics ẋ(t) == dynamics(x(t), u(t)) @@ -74,12 +75,12 @@ function OptimalControlProblems.chain( tmin = b > a ? 1 / 4 : 3 / 4 xinit = t -> [ - 4 * abs(b - a) * t / tf * (0.5 * t / tf - tmin) + a, - (4 * abs(b - a) * t / tf * (0.5 * t / tf - tmin) + a) * - (4 * abs(b - a) * (t / tf - tmin)), - 4 * abs(b - a) * (t / tf - tmin), + 4 * abs(b - a) * (t - t0) / (tf - t0) * (0.5 * (t - t0) / (tf - t0) - tmin) + a, + (4 * abs(b - a) * (t - t0) / (tf - t0) * (0.5 * (t - t0) / (tf - t0) - tmin) + a) * + (4 * abs(b - a) * ((t - t0) / (tf - t0) - tmin)), + 4 * abs(b - a) * ((t - t0) / (tf - t0) - tmin), ] - uinit = t -> 4 * abs(b - a) * (t / tf - tmin) + uinit = t -> 4 * abs(b - a) * ((t - t0) / (tf - t0) - tmin) init = (state=xinit, control=uinit) # discretise the optimal control problem diff --git a/ext/OptimalControlModels/dielectrophoretic_particle.jl b/ext/OptimalControlModels/dielectrophoretic_particle.jl index e3dbfa75..28899425 100644 --- a/ext/OptimalControlModels/dielectrophoretic_particle.jl +++ b/ext/OptimalControlModels/dielectrophoretic_particle.jl @@ -32,30 +32,29 @@ function OptimalControlProblems.dielectrophoretic_particle( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:dielectrophoretic_particle), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - x0 = 1 - xf = 2 - α = -0.75 - c = 1 + params = parameters_data(:dielectrophoretic_particle, parameters) + t0 = params[:t0] + x0 = params[:x0] + xf = params[:xf] + α = params[:α] + c = params[:c] ocp = @def begin tf ∈ R, variable - t ∈ [0, tf], time + t ∈ [t0, tf], time q = (x, y) ∈ R², state u ∈ R, control - - x(0) == x0, (x0_con) - y(0) == 0, (y0_con) - x(tf) == xf, (xf_con) - - tf ≥ 0, (tf_con) - -1 ≤ u(t) ≤ 1, (u_con) - + x(t0) == x0, (x_i) + y(t0) == 0, (y_i) + x(tf) == xf, (x_f) + tf ≥ 0, (tf_c) + -1 ≤ u(t) ≤ 1, (u_c) q̇(t) == dynamics(y(t), u(t)) - tf → min end diff --git a/ext/OptimalControlModels/double_oscillator.jl b/ext/OptimalControlModels/double_oscillator.jl index 36139e70..1862effd 100644 --- a/ext/OptimalControlModels/double_oscillator.jl +++ b/ext/OptimalControlModels/double_oscillator.jl @@ -32,30 +32,29 @@ function OptimalControlProblems.double_oscillator( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:double_oscillator), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - m1 = 100 # [kg] - m2 = 2 # [kg] - c = 0.5 # [Ns/m] - k1 = 100 # [N/m] - k2 = 3 # [N/m] - tf = final_time_data(:double_oscillator) + params = parameters_data(:double_oscillator, parameters) + t0 = params[:t0] + tf = params[:tf] + m1 = params[:m1] + m2 = params[:m2] + c = params[:c] + k1 = params[:k1] + k2 = params[:k2] # model ocp = @def begin - t ∈ [0, tf], time + t ∈ [t0, tf], time x ∈ R⁴, state u ∈ R, control - - -1 ≤ u(t) ≤ 1, (u_con) - - x₁(0) == 0, (x1_con) - x₂(0) == 0, (x2_con) - + -1 ≤ u(t) ≤ 1, (u_c) + x₁(t0) == 0, (x1_i) + x₂(t0) == 0, (x2_i) ẋ(t) == dynamics(x(t), u(t), F(t)) - 0.5 * ∫(x₁(t)^2 + x₂(t)^2 + u(t)^2) → min end diff --git a/ext/OptimalControlModels/ducted_fan.jl b/ext/OptimalControlModels/ducted_fan.jl index ba077e2e..c91198af 100644 --- a/ext/OptimalControlModels/ducted_fan.jl +++ b/ext/OptimalControlModels/ducted_fan.jl @@ -32,39 +32,42 @@ function OptimalControlProblems.ducted_fan( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:ducted_fan), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - r = 0.2 # [m] - J = 0.05 # [kg.m2] - m = 2.2 # [kg] - mg = 4 # [N] - μ = 1000 + params = parameters_data(:ducted_fan, parameters) + t0 = params[:t0] + r = params[:r] + J = params[:J] + m = params[:m] + mg = params[:mg] + μ = params[:μ] ocp = @def begin tf ∈ R, variable - t ∈ [0, tf], time + t ∈ [t0, tf], time x = (x₁, v₁, x₂, v₂, α, vα) ∈ R⁶, state u ∈ R², control # tf constraints - tf ≥ 0.1, (tf_con) + tf ≥ 0.1, (tf_c) # state constraints - -deg2rad(30) ≤ α(t) ≤ deg2rad(30), (α_con) + -deg2rad(30) ≤ α(t) ≤ deg2rad(30), (α_c) # control constraints - -5 ≤ u₁(t) ≤ 5, (u₁_con) - 0 ≤ u₂(t) ≤ 17, (u₂_con) + -5 ≤ u₁(t) ≤ 5, (u₁_c) + 0 ≤ u₂(t) ≤ 17, (u₂_c) # initial constraints - x₁(0) == 0, (x₁_i) - v₁(0) == 0, (v₁_i) - x₂(0) == 0, (x₂_i) - v₂(0) == 0, (v₂_i) - α(0) == 0, (α_i) - vα(0) == 0, (vα_i) + x₁(t0) == 0, (x₁_i) + v₁(t0) == 0, (v₁_i) + x₂(t0) == 0, (x₂_i) + v₂(t0) == 0, (v₂_i) + α(t0) == 0, (α_i) + vα(t0) == 0, (vα_i) # final constraints x₁(tf) == 1, (x₁_f) diff --git a/ext/OptimalControlModels/electric_vehicle.jl b/ext/OptimalControlModels/electric_vehicle.jl index 6c0f42c0..b30c2056 100644 --- a/ext/OptimalControlModels/electric_vehicle.jl +++ b/ext/OptimalControlModels/electric_vehicle.jl @@ -32,27 +32,33 @@ function OptimalControlProblems.electric_vehicle( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:electric_vehicle), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - tf = final_time_data(:electric_vehicle) - D = 10 - b1 = 1e0 - b2 = 1e0 - h0 = 0.1 - h1 = 1 - h2 = 1e-3 - α0, α1, α2, α3 = (3, 0.4, -1, 0.1) + params = parameters_data(:electric_vehicle, parameters) + t0 = params[:t0] + tf = params[:tf] + D = params[:D] + b1 = params[:b1] + b2 = params[:b2] + h0 = params[:h0] + h1 = params[:h1] + h2 = params[:h2] + α0 = params[:α0] + α1 = params[:α1] + α2 = params[:α2] + α3 = params[:α3] # model ocp = @def begin - t ∈ [0, tf], time + t ∈ [t0, tf], time y = (x, v) ∈ R², state u ∈ R, control - x(0) == 0, (x_i) - v(0) == 0, (v_i) + x(t0) == 0, (x_i) + v(t0) == 0, (v_i) x(tf) == D, (x_f) v(tf) == 0, (v_f) diff --git a/ext/OptimalControlModels/glider.jl b/ext/OptimalControlModels/glider.jl index 208d41fc..d33f67bd 100644 --- a/ext/OptimalControlModels/glider.jl +++ b/ext/OptimalControlModels/glider.jl @@ -32,53 +32,56 @@ function OptimalControlProblems.glider( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:glider), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - x_0 = 0 - y_0 = 1000 - y_f = 900 - vx_0 = 13.23 - vx_f = 13.23 - vy_0 = -1.288 - vy_f = -1.288 - u_c = 2.5 - r_0 = 100 - m = 100 - g = 9.81 - c0 = 0.034 - c1 = 0.069662 - S = 14 - ρ = 1.13 - cL_min = 0 - cL_max = 1.4 + params = parameters_data(:glider, parameters) + t0 = params[:t0] + x_0 = params[:x_0] + y_0 = params[:y_0] + y_f = params[:y_f] + vx_0 = params[:vx_0] + vx_f = params[:vx_f] + vy_0 = params[:vy_0] + vy_f = params[:vy_f] + u_c = params[:u_c] + r_0 = params[:r_0] + m = params[:m] + g = params[:g] + c0 = params[:c0] + c1 = params[:c1] + S = params[:S] + ρ = params[:ρ] + cL_min = params[:cL_min] + cL_max = params[:cL_max] # model ocp = @def begin tf ∈ R, variable - t ∈ [0, tf], time + t ∈ [t0, tf], time z = (x, y, vx, vy) ∈ R⁴, state cL ∈ R, control # state constraints - x(t) ≥ 0, (x_con) - vx(t) ≥ 0, (vx_con) + x(t) ≥ 0, (x_c) + vx(t) ≥ 0, (vx_c) # control constraints - cL_min ≤ cL(t) ≤ cL_max, (cL_con) + cL_min ≤ cL(t) ≤ cL_max, (cL_c) # initial conditions - x(0) == x_0, (x0_con) - y(0) == y_0, (y0_con) - vx(0) == vx_0, (vx0_con) - vy(0) == vy_0, (vy0_con) + x(t0) == x_0, (x0_i) + y(t0) == y_0, (y0_i) + vx(t0) == vx_0, (vx0_i) + vy(t0) == vy_0, (vy0_i) # final conditions tf ≥ 0 - y(tf) == y_f, (yf_con) - vx(tf) == vx_f, (vxf_con) - vy(tf) == vy_f, (vyf_con) + y(tf) == y_f, (yf_f) + vx(tf) == vx_f, (vxf_f) + vy(tf) == vy_f, (vyf_f) # dynamics ż(t) == dynamics(x(t), vx(t), vy(t), cL(t)) diff --git a/ext/OptimalControlModels/insurance.jl b/ext/OptimalControlModels/insurance.jl index 92e0dc0e..42db8520 100644 --- a/ext/OptimalControlModels/insurance.jl +++ b/ext/OptimalControlModels/insurance.jl @@ -31,19 +31,22 @@ function OptimalControlProblems.insurance( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:insurance), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - tf = final_time_data(:insurance) - γ = 0.2 - λ = 0.25 - h0 = 1.5 - w = 1 - s = 10 - k = 0 - σ = 0 - α = 4 + params = parameters_data(:insurance, parameters) + t0 = params[:t0] + tf = params[:tf] + γ = params[:γ] + λ = params[:λ] + h0 = params[:h0] + w = params[:w] + s = params[:s] + k = params[:k] + σ = params[:σ] + α = params[:α] # I: Insurance # m: Expense @@ -54,7 +57,7 @@ function OptimalControlProblems.insurance( # Model ocp = @def begin P ∈ R, variable - t ∈ [0, tf], time + t ∈ [t0, tf], time x = (I, m, x₃) ∈ R³, state u = (h, R, H, U, dUdR) ∈ R⁵, control @@ -68,7 +71,7 @@ function OptimalControlProblems.insurance( 0.001 ≤ dUdR(t) ≤ Inf 0 ≤ P ≤ Inf - x(0) == [0, 0.001, 0] + x(t0) == [0, 0.001, 0] P - x₃(tf) == 0 ε = k * t / (tf - t + 1) diff --git a/ext/OptimalControlModels/jackson.jl b/ext/OptimalControlModels/jackson.jl index 9af363c2..29308305 100644 --- a/ext/OptimalControlModels/jackson.jl +++ b/ext/OptimalControlModels/jackson.jl @@ -31,25 +31,28 @@ function OptimalControlProblems.jackson( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:jackson), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - tf = final_time_data(:jackson) - k1 = 1 - k2 = 10 - k3 = 1 + params = parameters_data(:jackson, parameters) + t0 = params[:t0] + tf = params[:tf] + k1 = params[:k1] + k2 = params[:k2] + k3 = params[:k3] # model ocp = @def begin - t ∈ [0, tf], time + t ∈ [t0, tf], time x ∈ R³, state u ∈ R, control a = x[1] b = x[2] - x(0) == [1, 0, 0] + x(t0) == [1, 0, 0] [0, 0, 0] ≤ x(t) ≤ [1.1, 1.1, 1.1] 0 ≤ u(t) ≤ 1 diff --git a/ext/OptimalControlModels/moonlander.jl b/ext/OptimalControlModels/moonlander.jl index 18e0f601..87da9bcf 100644 --- a/ext/OptimalControlModels/moonlander.jl +++ b/ext/OptimalControlModels/moonlander.jl @@ -27,23 +27,26 @@ function OptimalControlProblems.moonlander( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:moonlander), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - target=[5.0, 5.0] - m = 1 - g = 9.81 - I = 0.1 - D = 1 - max_thrust = 2g + params = parameters_data(:moonlander, parameters) + t0 = params[:t0] + target = params[:target] + m = params[:m] + g = params[:g] + I = params[:I] + D = params[:D] + max_thrust = params[:max_thrust] # define the problem ocp = @def begin # state, control and final time variables, and time tf ∈ R, variable - t ∈ [0, tf], time + t ∈ [t0, tf], time x = (p1, p2, dp1, dp2, θ, dθ) ∈ R⁶, state u = (F1, F2) ∈ R², control @@ -51,22 +54,22 @@ function OptimalControlProblems.moonlander( 0.1 ≤ tf ≤ 1.0 # control constraints - 0 ≤ F1(t) ≤ max_thrust, (F1_con) - 0 ≤ F2(t) ≤ max_thrust, (F2_con) + 0 ≤ F1(t) ≤ max_thrust, (F1_c) + 0 ≤ F2(t) ≤ max_thrust, (F2_c) # initial conditions - p1(0) == 0, (p1_ic) - p2(0) == 0, (p2_ic) - dp1(0) == 0, (dp1_ic) - dp2(0) == 0, (dp2_ic) - θ(0) == 0, (θ_ic) - dθ(0) == 0, (dθ_ic) + p1(t0) == 0, (p1_i) + p2(t0) == 0, (p2_i) + dp1(t0) == 0, (dp1_i) + dp2(t0) == 0, (dp2_i) + θ(t0) == 0, (θ_i) + dθ(t0) == 0, (dθ_i) # final conditions - p1(tf) == target[1], (p1_fc) - p2(tf) == target[2], (p2_fc) - dp1(tf) == 0, (dp1_fc) - dp2(tf) == 0, (dp2_fc) + p1(tf) == target[1], (p1_f) + p2(tf) == target[2], (p2_f) + dp1(tf) == 0, (dp1_f) + dp2(tf) == 0, (dp2_f) # dynamics ẋ(t) == dynamics(x(t), u(t)) diff --git a/ext/OptimalControlModels/robbins.jl b/ext/OptimalControlModels/robbins.jl index 525307a2..6f8529dd 100644 --- a/ext/OptimalControlModels/robbins.jl +++ b/ext/OptimalControlModels/robbins.jl @@ -28,24 +28,27 @@ function OptimalControlProblems.robbins( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:robbins), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - tf = final_time_data(:robbins) - α = 3 - β = 0 - γ = 0.5 + params = parameters_data(:robbins, parameters) + t0 = params[:t0] + tf = params[:tf] + α = params[:α] + β = params[:β] + γ = params[:γ] # model ocp = @def begin - t ∈ [0, tf], time + t ∈ [t0, tf], time x ∈ R³, state u ∈ R, control 0 ≤ x[1](t) ≤ Inf - x(0) == [1, -2, 0] + x(t0) == [1, -2, 0] x(tf) == [0, 0, 0] ẋ(t) == [x[2](t), x[3](t), u(t)] diff --git a/ext/OptimalControlModels/robot.jl b/ext/OptimalControlModels/robot.jl index 0680c283..9c8c3bdb 100644 --- a/ext/OptimalControlModels/robot.jl +++ b/ext/OptimalControlModels/robot.jl @@ -27,57 +27,60 @@ function OptimalControlProblems.robot( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:robot), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters + params = parameters_data(:robot, parameters) + t0 = params[:t0] # total length of arm - L = 5 + L = params[:L] # Upper bounds on the controls - max_uρ = 1 - max_uθ = 1 - max_uϕ = 1 + max_uρ = params[:max_uρ] + max_uθ = params[:max_uθ] + max_uϕ = params[:max_uϕ] # Initial positions of the length and the angles for the robot arm - ρ0 = 4.5 - ϕ0 = π/4 - θf = 2π/3 + ρ0 = params[:ρ0] + ϕ0 = params[:ϕ0] + θf = params[:θf] ocp = @def begin tf ∈ R, variable - t ∈ [0, tf], time + t ∈ [t0, tf], time x = (ρ, dρ, θ, dθ, ϕ, dϕ) ∈ R⁶, state u = (uρ, uθ, uϕ) ∈ R³, control tf ≥ 0.1 # state constraints - 0 ≤ ρ(t) ≤ L, (ρ_con) - -π ≤ θ(t) ≤ π, (θ_con) - 0 ≤ ϕ(t) ≤ π, (ϕ_con) + 0 ≤ ρ(t) ≤ L, (ρ_c) + -π ≤ θ(t) ≤ π, (θ_c) + 0 ≤ ϕ(t) ≤ π, (ϕ_c) # control constraints - -max_uρ ≤ uρ(t) ≤ max_uρ, (u_ρ_con) - -max_uθ ≤ uθ(t) ≤ max_uθ, (u_θ_con) - -max_uϕ ≤ uϕ(t) ≤ max_uϕ, (u_ϕ_con) + -max_uρ ≤ uρ(t) ≤ max_uρ, (u_ρ_c) + -max_uθ ≤ uθ(t) ≤ max_uθ, (u_θ_c) + -max_uϕ ≤ uϕ(t) ≤ max_uϕ, (u_ϕ_c) # initial conditions - ρ(0) == ρ0, (ρ0_con) - ϕ(0) == ϕ0, (ϕ0_con) - θ(0) == 0, (θ0_con) - dθ(0) == 0, (dθ0_con) - dϕ(0) == 0, (dϕ0_con) - dρ(0) == 0, (dρ0_con) + ρ(t0) == ρ0, (ρ_i) + ϕ(t0) == ϕ0, (ϕ_i) + θ(t0) == 0, (θ_i) + dθ(t0) == 0, (dθ_i) + dϕ(t0) == 0, (dϕ_i) + dρ(t0) == 0, (dρ0_i) # final conditions - ρ(tf) == ρ0, (ρf_con) - θ(tf) == θf, (θf_con) - ϕ(tf) == ϕ0, (ϕf_con) - dθ(tf) == 0, (dθf_con) - dϕ(tf) == 0, (dϕf_con) - dρ(tf) == 0, (dρf_con) + ρ(tf) == ρ0, (ρ_f) + θ(tf) == θf, (θ_f) + ϕ(tf) == ϕ0, (ϕ_f) + dθ(tf) == 0, (dθ_f) + dϕ(tf) == 0, (dϕ_f) + dρ(tf) == 0, (dρ_f) # aliases I_θ = ((L - ρ(t))^3 + ρ(t)^3) * sin(ϕ(t))^2 @@ -92,7 +95,7 @@ function OptimalControlProblems.robot( # initial guess tf = 1 - xinit = t -> [ρ0, 0, 2π/3 * (t/tf)^2, 4π/3 * (t/tf), ϕ0, 0] + xinit = t -> [ρ0, 0, 2π/3 * ((t - t0) / (tf - t0))^2, 4π/3 * ((t - t0) / (tf - t0)), ϕ0, 0] uinit = [0, 0, 0] init = (state=xinit, control=uinit, variable=tf) diff --git a/ext/OptimalControlModels/rocket.jl b/ext/OptimalControlModels/rocket.jl index d19f8b58..5343caec 100644 --- a/ext/OptimalControlModels/rocket.jl +++ b/ext/OptimalControlModels/rocket.jl @@ -27,18 +27,23 @@ function OptimalControlProblems.rocket( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:rocket), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - h0 = 1 - v0 = 0 - m0 = 1 - g0 = 1 - Tc = 3.5 - hc = 500 - vc = 620 - mc = 0.6 + params = parameters_data(:rocket, parameters) + t0 = params[:t0] + h0 = params[:h0] + v0 = params[:v0] + m0 = params[:m0] + g0 = params[:g0] + Tc = params[:Tc] + hc = params[:hc] + vc = params[:vc] + mc = params[:mc] + + # c = 0.5 * sqrt(g0 * h0) mf = mc * m0 Dc = 0.5 * vc * (m0 / g0) @@ -47,28 +52,28 @@ function OptimalControlProblems.rocket( # Model ocp = @def begin tf ∈ R, variable - t ∈ [0, tf], time + t ∈ [t0, tf], time x = (h, v, m) ∈ R³, state T ∈ R, control # state constraints - h(t) ≥ h0, (x1_con) - v(t) ≥ v0, (x2_con) - mf ≤ m(t) ≤ m0, (x3_con) + h(t) ≥ h0, (x1_c) + v(t) ≥ v0, (x2_c) + mf ≤ m(t) ≤ m0, (x3_c) # control constraints - 0 ≤ T(t) ≤ Tmax, (Tcon) + 0 ≤ T(t) ≤ Tmax, (T_c) # time constraints - tf ≥ 0, (tf_con) + tf ≥ 0, (tf_c) # initial conditions - h(0) == h0, (x1_ic) - v(0) == v0, (x2_ic) - m(0) == m0, (x3_ic) + h(t0) == h0, (x1_i) + v(t0) == v0, (x2_i) + m(t0) == m0, (x3_i) # final conditions - m(tf) == mf, (x3_fc) + m(tf) == mf, (x3_f) # dynamics ẋ(t) == dynamics(h(t), v(t), m(t), T(t)) diff --git a/ext/OptimalControlModels/space_shuttle.jl b/ext/OptimalControlModels/space_shuttle.jl index 2573e733..c4909d4b 100644 --- a/ext/OptimalControlModels/space_shuttle.jl +++ b/ext/OptimalControlModels/space_shuttle.jl @@ -28,46 +28,52 @@ function OptimalControlProblems.space_shuttle( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:space_shuttle), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) - ## Global variables - w = 203000.0 # weight (lb) - g₀ = 32.174 # acceleration (ft/sec^2) - m = w / g₀ # mass (slug) + # Parameters + params = parameters_data(:space_shuttle, parameters) + t0 = params[:t0] + + ## + w = params[:w] + g₀ = params[:g₀] + m = w / g₀ # mass (slug) ## Aerodynamic and atmospheric forces on the vehicle - ρ₀ = 0.002378 - hᵣ = 23800 - Rₑ = 20902900 - μ = 0.14076539e17 - S = 2690 - a₀ = -0.20704 - a₁ = 0.029244 - b₀ = 0.07854 - b₁ = -0.61592e-2 - b₂ = 0.621408e-3 - - # - Δt_min = 3.5 - Δt_max = 4.5 - tf_min = 500*Δt_min - tf_max = 500*Δt_max + ρ₀ = params[:ρ₀] + hᵣ = params[:hᵣ] + Rₑ = params[:Rₑ] + μ = params[:μ] + S = params[:S] + a₀ = params[:a₀] + a₁ = params[:a₁] + b₀ = params[:b₀] + b₁ = params[:b₁] + b₂ = params[:b₂] + + ## + Δt_min = params[:Δt_min] + Δt_max = params[:Δt_max] + tf_min = N*Δt_min + tf_max = N*Δt_max ## Initial conditions - h_s = 2.6 # altitude (ft) / 1e5 - ϕ_s = deg2rad(0) # longitude (rad) - θ_s = deg2rad(0) # latitude (rad) - v_s = 2.56 # velocity (ft/sec) / 1e4 - γ_s = deg2rad(-1) # flight path angle (rad) - ψ_s = deg2rad(90) # azimuth (rad) - α_s = deg2rad(0) # angle of attack (rad) - β_s = deg2rad(0) # bank angle (rad) + h_s = params[:h_s] + ϕ_s = params[:ϕ_s] + θ_s = params[:θ_s] + v_s = params[:v_s] + γ_s = params[:γ_s] + ψ_s = params[:ψ_s] + α_s = params[:α_s] + β_s = params[:β_s] + t_s = params[:t_s] ## Final conditions, the so-called Terminal Area Energy Management (TAEM) - h_t = 0.8 # altitude (ft) / 1e5 - v_t = 0.25 # velocity (ft/sec) / 1e4 - γ_t = deg2rad(-5) # flight path angle (rad) + h_t = params[:h_t] + v_t = params[:v_t] + γ_t = params[:γ_t] ## Scalings scaling_h = 1e5 @@ -75,52 +81,51 @@ function OptimalControlProblems.space_shuttle( # model ocp = @def begin - - ## define the problem + # define the problem tf ∈ R, variable - t ∈ [0, tf], time + t ∈ [t0, tf], time x = (scaled_h, ϕ, θ, scaled_v, γ, ψ) ∈ R⁶, state u = (α, β) ∈ R², control - ## constraints - # to help convergence and avoid domain value error + # constraints + ## to help convergence and avoid domain value error -2π ≤ ϕ(t) ≤ 2π -2π ≤ ψ(t) ≤ 2π - # final time constraints + ## final time constraints tf_min ≤ tf ≤ tf_max - # state constraints - 0 ≤ scaled_h(t) ≤ Inf, (scaled_h_con) - deg2rad(-89) ≤ θ(t) ≤ deg2rad(89), (θ_con) - 0 ≤ scaled_v(t) ≤ Inf, (scaled_v_con) - deg2rad(-89) ≤ γ(t) ≤ deg2rad(89), (γ_con) - - # control constraints - deg2rad(-90) ≤ α(t) ≤ deg2rad(90), (α_con) - deg2rad(-89) ≤ β(t) ≤ deg2rad(1), (β_con) - - # initial conditions - scaled_h(0) == h_s, (scaled_h0_con) - ϕ(0) == ϕ_s, (ϕ0_con) - θ(0) == θ_s, (θ0_con) - scaled_v(0) == v_s, (scaled_v0_con) - γ(0) == γ_s, (γ0_con) - ψ(0) == ψ_s, (ψ0_con) - - # final conditions - scaled_h(tf) == h_t, (scaled_hf_con) - scaled_v(tf) == v_t, (scaled_vf_con) - γ(tf) == γ_t, (γf_con) - - ## dynamics + ## state constraints + 0 ≤ scaled_h(t) ≤ Inf, (scaled_h_c) + deg2rad(-89) ≤ θ(t) ≤ deg2rad(89), (θ_c) + 0 ≤ scaled_v(t) ≤ Inf, (scaled_v_c) + deg2rad(-89) ≤ γ(t) ≤ deg2rad(89), (γ_c) + + ## control constraints + deg2rad(-90) ≤ α(t) ≤ deg2rad(90), (α_c) + deg2rad(-89) ≤ β(t) ≤ deg2rad(1), (β_c) + + ## initial conditions + scaled_h(t0) == h_s, (scaled_h_i) + ϕ(t0) == ϕ_s, (ϕ_i) + θ(t0) == θ_s, (θ_i) + scaled_v(t0) == v_s, (scaled_v_i) + γ(t0) == γ_s, (γ_i) + ψ(t0) == ψ_s, (ψ_i) + + ## final conditions + scaled_h(tf) == h_t, (scaled_h_f) + scaled_v(tf) == v_t, (scaled_v_f) + γ(tf) == γ_t, (γ_f) + + # dynamics ẋ(t) == dynamics(x(t), u(t)) - ## objective + # objective -θ(tf) → min end - ## dynamics + # dynamics function dynamics(x, u) scaled_h, ϕ, θ, scaled_v, γ, ψ = x α, β = u diff --git a/ext/OptimalControlModels/steering.jl b/ext/OptimalControlModels/steering.jl index bf320730..c4cc51be 100644 --- a/ext/OptimalControlModels/steering.jl +++ b/ext/OptimalControlModels/steering.jl @@ -27,27 +27,30 @@ function OptimalControlProblems.steering( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:steering), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - a = 100 - u_min = -π/2 - u_max = π/2 - xs = zeros(4) - xf = [5, 45, 0] + params = parameters_data(:steering, parameters) + t0 = params[:t0] + a = params[:a] + u_min = params[:u_min] + u_max = params[:u_max] + xs = params[:xs] + xf = params[:xf] # Model ocp = @def begin tf ∈ R, variable - t ∈ [0.0, tf], time + t ∈ [t0, tf], time x ∈ R⁴, state u ∈ R¹, control - tf ≥ 0, (tf_con) - x(0) == xs, (x_ic) - x[2:4](tf) == xf, (x_fc) - u_min ≤ u(t) ≤ u_max, (u_con) + tf ≥ 0, (tf_c) + x(t0) == xs, (x_i) + x[2:4](tf) == xf, (x_f) + u_min ≤ u(t) ≤ u_max, (u_c) ẋ(t) == dynamics(x(t), u(t)) diff --git a/ext/OptimalControlModels/vanderpol.jl b/ext/OptimalControlModels/vanderpol.jl index 6cb15e82..d0c19d22 100644 --- a/ext/OptimalControlModels/vanderpol.jl +++ b/ext/OptimalControlModels/vanderpol.jl @@ -27,24 +27,27 @@ function OptimalControlProblems.vanderpol( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:vanderpol), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - tf = final_time_data(:vanderpol) - ω = 1 - ε = 1 + params = parameters_data(:vanderpol, parameters) + t0 = params[:t0] + tf = params[:tf] + ω = params[:ω] + ε = params[:ε] # model ocp = @def begin - t ∈ [0, tf], time + t ∈ [t0, tf], time x ∈ R², state u ∈ R, control - x(0) == [1, 0] + x(t0) == [1, 0] ẋ(t) == [x[2](t), ε * ω * (1 - x[1](t)^2) * x[2](t) - ω^2 * x[1](t) + u(t)] - + 0.5∫(x[1](t)^2 + x[2](t)^2 + u(t)^2) → min end diff --git a/ext/OptimalControlModels_s/beam_s.jl b/ext/OptimalControlModels_s/beam_s.jl index 57aa3b80..47259b0d 100644 --- a/ext/OptimalControlModels_s/beam_s.jl +++ b/ext/OptimalControlModels_s/beam_s.jl @@ -31,22 +31,29 @@ function OptimalControlProblems.beam_s( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:beam), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) - # - tf = final_time_data(:beam) + # parameters + params = parameters_data(:beam, parameters) + t0 = params[:t0] + tf = params[:tf] + x_t0 = params[:x_t0] + x_tf = params[:x_tf] + x₁_l = params[:x₁_l] + x₁_u = params[:x₁_u] # model ocp = @def begin - t ∈ [0, tf], time + t ∈ [t0, tf], time x ∈ R², state u ∈ R, control - x(0) == [0, 1] - x(tf) == [0, -1] + x(t0) == x_t0 + x(tf) == x_tf ∂(x₁)(t) == x₂(t) ∂(x₂)(t) == u(t) - 0 ≤ x₁(t) ≤ 0.1 + x₁_l ≤ x₁(t) ≤ x₁_u ∫(u(t)^2) → min end diff --git a/ext/OptimalControlModels_s/chain_s.jl b/ext/OptimalControlModels_s/chain_s.jl index 65efb8b3..be932da0 100644 --- a/ext/OptimalControlModels_s/chain_s.jl +++ b/ext/OptimalControlModels_s/chain_s.jl @@ -32,31 +32,32 @@ function OptimalControlProblems.chain_s( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:chain), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - L = 4 - a = 1 - b = 3 - tf = final_time_data(:chain) + params = parameters_data(:chain, parameters) + t0 = params[:t0] + tf = params[:tf] + L = params[:L] + a = params[:a] + b = params[:b] # model ocp = @def begin - - # - t ∈ [0, tf], time + t ∈ [t0, tf], time x ∈ R³, state u ∈ R, control # initial conditions - x₁(0) == a, (x1_ic) - x₂(0) == 0, (x2_ic) - x₃(0) == 0, (x3_ic) + x₁(t0) == a, (x1_i) + x₂(t0) == 0, (x2_i) + x₃(t0) == 0, (x3_i) # final conditions - x₁(tf) == b, (x1_con) - x₃(tf) == L, (x3_con) + x₁(tf) == b, (x1_f) + x₃(tf) == L, (x3_f) # dynamics ∂(x₁)(t) == u(t) @@ -71,10 +72,10 @@ function OptimalControlProblems.chain_s( tmin = b > a ? 1 / 4 : 3 / 4 xinit = t -> [ - 4 * abs(b - a) * t / tf * (0.5 * t / tf - tmin) + a, - (4 * abs(b - a) * t / tf * (0.5 * t / tf - tmin) + a) * - (4 * abs(b - a) * (t / tf - tmin)), - 4 * abs(b - a) * (t / tf - tmin), + 4 * abs(b - a) * (t - t0) / (tf - t0) * (0.5 * (t - t0) / (tf - t0) - tmin) + a, + (4 * abs(b - a) * (t - t0) / (tf - t0) * (0.5 * (t - t0) / (tf - t0) - tmin) + a) * + (4 * abs(b - a) * ((t - t0) / (tf - t0) - tmin)), + 4 * abs(b - a) * ((t - t0) / (tf - t0) - tmin), ] uinit = t -> 4 * abs(b - a) * (t / tf - tmin) init = (state=xinit, control=uinit) diff --git a/ext/OptimalControlModels_s/dielectrophoretic_particle_s.jl b/ext/OptimalControlModels_s/dielectrophoretic_particle_s.jl index 768f0cae..2dd517df 100644 --- a/ext/OptimalControlModels_s/dielectrophoretic_particle_s.jl +++ b/ext/OptimalControlModels_s/dielectrophoretic_particle_s.jl @@ -32,35 +32,33 @@ function OptimalControlProblems.dielectrophoretic_particle_s( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:dielectrophoretic_particle), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - x0 = 1 - xf = 2 - α = -0.75 - c = 1 + params = parameters_data(:dielectrophoretic_particle, parameters) + t0 = params[:t0] + x0 = params[:x0] + xf = params[:xf] + α = params[:α] + c = params[:c] ocp = @def begin tf ∈ R, variable - t ∈ [0, tf], time + t ∈ [t0, tf], time q = (x, y) ∈ R², state u ∈ R, control - - x(0) == x0, (x0_con) - y(0) == 0, (y0_con) - x(tf) == xf, (xf_con) - - tf ≥ 0, (tf_con) - -1 ≤ u(t) ≤ 1, (u_con) - + x(t0) == x0, (x_i) + y(t0) == 0, (y_i) + x(tf) == xf, (x_f) + tf ≥ 0, (tf_c) + -1 ≤ u(t) ≤ 1, (u_c) ∂(x)(t) == y(t) * u(t) + α * u(t)^2 ∂(y)(t) == -c * y(t) + u(t) - tf → min end - # initial guess init = (state=[1, 1], control=0.1, variable=5) diff --git a/ext/OptimalControlModels_s/double_oscillator_s.jl b/ext/OptimalControlModels_s/double_oscillator_s.jl index fca76749..c29f7f39 100644 --- a/ext/OptimalControlModels_s/double_oscillator_s.jl +++ b/ext/OptimalControlModels_s/double_oscillator_s.jl @@ -32,38 +32,36 @@ function OptimalControlProblems.double_oscillator_s( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:double_oscillator), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - m1 = 100 # [kg] - m2 = 2 # [kg] - c = 0.5 # [Ns/m] - k1 = 100 # [N/m] - k2 = 3 # [N/m] - tf = final_time_data(:double_oscillator) + params = parameters_data(:double_oscillator, parameters) + t0 = params[:t0] + tf = params[:tf] + m1 = params[:m1] + m2 = params[:m2] + c = params[:c] + k1 = params[:k1] + k2 = params[:k2] # model ocp = @def begin - t ∈ [0, tf], time + t ∈ [t0, tf], time x ∈ R⁴, state u ∈ R, control - - -1 ≤ u(t) ≤ 1, (u_con) - - x₁(0) == 0, (x1_con) - x₂(0) == 0, (x2_con) - + -1 ≤ u(t) ≤ 1, (u_c) + x₁(t0) == 0, (x1_i) + x₂(t0) == 0, (x2_i) F = sin(t * 2π / tf) ∂(x₁)(t) == x₃(t) ∂(x₂)(t) == x₄(t) ∂(x₃)(t) == -(k1 + k2) / m1 * x₁(t) + k2 / m1 * x₂(t) + 1 / m1 * F ∂(x₄)(t) == k2 / m2 * x₁(t) - k2 / m2 * x₂(t) - c * (1 - u(t)) / m2 * x₄(t) - 0.5 * ∫(x₁(t)^2 + x₂(t)^2 + u(t)^2) → min end - # initial guess xinit = [0.1, 0.1, 0.1, 0.1] # [x1, x2, x3, x4] uinit = [0.1] # [u] diff --git a/ext/OptimalControlModels_s/ducted_fan_s.jl b/ext/OptimalControlModels_s/ducted_fan_s.jl index f276d460..a3d79110 100644 --- a/ext/OptimalControlModels_s/ducted_fan_s.jl +++ b/ext/OptimalControlModels_s/ducted_fan_s.jl @@ -9,40 +9,42 @@ function OptimalControlProblems.ducted_fan_s( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:ducted_fan), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - r = 0.2 # [m] - J = 0.05 # [kg.m2] - m = 2.2 # [kg] - mg = 4 # [N] - μ = 1000 + params = parameters_data(:ducted_fan, parameters) + t0 = params[:t0] + r = params[:r] + J = params[:J] + m = params[:m] + mg = params[:mg] + μ = params[:μ] ocp = @def begin - tf ∈ R, variable - t ∈ [0, tf], time + t ∈ [t0, tf], time x = (x₁, v₁, x₂, v₂, α, vα) ∈ R⁶, state u ∈ R², control # tf constraints - tf ≥ 0.1, (tf_con) + tf ≥ 0.1, (tf_c) # state constraints - -deg2rad(30) ≤ α(t) ≤ deg2rad(30), (α_con) + -deg2rad(30) ≤ α(t) ≤ deg2rad(30), (α_c) # control constraints - -5 ≤ u₁(t) ≤ 5, (u₁_con) - 0 ≤ u₂(t) ≤ 17, (u₂_con) + -5 ≤ u₁(t) ≤ 5, (u₁_c) + 0 ≤ u₂(t) ≤ 17, (u₂_c) # initial constraints - x₁(0) == 0, (x₁_i) - v₁(0) == 0, (v₁_i) - x₂(0) == 0, (x₂_i) - v₂(0) == 0, (v₂_i) - α(0) == 0, (α_i) - vα(0) == 0, (vα_i) + x₁(t0) == 0, (x₁_i) + v₁(t0) == 0, (v₁_i) + x₂(t0) == 0, (x₂_i) + v₂(t0) == 0, (v₂_i) + α(t0) == 0, (α_i) + vα(t0) == 0, (vα_i) # final constraints x₁(tf) == 1, (x₁_f) diff --git a/ext/OptimalControlModels_s/electric_vehicle_s.jl b/ext/OptimalControlModels_s/electric_vehicle_s.jl index df39e5d5..8d67735f 100644 --- a/ext/OptimalControlModels_s/electric_vehicle_s.jl +++ b/ext/OptimalControlModels_s/electric_vehicle_s.jl @@ -32,27 +32,33 @@ function OptimalControlProblems.electric_vehicle_s( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:electric_vehicle), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - tf = final_time_data(:electric_vehicle) - D = 10 - b1 = 1e0 - b2 = 1e0 - h0 = 0.1 - h1 = 1 - h2 = 1e-3 - α0, α1, α2, α3 = (3, 0.4, -1, 0.1) + params = parameters_data(:electric_vehicle, parameters) + t0 = params[:t0] + tf = params[:tf] + D = params[:D] + b1 = params[:b1] + b2 = params[:b2] + h0 = params[:h0] + h1 = params[:h1] + h2 = params[:h2] + α0 = params[:α0] + α1 = params[:α1] + α2 = params[:α2] + α3 = params[:α3] # model ocp = @def begin - t ∈ [0, tf], time + t ∈ [t0, tf], time y = (x, v) ∈ R², state u ∈ R, control - x(0) == 0, (x_i) - v(0) == 0, (v_i) + x(t0) == 0, (x_i) + v(t0) == 0, (v_i) x(tf) == D, (x_f) v(tf) == 0, (v_f) @@ -63,7 +69,6 @@ function OptimalControlProblems.electric_vehicle_s( ∫(b1 * u(t) * v(t) + b2 * u(t)^2) → min end - # initial guess yinit = [0.1, 0.1] # [x, v] uinit = [0.1] # [u] diff --git a/ext/OptimalControlModels_s/glider_s.jl b/ext/OptimalControlModels_s/glider_s.jl index c0f0ea99..af38c567 100644 --- a/ext/OptimalControlModels_s/glider_s.jl +++ b/ext/OptimalControlModels_s/glider_s.jl @@ -32,53 +32,56 @@ function OptimalControlProblems.glider_s( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:glider), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - x_0 = 0 - y_0 = 1000 - y_f = 900 - vx_0 = 13.23 - vx_f = 13.23 - vy_0 = -1.288 - vy_f = -1.288 - u_c = 2.5 - r_0 = 100 - m = 100 - g = 9.81 - c0 = 0.034 - c1 = 0.069662 - S = 14 - ρ = 1.13 - cL_min = 0 - cL_max = 1.4 + params = parameters_data(:glider, parameters) + t0 = params[:t0] + x_0 = params[:x_0] + y_0 = params[:y_0] + y_f = params[:y_f] + vx_0 = params[:vx_0] + vx_f = params[:vx_f] + vy_0 = params[:vy_0] + vy_f = params[:vy_f] + u_c = params[:u_c] + r_0 = params[:r_0] + m = params[:m] + g = params[:g] + c0 = params[:c0] + c1 = params[:c1] + S = params[:S] + ρ = params[:ρ] + cL_min = params[:cL_min] + cL_max = params[:cL_max] # model ocp = @def begin tf ∈ R, variable - t ∈ [0, tf], time + t ∈ [t0, tf], time z = (x, y, vx, vy) ∈ R⁴, state cL ∈ R, control # state constraints - x(t) ≥ 0, (x_con) - vx(t) ≥ 0, (vx_con) + x(t) ≥ 0, (x_c) + vx(t) ≥ 0, (vx_c) # control constraints - cL_min ≤ cL(t) ≤ cL_max, (cL_con) + cL_min ≤ cL(t) ≤ cL_max, (cL_c) # initial conditions - x(0) == x_0, (x0_con) - y(0) == y_0, (y0_con) - vx(0) == vx_0, (vx0_con) - vy(0) == vy_0, (vy0_con) + x(t0) == x_0, (x0_i) + y(t0) == y_0, (y0_i) + vx(t0) == vx_0, (vx0_i) + vy(t0) == vy_0, (vy0_i) # final conditions tf ≥ 0 - y(tf) == y_f, (yf_con) - vx(tf) == vx_f, (vxf_con) - vy(tf) == vy_f, (vyf_con) + y(tf) == y_f, (yf_f) + vx(tf) == vx_f, (vxf_f) + vy(tf) == vy_f, (vyf_f) # dynamics r = (x(t) / r_0 - 2.5)^2 diff --git a/ext/OptimalControlModels_s/insurance_s.jl b/ext/OptimalControlModels_s/insurance_s.jl index 4fb63db5..5283f782 100644 --- a/ext/OptimalControlModels_s/insurance_s.jl +++ b/ext/OptimalControlModels_s/insurance_s.jl @@ -31,19 +31,22 @@ function OptimalControlProblems.insurance_s( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:insurance), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - tf = final_time_data(:insurance) - γ = 0.2 - λ = 0.25 - h0 = 1.5 - w = 1 - s = 10 - k = 0 - σ = 0 - α = 4 + params = parameters_data(:insurance, parameters) + t0 = params[:t0] + tf = params[:tf] + γ = params[:γ] + λ = params[:λ] + h0 = params[:h0] + w = params[:w] + s = params[:s] + k = params[:k] + σ = params[:σ] + α = params[:α] # I: Insurance # m: Expense @@ -54,7 +57,7 @@ function OptimalControlProblems.insurance_s( # Model ocp = @def begin P ∈ R, variable - t ∈ [0, tf], time + t ∈ [t0, tf], time x = (I, m, x₃) ∈ R³, state u = (h, R, H, U, dUdR) ∈ R⁵, control @@ -68,7 +71,7 @@ function OptimalControlProblems.insurance_s( 0.001 ≤ dUdR(t) ≤ Inf 0 ≤ P ≤ Inf - x(0) == [0, 0.001, 0] + x(t0) == [0, 0.001, 0] P - x₃(tf) == 0 ε = k * t / (tf - t + 1) diff --git a/ext/OptimalControlModels_s/jackson_s.jl b/ext/OptimalControlModels_s/jackson_s.jl index 4061a4c8..4b2a36bd 100644 --- a/ext/OptimalControlModels_s/jackson_s.jl +++ b/ext/OptimalControlModels_s/jackson_s.jl @@ -31,25 +31,28 @@ function OptimalControlProblems.jackson_s( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:jackson), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - tf = final_time_data(:jackson) - k1 = 1 - k2 = 10 - k3 = 1 + params = parameters_data(:jackson, parameters) + t0 = params[:t0] + tf = params[:tf] + k1 = params[:k1] + k2 = params[:k2] + k3 = params[:k3] # model ocp = @def begin - t ∈ [0, tf], time + t ∈ [t0, tf], time x ∈ R³, state u ∈ R, control a = x[1] b = x[2] - x(0) == [1, 0, 0] + x(t0) == [1, 0, 0] [0, 0, 0] ≤ x(t) ≤ [1.1, 1.1, 1.1] 0 ≤ u(t) ≤ 1 diff --git a/ext/OptimalControlModels_s/robbins_s.jl b/ext/OptimalControlModels_s/robbins_s.jl index f787c58a..de50232c 100644 --- a/ext/OptimalControlModels_s/robbins_s.jl +++ b/ext/OptimalControlModels_s/robbins_s.jl @@ -28,24 +28,27 @@ function OptimalControlProblems.robbins_s( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:robbins), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - tf = final_time_data(:robbins) - α = 3 - β = 0 - γ = 0.5 + params = parameters_data(:robbins, parameters) + t0 = params[:t0] + tf = params[:tf] + α = params[:α] + β = params[:β] + γ = params[:γ] # model ocp = @def begin - t ∈ [0, tf], time + t ∈ [t0, tf], time x ∈ R³, state u ∈ R, control 0 ≤ x[1](t) ≤ Inf - x(0) == [1, -2, 0] + x(t0) == [1, -2, 0] x(tf) == [0, 0, 0] ∂(x₁)(t) == x₂(t) diff --git a/ext/OptimalControlModels_s/robot_s.jl b/ext/OptimalControlModels_s/robot_s.jl index 69ffc608..20d32d5e 100644 --- a/ext/OptimalControlModels_s/robot_s.jl +++ b/ext/OptimalControlModels_s/robot_s.jl @@ -27,57 +27,60 @@ function OptimalControlProblems.robot_s( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:robot), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters + params = parameters_data(:robot, parameters) + t0 = params[:t0] # total length of arm - L = 5 + L = params[:L] # Upper bounds on the controls - max_uρ = 1 - max_uθ = 1 - max_uϕ = 1 + max_uρ = params[:max_uρ] + max_uθ = params[:max_uθ] + max_uϕ = params[:max_uϕ] # Initial positions of the length and the angles for the robot arm - ρ0 = 4.5 - ϕ0 = π/4 - θf = 2π/3 + ρ0 = params[:ρ0] + ϕ0 = params[:ϕ0] + θf = params[:θf] ocp = @def begin tf ∈ R, variable - t ∈ [0, tf], time + t ∈ [t0, tf], time x = (ρ, dρ, θ, dθ, ϕ, dϕ) ∈ R⁶, state u = (uρ, uθ, uϕ) ∈ R³, control tf ≥ 0.1 # state constraints - 0 ≤ ρ(t) ≤ L, (ρ_con) - -π ≤ θ(t) ≤ π, (θ_con) - 0 ≤ ϕ(t) ≤ π, (ϕ_con) + 0 ≤ ρ(t) ≤ L, (ρ_c) + -π ≤ θ(t) ≤ π, (θ_c) + 0 ≤ ϕ(t) ≤ π, (ϕ_c) # control constraints - -max_uρ ≤ uρ(t) ≤ max_uρ, (u_ρ_con) - -max_uθ ≤ uθ(t) ≤ max_uθ, (u_θ_con) - -max_uϕ ≤ uϕ(t) ≤ max_uϕ, (u_ϕ_con) + -max_uρ ≤ uρ(t) ≤ max_uρ, (u_ρ_c) + -max_uθ ≤ uθ(t) ≤ max_uθ, (u_θ_c) + -max_uϕ ≤ uϕ(t) ≤ max_uϕ, (u_ϕ_c) # initial conditions - ρ(0) == ρ0, (ρ0_con) - ϕ(0) == ϕ0, (ϕ0_con) - θ(0) == 0, (θ0_con) - dθ(0) == 0, (dθ0_con) - dϕ(0) == 0, (dϕ0_con) - dρ(0) == 0, (dρ0_con) + ρ(t0) == ρ0, (ρ_i) + ϕ(t0) == ϕ0, (ϕ_i) + θ(t0) == 0, (θ_i) + dθ(t0) == 0, (dθ_i) + dϕ(t0) == 0, (dϕ_i) + dρ(t0) == 0, (dρ0_i) # final conditions - ρ(tf) == ρ0, (ρf_con) - θ(tf) == θf, (θf_con) - ϕ(tf) == ϕ0, (ϕf_con) - dθ(tf) == 0, (dθf_con) - dϕ(tf) == 0, (dϕf_con) - dρ(tf) == 0, (dρf_con) + ρ(tf) == ρ0, (ρ_f) + θ(tf) == θf, (θ_f) + ϕ(tf) == ϕ0, (ϕ_f) + dθ(tf) == 0, (dθ_f) + dϕ(tf) == 0, (dϕ_f) + dρ(tf) == 0, (dρ_f) # aliases I_θ = ((L - ρ(t))^3 + ρ(t)^3) * sin(ϕ(t))^2 @@ -97,7 +100,7 @@ function OptimalControlProblems.robot_s( # initial guess tf = 1 - xinit = t -> [ρ0, 0, 2π/3 * (t/tf)^2, 4π/3 * (t/tf), ϕ0, 0] + xinit = t -> [ρ0, 0, 2π/3 * ((t - t0) / (tf - t0))^2, 4π/3 * ((t - t0) / (tf - t0)), ϕ0, 0] uinit = [0, 0, 0] init = (state=xinit, control=uinit, variable=tf) diff --git a/ext/OptimalControlModels_s/rocket_s.jl b/ext/OptimalControlModels_s/rocket_s.jl index ab78064c..eb5ff898 100644 --- a/ext/OptimalControlModels_s/rocket_s.jl +++ b/ext/OptimalControlModels_s/rocket_s.jl @@ -27,18 +27,23 @@ function OptimalControlProblems.rocket_s( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:rocket), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - h0 = 1 - v0 = 0 - m0 = 1 - g0 = 1 - Tc = 3.5 - hc = 500 - vc = 620 - mc = 0.6 + params = parameters_data(:rocket, parameters) + t0 = params[:t0] + h0 = params[:h0] + v0 = params[:v0] + m0 = params[:m0] + g0 = params[:g0] + Tc = params[:Tc] + hc = params[:hc] + vc = params[:vc] + mc = params[:mc] + + # c = 0.5 * sqrt(g0 * h0) mf = mc * m0 Dc = 0.5 * vc * (m0 / g0) @@ -47,28 +52,28 @@ function OptimalControlProblems.rocket_s( # Model ocp = @def begin tf ∈ R, variable - t ∈ [0, tf], time + t ∈ [t0, tf], time x = (h, v, m) ∈ R³, state T ∈ R, control # state constraints - h(t) ≥ h0, (x1_con) - v(t) ≥ v0, (x2_con) - mf ≤ m(t) ≤ m0, (x3_con) + h(t) ≥ h0, (x1_c) + v(t) ≥ v0, (x2_c) + mf ≤ m(t) ≤ m0, (x3_c) # control constraints - 0 ≤ T(t) ≤ Tmax, (Tcon) + 0 ≤ T(t) ≤ Tmax, (T_c) # time constraints - tf ≥ 0, (tf_con) + tf ≥ 0, (tf_c) # initial conditions - h(0) == h0, (x1_ic) - v(0) == v0, (x2_ic) - m(0) == m0, (x3_ic) + h(t0) == h0, (x1_i) + v(t0) == v0, (x2_i) + m(t0) == m0, (x3_i) # final conditions - m(tf) == mf, (x3_fc) + m(tf) == mf, (x3_f) # dynamics D = (Dc * v(t)^2 * exp(-hc * (h(t) - h0)) / h0) diff --git a/ext/OptimalControlModels_s/space_shuttle_s.jl b/ext/OptimalControlModels_s/space_shuttle_s.jl index bff27441..65f95d28 100644 --- a/ext/OptimalControlModels_s/space_shuttle_s.jl +++ b/ext/OptimalControlModels_s/space_shuttle_s.jl @@ -28,46 +28,52 @@ function OptimalControlProblems.space_shuttle_s( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:space_shuttle), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) - ## Global variables - w = 203000.0 # weight (lb) - g₀ = 32.174 # acceleration (ft/sec^2) - m = w / g₀ # mass (slug) + # Parameters + params = parameters_data(:space_shuttle, parameters) + t0 = params[:t0] + + ## + w = params[:w] + g₀ = params[:g₀] + m = w / g₀ # mass (slug) ## Aerodynamic and atmospheric forces on the vehicle - ρ₀ = 0.002378 - hᵣ = 23800 - Rₑ = 20902900 - μ = 0.14076539e17 - S = 2690 - a₀ = -0.20704 - a₁ = 0.029244 - b₀ = 0.07854 - b₁ = -0.61592e-2 - b₂ = 0.621408e-3 - - # - Δt_min = 3.5 - Δt_max = 4.5 - tf_min = 500*Δt_min - tf_max = 500*Δt_max + ρ₀ = params[:ρ₀] + hᵣ = params[:hᵣ] + Rₑ = params[:Rₑ] + μ = params[:μ] + S = params[:S] + a₀ = params[:a₀] + a₁ = params[:a₁] + b₀ = params[:b₀] + b₁ = params[:b₁] + b₂ = params[:b₂] + + ## + Δt_min = params[:Δt_min] + Δt_max = params[:Δt_max] + tf_min = N*Δt_min + tf_max = N*Δt_max ## Initial conditions - h_s = 2.6 # altitude (ft) / 1e5 - ϕ_s = deg2rad(0) # longitude (rad) - θ_s = deg2rad(0) # latitude (rad) - v_s = 2.56 # velocity (ft/sec) / 1e4 - γ_s = deg2rad(-1) # flight path angle (rad) - ψ_s = deg2rad(90) # azimuth (rad) - α_s = deg2rad(0) # angle of attack (rad) - β_s = deg2rad(0) # bank angle (rad) + h_s = params[:h_s] + ϕ_s = params[:ϕ_s] + θ_s = params[:θ_s] + v_s = params[:v_s] + γ_s = params[:γ_s] + ψ_s = params[:ψ_s] + α_s = params[:α_s] + β_s = params[:β_s] + t_s = params[:t_s] ## Final conditions, the so-called Terminal Area Energy Management (TAEM) - h_t = 0.8 # altitude (ft) / 1e5 - v_t = 0.25 # velocity (ft/sec) / 1e4 - γ_t = deg2rad(-5) # flight path angle (rad) + h_t = params[:h_t] + v_t = params[:v_t] + γ_t = params[:γ_t] ## Scalings scaling_h = 1e5 @@ -75,45 +81,44 @@ function OptimalControlProblems.space_shuttle_s( # model ocp = @def begin - - ## define the problem + # define the problem tf ∈ R, variable - t ∈ [0, tf], time + t ∈ [t0, tf], time x = (scaled_h, ϕ, θ, scaled_v, γ, ψ) ∈ R⁶, state u = (α, β) ∈ R², control - ## constraints - # to help convergence and avoid domain value error + # constraints + ## to help convergence and avoid domain value error -2π ≤ ϕ(t) ≤ 2π -2π ≤ ψ(t) ≤ 2π - # final time constraints + ## final time constraints tf_min ≤ tf ≤ tf_max - # state constraints - 0 ≤ scaled_h(t) ≤ Inf, (scaled_h_con) - deg2rad(-89) ≤ θ(t) ≤ deg2rad(89), (θ_con) - 0 ≤ scaled_v(t) ≤ Inf, (scaled_v_con) - deg2rad(-89) ≤ γ(t) ≤ deg2rad(89), (γ_con) - - # control constraints - deg2rad(-90) ≤ α(t) ≤ deg2rad(90), (α_con) - deg2rad(-89) ≤ β(t) ≤ deg2rad(1), (β_con) - - # initial conditions - scaled_h(0) == h_s, (scaled_h0_con) - ϕ(0) == ϕ_s, (ϕ0_con) - θ(0) == θ_s, (θ0_con) - scaled_v(0) == v_s, (scaled_v0_con) - γ(0) == γ_s, (γ0_con) - ψ(0) == ψ_s, (ψ0_con) - - # final conditions - scaled_h(tf) == h_t, (scaled_hf_con) - scaled_v(tf) == v_t, (scaled_vf_con) - γ(tf) == γ_t, (γf_con) - - ## Helper functions + ## state constraints + 0 ≤ scaled_h(t) ≤ Inf, (scaled_h_c) + deg2rad(-89) ≤ θ(t) ≤ deg2rad(89), (θ_c) + 0 ≤ scaled_v(t) ≤ Inf, (scaled_v_c) + deg2rad(-89) ≤ γ(t) ≤ deg2rad(89), (γ_c) + + ## control constraints + deg2rad(-90) ≤ α(t) ≤ deg2rad(90), (α_c) + deg2rad(-89) ≤ β(t) ≤ deg2rad(1), (β_c) + + ## initial conditions + scaled_h(t0) == h_s, (scaled_h_i) + ϕ(t0) == ϕ_s, (ϕ_i) + θ(t0) == θ_s, (θ_i) + scaled_v(t0) == v_s, (scaled_v_i) + γ(t0) == γ_s, (γ_i) + ψ(t0) == ψ_s, (ψ_i) + + ## final conditions + scaled_h(tf) == h_t, (scaled_h_f) + scaled_v(tf) == v_t, (scaled_v_f) + γ(tf) == γ_t, (γ_f) + + # Helper functions h = scaled_h(t) * scaling_h v = scaled_v(t) * scaling_v r2dα = α(t) * (180 / π) @@ -125,7 +130,7 @@ function OptimalControlProblems.space_shuttle_s( r = Rₑ + h g = μ / (r^2) - ## dynamics + # dynamics ∂(scaled_h)(t) == v * sin(γ(t)) / scaling_h ∂(ϕ)(t) == (v / r) * cos(γ(t)) * sin(ψ(t)) / cos(θ(t)) ∂(θ)(t) == (v / r) * cos(γ(t)) * cos(ψ(t)) @@ -133,11 +138,10 @@ function OptimalControlProblems.space_shuttle_s( ∂(γ)(t) == (L / (m * v)) * cos(β(t)) + cos(γ(t)) * ((v / r) - (g / v)) ∂(ψ)(t) == (1 / (m * v * cos(γ(t)))) * L * sin(β(t)) + (v / (r * cos(θ(t)))) * cos(γ(t)) * sin(ψ(t)) * sin(θ(t)) - ## objective + # objective -θ(tf) → min end - # initial guess: linear interpolation for h, v, gamma (NB. t0 = 0), constant for the rest # variable time step seems to be initialized at 1 in jump # note that ipopt will project the initial guess inside the bounds anyway. diff --git a/ext/OptimalControlModels_s/steering_s.jl b/ext/OptimalControlModels_s/steering_s.jl index a18bc4c9..3fec481a 100644 --- a/ext/OptimalControlModels_s/steering_s.jl +++ b/ext/OptimalControlModels_s/steering_s.jl @@ -27,27 +27,30 @@ function OptimalControlProblems.steering_s( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:steering), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - a = 100 - u_min = -π/2 - u_max = π/2 - xs = zeros(4) - xf = [5, 45, 0] + params = parameters_data(:steering, parameters) + t0 = params[:t0] + a = params[:a] + u_min = params[:u_min] + u_max = params[:u_max] + xs = params[:xs] + xf = params[:xf] # Model ocp = @def begin tf ∈ R, variable - t ∈ [0.0, tf], time + t ∈ [t0, tf], time x ∈ R⁴, state - u ∈ R, control + u ∈ R¹, control - tf ≥ 0, (tf_con) - x(0) == xs, (x_ic) - x[2:4](tf) == xf, (x_fc) - u_min ≤ u(t) ≤ u_max, (u_con) + tf ≥ 0, (tf_c) + x(t0) == xs, (x_i) + x[2:4](tf) == xf, (x_f) + u_min ≤ u(t) ≤ u_max, (u_c) ∂(x₁)(t) == x₃(t) ∂(x₂)(t) == x₄(t) diff --git a/ext/OptimalControlModels_s/vanderpol_s.jl b/ext/OptimalControlModels_s/vanderpol_s.jl index f488ba39..d5a4e6ad 100644 --- a/ext/OptimalControlModels_s/vanderpol_s.jl +++ b/ext/OptimalControlModels_s/vanderpol_s.jl @@ -27,21 +27,24 @@ function OptimalControlProblems.vanderpol_s( ::OptimalControlBackend, description::Symbol...; N::Int=steps_number_data(:vanderpol), + parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) # parameters - tf = final_time_data(:vanderpol) - ω = 1 - ε = 1 + params = parameters_data(:vanderpol, parameters) + t0 = params[:t0] + tf = params[:tf] + ω = params[:ω] + ε = params[:ε] # model ocp = @def begin - t ∈ [0, tf], time + t ∈ [t0, tf], time x ∈ R², state u ∈ R, control - x(0) == [1, 0] + x(t0) == [1, 0] ∂(x₁)(t) == x₂(t) ∂(x₂)(t) == ε * ω * (1 - x₁(t)^2) * x₂(t) - ω^2 * x₁(t) + u(t) diff --git a/src/OptimalControlProblems.jl b/src/OptimalControlProblems.jl index 5b343241..dfacc14a 100644 --- a/src/OptimalControlProblems.jl +++ b/src/OptimalControlProblems.jl @@ -137,25 +137,23 @@ end number_of_problems = length(files) const infos = [ - :name :N - :minimise :state_name :costate_name :control_name :variable_name - :final_time + :time_grid_name + :parameters ] const types = [ - String, Int, - Bool, Vector{String}, Vector{String}, Vector{String}, Union{Vector{String},Nothing}, - Tuple{Symbol,Union{Float64,Int}}, + Dict, + Union{Nothing,NamedTuple}, ] """ @@ -193,11 +191,6 @@ for i in 1:number_of_problems if !(value isa T) error("Type mismatch: Expected $(T) for $(data), but got $(typeof(value))") end - if data == :final_time - if (value[1] != :fixed) && (value[1] != :free) - error("Incorrect value: Expected free or :fixed for $(value[1])") - end - end metadata[file_key][data] = value end end @@ -418,31 +411,6 @@ end """ $(TYPEDSIGNATURES) -Return the fixed final time, from the metadata, associated with a given optimal control problem. - -# Arguments - -- `problem::Symbol`: The name of the problem, used as a key in the global `metadata` dictionary. - -# Returns - -- `Float64`: The fixed final time of the specified problem. - -# Example - -```julia-repl -julia> final_time_data(:beam) -10.0 -``` -""" -function final_time_data(problem::Symbol) - @assert metadata[problem][:final_time][1] == :fixed - return metadata[problem][:final_time][2] -end - -""" -$(TYPEDSIGNATURES) - Return the number of discretisation steps, from the metadata, for a given optimal control problem. # Arguments @@ -464,8 +432,31 @@ function steps_number_data(problem::Symbol) return metadata[problem][:N] end +# +merge(::Nothing, ::Nothing) = nothing +merge(A::NamedTuple, ::Nothing) = A +merge(::Nothing, ::NamedTuple) = throw(CTBase.UnauthorizedCall("There is nothing to merge.")) +function merge(A::NamedTuple, B::NamedTuple) + f(;kwargs...) = kwargs + return NamedTuple(f(; A..., B...)) +end +function parameters_data(problem::Symbol) + return metadata[problem][:parameters] +end +function parameters_data(problem::Symbol, parameters::Union{Nothing, NamedTuple}) + try + return merge(parameters_data(problem), parameters) + catch e + if e isa CTBase.UnauthorizedCall + throw(CTBase.UnauthorizedCall("There is no parameters to merge in problem: $problem.")) + else + rethrow(e) + end + end +end + export JuMPBackend, OptimalControlBackend, problems export time_grid, state, costate, control, variable, iterations, objective -export metadata, final_time_data, steps_number_data +export metadata, steps_number_data, parameters_data end diff --git a/test/figures/init/beam.pdf b/test/figures/init/beam.pdf index bd5a32ec14136d68072c4a73a798bd74c52a462b..c92e059288a0ec95c68af61b302077ac9fdde170 100644 GIT binary patch literal 278752 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 z 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 z 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

goAH^s_c}dG-?US-A4vaPF57 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 literal 282329 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¬T1KgSLW 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 z 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 z�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 Me)SLk{Ewgh8%h!fegFUf diff --git a/test/figures/solution/beam.pdf b/test/figures/solution/beam.pdf index b0fe40c72bc585079a5a075881f905b1ccd87979..1ada510bd7144d13a92461123718ab354df5de3b 100644 GIT binary patch delta 192 zcmX?nOZD&Tbcn$b3)|#&AC)nUH#p-0EnVBZ~y=R delta 154 zcmdmgP2lh~fe8*A29}0EU}Uz@Ly3veWOFu?M5U0qnTd&lfu4zpi6M}(FfuWo%ve`A zU2+zqg0LPI$%S==n^)9$Fk;u(k43n7VO{&eIz}L7+P<)kdFmQY3qvkdRabvEE&y?X BDR}?@ diff --git a/test/runtests.jl b/test/runtests.jl index 0aa8330d..ef289276 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -40,9 +40,9 @@ problems_to_exclude = [ ] list_of_problems = setdiff(list_of_problems, problems_to_exclude) -list_of_problems = [ - :glider, -] +# list_of_problems = [ +# :beam, +# ] # The list of all the problems to test const LIST_OF_PROBLEMS = deepcopy(list_of_problems) @@ -60,9 +60,10 @@ const VERBOSE = true # print or not details during tests # :JuMP, # convergence tests for JuMP models # :OptimalControl, # convergence tests for OptimalControl models # :OptimalControl_s, # convergence tests for OptimalControl models - :init, # comparison between OptimalControl and JuMP: init + # :init, # comparison between OptimalControl and JuMP: init # :solution, # comparison between OptimalControl and JuMP: solution # :quick, # quick comparison: objective rel error only + :parameters, # tests with different parameters values, does no depend on `list_of_problems` ) @testset "$(name)" verbose=VERBOSE begin test_name = Symbol(:test_, name) diff --git a/test/test_OptimalControl_s.jl b/test/test_OptimalControl_s.jl index 6e8ef142..2a9d52a8 100644 --- a/test/test_OptimalControl_s.jl +++ b/test/test_OptimalControl_s.jl @@ -1,13 +1,13 @@ # test_OptimalControl_optimality function test_OptimalControl_s() kwargs_madnlp = Dict( - :print_level => ERROR, + :print_level => MadNLP.ERROR, :tol => TOL, #:mu_strategy => MU_STRATEGY, #:sb => SB, :max_iter => MAX_ITER, :max_wall_time => MAX_WALL_TIME, - linear_solver => MumpsSolver, + :linear_solver => MumpsSolver, ) for f in LIST_OF_PROBLEMS diff --git a/test/test_parameters.jl b/test/test_parameters.jl new file mode 100644 index 00000000..98b3a0a3 --- /dev/null +++ b/test/test_parameters.jl @@ -0,0 +1,70 @@ +function test_parameters() + + @testset "merge (parameters)" verbose=VERBOSE begin + @test OptimalControlProblems.merge(nothing, nothing) === nothing + @test OptimalControlProblems.merge((tf = 1,), nothing ) == (tf = 1,) + @test OptimalControlProblems.merge((tf = 1,), (tf = 2,)) == (tf = 2,) + @test OptimalControlProblems.merge((tf = 1, a = 2), (tf = 2,)) == (tf = 2, a = 2) + @test_throws CTBase.UnauthorizedCall OptimalControlProblems.merge(nothing, (tf = 1,)) + end + + for problem in LIST_OF_PROBLEMS + @testset "$(string(problem)) (parameters)" verbose=VERBOSE begin + t0 = 1000 + tf = 2000 + + # get info from the problem + docp = OptimalControlProblems.eval(problem)(OptimalControlBackend()) + ocp = ocp_model(docp) + t0_fixed = has_fixed_initial_time(ocp) + tf_fixed = has_fixed_final_time(ocp) + t0_name = metadata[problem][:time_grid_name][:initial_time] + tf_name = metadata[problem][:time_grid_name][:final_time] + + if t0_fixed + params = NamedTuple(Dict(Symbol(t0_name) => t0, )) + + docp = OptimalControlProblems.eval(problem)(OptimalControlBackend(); parameters=params) + @test initial_time(ocp_model(docp)) == t0 + + docp = OptimalControlProblems.eval(Symbol(problem, :_s))(OptimalControlBackend(); parameters=params) + @test initial_time(ocp_model(docp)) == t0 + + nlp = OptimalControlProblems.eval(problem)(JuMPBackend(); parameters=params) + @test nlp[Symbol(t0_name)] == t0 + end + + if tf_fixed + params = NamedTuple(Dict(Symbol(tf_name) => tf, )) + + docp = OptimalControlProblems.eval(problem)(OptimalControlBackend(); parameters=params) + @test final_time(ocp_model(docp)) == tf + + docp = OptimalControlProblems.eval(Symbol(problem, :_s))(OptimalControlBackend(); parameters=params) + @test final_time(ocp_model(docp)) == tf + + nlp = OptimalControlProblems.eval(problem)(JuMPBackend(); parameters=params) + @test nlp[Symbol(tf_name)] == tf + end + + if t0_fixed && tf_fixed + params = NamedTuple(Dict(Symbol(t0_name) => t0, Symbol(tf_name) => tf)) + + docp = OptimalControlProblems.eval(problem)(OptimalControlBackend(); parameters=params) + @test initial_time(ocp_model(docp)) == t0 + @test final_time(ocp_model(docp)) == tf + + docp = OptimalControlProblems.eval(Symbol(problem, :_s))(OptimalControlBackend(); parameters=params) + @test initial_time(ocp_model(docp)) == t0 + @test final_time(ocp_model(docp)) == tf + + nlp = OptimalControlProblems.eval(problem)(JuMPBackend(); parameters=params) + @test nlp[Symbol(t0_name)] == t0 + @test nlp[Symbol(tf_name)] == tf + end + + end + end + + +end \ No newline at end of file From 48e39ff058f85098c8ef17ff96739bbf0e7ac0f5 Mon Sep 17 00:00:00 2001 From: Olivier Cots Date: Mon, 15 Sep 2025 10:40:37 +0200 Subject: [PATCH 2/4] replaced N by grid_size --- docs/problems.jl | 16 ++--- docs/src/dev-add.md | 8 +-- docs/src/problems-introduction.md | 6 +- docs/src/tutorial-get.md | 2 +- docs/src/tutorial-solve.md | 4 +- ext/JuMPModels.jl | 12 ++-- ext/JuMPModels/beam.jl | 32 ++++++--- ext/JuMPModels/bioreactor.jl | 10 +-- ext/JuMPModels/cart_pendulum.jl | 47 ++++++------ ext/JuMPModels/chain.jl | 19 ++--- ext/JuMPModels/dielectrophoretic_particle.jl | 49 +++++++------ ext/JuMPModels/double_oscillator.jl | 16 +++-- ext/JuMPModels/ducted_fan.jl | 68 ++++++++++-------- ext/JuMPModels/electric_vehicle.jl | 28 +++++--- ext/JuMPModels/glider.jl | 43 +++++------ ext/JuMPModels/insurance.jl | 23 +++--- ext/JuMPModels/jackson.jl | 12 ++-- ext/JuMPModels/moonlander.jl | 4 +- ext/JuMPModels/robbins.jl | 4 +- ext/JuMPModels/robot.jl | 5 +- ext/JuMPModels/rocket.jl | 4 +- ext/JuMPModels/space_shuttle.jl | 25 ++++--- ext/JuMPModels/steering.jl | 62 ++++++++-------- ext/JuMPModels/vanderpol.jl | 4 +- ext/MetaData/beam.jl | 2 +- ext/MetaData/bioreactor.jl | 6 +- ext/MetaData/cart_pendulum.jl | 8 ++- ext/MetaData/chain.jl | 4 +- ext/MetaData/dielectrophoretic_particle.jl | 6 +- ext/MetaData/double_oscillator.jl | 10 ++- ext/MetaData/ducted_fan.jl | 11 ++- ext/MetaData/electric_vehicle.jl | 9 ++- ext/MetaData/glider.jl | 15 ++-- ext/MetaData/insurance.jl | 2 +- ext/MetaData/jackson.jl | 2 +- ext/MetaData/moonlander.jl | 2 +- ext/MetaData/robbins.jl | 2 +- ext/MetaData/robot.jl | 2 +- ext/MetaData/rocket.jl | 2 +- ext/MetaData/space_shuttle.jl | 2 +- ext/MetaData/steering.jl | 4 +- ext/MetaData/vanderpol.jl | 2 +- ext/OptimalControlModels/beam.jl | 4 +- ext/OptimalControlModels/bioreactor.jl | 9 ++- ext/OptimalControlModels/cart_pendulum.jl | 28 +++++--- ext/OptimalControlModels/chain.jl | 10 +-- .../dielectrophoretic_particle.jl | 17 +++-- ext/OptimalControlModels/double_oscillator.jl | 17 +++-- ext/OptimalControlModels/ducted_fan.jl | 45 +++++++----- ext/OptimalControlModels/electric_vehicle.jl | 17 +++-- ext/OptimalControlModels/glider.jl | 35 ++++----- ext/OptimalControlModels/insurance.jl | 4 +- ext/OptimalControlModels/jackson.jl | 4 +- ext/OptimalControlModels/moonlander.jl | 4 +- ext/OptimalControlModels/robbins.jl | 4 +- ext/OptimalControlModels/robot.jl | 4 +- ext/OptimalControlModels/rocket.jl | 4 +- ext/OptimalControlModels/space_shuttle.jl | 4 +- ext/OptimalControlModels/steering.jl | 14 ++-- ext/OptimalControlModels/vanderpol.jl | 4 +- ext/OptimalControlModels_s/beam_s.jl | 4 +- ext/OptimalControlModels_s/chain_s.jl | 10 +-- .../dielectrophoretic_particle_s.jl | 17 +++-- .../double_oscillator_s.jl | 17 +++-- ext/OptimalControlModels_s/ducted_fan_s.jl | 45 +++++++----- .../electric_vehicle_s.jl | 17 +++-- ext/OptimalControlModels_s/glider_s.jl | 35 ++++----- ext/OptimalControlModels_s/insurance_s.jl | 4 +- ext/OptimalControlModels_s/jackson_s.jl | 4 +- ext/OptimalControlModels_s/robbins_s.jl | 4 +- ext/OptimalControlModels_s/robot_s.jl | 4 +- ext/OptimalControlModels_s/rocket_s.jl | 4 +- ext/OptimalControlModels_s/space_shuttle_s.jl | 4 +- ext/OptimalControlModels_s/steering_s.jl | 14 ++-- ext/OptimalControlModels_s/vanderpol_s.jl | 4 +- src/OptimalControlProblems.jl | 62 ++++++++++------ test/figures/init/beam.pdf | Bin 278752 -> 278752 bytes test/figures/init/chain.pdf | Bin 365199 -> 365199 bytes test/figures/init/double_oscillator.pdf | Bin 427649 -> 427645 bytes test/figures/init/ducted_fan.pdf | Bin 472020 -> 472008 bytes test/figures/init/electric_vehicle.pdf | Bin 272779 -> 272779 bytes test/figures/init/glider.pdf | Bin 469217 -> 469209 bytes test/figures/init/insurance.pdf | Bin 892469 -> 887480 bytes test/figures/init/jackson.pdf | Bin 320861 -> 320845 bytes test/figures/init/robbins.pdf | Bin 339149 -> 339147 bytes test/figures/init/robot.pdf | Bin 575437 -> 575413 bytes test/figures/init/rocket.pdf | Bin 361386 -> 361374 bytes test/figures/init/space_shuttle.pdf | Bin 724390 -> 724362 bytes test/figures/init/steering.pdf | Bin 465336 -> 465332 bytes test/figures/init/vanderpol.pdf | Bin 250429 -> 250429 bytes test/runtests.jl | 4 +- test/test_JuMP.jl | 2 +- test/test_OptimalControl.jl | 2 +- test/test_OptimalControl_s.jl | 2 +- test/test_kwargs.jl | 4 +- test/test_parameters.jl | 4 +- test/test_quick.jl | 2 +- test/utils.jl | 10 +-- 98 files changed, 639 insertions(+), 462 deletions(-) diff --git a/docs/problems.jl b/docs/problems.jl index 119229a1..4be2bbbc 100644 --- a/docs/problems.jl +++ b/docs/problems.jl @@ -85,8 +85,8 @@ function generate_documentation(PROBLEM::String, DESCRIPTION::String; draft::Uni # ----------------------------- # Extract dimensions from metadata # ----------------------------- - x_vars = metadata[problem][:state_name] - u_vars = metadata[problem][:control_name] + x_vars = metadata(problem)[:state_name] + u_vars = metadata(problem)[:control_name] n_states = length(x_vars) n_controls = length(u_vars) @@ -182,7 +182,7 @@ function generate_documentation(PROBLEM::String, DESCRIPTION::String; draft::Uni push!(data_pb, ( Problem=:$PROBLEM, - Grid_Size=metadata[:$PROBLEM][:N], + Grid_Size=metadata(:$PROBLEM)[:grid_size], Variables=get_nvar(nlp_model($PROBLEM(OptimalControlBackend()))), Constraints=get_ncon(nlp_model($PROBLEM(OptimalControlBackend()))), ) @@ -294,9 +294,9 @@ function generate_documentation(PROBLEM::String, DESCRIPTION::String; draft::Uni v_jp = variable(problem, nlp_jp) i_jp = iterations(problem, nlp_jp) - x_vars = metadata[problem][:state_name] - u_vars = metadata[problem][:control_name] - v_vars = metadata[problem][:variable_name] + x_vars = metadata(problem)[:state_name] + u_vars = metadata(problem)[:control_name] + v_vars = metadata(problem)[:variable_name] println("┌─ ", string(problem)) println("│") @@ -365,8 +365,8 @@ function generate_documentation(PROBLEM::String, DESCRIPTION::String; draft::Uni ocp_sol = build_ocp_solution(docp, nlp_oc_sol) # dimensions - n = state_dimension(ocp_sol) # or length(metadata[:$PROBLEM][:state_name]) - m = control_dimension(ocp_sol) # or length(metadata[:$PROBLEM][:control_name]) + n = state_dimension(ocp_sol) # or length(metadata(:$PROBLEM)[:state_name]) + m = control_dimension(ocp_sol) # or length(metadata(:$PROBLEM)[:control_name]) # from OptimalControl solution plt = plot( diff --git a/docs/src/dev-add.md b/docs/src/dev-add.md index 1abfbf8c..e982c89a 100644 --- a/docs/src/dev-add.md +++ b/docs/src/dev-add.md @@ -6,7 +6,7 @@ To add a new problem to **OptimalControlProblems**, you must follow these steps: ```julia new_problem_meta = OrderedDict( - :N => 100, # Number of steps # Whether we minimise (true) or maximise (false) + :grid_size => 100, # Number of steps # Whether we minimise (true) or maximise (false) :state_name => ["x1", "x2"], # Names of the state components :costate_name => ["∂x1", "∂x2"], # Names of the dynamics constraints (for the costate) :control_name => ["u"], # Names of the control components @@ -28,7 +28,7 @@ new_problem_meta = OrderedDict( function OptimalControlProblems.new_problem( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:new_problem), + grid_size::Int=steps_number_data(:new_problem), kwargs..., ) @@ -50,7 +50,7 @@ function OptimalControlProblems.new_problem( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs... ) @@ -67,7 +67,7 @@ end Documentation of the method """ function OptimalControlProblems.new_problem( - ::JuMPBackend, args...; N::Int=steps_number_data(:new_problem), kwargs... + ::JuMPBackend, args...; grid_size::Int=steps_number_data(:new_problem), kwargs... ) # if tf is fixed diff --git a/docs/src/problems-introduction.md b/docs/src/problems-introduction.md index e7c69347..4964af93 100644 --- a/docs/src/problems-introduction.md +++ b/docs/src/problems-introduction.md @@ -97,11 +97,11 @@ For each problem, additional data is provided in the [MetaData](https://github.c OptimalControlProblems.metadata ``` -To list all metadata, use `metadata`. To access the metadata of a specific problem, for example `chain`, run: +To list all metadata, use `metadata()`. To access the metadata of a specific problem, for example `chain`, run: ```@example main using OptimalControlProblems -metadata[:chain] +metadata(:chain) ``` ## Problems characteristics @@ -192,7 +192,7 @@ We detail below the characteristics of the optimal control problems and their as ) # - N = metadata[problem][:N] # get default number of steps + N = metadata(problem)[:grid_size] # get default number of steps push!(data_nlp, ( diff --git a/docs/src/tutorial-get.md b/docs/src/tutorial-get.md index 3b93e9b4..0ab06ea6 100644 --- a/docs/src/tutorial-get.md +++ b/docs/src/tutorial-get.md @@ -85,7 +85,7 @@ println("nnzh = ", nnzh) The (default) number of steps $N$ is stored in the metadata: ```@example main_oc -metadata[:beam][:N] +metadata(:beam)[:grid_size] ``` !!! note diff --git a/docs/src/tutorial-solve.md b/docs/src/tutorial-solve.md index 63f711fe..daa8542c 100644 --- a/docs/src/tutorial-solve.md +++ b/docs/src/tutorial-solve.md @@ -148,8 +148,8 @@ println("iterations: ", i) Now, we can add the state, costate, and control to the plot: ```@example main -n = length(metadata[:beam][:state_name]) # dimension of the state -m = length(metadata[:beam][:control_name]) # dimension of the control +n = length(metadata(:beam)[:state_name]) # dimension of the state +m = length(metadata(:beam)[:control_name]) # dimension of the control for i in 1:n # state plot!(plt[i], t, t -> x(t)[i]; color=2, linestyle=:dash, label=:none) diff --git a/ext/JuMPModels.jl b/ext/JuMPModels.jl index 01934dba..4563ef05 100644 --- a/ext/JuMPModels.jl +++ b/ext/JuMPModels.jl @@ -38,8 +38,8 @@ julia> tgrid = OptimalControlProblems.time_grid(:my_problem, model) 0.0:0.1:1.0 ``` """ -function OptimalControlProblems.time_grid(::Symbol, model::JuMP.GenericModel) - t_grid_vars = metadata[problem][:time_grid_name] +function OptimalControlProblems.time_grid(problem::Symbol, model::JuMP.GenericModel) + t_grid_vars = metadata(problem)[:time_grid_name] t0 = value.(model[Symbol(t_grid_vars[:initial_time])]) tf = value.(model[Symbol(t_grid_vars[:final_time])]) N = value.(model[Symbol(t_grid_vars[:steps_number])]) @@ -77,7 +77,7 @@ function OptimalControlProblems.state(problem::Symbol, model::JuMP.GenericModel) N = length(T) - 1 # get dimension - state_names = metadata[problem][:state_name] + state_names = metadata(problem)[:state_name] dim_x = length(state_names) # get state from the model @@ -128,7 +128,7 @@ function OptimalControlProblems.control(problem::Symbol, model::JuMP.GenericMode N = length(T) - 1 # get dimension - control_names = metadata[problem][:control_name] + control_names = metadata(problem)[:control_name] dim_u = length(control_names) # get control from the model @@ -179,7 +179,7 @@ function OptimalControlProblems.costate(problem::Symbol, model::JuMP.GenericMode N = length(T) - 1 # get dimension - costate_names = metadata[problem][:costate_name] + costate_names = metadata(problem)[:costate_name] dim_x = length(costate_names) # get costate from the model @@ -229,7 +229,7 @@ julia> v = OptimalControlProblems.variable(:my_problem, model) ``` """ function OptimalControlProblems.variable(problem::Symbol, model::JuMP.GenericModel) - variable_names = metadata[problem][:variable_name] + variable_names = metadata(problem)[:variable_name] if isnothing(variable_names) return nothing diff --git a/ext/JuMPModels/beam.jl b/ext/JuMPModels/beam.jl index 49b83275..f1f8f4ee 100644 --- a/ext/JuMPModels/beam.jl +++ b/ext/JuMPModels/beam.jl @@ -29,7 +29,7 @@ julia> model = OptimalControlProblems.beam(JuMPBackend(); N=100) """ function OptimalControlProblems.beam( ::JuMPBackend, args...; - N::Int=steps_number_data(:beam), + grid_size::Int=steps_number_data(:beam), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -53,7 +53,7 @@ function OptimalControlProblems.beam( begin t0, t0 # (required if the initial time is fixed) tf, tf # (required if the final time is fixed) - N, N # (required) + N, grid_size # (required) end ) # ------------------------------------------------ @@ -62,9 +62,9 @@ function OptimalControlProblems.beam( @variables( model, begin - x₁_l <= x1[0:N] <= x₁_u, (start = 0.05) - x2[0:N], (start = 0.1) - u[0:N], (start = 0.1) + x₁_l <= x1[0:N] <= x₁_u, (start = 0.05) + x2[0:N], (start = 0.1) + u[0:N], (start = 0.1) end ) @@ -80,17 +80,31 @@ function OptimalControlProblems.beam( ) # dynamics - step = (tf - t0) / N + @expressions( + model, + begin + + # + step, (tf - t0) / N + + # dynamics + dx1[i = 0:N], x2[i] + dx2[i = 0:N], u[i] + + # objective + dc[i = 0:N], u[i]^2 + end + ) @constraints( model, begin - ∂x1[i = 1:N], x1[i] == x1[i - 1] + 0.5 * step * (x2[i] + x2[i - 1]) - ∂x2[i = 1:N], x2[i] == x2[i - 1] + 0.5 * step * (u[i] + u[i - 1]) + ∂x1[i = 1:N], x1[i] == x1[i - 1] + 0.5 * step * (dx1[i] + dx1[i - 1]) + ∂x2[i = 1:N], x2[i] == x2[i - 1] + 0.5 * step * (dx2[i] + dx2[i - 1]) end ) # objective - @objective(model, Min, 0.5 * step * sum(u[i]^2 + u[i - 1]^2 for i in 1:N)) + @objective(model, Min, 0.5 * step * sum(dc[i] + dc[i - 1] for i in 1:N)) return model end diff --git a/ext/JuMPModels/bioreactor.jl b/ext/JuMPModels/bioreactor.jl index e1514de8..c6f45873 100644 --- a/ext/JuMPModels/bioreactor.jl +++ b/ext/JuMPModels/bioreactor.jl @@ -32,7 +32,7 @@ julia> model = OptimalControlProblems.bioreactor(JuMPBackend(); N=100) """ function OptimalControlProblems.bioreactor( ::JuMPBackend, args...; - N::Int=steps_number_data(:bioreactor), + grid_size::Int=steps_number_data(:bioreactor), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -40,7 +40,7 @@ function OptimalControlProblems.bioreactor( # parameters params = parameters_data(:bioreactor, parameters) t0 = params[:t0] - T = params[:T] + tf = params[:tf] β = params[:β] c = params[:c] γ = params[:γ] @@ -64,8 +64,8 @@ function OptimalControlProblems.bioreactor( model, begin t0, t0 # (required if the initial time is fixed) - T, T # (required if the final time is fixed) - N, N # (required) + tf, tf # (required if the final time is fixed) + N, grid_size # (required) end ) # ------------------------------------------------ @@ -97,7 +97,7 @@ function OptimalControlProblems.bioreactor( begin # - step, (T-t0) / N + step, (tf-t0) / N # intermediate variables growth[k = 0:N], μ2m * s[k] / (s[k] + Ks) diff --git a/ext/JuMPModels/cart_pendulum.jl b/ext/JuMPModels/cart_pendulum.jl index c8517038..27c4b8e8 100644 --- a/ext/JuMPModels/cart_pendulum.jl +++ b/ext/JuMPModels/cart_pendulum.jl @@ -28,7 +28,7 @@ julia> model = OptimalControlProblems.cart_pendulum(JuMPBackend(); N=200) - [Cart–Pendulum Optimal Control Problem](https://arxiv.org/pdf/2303.16746) """ function OptimalControlProblems.cart_pendulum( - ::JuMPBackend, args...; N::Int=steps_number_data(:cart_pendulum), + ::JuMPBackend, args...; grid_size::Int=steps_number_data(:cart_pendulum), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -44,7 +44,13 @@ function OptimalControlProblems.cart_pendulum( max_f = params[:max_f] max_x = params[:max_x] max_v = params[:max_v] - + tf_l = params[:tf_l] + x_i = params[:x_i] + θ_i = params[:θ_i] + ω_i = params[:ω_i] + θ_f = params[:θ_f] + ω_f = params[:ω_f] + # model model = JuMP.Model(args...; kwargs...) @@ -54,7 +60,7 @@ function OptimalControlProblems.cart_pendulum( model, begin t0, t0 # (required if the initial time is fixed) - N, N # (required) + N, grid_size # (required) end ) # ------------------------------------------------ @@ -63,13 +69,13 @@ function OptimalControlProblems.cart_pendulum( @variables( model, begin - 0.1 <= tf, (start = 1.0) - ddx, (start = 0.1) - -max_x <= x[0:N] <= max_x, (start = 0.1) - -max_v <= v[0:N] <= max_v, (start = 0.1) - θ[0:N], (start = 0.1) - ω[0:N], (start = 0.1) - -max_f <= Fex[0:N] <= max_f, (start = 0.1) + tf >= tf_l, (start = 1.0) + ddx, (start = 0.1) + -max_x <= x[0:N] <= max_x, (start = 0.1) + -max_v <= v[0:N] <= max_v, (start = 0.1) + θ[0:N], (start = 0.1) + ω[0:N], (start = 0.1) + -max_f <= Fex[0:N] <= max_f, (start = 0.1) end ) @@ -77,11 +83,11 @@ function OptimalControlProblems.cart_pendulum( @constraints( model, begin - x[0] == 0 - θ[0] == 0 - ω[0] == 0 - θ[N] == π - ω[N] == 0 + x[0] == x_i + θ[0] == θ_i + ω[0] == ω_i + θ[N] == θ_f + ω[N] == ω_f end ) @@ -89,7 +95,7 @@ function OptimalControlProblems.cart_pendulum( @expressions( model, begin - step, tf / N + step, (tf - t0) / N α_ddx[i = 0:N], 1 / (I + 0.25 * m * L^2) * 0.5 * L * m * (-ddx * cos(θ[i]) - g * sin(θ[i])) @@ -105,18 +111,19 @@ function OptimalControlProblems.cart_pendulum( J, mcart c[i = 0:N], eq[i] - J * ddx + dv[i = 0:N], v[i] dv[i = 0:N], -1 / J * c[i] - dω[i = 0:N], - 1 / (I + 0.25 * m * L^2) * 0.5 * L * m * (-dv[i] * cos(θ[i]) - g * sin(θ[i])) + dθ[i = 0:N], ω[i] + dω[i = 0:N], 1 / (I + 0.25 * m * L^2) * 0.5 * L * m * (-dv[i] * cos(θ[i]) - g * sin(θ[i])) end ) @constraints( model, begin - ∂x[k = 1:N], x[k] == x[k - 1] + 0.5 * step * (v[k] + v[k - 1]) + ∂x[k = 1:N], x[k] == x[k - 1] + 0.5 * step * (dx[k] + dx[k - 1]) ∂v[k = 1:N], v[k] == v[k - 1] + 0.5 * step * (dv[k] + dv[k - 1]) - ∂θ[k = 1:N], θ[k] == θ[k - 1] + 0.5 * step * (ω[k] + ω[k - 1]) + ∂θ[k = 1:N], θ[k] == θ[k - 1] + 0.5 * step * (dθ[k] + dθ[k - 1]) ∂ω[k = 1:N], ω[k] == ω[k - 1] + 0.5 * step * (dω[k] + dω[k - 1]) end ) diff --git a/ext/JuMPModels/chain.jl b/ext/JuMPModels/chain.jl index d56745ab..b2def172 100644 --- a/ext/JuMPModels/chain.jl +++ b/ext/JuMPModels/chain.jl @@ -28,7 +28,7 @@ julia> model = OptimalControlProblems.chain(JuMPBackend(); N=300) - [COPS Benchmark Problems – Hanging Chain](https://www.mcs.anl.gov/~more/cops/) """ function OptimalControlProblems.chain( - ::JuMPBackend, args...; N::Int=steps_number_data(:chain), + ::JuMPBackend, args...; grid_size::Int=steps_number_data(:chain), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -40,6 +40,8 @@ function OptimalControlProblems.chain( L = params[:L] a = params[:a] b = params[:b] + x2_i = params[:x2_i] + x3_i = params[:x3_i] # tmin = b > a ? 1 / 4 : 3 / 4 @@ -54,7 +56,7 @@ function OptimalControlProblems.chain( begin t0, t0 # (required if the initial time is fixed) tf, tf # (required if the final time is fixed) - N, N # (required) + N, grid_size # (required) end ) # ------------------------------------------------ @@ -71,16 +73,15 @@ function OptimalControlProblems.chain( @variables( model, begin - u[k = 0:N], (start = 4 * abs(b - a) * ((t[k] - t0) / (tf - t0) - tmin)) - x1[k = 0:N], - (start = 4 * abs(b - a) * (t[k] - t0) / (tf - t0) * (0.5 * (t[k] - t0) / (tf - t0) - tmin) + a) + u[k = 0:N], (start = 4 * abs(b - a) * ((t[k] - t0) / (tf - t0) - tmin)) + x1[k = 0:N], (start = 4 * abs(b - a) * (t[k] - t0) / (tf - t0) * (0.5 * (t[k] - t0) / (tf - t0) - tmin) + a) x2[k = 0:N], ( start = (4 * abs(b - a) * (t[k] - t0) / (tf - t0) * (0.5 * (t[k] - t0) / (tf - t0) - tmin) + a) * (4 * abs(b - a) * ((t[k] - t0) / (tf - t0) - tmin)) ) - x3[k = 0:N], (start = 4 * abs(b - a) * ((t[k] - t0) / (tf - t0) - tmin)) + x3[k = 0:N], (start = 4 * abs(b - a) * ((t[k] - t0) / (tf - t0) - tmin)) end ) @@ -88,8 +89,8 @@ function OptimalControlProblems.chain( model, begin x1[0] == a - x2[0] == 0 - x3[0] == 0 + x2[0] == x2_i + x3[0] == x3_i x1[N] == b x3[N] == L end @@ -99,7 +100,7 @@ function OptimalControlProblems.chain( @expressions( model, begin - step, tf / N + step, (tf - t0) / N dx1[k = 0:N], u[k] dx2[k = 0:N], x1[k] * √(1 + u[k]^2) dx3[k = 0:N], √(1 + u[k]^2) diff --git a/ext/JuMPModels/dielectrophoretic_particle.jl b/ext/JuMPModels/dielectrophoretic_particle.jl index 3186e760..bca951cd 100644 --- a/ext/JuMPModels/dielectrophoretic_particle.jl +++ b/ext/JuMPModels/dielectrophoretic_particle.jl @@ -29,7 +29,7 @@ julia> model = OptimalControlProblems.dielectrophoretic_particle(JuMPBackend(); IEEE Transactions on Automatic Control, 51(7), 1100–1114. """ function OptimalControlProblems.dielectrophoretic_particle( - ::JuMPBackend, args...; N::Int=steps_number_data(:dielectrophoretic_particle), + ::JuMPBackend, args...; grid_size::Int=steps_number_data(:dielectrophoretic_particle), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -41,7 +41,11 @@ function OptimalControlProblems.dielectrophoretic_particle( xf = params[:xf] α = params[:α] c = params[:c] - + u_l = params[:u_l] + u_u = params[:u_u] + tf_l = params[:tf_l] + y_i = params[:y_i] + # model model = JuMP.Model(args...; kwargs...) @@ -51,30 +55,41 @@ function OptimalControlProblems.dielectrophoretic_particle( model, begin t0, t0 # (required if the initial time is fixed) - N, N # (required) + N, grid_size # (required) end ) # ------------------------------------------------ # state, control and variable (final time) - @variable(model, x[0:N], start = 1) - @variable(model, y[0:N], start = 1) - @variable(model, -1 <= u[0:N] <= 1, start = 0.1) - @variable(model, 0 <= tf, start = 5) + @variables( + model, + begin + x[0:N], (start = 1) + y[0:N], (start = 1) + u_l <= u[0:N] <= u_u, (start = 0.1) + tf_l <= tf, (start = 5) + end + ) - # Objective - @objective(model, Min, tf) + # Boundary constraints + @constraints( + model, + begin + x[0] == x0 + x[N] == xf + y[0] == y_i + end + ) # Dynamics @expressions( model, begin - step, tf / N + step, (tf - t0) / N dx[k = 0:N], y[k] * u[k] + α * u[k]^2 dy[k = 0:N], -c * y[k] + u[k] end ) - # Collocation @constraints( model, begin @@ -82,15 +97,9 @@ function OptimalControlProblems.dielectrophoretic_particle( ∂y[k = 1:N], y[k] == y[k - 1] + 0.5 * step * (dy[k] + dy[k - 1]) end ) - # Boundary constraints - @constraints( - model, - begin - x[0] == x0 - x[N] == xf - y[0] == 0 - end - ) + + # Objective + @objective(model, Min, tf) return model end diff --git a/ext/JuMPModels/double_oscillator.jl b/ext/JuMPModels/double_oscillator.jl index 20fd101c..b96a1dfc 100644 --- a/ext/JuMPModels/double_oscillator.jl +++ b/ext/JuMPModels/double_oscillator.jl @@ -29,7 +29,7 @@ julia> model = OptimalControlProblems.double_oscillator(JuMPBackend(); N=200) IFAC-PapersOnLine, 51(2), 49–54. """ function OptimalControlProblems.double_oscillator( - ::JuMPBackend, args...; N::Int=steps_number_data(:double_oscillator), + ::JuMPBackend, args...; grid_size::Int=steps_number_data(:double_oscillator), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -43,6 +43,10 @@ function OptimalControlProblems.double_oscillator( c = params[:c] k1 = params[:k1] k2 = params[:k2] + u_l = params[:u_l] + u_u = params[:u_u] + x1_i = params[:x1_i] + x2_i = params[:x2_i] # model model = JuMP.Model(args...; kwargs...) @@ -53,8 +57,8 @@ function OptimalControlProblems.double_oscillator( model, begin t0, t0 # (required if the initial time is fixed) - T, T # (required if the final time is fixed) - N, N # (required) + tf, tf # (required if the final time is fixed) + N, grid_size # (required) end ) # ------------------------------------------------ @@ -67,7 +71,7 @@ function OptimalControlProblems.double_oscillator( x2[0:N], (start = 0.1) x3[0:N], (start = 0.1) x4[0:N], (start = 0.1) - -1 <= u[0:N] <= 1, (start = 0.1) + u_l <= u[0:N] <= u_u, (start = 0.1) end ) @@ -75,8 +79,8 @@ function OptimalControlProblems.double_oscillator( @constraints( model, begin - x1[0] == 0 - x2[0] == 0 + x1[0] == x1_i + x2[0] == x2_i end ) diff --git a/ext/JuMPModels/ducted_fan.jl b/ext/JuMPModels/ducted_fan.jl index 71906247..e29894cf 100644 --- a/ext/JuMPModels/ducted_fan.jl +++ b/ext/JuMPModels/ducted_fan.jl @@ -29,7 +29,7 @@ julia> model = OptimalControlProblems.ducted_fan(JuMPBackend(); N=100) Optimal Control Applications and Methods, 30(6), 537–561. [GP2009] """ function OptimalControlProblems.ducted_fan( - ::JuMPBackend, args...; N::Int=steps_number_data(:ducted_fan), + ::JuMPBackend, args...; grid_size::Int=steps_number_data(:ducted_fan), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -42,7 +42,16 @@ function OptimalControlProblems.ducted_fan( m = params[:m] mg = params[:mg] μ = params[:μ] - + α_l = params[:α_l] + α_u = params[:α_u] + u₁_l = params[:u₁_l] + u₁_u = params[:u₁_u] + u₂_l = params[:u₂_l] + u₂_u = params[:u₂_u] + tf_l = params[:tf_l] + x_i = params[:x_i] + x_f = params[:x_f] + # model model = JuMP.Model(args...; kwargs...) @@ -52,42 +61,46 @@ function OptimalControlProblems.ducted_fan( model, begin t0, t0 # (required if the initial time is fixed) - N, N # (required) + N, grid_size # (required) end ) # ------------------------------------------------ # state, control, variable (final time) and initial guess - @variable(model, x₁[0:N], start = 0.1) - @variable(model, v₁[0:N], start = 0.1) - @variable(model, x₂[0:N], start = -0.1) - @variable(model, v₂[0:N], start = 0.1) - @variable(model, -deg2rad(30) <= α[0:N] <= deg2rad(30), start = 0.1) # radian - @variable(model, vα[0:N], start = 0.1) - @variable(model, -5 <= u₁[0:N] <= 5, start = 0.1) # [N] - @variable(model, 0 <= u₂[0:N] <= 17, start = 1) # [N] - @variable(model, 0.1 <= tf, start = 1.5) + @variables( + model, + begin + x₁[0:N], (start = 0.1) + v₁[0:N], (start = 0.1) + x₂[0:N], (start = -0.1) + v₂[0:N], (start = 0.1) + α_l <= α[0:N] <= α_u, (start = 0.1) # radian + vα[0:N], (start = 0.1) + u₁_l <= u₁[0:N] <= u₁_u, (start = 0.1) # [N] + u₂_l <= u₂[0:N] <= u₂_u, (start = 1) # [N] + tf >= tf_l, (start = 1.5) + end + ) # Boundary constraints @constraints( model, begin - # initial - x₁[0] == 0 - v₁[0] == 0 - x₂[0] == 0 - v₂[0] == 0 - α[0] == 0 - vα[0] == 0 + x₁[0] == x_i[1] + v₁[0] == x_i[2] + x₂[0] == x_i[3] + v₂[0] == x_i[4] + α[0] == x_i[5] + vα[0] == x_i[6] # final - x₁[N] == 1 - v₁[N] == 0 - x₂[N] == 0 - v₂[N] == 0 - α[N] == 0 - vα[N] == 0 + x₁[N] == x_f[1] + v₁[N] == x_f[2] + x₂[N] == x_f[3] + v₂[N] == x_f[4] + α[N] == x_f[5] + vα[N] == x_f[6] end ) @@ -95,9 +108,8 @@ function OptimalControlProblems.ducted_fan( @expressions( model, begin - # - step, tf / N + step, (tf - t0) / N # dynamics dx₁[k = 0:N], v₁[k] @@ -119,7 +131,7 @@ function OptimalControlProblems.ducted_fan( ∂v₁[k = 1:N], v₁[k] == v₁[k - 1] + 0.5 * step * (dv₁[k] + dv₁[k - 1]) ∂x₂[k = 1:N], x₂[k] == x₂[k - 1] + 0.5 * step * (dx₂[k] + dx₂[k - 1]) ∂v₂[k = 1:N], v₂[k] == v₂[k - 1] + 0.5 * step * (dv₂[k] + dv₂[k - 1]) - ∂α[k = 1:N], α[k] == α[k - 1] + 0.5 * step * (dα[k] + dα[k - 1]) + ∂α[k = 1:N], α[k] == α[k - 1] + 0.5 * step * (dα[k] + dα[k - 1]) ∂vα[k = 1:N], vα[k] == vα[k - 1] + 0.5 * step * (dvα[k] + dvα[k - 1]) end ) diff --git a/ext/JuMPModels/electric_vehicle.jl b/ext/JuMPModels/electric_vehicle.jl index 4e96524e..aeaf3a12 100644 --- a/ext/JuMPModels/electric_vehicle.jl +++ b/ext/JuMPModels/electric_vehicle.jl @@ -28,7 +28,7 @@ julia> model = OptimalControlProblems.electric_vehicle(JuMPBackend(); N=100) - Petit, N., & Sciarretta, A. (2011). *Optimal drive of electric vehicles using an inversion-based trajectory generation approach.* IFAC Proceedings Volumes, 44(1), 14519–14526. [PS2011] """ function OptimalControlProblems.electric_vehicle( - ::JuMPBackend, args...; N::Int=steps_number_data(:electric_vehicle), + ::JuMPBackend, args...; grid_size::Int=steps_number_data(:electric_vehicle), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -37,7 +37,6 @@ function OptimalControlProblems.electric_vehicle( params = parameters_data(:electric_vehicle, parameters) t0 = params[:t0] tf = params[:tf] - D = params[:D] b1 = params[:b1] b2 = params[:b2] h0 = params[:h0] @@ -47,6 +46,10 @@ function OptimalControlProblems.electric_vehicle( α1 = params[:α1] α2 = params[:α2] α3 = params[:α3] + x_i = params[:x_i] + v_i = params[:v_i] + x_f = params[:x_f] + v_f = params[:v_f] # model model = JuMP.Model(args...; kwargs...) @@ -58,24 +61,29 @@ function OptimalControlProblems.electric_vehicle( begin t0, t0 # (required if the initial time is fixed) tf, tf # (required if the final time is fixed) - N, N # (required) + N, grid_size # (required) end ) # ------------------------------------------------ # state, control and initial guess - @variable(model, x[0:N], start = 0.1) - @variable(model, v[0:N], start = 0.1) - @variable(model, u[0:N], start = 0.1) + @variables( + model, + begin + x[0:N], (start = 0.1) + v[0:N], (start = 0.1) + u[0:N], (start = 0.1) + end + ) # boundary constraints @constraints( model, begin - x[0] == 0 - v[0] == 0 - x[N] == D - v[N] == 0 + x[0] == x_i + v[0] == v_i + x[N] == x_f + v[N] == v_f end ) diff --git a/ext/JuMPModels/glider.jl b/ext/JuMPModels/glider.jl index c478c79c..7d5b0721 100644 --- a/ext/JuMPModels/glider.jl +++ b/ext/JuMPModels/glider.jl @@ -28,7 +28,7 @@ julia> model = OptimalControlProblems.glider(JuMPBackend(); N=100) - Hang Glider Problem formulation as in: https://www.mcs.anl.gov/~more/cops/ """ function OptimalControlProblems.glider( - ::JuMPBackend, args...; N::Int=steps_number_data(:glider), + ::JuMPBackend, args...; grid_size::Int=steps_number_data(:glider), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -36,15 +36,15 @@ function OptimalControlProblems.glider( # parameters params = parameters_data(:glider, parameters) t0 = params[:t0] - x_0 = params[:x_0] - y_0 = params[:y_0] + x_i = params[:x_i] + y_i = params[:y_i] y_f = params[:y_f] - vx_0 = params[:vx_0] + vx_i = params[:vx_i] vx_f = params[:vx_f] - vy_0 = params[:vy_0] + vy_i = params[:vy_i] vy_f = params[:vy_f] u_c = params[:u_c] - r_0 = params[:r_0] + r_i = params[:r_i] m = params[:m] g = params[:g] c0 = params[:c0] @@ -53,6 +53,9 @@ function OptimalControlProblems.glider( ρ = params[:ρ] cL_min = params[:cL_min] cL_max = params[:cL_max] + tf_l = params[:tf_l] + x_l = params[:x_l] + vx_l = params[:vx_l] # model model = JuMP.Model(args...; kwargs...) @@ -63,7 +66,7 @@ function OptimalControlProblems.glider( model, begin t0, t0 # (required if the initial time is fixed) - N, N # (required) + N, grid_size # (required) end ) # ------------------------------------------------ @@ -72,12 +75,12 @@ function OptimalControlProblems.glider( @variables( model, begin - 0 <= tf, (start = 1) - 0 <= x[k = 0:N], (start = x_0 + vx_0 * k / N) - y[k = 0:N], (start = y_0 + (k / N) * (y_f - y_0)) - 0 <= vx[k = 0:N], (start = vx_0) - vy[k = 0:N], (start = vy_0) - cL_min <= cL[k = 0:N] <= cL_max, (start = cL_max / 2) + tf >= tf_l, (start = 1) + x[k = 0:N] >= x_l, (start = x_i + vx_i * k / N) + y[k = 0:N], (start = y_i + (k / N) * (y_f - y_i)) + vx[k = 0:N] >= vx_l, (start = vx_i) + vy[k = 0:N], (start = vy_i) + cL_min <= cL[k = 0:N] <= cL_max, (start = cL_max / 2) end ) @@ -85,11 +88,11 @@ function OptimalControlProblems.glider( @constraints( model, begin - x[0] == x_0 - y[0] == y_0 - vx[0] == vx_0 - vy[0] == vy_0 - y[N] == y_f + x[0] == x_i + y[0] == y_i + vx[0] == vx_i + vy[0] == vy_i + y[N] == y_f vx[N] == vx_f vy[N] == vy_f end @@ -101,10 +104,10 @@ function OptimalControlProblems.glider( begin # - step, tf / N + step, (tf - t0) / N # - r[k = 0:N], (x[k] / r_0 - 2.5)^2 + r[k = 0:N], (x[k] / r_i - 2.5)^2 u[k = 0:N], u_c * (1 - r[k]) * exp(-r[k]) w[k = 0:N], vy[k] - u[k] v[k = 0:N], √(vx[k]^2 + w[k]^2) diff --git a/ext/JuMPModels/insurance.jl b/ext/JuMPModels/insurance.jl index cb68d695..dddfa870 100644 --- a/ext/JuMPModels/insurance.jl +++ b/ext/JuMPModels/insurance.jl @@ -28,7 +28,7 @@ julia> model = OptimalControlProblems.insurance(JuMPBackend(); N=100) - Problem formulation available at: https://github.com/control-toolbox/bocop/tree/main/bocop """ function OptimalControlProblems.insurance( - ::JuMPBackend, args...; N::Int=steps_number_data(:insurance), + ::JuMPBackend, args...; grid_size::Int=steps_number_data(:insurance), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -56,7 +56,7 @@ function OptimalControlProblems.insurance( begin t0, t0 # (required if the initial time is fixed) tf, tf # (required if the final time is fixed) - N, N # (required) + N, grid_size # (required) end ) # ------------------------------------------------ @@ -65,15 +65,15 @@ function OptimalControlProblems.insurance( @variables( model, begin - 0 <= I[0:N] <= 1.5, (start = 0.1) - 0 <= m[0:N] <= 1.5, (start = 0.1) - x₃[0:N], (start = 0.1) - 0 <= h[0:N] <= 25, (start = 0.1) - 0 <= R[0:N], (start = 0.1) - 0 <= H[0:N], (start = 0.1) - 0 <= U[0:N], (start = 0.1) - 0.001 <= dUdR[0:N], (start = 0.1) - P >= 0, (start = 0.1) + 0 <= I[0:N] <= 1.5, (start = 0.1) + 0 <= m[0:N] <= 1.5, (start = 0.1) + x₃[0:N], (start = 0.1) + 0 <= h[0:N] <= 25, (start = 0.1) + 0 <= R[0:N], (start = 0.1) + 0 <= H[0:N], (start = 0.1) + 0 <= U[0:N], (start = 0.1) + 0.001 <= dUdR[0:N], (start = 0.1) + P >= 0, (start = 0.1) end ) @@ -114,7 +114,6 @@ function OptimalControlProblems.insurance( @expressions( model, begin - # dynamics dI[i = 0:N], (1 - γ * t[i] * vprime[i] / dUdR[i]) * h[i] dm[i = 0:N], h[i] diff --git a/ext/JuMPModels/jackson.jl b/ext/JuMPModels/jackson.jl index b441adca..7be6e3c2 100644 --- a/ext/JuMPModels/jackson.jl +++ b/ext/JuMPModels/jackson.jl @@ -29,7 +29,7 @@ julia> model = OptimalControlProblems.jackson(JuMPBackend(); N=100) - Problem formulation available at: https://github.com/control-toolbox/bocop/tree/main/bocop """ function OptimalControlProblems.jackson( - ::JuMPBackend, args...; N::Int=steps_number_data(:jackson), + ::JuMPBackend, args...; grid_size::Int=steps_number_data(:jackson), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -52,7 +52,7 @@ function OptimalControlProblems.jackson( begin t0, t0 # (required if the initial time is fixed) tf, tf # (required if the final time is fixed) - N, N # (required) + N, grid_size # (required) end ) # ------------------------------------------------ @@ -60,10 +60,10 @@ function OptimalControlProblems.jackson( @variables( model, begin - 0 <= a[0:N] <= 1.1, (start = 0.1) - 0 <= b[0:N] <= 1.1, (start = 0.1) - 0 <= x3[0:N] <= 1.1, (start = 0.1) - 0 <= u[0:N] <= 1, (start = 0.1) + 0 <= a[0:N] <= 1.1, (start = 0.1) + 0 <= b[0:N] <= 1.1, (start = 0.1) + 0 <= x3[0:N] <= 1.1, (start = 0.1) + 0 <= u[0:N] <= 1, (start = 0.1) end ) diff --git a/ext/JuMPModels/moonlander.jl b/ext/JuMPModels/moonlander.jl index 640ebe2c..78bcc379 100644 --- a/ext/JuMPModels/moonlander.jl +++ b/ext/JuMPModels/moonlander.jl @@ -29,7 +29,7 @@ julia> model = OptimalControlProblems.moonlander(JuMPBackend(); N=100) - Problem formulation available at: https://arxiv.org/pdf/2303.16746 """ function OptimalControlProblems.moonlander( - ::JuMPBackend, args...; N::Int=steps_number_data(:moonlander), + ::JuMPBackend, args...; grid_size::Int=steps_number_data(:moonlander), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -53,7 +53,7 @@ function OptimalControlProblems.moonlander( model, begin t0, t0 # (required if the initial time is fixed) - N, N # (required) + N, grid_size # (required) end ) # ------------------------------------------------ diff --git a/ext/JuMPModels/robbins.jl b/ext/JuMPModels/robbins.jl index 3c476be4..0609ba7b 100644 --- a/ext/JuMPModels/robbins.jl +++ b/ext/JuMPModels/robbins.jl @@ -28,7 +28,7 @@ julia> model = OptimalControlProblems.robbins(JuMPBackend(); N=100) - Problem formulation available at: https://github.com/control-toolbox/bocop/tree/main/bocop """ function OptimalControlProblems.robbins( - ::JuMPBackend, args...; N::Int=steps_number_data(:robbins), + ::JuMPBackend, args...; grid_size::Int=steps_number_data(:robbins), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -54,7 +54,7 @@ function OptimalControlProblems.robbins( begin t0, t0 # (required if the initial time is fixed) tf, tf # (required if the final time is fixed) - N, N # (required) + N, grid_size # (required) end ) # ------------------------------------------------ diff --git a/ext/JuMPModels/robot.jl b/ext/JuMPModels/robot.jl index 43cf3da9..c8eda1fc 100644 --- a/ext/JuMPModels/robot.jl +++ b/ext/JuMPModels/robot.jl @@ -28,7 +28,7 @@ julia> model = OptimalControlProblems.robot(JuMPBackend(); N=100) - Problem formulation available at: https://github.com/MadNLP/COPSBenchmark.jl/blob/main/src/robot.jl """ function OptimalControlProblems.robot( - ::JuMPBackend, args...; N::Int=steps_number_data(:robot), + ::JuMPBackend, args...; grid_size::Int=steps_number_data(:robot), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -59,7 +59,7 @@ function OptimalControlProblems.robot( model, begin t0, t0 # (required if the initial time is fixed) - N, N # (required) + N, grid_size # (required) end ) # ------------------------------------------------ @@ -88,7 +88,6 @@ function OptimalControlProblems.robot( @constraints( model, begin - # initial ρ[0] == ρ0 ϕ[0] == ϕ0 diff --git a/ext/JuMPModels/rocket.jl b/ext/JuMPModels/rocket.jl index 810fcf66..373c8a58 100644 --- a/ext/JuMPModels/rocket.jl +++ b/ext/JuMPModels/rocket.jl @@ -28,7 +28,7 @@ julia> model = OptimalControlProblems.rocket(JuMPBackend(); N=200) - Problem formulation available at: https://github.com/MadNLP/COPSBenchmark.jl/blob/main/src/rocket.jl """ function OptimalControlProblems.rocket( - ::JuMPBackend, args...; N::Int=steps_number_data(:rocket), + ::JuMPBackend, args...; grid_size::Int=steps_number_data(:rocket), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -60,7 +60,7 @@ function OptimalControlProblems.rocket( model, begin t0, t0 # (required if the initial time is fixed) - N, N # (required) + N, grid_size # (required) end ) # ------------------------------------------------ diff --git a/ext/JuMPModels/space_shuttle.jl b/ext/JuMPModels/space_shuttle.jl index e6480f24..9147b757 100644 --- a/ext/JuMPModels/space_shuttle.jl +++ b/ext/JuMPModels/space_shuttle.jl @@ -29,7 +29,7 @@ julia> model = OptimalControlProblems.space_shuttle(JuMPBackend(); N=200) - Problem formulation and tutorial available at: https://jump.dev/JuMP.jl/stable/tutorials/nonlinear/space_shuttle_reentry_trajectory/ """ function OptimalControlProblems.space_shuttle( - ::JuMPBackend, args...; N::Int=steps_number_data(:space_shuttle), + ::JuMPBackend, args...; grid_size::Int=steps_number_data(:space_shuttle), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -90,7 +90,7 @@ function OptimalControlProblems.space_shuttle( model, begin t0, t0 # (required if the initial time is fixed) - N, N # (required) + N, grid_size # (required) end ) # ------------------------------------------------ @@ -117,8 +117,8 @@ function OptimalControlProblems.space_shuttle( end ) - ## Fix initial conditions - # initial and final conditions + # Fix initial conditions + ## initial and final conditions @constraints( model, begin @@ -134,14 +134,13 @@ function OptimalControlProblems.space_shuttle( end ) - ## initial guess: linear interpolation between boundary conditions - - # Helper function for linear interpolation + # initial guess: linear interpolation between boundary conditions + ## Helper function for linear interpolation function linear_interpolate(x_s, x_t, n) return [x_s + (i - 1) / (n - 1) * (x_t - x_s) for i in 1:n] end - # Interpolate each parameter separately + ## Interpolate each parameter separately h_interp = linear_interpolate(h_s, h_t, N+1) ϕ_interp = linear_interpolate(ϕ_s, ϕ_s, N+1) # no change in longitude θ_interp = linear_interpolate(θ_s, θ_s, N+1) # no change in latitude @@ -152,7 +151,7 @@ function OptimalControlProblems.space_shuttle( β_interp = linear_interpolate(β_s, β_s, N+1) # no change in bank angle t_interp = linear_interpolate(t_s, t_s, N+1) # no change in time step - # Combine all interpolated parameters into an array of arrays + ## Combine all interpolated parameters into an array of arrays interpolated_values = [ transpose([h, ϕ, θ, v, γ, ψ, α, β, t]) for (h, ϕ, θ, v, γ, ψ, α, β, t) in zip( h_interp, @@ -167,7 +166,7 @@ function OptimalControlProblems.space_shuttle( ) ] - # Create the initial guess by summing the interpolated values + ## Create the initial guess by summing the interpolated values initial_guess = reduce(vcat, interpolated_values) set_start_value.(model[:scaled_h], vec(initial_guess[:, 1])) set_start_value.(model[:ϕ], vec(initial_guess[:, 2])) @@ -180,11 +179,11 @@ function OptimalControlProblems.space_shuttle( set_start_value.(model[:tf], (tf_min+tf_max)/2) #set_start_value.(model[:Δt], vec(initial_guess[1:(end - 1), 9])) - ## Functions to restore `h` and `v` to their true scale + # Functions to restore `h` and `v` to their true scale @expression(model, h[j = 0:N], scaled_h[j] * scaling_h) @expression(model, v[j = 0:N], scaled_v[j] * scaling_v) - # Helper functions + ## Helper functions @expression(model, c_L[j = 0:N], a₀ + a₁ * rad2deg(α[j])) @expression(model, c_D[j = 0:N], b₀ + b₁ * rad2deg(α[j]) + b₂ * rad2deg(α[j])^2) @expression(model, ρ[j = 0:N], ρ₀ * exp(-h[j] / hᵣ)) @@ -193,7 +192,7 @@ function OptimalControlProblems.space_shuttle( @expression(model, r[j = 0:N], Rₑ + h[j]) @expression(model, g[j = 0:N], μ / r[j]^2) - ## Motion of the vehicle as a differential-algebraic system of equations (DAEs) + # Motion of the vehicle as a differential-algebraic system of equations (DAEs) @expression(model, δh[j = 0:N], v[j] * sin(γ[j])) @expression(model, δϕ[j = 0:N], (v[j] / r[j]) * cos(γ[j]) * sin(ψ[j]) / cos(θ[j])) @expression(model, δθ[j = 0:N], (v[j] / r[j]) * cos(γ[j]) * cos(ψ[j])) diff --git a/ext/JuMPModels/steering.jl b/ext/JuMPModels/steering.jl index 76b20dca..a2ff4425 100644 --- a/ext/JuMPModels/steering.jl +++ b/ext/JuMPModels/steering.jl @@ -28,7 +28,7 @@ julia> model = OptimalControlProblems.steering(JuMPBackend(); N=200) - Problem formulation available at: https://github.com/MadNLP/COPSBenchmark.jl/blob/main/src/steering.jl """ function OptimalControlProblems.steering( - ::JuMPBackend, args...; N::Int=steps_number_data(:steering), + ::JuMPBackend, args...; grid_size::Int=steps_number_data(:steering), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -40,7 +40,7 @@ function OptimalControlProblems.steering( u_min = params[:u_min] u_max = params[:u_max] xs = params[:xs] - xf = params[:xf] + yf = params[:yf] tf_start = 1 @@ -48,9 +48,9 @@ function OptimalControlProblems.steering( if i == 1 || i == 4 return 0.0 elseif i == 2 - return 5.0 * k * tf_start / N + return 5.0 * k * (tf_start-t0) / N elseif i == 3 - return 45.0 * k * tf_start / N + return 45.0 * k * (tf_start-t0) / N end end @@ -63,42 +63,46 @@ function OptimalControlProblems.steering( model, begin t0, t0 # (required if the initial time is fixed) - N, N # (required) + N, grid_size # (required) end ) # ------------------------------------------------ - @variable(model, u_min <= u[i = 1:(N + 1)] <= u_max, start = 0) # control - @variable(model, x1[i = 1:(N + 1)], start = gen_x0(i, 1)) # state x1 - @variable(model, x2[i = 1:(N + 1)], start = gen_x0(i, 2)) # state x2 - @variable(model, x3[i = 1:(N + 1)], start = gen_x0(i, 3)) # state x3 - @variable(model, x4[i = 1:(N + 1)], start = gen_x0(i, 4)) # state x4 - @variable(model, tf, start = tf_start) # final time - - @expression(model, Δt, tf / N) # step size + # state, control and variable (final time) + @variables( + model, + begin + u_min <= u[i = 0:N] <= u_max, (start = 0) + x1[i = 0:N], (start = gen_x0(i, 1)) + x2[i = 0:N], (start = gen_x0(i, 2)) + x3[i = 0:N], (start = gen_x0(i, 3)) + x4[i = 0:N], (start = gen_x0(i, 4)) + tf >= 0, (start = tf_start) + end + ) # boundary conditions - @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[N + 1] == xf[1]) - @constraint(model, x3[N + 1] == xf[2]) - @constraint(model, x4[N + 1] == xf[3]) - - # constraint on final time - @constraint(model, tf >= 0) + @constraints( + model, + begin + x1[0] == xs[1] + x3[0] == xs[3] + x4[0] == xs[4] + x2[N] == yf[1] + x3[N] == yf[2] + x4[N] == yf[3] + end + ) # dynamics + @expression(model, Δt, (tf-t0) / N) # step size @constraints( model, begin - ∂x1[i = 1:N], x1[i + 1] == x1[i] + 0.5 * Δt * (x3[i] + x3[i + 1]) - ∂x2[i = 1:N], x2[i + 1] == x2[i] + 0.5 * Δt * (x4[i] + x4[i + 1]) - ∂x3[i = 1:N], - x3[i + 1] == x3[i] + 0.5 * Δt * (a * cos(u[i]) + a * cos(u[i + 1])) - ∂x4[i = 1:N], - x4[i + 1] == x4[i] + 0.5 * Δt * (a * sin(u[i]) + a * sin(u[i + 1])) + ∂x1[i = 1:N], x1[i] == x1[i - 1] + 0.5 * Δt * (x3[i - 1] + x3[i]) + ∂x2[i = 1:N], x2[i] == x2[i - 1] + 0.5 * Δt * (x4[i - 1] + x4[i]) + ∂x3[i = 1:N], x3[i] == x3[i - 1] + 0.5 * Δt * (a * cos(u[i - 1]) + a * cos(u[i])) + ∂x4[i = 1:N], x4[i] == x4[i - 1] + 0.5 * Δt * (a * sin(u[i - 1]) + a * sin(u[i])) end ) diff --git a/ext/JuMPModels/vanderpol.jl b/ext/JuMPModels/vanderpol.jl index 175f7759..dab7e352 100644 --- a/ext/JuMPModels/vanderpol.jl +++ b/ext/JuMPModels/vanderpol.jl @@ -27,7 +27,7 @@ julia> model = OptimalControlProblems.vanderpol(JuMPBackend(); N=100) - Problem formulation available at: https://github.com/control-toolbox/bocop/tree/main/bocop """ function OptimalControlProblems.vanderpol( - ::JuMPBackend, args...; N::Int=steps_number_data(:vanderpol), + ::JuMPBackend, args...; grid_size::Int=steps_number_data(:vanderpol), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -49,7 +49,7 @@ function OptimalControlProblems.vanderpol( begin t0, t0 # (required if the initial time is fixed) tf, tf # (required if the final time is fixed) - N, N # (required) + N, grid_size # (required) end ) # ------------------------------------------------ diff --git a/ext/MetaData/beam.jl b/ext/MetaData/beam.jl index 573768ce..8175bc59 100644 --- a/ext/MetaData/beam.jl +++ b/ext/MetaData/beam.jl @@ -1,5 +1,5 @@ beam_meta = OrderedDict( - :N => 500, + :grid_size => 500, :state_name => ["x1", "x2"], :costate_name => ["∂x1", "∂x2"], :control_name => ["u"], diff --git a/ext/MetaData/bioreactor.jl b/ext/MetaData/bioreactor.jl index d5ef3420..119752b2 100644 --- a/ext/MetaData/bioreactor.jl +++ b/ext/MetaData/bioreactor.jl @@ -1,17 +1,17 @@ bioreactor_meta = OrderedDict( - :N => 600, + :grid_size => 600, :state_name => ["y", "s", "b"], :costate_name => ["∂y", "∂s", "∂b"], :control_name => ["u"], :variable_name => nothing, :time_grid_name => Dict( :initial_time => "t0", - :final_time => "T", + :final_time => "tf", :steps_number => "N" ), :parameters => ( t0 = 0, - T = 200, # the final time is 10N where N = 20 by default + tf = 200, # the final time is 10N where N = 20 by default β = 1, c = 2, γ = 1, diff --git a/ext/MetaData/cart_pendulum.jl b/ext/MetaData/cart_pendulum.jl index 4e6481ac..1f5aa2b8 100644 --- a/ext/MetaData/cart_pendulum.jl +++ b/ext/MetaData/cart_pendulum.jl @@ -1,5 +1,5 @@ cart_pendulum_meta = OrderedDict( - :N => 500, + :grid_size => 500, :state_name => ["x", "v", "θ", "ω"], :costate_name => ["∂x", "∂v", "∂θ", "∂ω"], :control_name => ["Fex"], @@ -18,5 +18,11 @@ cart_pendulum_meta = OrderedDict( max_f = 5, max_x = 1, max_v = 2, + tf_l = 0.1, + x_i = 0, + θ_i = 0, + ω_i = 0, + θ_f = π, + ω_f = 0, ), ) diff --git a/ext/MetaData/chain.jl b/ext/MetaData/chain.jl index 208bb65c..f69304c4 100644 --- a/ext/MetaData/chain.jl +++ b/ext/MetaData/chain.jl @@ -1,5 +1,5 @@ chain_meta = OrderedDict( - :N => 500, + :grid_size => 500, :state_name => ["x1", "x2", "x3"], :costate_name => ["∂x1", "∂x2", "∂x3"], :control_name => ["u"], @@ -15,5 +15,7 @@ chain_meta = OrderedDict( L = 4, a = 1, b = 3, + x2_i = 0, + x3_i = 0, ), ) diff --git a/ext/MetaData/dielectrophoretic_particle.jl b/ext/MetaData/dielectrophoretic_particle.jl index aa3622a5..f8dd0240 100644 --- a/ext/MetaData/dielectrophoretic_particle.jl +++ b/ext/MetaData/dielectrophoretic_particle.jl @@ -1,5 +1,5 @@ dielectrophoretic_particle_meta = OrderedDict( - :N => 500, + :grid_size => 500, :state_name => ["x", "y"], :costate_name => ["∂x", "∂y"], :control_name => ["u"], @@ -15,5 +15,9 @@ dielectrophoretic_particle_meta = OrderedDict( xf = 2, α = -0.75, c = 1, + u_l = -1, + u_u = 1, + tf_l = 0, + y_i = 0, ), ) diff --git a/ext/MetaData/double_oscillator.jl b/ext/MetaData/double_oscillator.jl index cf166a6a..2d0ec95e 100644 --- a/ext/MetaData/double_oscillator.jl +++ b/ext/MetaData/double_oscillator.jl @@ -1,21 +1,25 @@ double_oscillator_meta = OrderedDict( - :N => 500, + :grid_size => 500, :state_name => ["x1", "x2", "x3", "x4"], :costate_name => ["∂x1", "∂x2", "∂x3", "∂x4"], :control_name => ["u"], :variable_name => nothing, :time_grid_name => Dict( :initial_time => "t0", - :final_time => "T", + :final_time => "tf", :steps_number => "N" ), :parameters => ( t0 = 0, - T = 2π, + tf = 2π, m1 = 100, # [kg] m2 = 2, # [kg] c = 0.5, # [Ns/m] k1 = 100, # [N/m] k2 = 3, # [N/m] + u_l = -1, + u_u = 1, + x1_i = 0, + x2_i = 0, ), ) diff --git a/ext/MetaData/ducted_fan.jl b/ext/MetaData/ducted_fan.jl index 188789bb..cfce45ce 100644 --- a/ext/MetaData/ducted_fan.jl +++ b/ext/MetaData/ducted_fan.jl @@ -1,5 +1,5 @@ ducted_fan_meta = OrderedDict( - :N => 250, + :grid_size => 250, :state_name => ["x₁", "v₁", "x₂", "v₂", "α", "vα"], :costate_name => ["∂x₁", "∂v₁", "∂x₂", "∂v₂", "∂α", "∂vα"], :control_name => ["u₁", "u₂"], @@ -16,5 +16,14 @@ ducted_fan_meta = OrderedDict( m = 2.2, # [kg] mg = 4, # [N] μ = 1000, + α_l = -deg2rad(30), + α_u = deg2rad(30), + u₁_l = -5, + u₁_u = 5, + u₂_l = 0, + u₂_u = 17, + tf_l = 0.1, + x_i = [0, 0, 0, 0, 0, 0], + x_f = [1, 0, 0, 0, 0, 0], ), ) diff --git a/ext/MetaData/electric_vehicle.jl b/ext/MetaData/electric_vehicle.jl index 66d62395..45e2a671 100644 --- a/ext/MetaData/electric_vehicle.jl +++ b/ext/MetaData/electric_vehicle.jl @@ -1,5 +1,5 @@ electric_vehicle_meta = OrderedDict( - :N => 500, + :grid_size => 500, :state_name => ["x", "v"], :costate_name => ["∂x", "∂v"], :control_name => ["u"], @@ -11,8 +11,7 @@ electric_vehicle_meta = OrderedDict( ), :parameters => ( t0 = 0, - tf = 1, - D = 10, + tf = 1, b1 = 1e0, b2 = 1e0, h0 = 0.1, @@ -22,5 +21,9 @@ electric_vehicle_meta = OrderedDict( α1 = 0.4, α2 = -1, α3 = 0.1, + x_i = 0, + v_i = 0, + x_f = 10, + v_f = 0, ), ) diff --git a/ext/MetaData/glider.jl b/ext/MetaData/glider.jl index 6eb3d9c7..69694e02 100644 --- a/ext/MetaData/glider.jl +++ b/ext/MetaData/glider.jl @@ -1,5 +1,5 @@ glider_meta = OrderedDict( - :N => 500, + :grid_size => 500, :state_name => ["x", "y", "vx", "vy"], :costate_name => ["∂x", "∂y", "∂vx", "∂vy"], :control_name => ["cL"], @@ -11,15 +11,15 @@ glider_meta = OrderedDict( ), :parameters => ( t0 = 0, - x_0 = 0, - y_0 = 1000, + x_i = 0, + y_i = 1000, y_f = 900, - vx_0 = 13.23, + vx_i = 13.23, vx_f = 13.23, - vy_0 = -1.288, + vy_i = -1.288, vy_f = -1.288, u_c = 2.5, - r_0 = 100, + r_i = 100, m = 100, g = 9.81, c0 = 0.034, @@ -28,5 +28,8 @@ glider_meta = OrderedDict( ρ = 1.13, cL_min = 0, cL_max = 1.4, + tf_l = 0, + x_l = 0, + vx_l = 0, ), ) diff --git a/ext/MetaData/insurance.jl b/ext/MetaData/insurance.jl index ac71713d..0c23b4e9 100644 --- a/ext/MetaData/insurance.jl +++ b/ext/MetaData/insurance.jl @@ -1,5 +1,5 @@ insurance_meta = OrderedDict( - :N => 500, + :grid_size => 500, :state_name => ["I", "m", "x₃"], :costate_name => ["∂I", "∂m", "∂x₃"], :control_name => ["h", "R", "H", "U", "dUdR"], diff --git a/ext/MetaData/jackson.jl b/ext/MetaData/jackson.jl index 41b66894..f7a359f4 100644 --- a/ext/MetaData/jackson.jl +++ b/ext/MetaData/jackson.jl @@ -1,5 +1,5 @@ jackson_meta = OrderedDict( - :N => 500, + :grid_size => 500, :state_name => ["a", "b", "x3"], :costate_name => ["∂a", "∂b", "∂x3"], :control_name => ["u"], diff --git a/ext/MetaData/moonlander.jl b/ext/MetaData/moonlander.jl index acea3273..7d919a46 100644 --- a/ext/MetaData/moonlander.jl +++ b/ext/MetaData/moonlander.jl @@ -1,5 +1,5 @@ moonlander_meta = OrderedDict( - :N => 500, + :grid_size => 500, :state_name => ["p1", "p2", "dp1", "dp2", "θ", "dθ"], :costate_name => ["∂p1", "∂p2", "∂dp1", "∂dp2", "∂θ", "∂dθ"], :control_name => ["F1", "F2"], diff --git a/ext/MetaData/robbins.jl b/ext/MetaData/robbins.jl index 8088402d..ca009a51 100644 --- a/ext/MetaData/robbins.jl +++ b/ext/MetaData/robbins.jl @@ -1,5 +1,5 @@ robbins_meta = OrderedDict( - :N => 500, + :grid_size => 500, :state_name => ["x1", "x2", "x3"], :costate_name => ["∂x1", "∂x2", "∂x3"], :control_name => ["u"], diff --git a/ext/MetaData/robot.jl b/ext/MetaData/robot.jl index bf847867..b407bc32 100644 --- a/ext/MetaData/robot.jl +++ b/ext/MetaData/robot.jl @@ -1,5 +1,5 @@ robot_meta = OrderedDict( - :N => 250, + :grid_size => 250, :state_name => ["ρ", "dρ", "θ", "dθ", "ϕ", "dϕ"], :costate_name => ["∂ρ", "∂dρ", "∂θ", "∂dθ", "∂ϕ", "∂dϕ"], :control_name => ["uρ", "uθ", "uϕ"], diff --git a/ext/MetaData/rocket.jl b/ext/MetaData/rocket.jl index 601e78b1..5be713e1 100644 --- a/ext/MetaData/rocket.jl +++ b/ext/MetaData/rocket.jl @@ -1,5 +1,5 @@ rocket_meta = OrderedDict( - :N => 500, + :grid_size => 500, :state_name => ["h", "v", "m"], :costate_name => ["∂h", "∂v", "∂m"], :control_name => ["T"], diff --git a/ext/MetaData/space_shuttle.jl b/ext/MetaData/space_shuttle.jl index 8d00d20b..b8cdd9e6 100644 --- a/ext/MetaData/space_shuttle.jl +++ b/ext/MetaData/space_shuttle.jl @@ -1,5 +1,5 @@ space_shuttle_meta = OrderedDict( - :N => 500, + :grid_size => 500, :state_name => ["scaled_h", "ϕ", "θ", "scaled_v", "γ", "ψ"], :costate_name => ["∂h", "∂ϕ", "∂θ", "∂v", "∂γ", "∂ψ"], :control_name => ["α", "β"], diff --git a/ext/MetaData/steering.jl b/ext/MetaData/steering.jl index 8999d1fd..f8d05982 100644 --- a/ext/MetaData/steering.jl +++ b/ext/MetaData/steering.jl @@ -1,5 +1,5 @@ steering_meta = OrderedDict( - :N => 500, + :grid_size => 500, :state_name => ["x1", "x2", "x3", "x4"], :costate_name => ["∂x1", "∂x2", "∂x3", "∂x4"], :control_name => ["u"], @@ -15,6 +15,6 @@ steering_meta = OrderedDict( u_min = -π/2, u_max = π/2, xs = zeros(4), - xf = [5, 45, 0], + yf = [5, 45, 0], ), ) diff --git a/ext/MetaData/vanderpol.jl b/ext/MetaData/vanderpol.jl index 69b246f6..ce2899e4 100644 --- a/ext/MetaData/vanderpol.jl +++ b/ext/MetaData/vanderpol.jl @@ -1,5 +1,5 @@ vanderpol_meta = OrderedDict( - :N => 500, + :grid_size => 500, :state_name => ["x1", "x2"], :costate_name => ["∂x1", "∂x2"], :control_name => ["u"], diff --git a/ext/OptimalControlModels/beam.jl b/ext/OptimalControlModels/beam.jl index 99cfcf4c..f550bb75 100644 --- a/ext/OptimalControlModels/beam.jl +++ b/ext/OptimalControlModels/beam.jl @@ -30,7 +30,7 @@ julia> docp = OptimalControlProblems.beam(OptimalControlBackend(); N=100); function OptimalControlProblems.beam( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:beam), + grid_size::Int=steps_number_data(:beam), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -65,7 +65,7 @@ function OptimalControlProblems.beam( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels/bioreactor.jl b/ext/OptimalControlModels/bioreactor.jl index 481e7f12..b686f6af 100644 --- a/ext/OptimalControlModels/bioreactor.jl +++ b/ext/OptimalControlModels/bioreactor.jl @@ -30,7 +30,7 @@ julia> docp = OptimalControlProblems.bioreactor(OptimalControlBackend(); N=100); function OptimalControlProblems.bioreactor( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:bioreactor), + grid_size::Int=steps_number_data(:bioreactor), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -38,7 +38,7 @@ function OptimalControlProblems.bioreactor( # parameters params = parameters_data(:bioreactor, parameters) t0 = params[:t0] - T = params[:T] + tf = params[:tf] β = params[:β] c = params[:c] γ = params[:γ] @@ -55,13 +55,12 @@ function OptimalControlProblems.bioreactor( # Model ocp = @def begin - t ∈ [t0, T], time + t ∈ [t0, tf], time x = (y, s, b) ∈ R³, state u ∈ R, control x(t) ≥ x_l u_l ≤ u(t) ≤ u_u - x0_l ≤ x(t0) ≤ x0_u μ = light(t, halfperiod) * μbar @@ -103,7 +102,7 @@ function OptimalControlProblems.bioreactor( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels/cart_pendulum.jl b/ext/OptimalControlModels/cart_pendulum.jl index 13fa5992..033f0950 100644 --- a/ext/OptimalControlModels/cart_pendulum.jl +++ b/ext/OptimalControlModels/cart_pendulum.jl @@ -30,7 +30,7 @@ julia> docp = OptimalControlProblems.cart_pendulum(OptimalControlBackend(); N=10 function OptimalControlProblems.cart_pendulum( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:cart_pendulum), + grid_size::Int=steps_number_data(:cart_pendulum), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -46,6 +46,12 @@ function OptimalControlProblems.cart_pendulum( max_f = params[:max_f] max_x = params[:max_x] max_v = params[:max_v] + tf_l = params[:tf_l] + x_i = params[:x_i] + θ_i = params[:θ_i] + ω_i = params[:ω_i] + θ_f = params[:θ_f] + ω_f = params[:ω_f] ocp = @def begin # time, variable, state and control @@ -55,23 +61,23 @@ function OptimalControlProblems.cart_pendulum( Fex ∈ R, control # state constraints - -max_x ≤ x(t) ≤ max_x, (x_con) - -max_v ≤ v(t) ≤ max_v, (v_con) + -max_x ≤ x(t) ≤ max_x, (x_c) + -max_v ≤ v(t) ≤ max_v, (v_c) # control constraints - -max_f ≤ Fex(t) ≤ max_f, (Fex_con) + -max_f ≤ Fex(t) ≤ max_f, (Fex_c) # variables constraints - tf ≥ 0.1, (tf_con) + tf ≥ tf_l, (tf_c) # initial conditions - x(t0) == 0, (x_ic) - θ(t0) == 0, (θ_ic) - ω(t0) == 0, (ω_ic) + x(t0) == x_i, (x_i) + θ(t0) == θ_i, (θ_i) + ω(t0) == ω_i, (ω_i) # final conditions - θ(tf) == π, (θ_fc) - ω(tf) == 0, (ω_fc) + θ(tf) == θ_f, (θ_f) + ω(tf) == ω_f, (ω_f) # dynamics ẏ(t) == dynamics(v(t), θ(t), ω(t), Fex(t), ddx) @@ -112,7 +118,7 @@ function OptimalControlProblems.cart_pendulum( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels/chain.jl b/ext/OptimalControlModels/chain.jl index b18b1a02..509fb1a1 100644 --- a/ext/OptimalControlModels/chain.jl +++ b/ext/OptimalControlModels/chain.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.chain(OptimalControlBackend(); N=100); function OptimalControlProblems.chain( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:chain), + grid_size::Int=steps_number_data(:chain), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -43,6 +43,8 @@ function OptimalControlProblems.chain( L = params[:L] a = params[:a] b = params[:b] + x2_i = params[:x2_i] + x3_i = params[:x3_i] # model ocp = @def begin @@ -52,8 +54,8 @@ function OptimalControlProblems.chain( # initial conditions x₁(t0) == a, (x1_i) - x₂(t0) == 0, (x2_i) - x₃(t0) == 0, (x3_i) + x₂(t0) == x2_i, (x2_i) + x₃(t0) == x3_i, (x3_i) # final conditions x₁(tf) == b, (x1_f) @@ -89,7 +91,7 @@ function OptimalControlProblems.chain( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels/dielectrophoretic_particle.jl b/ext/OptimalControlModels/dielectrophoretic_particle.jl index 28899425..5956ea15 100644 --- a/ext/OptimalControlModels/dielectrophoretic_particle.jl +++ b/ext/OptimalControlModels/dielectrophoretic_particle.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.dielectrophoretic_particle(OptimalControlBa function OptimalControlProblems.dielectrophoretic_particle( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:dielectrophoretic_particle), + grid_size::Int=steps_number_data(:dielectrophoretic_particle), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -43,18 +43,25 @@ function OptimalControlProblems.dielectrophoretic_particle( xf = params[:xf] α = params[:α] c = params[:c] + u_l = params[:u_l] + u_u = params[:u_u] + tf_l = params[:tf_l] + y_i = params[:y_i] ocp = @def begin tf ∈ R, variable t ∈ [t0, tf], time q = (x, y) ∈ R², state u ∈ R, control + x(t0) == x0, (x_i) - y(t0) == 0, (y_i) + y(t0) == y_i, (y_i) x(tf) == xf, (x_f) - tf ≥ 0, (tf_c) - -1 ≤ u(t) ≤ 1, (u_c) + tf ≥ tf_l, (tf_c) + u_l ≤ u(t) ≤ u_u, (u_c) + q̇(t) == dynamics(y(t), u(t)) + tf → min end @@ -71,7 +78,7 @@ function OptimalControlProblems.dielectrophoretic_particle( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels/double_oscillator.jl b/ext/OptimalControlModels/double_oscillator.jl index 1862effd..a896fb23 100644 --- a/ext/OptimalControlModels/double_oscillator.jl +++ b/ext/OptimalControlModels/double_oscillator.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.double_oscillator(OptimalControlBackend(); function OptimalControlProblems.double_oscillator( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:double_oscillator), + grid_size::Int=steps_number_data(:double_oscillator), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -45,16 +45,23 @@ function OptimalControlProblems.double_oscillator( c = params[:c] k1 = params[:k1] k2 = params[:k2] + u_l = params[:u_l] + u_u = params[:u_u] + x1_i = params[:x1_i] + x2_i = params[:x2_i] # model ocp = @def begin t ∈ [t0, tf], time x ∈ R⁴, state u ∈ R, control - -1 ≤ u(t) ≤ 1, (u_c) - x₁(t0) == 0, (x1_i) - x₂(t0) == 0, (x2_i) + + u_l ≤ u(t) ≤ u_u, (u_c) + x₁(t0) == x1_i, (x1_i) + x₂(t0) == x2_i, (x2_i) + ẋ(t) == dynamics(x(t), u(t), F(t)) + 0.5 * ∫(x₁(t)^2 + x₂(t)^2 + u(t)^2) → min end @@ -82,7 +89,7 @@ function OptimalControlProblems.double_oscillator( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels/ducted_fan.jl b/ext/OptimalControlModels/ducted_fan.jl index c91198af..7def24ab 100644 --- a/ext/OptimalControlModels/ducted_fan.jl +++ b/ext/OptimalControlModels/ducted_fan.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.ducted_fan(OptimalControlBackend(); N=250); function OptimalControlProblems.ducted_fan( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:ducted_fan), + grid_size::Int=steps_number_data(:ducted_fan), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -44,6 +44,15 @@ function OptimalControlProblems.ducted_fan( m = params[:m] mg = params[:mg] μ = params[:μ] + α_l = params[:α_l] + α_u = params[:α_u] + u₁_l = params[:u₁_l] + u₁_u = params[:u₁_u] + u₂_l = params[:u₂_l] + u₂_u = params[:u₂_u] + tf_l = params[:tf_l] + x_i = params[:x_i] + x_f = params[:x_f] ocp = @def begin tf ∈ R, variable @@ -52,30 +61,30 @@ function OptimalControlProblems.ducted_fan( u ∈ R², control # tf constraints - tf ≥ 0.1, (tf_c) + tf ≥ tf_l, (tf_c) # state constraints - -deg2rad(30) ≤ α(t) ≤ deg2rad(30), (α_c) + α_l ≤ α(t) ≤ α_u, (α_c) # control constraints - -5 ≤ u₁(t) ≤ 5, (u₁_c) - 0 ≤ u₂(t) ≤ 17, (u₂_c) + u₁_l ≤ u₁(t) ≤ u₁_u, (u₁_c) + u₂_l ≤ u₂(t) ≤ u₂_u, (u₂_c) # initial constraints - x₁(t0) == 0, (x₁_i) - v₁(t0) == 0, (v₁_i) - x₂(t0) == 0, (x₂_i) - v₂(t0) == 0, (v₂_i) - α(t0) == 0, (α_i) - vα(t0) == 0, (vα_i) + x₁(t0) == x_i[1], (x₁_i) + v₁(t0) == x_i[2], (v₁_i) + x₂(t0) == x_i[3], (x₂_i) + v₂(t0) == x_i[4], (v₂_i) + α(t0) == x_i[5], (α_i) + vα(t0) == x_i[6], (vα_i) # final constraints - x₁(tf) == 1, (x₁_f) - v₁(tf) == 0, (v₁_f) - x₂(tf) == 0, (x₂_f) - v₂(tf) == 0, (v₂_f) - α(tf) == 0, (α_f) - vα(tf) == 0, (vα_f) + x₁(tf) == x_f[1], (x₁_f) + v₁(tf) == x_f[2], (v₁_f) + x₂(tf) == x_f[3], (x₂_f) + v₂(tf) == x_f[4], (v₂_f) + α(tf) == x_f[5], (α_f) + vα(tf) == x_f[6], (vα_f) # dynamics ẋ(t) == dynamics(v₁(t), v₂(t), α(t), vα(t), u₁(t), u₂(t)) @@ -107,7 +116,7 @@ function OptimalControlProblems.ducted_fan( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels/electric_vehicle.jl b/ext/OptimalControlModels/electric_vehicle.jl index b30c2056..58805726 100644 --- a/ext/OptimalControlModels/electric_vehicle.jl +++ b/ext/OptimalControlModels/electric_vehicle.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.electric_vehicle(OptimalControlBackend(); N function OptimalControlProblems.electric_vehicle( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:electric_vehicle), + grid_size::Int=steps_number_data(:electric_vehicle), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -40,7 +40,6 @@ function OptimalControlProblems.electric_vehicle( params = parameters_data(:electric_vehicle, parameters) t0 = params[:t0] tf = params[:tf] - D = params[:D] b1 = params[:b1] b2 = params[:b2] h0 = params[:h0] @@ -50,6 +49,10 @@ function OptimalControlProblems.electric_vehicle( α1 = params[:α1] α2 = params[:α2] α3 = params[:α3] + x_i = params[:x_i] + v_i = params[:v_i] + x_f = params[:x_f] + v_f = params[:v_f] # model ocp = @def begin @@ -57,10 +60,10 @@ function OptimalControlProblems.electric_vehicle( y = (x, v) ∈ R², state u ∈ R, control - x(t0) == 0, (x_i) - v(t0) == 0, (v_i) - x(tf) == D, (x_f) - v(tf) == 0, (v_f) + x(t0) == x_i, (x_i) + v(t0) == v_i, (v_i) + x(tf) == x_f, (x_f) + v(tf) == v_f, (v_f) ẏ(t) == dynamics(x(t), v(t), u(t)) @@ -81,7 +84,7 @@ function OptimalControlProblems.electric_vehicle( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels/glider.jl b/ext/OptimalControlModels/glider.jl index d33f67bd..35c30998 100644 --- a/ext/OptimalControlModels/glider.jl +++ b/ext/OptimalControlModels/glider.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.glider(OptimalControlBackend(); N=500); function OptimalControlProblems.glider( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:glider), + grid_size::Int=steps_number_data(:glider), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -39,15 +39,15 @@ function OptimalControlProblems.glider( # parameters params = parameters_data(:glider, parameters) t0 = params[:t0] - x_0 = params[:x_0] - y_0 = params[:y_0] + x_i = params[:x_i] + y_i = params[:y_i] y_f = params[:y_f] - vx_0 = params[:vx_0] + vx_i = params[:vx_i] vx_f = params[:vx_f] - vy_0 = params[:vy_0] + vy_i = params[:vy_i] vy_f = params[:vy_f] u_c = params[:u_c] - r_0 = params[:r_0] + r_i = params[:r_i] m = params[:m] g = params[:g] c0 = params[:c0] @@ -56,6 +56,9 @@ function OptimalControlProblems.glider( ρ = params[:ρ] cL_min = params[:cL_min] cL_max = params[:cL_max] + tf_l = params[:tf_l] + x_l = params[:x_l] + vx_l = params[:vx_l] # model ocp = @def begin @@ -65,20 +68,20 @@ function OptimalControlProblems.glider( cL ∈ R, control # state constraints - x(t) ≥ 0, (x_c) - vx(t) ≥ 0, (vx_c) + x(t) ≥ x_l, (x_c) + vx(t) ≥ vx_l, (vx_c) # control constraints cL_min ≤ cL(t) ≤ cL_max, (cL_c) # initial conditions - x(t0) == x_0, (x0_i) - y(t0) == y_0, (y0_i) - vx(t0) == vx_0, (vx0_i) - vy(t0) == vy_0, (vy0_i) + x(t0) == x_i, (x0_i) + y(t0) == y_i, (y0_i) + vx(t0) == vx_i, (vx0_i) + vy(t0) == vy_i, (vy0_i) # final conditions - tf ≥ 0 + tf ≥ tf_l y(tf) == y_f, (yf_f) vx(tf) == vx_f, (vxf_f) vy(tf) == vy_f, (vyf_f) @@ -91,7 +94,7 @@ function OptimalControlProblems.glider( end function dynamics(x, vx, vy, cL) - r = (x / r_0 - 2.5)^2 + r = (x / r_i - 2.5)^2 UpD = u_c * (1 - r) * exp(-r) w = vy - UpD v = √(vx^2 + w^2) @@ -108,7 +111,7 @@ function OptimalControlProblems.glider( # initial guess tfinit = 1 - xinit = t -> [x_0 + vx_0 * t / tfinit, y_0 + t / tfinit * (y_f - y_0), vx_0, vy_0] + xinit = t -> [x_i + vx_i * t / tfinit, y_i + t / tfinit * (y_f - y_i), vx_i, vy_i] uinit = cL_max / 2 init = (state=xinit, control=uinit, variable=tfinit) @@ -118,7 +121,7 @@ function OptimalControlProblems.glider( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels/insurance.jl b/ext/OptimalControlModels/insurance.jl index 42db8520..115a0b5b 100644 --- a/ext/OptimalControlModels/insurance.jl +++ b/ext/OptimalControlModels/insurance.jl @@ -30,7 +30,7 @@ julia> docp = OptimalControlProblems.insurance(OptimalControlBackend(); N=500); function OptimalControlProblems.insurance( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:insurance), + grid_size::Int=steps_number_data(:insurance), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -108,7 +108,7 @@ function OptimalControlProblems.insurance( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels/jackson.jl b/ext/OptimalControlModels/jackson.jl index 29308305..24c276d3 100644 --- a/ext/OptimalControlModels/jackson.jl +++ b/ext/OptimalControlModels/jackson.jl @@ -30,7 +30,7 @@ julia> docp = OptimalControlProblems.jackson(OptimalControlBackend(); N=500); function OptimalControlProblems.jackson( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:jackson), + grid_size::Int=steps_number_data(:jackson), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -77,7 +77,7 @@ function OptimalControlProblems.jackson( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels/moonlander.jl b/ext/OptimalControlModels/moonlander.jl index 87da9bcf..57a0acbf 100644 --- a/ext/OptimalControlModels/moonlander.jl +++ b/ext/OptimalControlModels/moonlander.jl @@ -26,7 +26,7 @@ julia> docp = OptimalControlProblems.moonlander(OptimalControlBackend(); N=500); function OptimalControlProblems.moonlander( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:moonlander), + grid_size::Int=steps_number_data(:moonlander), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -108,7 +108,7 @@ function OptimalControlProblems.moonlander( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels/robbins.jl b/ext/OptimalControlModels/robbins.jl index 6f8529dd..c7e1afb3 100644 --- a/ext/OptimalControlModels/robbins.jl +++ b/ext/OptimalControlModels/robbins.jl @@ -27,7 +27,7 @@ julia> docp = OptimalControlProblems.robbins(OptimalControlBackend(); N=500); function OptimalControlProblems.robbins( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:robbins), + grid_size::Int=steps_number_data(:robbins), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -67,7 +67,7 @@ function OptimalControlProblems.robbins( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels/robot.jl b/ext/OptimalControlModels/robot.jl index 9c8c3bdb..36bd4740 100644 --- a/ext/OptimalControlModels/robot.jl +++ b/ext/OptimalControlModels/robot.jl @@ -26,7 +26,7 @@ julia> docp = OptimalControlProblems.robot(OptimalControlBackend(); N=250); function OptimalControlProblems.robot( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:robot), + grid_size::Int=steps_number_data(:robot), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -105,7 +105,7 @@ function OptimalControlProblems.robot( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels/rocket.jl b/ext/OptimalControlModels/rocket.jl index 5343caec..5efdcf34 100644 --- a/ext/OptimalControlModels/rocket.jl +++ b/ext/OptimalControlModels/rocket.jl @@ -26,7 +26,7 @@ julia> docp = OptimalControlProblems.rocket(OptimalControlBackend(); N=500); function OptimalControlProblems.rocket( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:rocket), + grid_size::Int=steps_number_data(:rocket), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -101,7 +101,7 @@ function OptimalControlProblems.rocket( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels/space_shuttle.jl b/ext/OptimalControlModels/space_shuttle.jl index c4909d4b..e738424a 100644 --- a/ext/OptimalControlModels/space_shuttle.jl +++ b/ext/OptimalControlModels/space_shuttle.jl @@ -27,7 +27,7 @@ julia> docp = OptimalControlProblems.space_shuttle(OptimalControlBackend(); N=50 function OptimalControlProblems.space_shuttle( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:space_shuttle), + grid_size::Int=steps_number_data(:space_shuttle), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -175,7 +175,7 @@ function OptimalControlProblems.space_shuttle( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels/steering.jl b/ext/OptimalControlModels/steering.jl index c4cc51be..eeb7d352 100644 --- a/ext/OptimalControlModels/steering.jl +++ b/ext/OptimalControlModels/steering.jl @@ -26,7 +26,7 @@ julia> docp = OptimalControlProblems.steering(OptimalControlBackend(); N=500); function OptimalControlProblems.steering( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:steering), + grid_size::Int=steps_number_data(:steering), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -38,18 +38,18 @@ function OptimalControlProblems.steering( u_min = params[:u_min] u_max = params[:u_max] xs = params[:xs] - xf = params[:xf] + yf = params[:yf] # Model ocp = @def begin tf ∈ R, variable t ∈ [t0, tf], time x ∈ R⁴, state - u ∈ R¹, control + u ∈ R, control tf ≥ 0, (tf_c) x(t0) == xs, (x_i) - x[2:4](tf) == xf, (x_f) + x[2:4](tf) == yf, (y_f) u_min ≤ u(t) ≤ u_max, (u_c) ẋ(t) == dynamics(x(t), u(t)) @@ -67,9 +67,9 @@ function OptimalControlProblems.steering( if i == 1 || i == 4 return 0.0 elseif i == 2 - return 5.0 * t + return 5.0 * (t-t0) elseif i == 3 - return 45.0 * t + return 45.0 * (t-t0) end end xinit = t -> [gen_x0(t, i) for i in 1:4] @@ -81,7 +81,7 @@ function OptimalControlProblems.steering( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels/vanderpol.jl b/ext/OptimalControlModels/vanderpol.jl index d0c19d22..42e826c0 100644 --- a/ext/OptimalControlModels/vanderpol.jl +++ b/ext/OptimalControlModels/vanderpol.jl @@ -26,7 +26,7 @@ julia> docp = OptimalControlProblems.vanderpol(OptimalControlBackend(); N=500); function OptimalControlProblems.vanderpol( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:vanderpol), + grid_size::Int=steps_number_data(:vanderpol), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -62,7 +62,7 @@ function OptimalControlProblems.vanderpol( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels_s/beam_s.jl b/ext/OptimalControlModels_s/beam_s.jl index 47259b0d..28725226 100644 --- a/ext/OptimalControlModels_s/beam_s.jl +++ b/ext/OptimalControlModels_s/beam_s.jl @@ -30,7 +30,7 @@ julia> docp = OptimalControlProblems.beam(OptimalControlBackend(); N=100); function OptimalControlProblems.beam_s( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:beam), + grid_size::Int=steps_number_data(:beam), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -66,7 +66,7 @@ function OptimalControlProblems.beam_s( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels_s/chain_s.jl b/ext/OptimalControlModels_s/chain_s.jl index be932da0..6a0af3d0 100644 --- a/ext/OptimalControlModels_s/chain_s.jl +++ b/ext/OptimalControlModels_s/chain_s.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.chain(OptimalControlBackend(); N=100); function OptimalControlProblems.chain_s( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:chain), + grid_size::Int=steps_number_data(:chain), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -43,6 +43,8 @@ function OptimalControlProblems.chain_s( L = params[:L] a = params[:a] b = params[:b] + x2_i = params[:x2_i] + x3_i = params[:x3_i] # model ocp = @def begin @@ -52,8 +54,8 @@ function OptimalControlProblems.chain_s( # initial conditions x₁(t0) == a, (x1_i) - x₂(t0) == 0, (x2_i) - x₃(t0) == 0, (x3_i) + x₂(t0) == x2_i, (x2_i) + x₃(t0) == x3_i, (x3_i) # final conditions x₁(tf) == b, (x1_f) @@ -86,7 +88,7 @@ function OptimalControlProblems.chain_s( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels_s/dielectrophoretic_particle_s.jl b/ext/OptimalControlModels_s/dielectrophoretic_particle_s.jl index 2dd517df..686292df 100644 --- a/ext/OptimalControlModels_s/dielectrophoretic_particle_s.jl +++ b/ext/OptimalControlModels_s/dielectrophoretic_particle_s.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.dielectrophoretic_particle(OptimalControlBa function OptimalControlProblems.dielectrophoretic_particle_s( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:dielectrophoretic_particle), + grid_size::Int=steps_number_data(:dielectrophoretic_particle), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -43,19 +43,26 @@ function OptimalControlProblems.dielectrophoretic_particle_s( xf = params[:xf] α = params[:α] c = params[:c] + u_l = params[:u_l] + u_u = params[:u_u] + tf_l = params[:tf_l] + y_i = params[:y_i] ocp = @def begin tf ∈ R, variable t ∈ [t0, tf], time q = (x, y) ∈ R², state u ∈ R, control + x(t0) == x0, (x_i) - y(t0) == 0, (y_i) + y(t0) == y_i, (y_i) x(tf) == xf, (x_f) - tf ≥ 0, (tf_c) - -1 ≤ u(t) ≤ 1, (u_c) + tf ≥ tf_l, (tf_c) + u_l ≤ u(t) ≤ u_u, (u_c) + ∂(x)(t) == y(t) * u(t) + α * u(t)^2 ∂(y)(t) == -c * y(t) + u(t) + tf → min end @@ -68,7 +75,7 @@ function OptimalControlProblems.dielectrophoretic_particle_s( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels_s/double_oscillator_s.jl b/ext/OptimalControlModels_s/double_oscillator_s.jl index c29f7f39..9913bde5 100644 --- a/ext/OptimalControlModels_s/double_oscillator_s.jl +++ b/ext/OptimalControlModels_s/double_oscillator_s.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.double_oscillator(OptimalControlBackend(); function OptimalControlProblems.double_oscillator_s( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:double_oscillator), + grid_size::Int=steps_number_data(:double_oscillator), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -45,20 +45,27 @@ function OptimalControlProblems.double_oscillator_s( c = params[:c] k1 = params[:k1] k2 = params[:k2] + u_l = params[:u_l] + u_u = params[:u_u] + x1_i = params[:x1_i] + x2_i = params[:x2_i] # model ocp = @def begin t ∈ [t0, tf], time x ∈ R⁴, state u ∈ R, control - -1 ≤ u(t) ≤ 1, (u_c) - x₁(t0) == 0, (x1_i) - x₂(t0) == 0, (x2_i) + + u_l ≤ u(t) ≤ u_u, (u_c) + x₁(t0) == x1_i, (x1_i) + x₂(t0) == x2_i, (x2_i) + F = sin(t * 2π / tf) ∂(x₁)(t) == x₃(t) ∂(x₂)(t) == x₄(t) ∂(x₃)(t) == -(k1 + k2) / m1 * x₁(t) + k2 / m1 * x₂(t) + 1 / m1 * F ∂(x₄)(t) == k2 / m2 * x₁(t) - k2 / m2 * x₂(t) - c * (1 - u(t)) / m2 * x₄(t) + 0.5 * ∫(x₁(t)^2 + x₂(t)^2 + u(t)^2) → min end @@ -73,7 +80,7 @@ function OptimalControlProblems.double_oscillator_s( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels_s/ducted_fan_s.jl b/ext/OptimalControlModels_s/ducted_fan_s.jl index a3d79110..a9ab68fd 100644 --- a/ext/OptimalControlModels_s/ducted_fan_s.jl +++ b/ext/OptimalControlModels_s/ducted_fan_s.jl @@ -8,7 +8,7 @@ Ref: Graichen, K., & Petit, N. (2009). Incorporating a class of constraints into function OptimalControlProblems.ducted_fan_s( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:ducted_fan), + grid_size::Int=steps_number_data(:ducted_fan), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -21,6 +21,15 @@ function OptimalControlProblems.ducted_fan_s( m = params[:m] mg = params[:mg] μ = params[:μ] + α_l = params[:α_l] + α_u = params[:α_u] + u₁_l = params[:u₁_l] + u₁_u = params[:u₁_u] + u₂_l = params[:u₂_l] + u₂_u = params[:u₂_u] + tf_l = params[:tf_l] + x_i = params[:x_i] + x_f = params[:x_f] ocp = @def begin tf ∈ R, variable @@ -29,30 +38,30 @@ function OptimalControlProblems.ducted_fan_s( u ∈ R², control # tf constraints - tf ≥ 0.1, (tf_c) + tf ≥ tf_l, (tf_c) # state constraints - -deg2rad(30) ≤ α(t) ≤ deg2rad(30), (α_c) + α_l ≤ α(t) ≤ α_u, (α_c) # control constraints - -5 ≤ u₁(t) ≤ 5, (u₁_c) - 0 ≤ u₂(t) ≤ 17, (u₂_c) + u₁_l ≤ u₁(t) ≤ u₁_u, (u₁_c) + u₂_l ≤ u₂(t) ≤ u₂_u, (u₂_c) # initial constraints - x₁(t0) == 0, (x₁_i) - v₁(t0) == 0, (v₁_i) - x₂(t0) == 0, (x₂_i) - v₂(t0) == 0, (v₂_i) - α(t0) == 0, (α_i) - vα(t0) == 0, (vα_i) + x₁(t0) == x_i[1], (x₁_i) + v₁(t0) == x_i[2], (v₁_i) + x₂(t0) == x_i[3], (x₂_i) + v₂(t0) == x_i[4], (v₂_i) + α(t0) == x_i[5], (α_i) + vα(t0) == x_i[6], (vα_i) # final constraints - x₁(tf) == 1, (x₁_f) - v₁(tf) == 0, (v₁_f) - x₂(tf) == 0, (x₂_f) - v₂(tf) == 0, (v₂_f) - α(tf) == 0, (α_f) - vα(tf) == 0, (vα_f) + x₁(tf) == x_f[1], (x₁_f) + v₁(tf) == x_f[2], (v₁_f) + x₂(tf) == x_f[3], (x₂_f) + v₂(tf) == x_f[4], (v₂_f) + α(tf) == x_f[5], (α_f) + vα(tf) == x_f[6], (vα_f) # dynamics ∂(x₁)(t) == v₁(t) @@ -79,7 +88,7 @@ function OptimalControlProblems.ducted_fan_s( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels_s/electric_vehicle_s.jl b/ext/OptimalControlModels_s/electric_vehicle_s.jl index 8d67735f..523611c9 100644 --- a/ext/OptimalControlModels_s/electric_vehicle_s.jl +++ b/ext/OptimalControlModels_s/electric_vehicle_s.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.electric_vehicle(OptimalControlBackend(); N function OptimalControlProblems.electric_vehicle_s( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:electric_vehicle), + grid_size::Int=steps_number_data(:electric_vehicle), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -40,7 +40,6 @@ function OptimalControlProblems.electric_vehicle_s( params = parameters_data(:electric_vehicle, parameters) t0 = params[:t0] tf = params[:tf] - D = params[:D] b1 = params[:b1] b2 = params[:b2] h0 = params[:h0] @@ -50,6 +49,10 @@ function OptimalControlProblems.electric_vehicle_s( α1 = params[:α1] α2 = params[:α2] α3 = params[:α3] + x_i = params[:x_i] + v_i = params[:v_i] + x_f = params[:x_f] + v_f = params[:v_f] # model ocp = @def begin @@ -57,10 +60,10 @@ function OptimalControlProblems.electric_vehicle_s( y = (x, v) ∈ R², state u ∈ R, control - x(t0) == 0, (x_i) - v(t0) == 0, (v_i) - x(tf) == D, (x_f) - v(tf) == 0, (v_f) + x(t0) == x_i, (x_i) + v(t0) == v_i, (v_i) + x(tf) == x_f, (x_f) + v(tf) == v_f, (v_f) road = α0 + α1 * x(t) + α2 * x(t)^2 + α3 * x(t)^3 ∂(x)(t) == v(t) @@ -80,7 +83,7 @@ function OptimalControlProblems.electric_vehicle_s( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels_s/glider_s.jl b/ext/OptimalControlModels_s/glider_s.jl index af38c567..5f10d5f0 100644 --- a/ext/OptimalControlModels_s/glider_s.jl +++ b/ext/OptimalControlModels_s/glider_s.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.glider(OptimalControlBackend(); N=500); function OptimalControlProblems.glider_s( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:glider), + grid_size::Int=steps_number_data(:glider), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -39,15 +39,15 @@ function OptimalControlProblems.glider_s( # parameters params = parameters_data(:glider, parameters) t0 = params[:t0] - x_0 = params[:x_0] - y_0 = params[:y_0] + x_i = params[:x_i] + y_i = params[:y_i] y_f = params[:y_f] - vx_0 = params[:vx_0] + vx_i = params[:vx_i] vx_f = params[:vx_f] - vy_0 = params[:vy_0] + vy_i = params[:vy_i] vy_f = params[:vy_f] u_c = params[:u_c] - r_0 = params[:r_0] + r_i = params[:r_i] m = params[:m] g = params[:g] c0 = params[:c0] @@ -56,6 +56,9 @@ function OptimalControlProblems.glider_s( ρ = params[:ρ] cL_min = params[:cL_min] cL_max = params[:cL_max] + tf_l = params[:tf_l] + x_l = params[:x_l] + vx_l = params[:vx_l] # model ocp = @def begin @@ -65,26 +68,26 @@ function OptimalControlProblems.glider_s( cL ∈ R, control # state constraints - x(t) ≥ 0, (x_c) - vx(t) ≥ 0, (vx_c) + x(t) ≥ x_l, (x_c) + vx(t) ≥ vx_l, (vx_c) # control constraints cL_min ≤ cL(t) ≤ cL_max, (cL_c) # initial conditions - x(t0) == x_0, (x0_i) - y(t0) == y_0, (y0_i) - vx(t0) == vx_0, (vx0_i) - vy(t0) == vy_0, (vy0_i) + x(t0) == x_i, (x0_i) + y(t0) == y_i, (y0_i) + vx(t0) == vx_i, (vx0_i) + vy(t0) == vy_i, (vy0_i) # final conditions - tf ≥ 0 + tf ≥ tf_l y(tf) == y_f, (yf_f) vx(tf) == vx_f, (vxf_f) vy(tf) == vy_f, (vyf_f) # dynamics - r = (x(t) / r_0 - 2.5)^2 + r = (x(t) / r_i - 2.5)^2 UpD = u_c * (1 - r) * exp(-r) w = vy(t) - UpD v = √(vx(t)^2 + w^2) @@ -102,7 +105,7 @@ function OptimalControlProblems.glider_s( # initial guess tfinit = 1 - xinit = t -> [x_0 + vx_0 * t / tfinit, y_0 + t / tfinit * (y_f - y_0), vx_0, vy_0] + xinit = t -> [x_i + vx_i * t / tfinit, y_i + t / tfinit * (y_f - y_i), vx_i, vy_i] uinit = cL_max / 2 init = (state=xinit, control=uinit, variable=tfinit) @@ -112,7 +115,7 @@ function OptimalControlProblems.glider_s( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels_s/insurance_s.jl b/ext/OptimalControlModels_s/insurance_s.jl index 5283f782..7f108b5a 100644 --- a/ext/OptimalControlModels_s/insurance_s.jl +++ b/ext/OptimalControlModels_s/insurance_s.jl @@ -30,7 +30,7 @@ julia> docp = OptimalControlProblems.insurance(OptimalControlBackend(); N=500); function OptimalControlProblems.insurance_s( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:insurance), + grid_size::Int=steps_number_data(:insurance), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -110,7 +110,7 @@ function OptimalControlProblems.insurance_s( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels_s/jackson_s.jl b/ext/OptimalControlModels_s/jackson_s.jl index 4b2a36bd..9299c4ba 100644 --- a/ext/OptimalControlModels_s/jackson_s.jl +++ b/ext/OptimalControlModels_s/jackson_s.jl @@ -30,7 +30,7 @@ julia> docp = OptimalControlProblems.jackson(OptimalControlBackend(); N=500); function OptimalControlProblems.jackson_s( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:jackson), + grid_size::Int=steps_number_data(:jackson), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -75,7 +75,7 @@ function OptimalControlProblems.jackson_s( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels_s/robbins_s.jl b/ext/OptimalControlModels_s/robbins_s.jl index de50232c..1a8c363c 100644 --- a/ext/OptimalControlModels_s/robbins_s.jl +++ b/ext/OptimalControlModels_s/robbins_s.jl @@ -27,7 +27,7 @@ julia> docp = OptimalControlProblems.robbins(OptimalControlBackend(); N=500); function OptimalControlProblems.robbins_s( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:robbins), + grid_size::Int=steps_number_data(:robbins), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -69,7 +69,7 @@ function OptimalControlProblems.robbins_s( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels_s/robot_s.jl b/ext/OptimalControlModels_s/robot_s.jl index 20d32d5e..9684a589 100644 --- a/ext/OptimalControlModels_s/robot_s.jl +++ b/ext/OptimalControlModels_s/robot_s.jl @@ -26,7 +26,7 @@ julia> docp = OptimalControlProblems.robot(OptimalControlBackend(); N=250); function OptimalControlProblems.robot_s( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:robot), + grid_size::Int=steps_number_data(:robot), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -110,7 +110,7 @@ function OptimalControlProblems.robot_s( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels_s/rocket_s.jl b/ext/OptimalControlModels_s/rocket_s.jl index eb5ff898..7279e22f 100644 --- a/ext/OptimalControlModels_s/rocket_s.jl +++ b/ext/OptimalControlModels_s/rocket_s.jl @@ -26,7 +26,7 @@ julia> docp = OptimalControlProblems.rocket(OptimalControlBackend(); N=500); function OptimalControlProblems.rocket_s( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:rocket), + grid_size::Int=steps_number_data(:rocket), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -98,7 +98,7 @@ function OptimalControlProblems.rocket_s( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels_s/space_shuttle_s.jl b/ext/OptimalControlModels_s/space_shuttle_s.jl index 65f95d28..3815c5e7 100644 --- a/ext/OptimalControlModels_s/space_shuttle_s.jl +++ b/ext/OptimalControlModels_s/space_shuttle_s.jl @@ -27,7 +27,7 @@ julia> docp = OptimalControlProblems.space_shuttle(OptimalControlBackend(); N=50 function OptimalControlProblems.space_shuttle_s( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:space_shuttle), + grid_size::Int=steps_number_data(:space_shuttle), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -163,7 +163,7 @@ function OptimalControlProblems.space_shuttle_s( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels_s/steering_s.jl b/ext/OptimalControlModels_s/steering_s.jl index 3fec481a..ec866147 100644 --- a/ext/OptimalControlModels_s/steering_s.jl +++ b/ext/OptimalControlModels_s/steering_s.jl @@ -26,7 +26,7 @@ julia> docp = OptimalControlProblems.steering(OptimalControlBackend(); N=500); function OptimalControlProblems.steering_s( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:steering), + grid_size::Int=steps_number_data(:steering), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -38,18 +38,18 @@ function OptimalControlProblems.steering_s( u_min = params[:u_min] u_max = params[:u_max] xs = params[:xs] - xf = params[:xf] + yf = params[:yf] # Model ocp = @def begin tf ∈ R, variable t ∈ [t0, tf], time x ∈ R⁴, state - u ∈ R¹, control + u ∈ R, control tf ≥ 0, (tf_c) x(t0) == xs, (x_i) - x[2:4](tf) == xf, (x_f) + x[2:4](tf) == yf, (y_f) u_min ≤ u(t) ≤ u_max, (u_c) ∂(x₁)(t) == x₃(t) @@ -67,9 +67,9 @@ function OptimalControlProblems.steering_s( if i == 1 || i == 4 return 0.0 elseif i == 2 - return 5.0 * t + return 5.0 * (t-t0) elseif i == 3 - return 45.0 * t + return 45.0 * (t-t0) end end xinit = t -> [gen_x0(t, i) for i in 1:4] @@ -81,7 +81,7 @@ function OptimalControlProblems.steering_s( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/ext/OptimalControlModels_s/vanderpol_s.jl b/ext/OptimalControlModels_s/vanderpol_s.jl index d5a4e6ad..cf4fe7d0 100644 --- a/ext/OptimalControlModels_s/vanderpol_s.jl +++ b/ext/OptimalControlModels_s/vanderpol_s.jl @@ -26,7 +26,7 @@ julia> docp = OptimalControlProblems.vanderpol(OptimalControlBackend(); N=500); function OptimalControlProblems.vanderpol_s( ::OptimalControlBackend, description::Symbol...; - N::Int=steps_number_data(:vanderpol), + grid_size::Int=steps_number_data(:vanderpol), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -63,7 +63,7 @@ function OptimalControlProblems.vanderpol_s( description...; lagrange_to_mayer=false, init=init, - grid_size=N, + grid_size=grid_size, disc_method=:trapeze, kwargs..., ) diff --git a/src/OptimalControlProblems.jl b/src/OptimalControlProblems.jl index dfacc14a..919bf536 100644 --- a/src/OptimalControlProblems.jl +++ b/src/OptimalControlProblems.jl @@ -134,10 +134,10 @@ end for file in files include(joinpath(path, file)) end -number_of_problems = length(files) +const number_of_problems = length(files) const infos = [ - :N + :grid_size :state_name :costate_name :control_name @@ -156,12 +156,40 @@ const types = [ Union{Nothing,NamedTuple}, ] +const metadata_storage = OrderedDict() + +for i in 1:number_of_problems + file_key = Symbol(split(files[i], ".")[1]) + metadata_storage[file_key] = OrderedDict() + for (data, T) in zip(infos, types) + value = eval(Meta.parse("$(file_key)_meta"))[data] + if !(value isa T) + error("Type mismatch: Expected $(T) for $(data), but got $(typeof(value))") + end + metadata_storage[file_key][data] = value + end +end + + +""" +$(TYPEDSIGNATURES) + +Return the dictionary containing the metadata of all available optimal control problems. + +# Example + +```julia-repl +julia> metadata() +``` """ -metadata::Dict() +metadata() = metadata_storage -Dictionary containing metadata for all available optimal control problems. +""" +$(TYPEDSIGNATURES) -The following keys are valid: +Return a dictionary containing the metadata of `problem`. + +To get specific data, the following keys are valid: - `name::String`: the problem name. - `N::Int`: the default number of steps. @@ -177,22 +205,14 @@ The following keys are valid: # Example ```julia-repl -julia> metadata[:my_problem][:name] -"My Problem" +julia> data = metadata(:my_problem) +julia> data[:control_name] +"u" ``` """ -const metadata = Dict() - -for i in 1:number_of_problems - file_key = Symbol(split(files[i], ".")[1]) - metadata[file_key] = OrderedDict() - for (data, T) in zip(infos, types) - value = eval(Meta.parse("$(file_key)_meta"))[data] - if !(value isa T) - error("Type mismatch: Expected $(T) for $(data), but got $(typeof(value))") - end - metadata[file_key][data] = value - end +function metadata(problem::Symbol) + !(problem ∈ keys(metadata_storage)) && throw(CTBase.IncorrectArgument("There is no problem named $problem in metadata. To get the list of available problems, make julia> metadata()")) + return metadata_storage[problem] end # ------- Available Problems Function ------- @@ -429,7 +449,7 @@ julia> steps_number_data(:beam) ``` """ function steps_number_data(problem::Symbol) - return metadata[problem][:N] + return metadata(problem)[:grid_size] end # @@ -441,7 +461,7 @@ function merge(A::NamedTuple, B::NamedTuple) return NamedTuple(f(; A..., B...)) end function parameters_data(problem::Symbol) - return metadata[problem][:parameters] + return metadata(problem)[:parameters] end function parameters_data(problem::Symbol, parameters::Union{Nothing, NamedTuple}) try diff --git a/test/figures/init/beam.pdf b/test/figures/init/beam.pdf index c92e059288a0ec95c68af61b302077ac9fdde170..8c112c7a6f84921cb93f031a9c67b9352cfc2974 100644 GIT binary patch delta 32 ncmaFRDEOdJaDpSdsiA?1fuUKWN2>>8s|Qo72lG}BmKhEJv}g(~ delta 32 ncmaFRDEOdJaDpSdk)e@+g|TI$N2>>8s|Qo72lG}BmKhEJwCoBs diff --git a/test/figures/init/chain.pdf b/test/figures/init/chain.pdf index 46c671890ae3a375e9dd3edae04419d12580771f..df67dfc3fd776c5315b06a654efff1129b810c03 100644 GIT binary patch delta 9532 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 delta 5757 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 a_BSHzoB6f_Ln&FF)7*edRn^tsjSB$mCZeeT delta 495 zcmX@{T;|GinF$UY29|~vMwTX~8$Fbmn2b%DbC}w5m>9R`FfrY#7cw_9F;OtkGchqS z1X318CdSj+n0%+#yD+g$U)989k4FLfcE4t(R7N~1z(&YT-#M2}4v#AK=|FR2r)z~W z@=bmhrnQ~7jVbC4qgi`K5%czpB9;KV?XM5A9Ov6!zn>+CY5I;0EO*;a9Aepi;t=bi z8(55;o|woMGX4B)Hai@W!P9TgW0Tw7KZnf&o8#g7WpOziq#}4b(2%Q1*sM6n$UXsw zc;NI~m)K;spJ!rs!fG{8YyR{%M$EFpdYBP29ViPnKnoa5D%;~(*%S0QEsVHSRbBnv FxBz7FjK}~0 diff --git a/test/figures/init/electric_vehicle.pdf b/test/figures/init/electric_vehicle.pdf index 958c9fbac00298d28e7a4371e4abff8adfe4c67a..f4cbb95a28335e90d08b9165e7c912dc5b112cdd 100644 GIT binary patch delta 33 ocmeCaEYN*fV1fgOp{aqTp`nREqerU;W2*;Ks|WK|4;E)l0J^OS?EnA( delta 33 ocmeCaEYN*fV1fgOfu*5^v4Me6qerU;W2*;Ks|WK|4;E)l0J`A`?*IS* diff --git a/test/figures/init/glider.pdf b/test/figures/init/glider.pdf index d25dcb95127da510136383068b0ea4a8b7669617..fe12363341c9f18f50dd6c0f44155c1d50220477 100644 GIT binary patch delta 512 zcmaEOQRe1FnF)^UrUsUV#s(%EJ(QT3jEpzuFsa82T9{dwC>ZD&Tbcn$b37PZM6lD1)2y7^pkw&LbrOSKiIdwgNGnjWvj%sx4e-D$Ec z3&-O3OFwLvE@O0*-)^v#(X;^5gy{=!FcwZdcamjh3V^V0F8plJIHTWYiHVD zy?v(=vx7X?q1%BDUAbxdy)Qt4?Le28%-cR;6AMsMe=DQacC$?^7W1~xGGGNd9q78C z1>1E$0NJ20ahSf2pDh@~2P*#Q$Q(XRijjT#y#_Xp=?{*v>2F`<&*oK%#p#B@Y=P5v z9cPo9e*6KGf{-3Yz)uIM*#7evhe!Bn%`$+{3LoQWS ISARDy07E{dqyPW_ delta 64909 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 diff --git a/test/figures/init/jackson.pdf b/test/figures/init/jackson.pdf index c46df0c8812e6340d615bc381f523277d0c38f16..b7f97ef0abfab51bb6262382772f97a2297c8ab3 100644 GIT binary patch delta 597 zcmcb6O8D$4;Ry~LhNcFVhQ_8w8$A@6n9K||XEUh;3R;+1m?#+N8C#kGNpqm|Om}o=^qu~mnUQV!3ui`qJPO#i_qs5qGU8DIHbQRtpS@Te0Jn*KI?y25 z=?%<`e3K2rwYK}YGnOsGV(f&Kj6T!zS240r*L;W7WiSP*+h4z9^uXpamZ{gjB;EJbf&^PMtdBRA=C3$G0IN%3^kmdzk<xEGHXp=@Sd>~hbFLza?@9TV3fn50&FbUg<8}7Rx>(m&o*QVmY?o^fXS*oK#&QD znYRZBvV1PZrvG&pi}$oH78P94Ivu27yF&*{3bu#^%L27K;WB!zb(Gr8moT9{dwC>ZD&Tbcn$b3^3Gr8monVXrIC>ZFOn3xy>DGMVLC@;PR=&AwCoCL{CBIZU;Yf)-{LCJF|6#+GJ4(%jJ4bh065 zrz^BFg-u_3lt~^(Fn|<t z$5dPFa$o~>-~q!rUAL9VdArX`rnLgoC7f8TrVB(cvLgw$pLoFp#LPg<0>rG_PrP8e zFb#{@4;9%9r%N}mV~Nk{K)K-Qyv^)#+xIuHdteJnpo%_h0SMB$9jMd34U3fmTiJc4 zpWDICK3#!_LvH$cP7Z9AgH&zzgw;t1psZ}_0|9Y delta 878 zcmdnmuY9&&d4dCnfu*5^v7xc?Mh_(>CR4-BIZU;YLgr>BCJF|6CMG6^K+3|%#CWnH zXXNA?adOi&&oC-tmyeh%V8J`(!&# z*U1xN*_!1Ow#z3lHf3YcIelUsW5o3SbByx1oCZ;0dLF34A(&NRx7sU%<(M)mES+c3WY(%@me>W}w6~O7+ diff --git a/test/figures/init/rocket.pdf b/test/figures/init/rocket.pdf index 807c68dbe8e2a29a37c14d588805e9749f6ba797..2c25556000ba24b4b4db85e42c44298432de9681 100644 GIT binary patch delta 546 zcmZ40E;g@SY=Q%ap{ao-5F2mwP+(#1#H^`e3`Ji6J~^?kRC>eO@~RcO$Tb1o1SCH zi13N@bX{*Iw`~)ce8GNjL~z@It_Nb~?Uns3E)%f0s!)M7aJqs5t39UNcA(sPY~cyh hBRBaJ2j6r7B~}3}nlCD`UP$0HHsexNb@g}S0svkuklz3R delta 531 zcmbQ&F1D&&Y=Q%afu*5^v7xEqMh^uhW>W*h&Dl(I>V(YAOiUCE^h``l41tt|k%{r- zgUr5@8`#-5=QO4=;*p=6(M;6F zS1@2?-!3$+jgC+j6U+)FKl5fo{r7@gMLhf z(`QU#RKzBk=+9I*xwFx5y2Dq-l<9iKELxKrSlK~5`{}uUOwQQ!01fQNBHj)(3y7Jw zC;GF5T)?7WI%6`c_jCbeR<`LCO004?-2_vn1a=r-GONpUhbt_yFrMx70(n-I>9JQ> g_@*!LV-g@}lMOBv+ktLrP2e=K;8Im}^>^a}021|#L;wH) diff --git a/test/figures/init/space_shuttle.pdf b/test/figures/init/space_shuttle.pdf index d393b1909f90746626dd0f30cc62863ec4c96817..4527be0124531089dedb6dc171969c8c6186fb05 100644 GIT binary patch delta 1086 zcmZ2BTc>Nb&IAVzLsJ7wLo-8*jUI|j%qHe$n{$||s|790EKC#(^o%XdfTX#hvFT(( z&WOo+4f2}{>OvT?OE>E^Y}adGe8+<+Jw3pbF<^RKFQW$@IgafHeT>Ce42SDhpRO~3 zQ4XIG(}70FPq$jjWidV0l+k&+-$X{66Ie8S{K*(Gy*h?TetKpklOlEnQQH?pF%@ES z4@|c$4vo`+8fB-S{LE}I{aqB3_x8AjOpc1vJtWz!w%gY;S**dLE#WYe|MdTfTx{F# zX*1_wvlOmkI#7k&_Vc>T>4&fwR5+74bo$&6%-GxplndT&|B*QjoB1$}GSg#DGsz0+ zVI+a+AnntE+U2Ha9bw{|exQa`d72(G`}Dq#%x>G?8?*SzgZ(%i=tpG1?HR@_n&nuW zsu;@RGyVN47B^gS|JSmpPUkLUQ<%J=MsWIq2o{Iw1?O1Urt7a^xrj>-&^*=YJ+qmy z`T%5OJJ3`hW(8t4AZ7<*j_v=~aw_>^G4kU?&fw{7zd7x3$Zgm9!-+LCVH)Ldh9+1A zP`ljpoDdeI(EK-%(_x!DSBU)f201RvZY&m0Sk2`%eSI<)=XAMMT-f3nrht9>zExat m*diOI0&IlL^to%euw^TlD)#MiYq{zZIE_rWR8?L5-M9d5206|E delta 1014 zcmeC0t+Q;l&IAVz14}~-VWUIOHY=)X6t{H*EKAU_8%*Ma}dL{fy<)fA%mcVv}qzV~m`>egdQ1cJDsM z5NvjU^iRd5bvsb&)f3oc8~-v!O@ANBWQRjCV!A{ull=5f9cIJn@jn@zr`OjraZFzs z0Tc^}X4;8E7uZPI=@VwL$qMUXhShYStr6RS28W)*W0bMbVmZ){qVFL1I?cR0!9 zG`(MoS#|pB73^>!$LW8LGMP-Du!c(jixJy_M%+4tMPhowRA!&)_S2Zzr}uqew#TP} zbNbxR%re{kKQen@4Q~{a2$%}? z?H#LG(y%%QrUYz=?DT@QELfcbQ^r0WXp&sJz&aKnW(8t4AZ7<*j_m^LIRE-!bLYX| zoWaxY0sT3>|2HSLWV#)wVkcJD!L-`oFt>2~oPV6GtFg&$T*DPOJ!K7-9L~%ERFS*= ez$z{$tX9MHW3zfYQ1U_or>PN_s;aBM8y5hE+aJ;Z diff --git a/test/figures/init/steering.pdf b/test/figures/init/steering.pdf index a39c586ac150093f681582d0469dbf077864c9fa..224085687674b4c78f581ece9262f7e71bcc48d5 100644 GIT binary patch delta 53321 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 delta 54501 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 X{;QWaKlYyEs~`R7U-;|~zWTobMHOKx diff --git a/test/figures/init/vanderpol.pdf b/test/figures/init/vanderpol.pdf index 66d7f282d122302cf7361f2eed409c367373812a..3fb213c88f50e4b4edb3410fe96f768c545fd388 100644 GIT binary patch delta 30 mcmdnHgn#c6{s|5ohNcFVhGwQljUKHYjIAC_TRoV+UIYN3!wP}` delta 30 mcmdnHgn#c6{s|5o29|~v#zrP)jUKHYjIAC_TRoV+UIYN43JQh* diff --git a/test/runtests.jl b/test/runtests.jl index ef289276..96f2658c 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -60,10 +60,10 @@ const VERBOSE = true # print or not details during tests # :JuMP, # convergence tests for JuMP models # :OptimalControl, # convergence tests for OptimalControl models # :OptimalControl_s, # convergence tests for OptimalControl models - # :init, # comparison between OptimalControl and JuMP: init + :init, # comparison between OptimalControl and JuMP: init # :solution, # comparison between OptimalControl and JuMP: solution # :quick, # quick comparison: objective rel error only - :parameters, # tests with different parameters values, does no depend on `list_of_problems` + # :parameters, # tests with different parameters values, does no depend on `list_of_problems` ) @testset "$(name)" verbose=VERBOSE begin test_name = Symbol(:test_, name) diff --git a/test/test_JuMP.jl b/test/test_JuMP.jl index 2f0ac509..8ee6daf7 100644 --- a/test/test_JuMP.jl +++ b/test/test_JuMP.jl @@ -2,7 +2,7 @@ function test_JuMP() for f in LIST_OF_PROBLEMS @testset "$(f)" verbose=VERBOSE begin - N = metadata[f][:N] + N = metadata(f)[:grid_size] # do we keep or remove the problem from the list keep_problem = true diff --git a/test/test_OptimalControl.jl b/test/test_OptimalControl.jl index 0596c966..69ceeb13 100644 --- a/test/test_OptimalControl.jl +++ b/test/test_OptimalControl.jl @@ -11,7 +11,7 @@ function test_OptimalControl() for f in LIST_OF_PROBLEMS @testset "$(f)" verbose=VERBOSE begin - N = metadata[f][:N] + N = metadata(f)[:grid_size] # do we keep or remove the problem from the list keep_problem = true diff --git a/test/test_OptimalControl_s.jl b/test/test_OptimalControl_s.jl index 2a9d52a8..20d93855 100644 --- a/test/test_OptimalControl_s.jl +++ b/test/test_OptimalControl_s.jl @@ -12,7 +12,7 @@ function test_OptimalControl_s() for f in LIST_OF_PROBLEMS @testset "$(f)" verbose=VERBOSE begin - N = metadata[f][:N] + N = metadata(f)[:grid_size] # do we keep or remove the problem from the list keep_problem = true diff --git a/test/test_kwargs.jl b/test/test_kwargs.jl index ddb830cf..26a0c69b 100644 --- a/test/test_kwargs.jl +++ b/test/test_kwargs.jl @@ -10,7 +10,7 @@ function test_kwargs() # OptimalControl model docp = OptimalControlProblems.eval(f)( - OptimalControlBackend(), solver_backend; grid_size=N, disc_method=scheme + OptimalControlBackend(), solver_backend; grid_size=grid_size, disc_method=scheme ) @test docp isa CTDirect.DOCP @test docp.time.steps == N @@ -18,7 +18,7 @@ function test_kwargs() # OptimalControl_s model docp = OptimalControlProblems.eval(Symbol(f, :_s))( - OptimalControlBackend(), :madnlp, :exa; grid_size=N, disc_method=scheme + OptimalControlBackend(), :madnlp, :exa; grid_size=grid_size, disc_method=scheme ) @test docp isa CTDirect.DOCP @test docp.time.steps == N diff --git a/test/test_parameters.jl b/test/test_parameters.jl index 98b3a0a3..ce869369 100644 --- a/test/test_parameters.jl +++ b/test/test_parameters.jl @@ -18,8 +18,8 @@ function test_parameters() ocp = ocp_model(docp) t0_fixed = has_fixed_initial_time(ocp) tf_fixed = has_fixed_final_time(ocp) - t0_name = metadata[problem][:time_grid_name][:initial_time] - tf_name = metadata[problem][:time_grid_name][:final_time] + t0_name = metadata(problem)[:time_grid_name][:initial_time] + tf_name = metadata(problem)[:time_grid_name][:final_time] if t0_fixed params = NamedTuple(Dict(Symbol(t0_name) => t0, )) diff --git a/test/test_quick.jl b/test/test_quick.jl index 5d53baca..bb06abb6 100644 --- a/test/test_quick.jl +++ b/test/test_quick.jl @@ -29,7 +29,7 @@ function test_quick() max_r_err = -Inf # relative error max for f in LIST_OF_PROBLEMS - N = metadata[f][:N] + N = metadata(f)[:grid_size] @testset "$(string(f)) (objective)" verbose=VERBOSE begin DEBUG && println("\n", "┌─ ", string(f)) diff --git a/test/utils.jl b/test/utils.jl index f4486c71..56908f06 100644 --- a/test/utils.jl +++ b/test/utils.jl @@ -214,11 +214,11 @@ function comparison(; max_iter, test_name) # we loop over the problems for f in LIST_OF_PROBLEMS - N = metadata[f][:N] # get default N - x_vars = metadata[f][:state_name] - p_vars = metadata[f][:costate_name] - u_vars = metadata[f][:control_name] - v_vars = metadata[f][:variable_name] + N = metadata(f)[:grid_size] # get default number of steps + x_vars = metadata(f)[:state_name] + p_vars = metadata(f)[:costate_name] + u_vars = metadata(f)[:control_name] + v_vars = metadata(f)[:variable_name] @testset "$(string(f)) ($(string(test_name)))" verbose=VERBOSE begin DEBUG && println("\n┌─ ", string(f), " (", string(test_name), ")") From 47bd58fed560311afe41ef99329be97f8e9e739f Mon Sep 17 00:00:00 2001 From: Olivier Cots Date: Mon, 15 Sep 2025 15:28:31 +0200 Subject: [PATCH 3/4] parameters are shared --- docs/problems.jl | 38 ++++++ docs/src/assets/Manifest.toml | 38 +++--- docs/src/dev-add.md | 8 +- docs/src/index.md | 6 +- .../dielectrophoretic_particle.md | 2 +- ext/JuMPModels.jl | 2 +- ext/JuMPModels/beam.jl | 35 +++--- ext/JuMPModels/bioreactor.jl | 43 ++++--- ext/JuMPModels/cart_pendulum.jl | 42 +++---- ext/JuMPModels/chain.jl | 41 ++++--- ext/JuMPModels/dielectrophoretic_particle.jl | 16 +-- ext/JuMPModels/double_oscillator.jl | 47 ++++--- ext/JuMPModels/ducted_fan.jl | 66 +++++----- ext/JuMPModels/electric_vehicle.jl | 27 ++-- ext/JuMPModels/glider.jl | 59 +++++---- ext/JuMPModels/insurance.jl | 64 ++++++---- ext/JuMPModels/jackson.jl | 43 ++++--- ext/JuMPModels/moonlander.jl | 87 ++++++++----- ext/JuMPModels/robbins.jl | 46 ++++--- ext/JuMPModels/robot.jl | 96 +++++++++------ ext/JuMPModels/rocket.jl | 51 ++++---- ext/JuMPModels/space_shuttle.jl | 116 ++++++++++-------- ext/JuMPModels/steering.jl | 53 ++++---- ext/JuMPModels/vanderpol.jl | 31 ++--- ext/MetaData/beam.jl | 12 +- ext/MetaData/bioreactor.jl | 14 ++- ext/MetaData/cart_pendulum.jl | 14 +-- ext/MetaData/chain.jl | 10 +- ext/MetaData/dielectrophoretic_particle.jl | 4 +- ext/MetaData/double_oscillator.jl | 10 +- ext/MetaData/ducted_fan.jl | 16 ++- ext/MetaData/electric_vehicle.jl | 10 +- ext/MetaData/glider.jl | 18 +-- ext/MetaData/insurance.jl | 16 ++- ext/MetaData/jackson.jl | 17 ++- ext/MetaData/moonlander.jl | 23 +++- ext/MetaData/robbins.jl | 13 +- ext/MetaData/robot.jl | 36 ++++-- ext/MetaData/rocket.jl | 10 +- ext/MetaData/space_shuttle.jl | 40 ++++-- ext/MetaData/steering.jl | 16 ++- ext/MetaData/vanderpol.jl | 8 +- ext/OptimalControlModels/beam.jl | 17 ++- ext/OptimalControlModels/bioreactor.jl | 20 +-- ext/OptimalControlModels/cart_pendulum.jl | 26 ++-- ext/OptimalControlModels/chain.jl | 19 +-- .../dielectrophoretic_particle.jl | 10 +- ext/OptimalControlModels/double_oscillator.jl | 26 ++-- ext/OptimalControlModels/ducted_fan.jl | 40 +++--- ext/OptimalControlModels/electric_vehicle.jl | 18 +-- ext/OptimalControlModels/glider.jl | 38 +++--- ext/OptimalControlModels/insurance.jl | 47 ++++--- ext/OptimalControlModels/jackson.jl | 28 +++-- ext/OptimalControlModels/moonlander.jl | 75 ++++++----- ext/OptimalControlModels/robbins.jl | 17 ++- ext/OptimalControlModels/robot.jl | 77 ++++++++---- ext/OptimalControlModels/rocket.jl | 45 +++---- ext/OptimalControlModels/space_shuttle.jl | 97 +++++++++------ ext/OptimalControlModels/steering.jl | 26 ++-- ext/OptimalControlModels/vanderpol.jl | 8 +- ext/OptimalControlModels_s/beam_s.jl | 17 ++- ext/OptimalControlModels_s/chain_s.jl | 19 +-- .../dielectrophoretic_particle_s.jl | 10 +- .../double_oscillator_s.jl | 14 +-- ext/OptimalControlModels_s/ducted_fan_s.jl | 40 +++--- .../electric_vehicle_s.jl | 18 +-- ext/OptimalControlModels_s/glider_s.jl | 38 +++--- ext/OptimalControlModels_s/insurance_s.jl | 47 ++++--- ext/OptimalControlModels_s/jackson_s.jl | 28 +++-- ext/OptimalControlModels_s/robbins_s.jl | 17 ++- ext/OptimalControlModels_s/robot_s.jl | 77 ++++++++---- ext/OptimalControlModels_s/rocket_s.jl | 45 +++---- ext/OptimalControlModels_s/space_shuttle_s.jl | 97 +++++++++------ ext/OptimalControlModels_s/steering_s.jl | 24 +++- ext/OptimalControlModels_s/vanderpol_s.jl | 8 +- src/OptimalControlProblems.jl | 6 +- test/figures/init/beam.pdf | Bin 278752 -> 278752 bytes test/figures/init/chain.pdf | Bin 365199 -> 365199 bytes test/figures/init/double_oscillator.pdf | Bin 427645 -> 427645 bytes test/figures/init/ducted_fan.pdf | Bin 472008 -> 472008 bytes test/figures/init/electric_vehicle.pdf | Bin 272779 -> 272779 bytes test/figures/init/glider.pdf | Bin 469209 -> 469209 bytes test/figures/init/insurance.pdf | Bin 887480 -> 887315 bytes test/figures/init/jackson.pdf | Bin 320845 -> 320878 bytes test/figures/init/robbins.pdf | Bin 339147 -> 339147 bytes test/figures/init/robot.pdf | Bin 575413 -> 575413 bytes test/figures/init/rocket.pdf | Bin 361374 -> 361374 bytes test/figures/init/space_shuttle.pdf | Bin 724362 -> 724362 bytes test/figures/init/steering.pdf | Bin 465332 -> 465332 bytes test/figures/init/vanderpol.pdf | Bin 250429 -> 250429 bytes test/runtests.jl | 14 +-- test/test_JuMP.jl | 4 +- test/test_OptimalControl.jl | 10 +- test/test_OptimalControl_s.jl | 10 +- test/test_kwargs.jl | 6 +- test/test_quick.jl | 8 +- test/utils.jl | 8 +- 97 files changed, 1520 insertions(+), 1023 deletions(-) diff --git a/docs/problems.jl b/docs/problems.jl index 4be2bbbc..4d5d1204 100644 --- a/docs/problems.jl +++ b/docs/problems.jl @@ -28,6 +28,15 @@ function generate_documentation(PROBLEM::String, DESCRIPTION::String; draft::Uni DRAFT = draft_meta(draft) LEFT_MARGIN = get_left_margin(Symbol(PROBLEM)) + VARIABLE_COMPONENTS = isnothing(OptimalControlProblems.metadata(Symbol(PROBLEM))[:variable_name]) ? "" : + """ + The variable components are named: + + ```@example main + metadata(:$PROBLEM)[:variable_name] + ``` + """ + documentation=DRAFT * """ # $TITLE @@ -67,6 +76,35 @@ function generate_documentation(PROBLEM::String, DESCRIPTION::String; draft::Uni nothing # hide ``` + ## Metadata + + The state components are named: + + ```@example main + metadata(:$PROBLEM)[:state_name] + ``` + + The control components are named: + + ```@example main + metadata(:$PROBLEM)[:control_name] + ``` + + The default values of the parameters are: + + ```@example main + metadata(:$PROBLEM)[:parameters] + using Printf # hide + println("Parameter = Value") # hide + println("------------------") # hide + for e ∈ pairs(metadata(:$PROBLEM)[:parameters]) # hide + @printf("%6s = ", string(e.first)) # hide + @printf("%11.4e\\n", e.second) # hide + end # hide + ``` + + $VARIABLE_COMPONENTS + ## Initial guess Before solving the problem, it is often useful to inspect the initial guess (sometimes called the first iterate). This guess is obtained by running the NLP solver with `max_iter = 0`, which evaluates the problem formulation without performing any optimisation steps. diff --git a/docs/src/assets/Manifest.toml b/docs/src/assets/Manifest.toml index 540eeb53..037d3070 100644 --- a/docs/src/assets/Manifest.toml +++ b/docs/src/assets/Manifest.toml @@ -11,9 +11,9 @@ uuid = "54578032-b7ea-4c30-94aa-7cbd1cce6c9a" version = "0.8.13" [[deps.ADTypes]] -git-tree-sha1 = "60665b326b75db6517939d0e1875850bc4a54368" +git-tree-sha1 = "27cecae79e5cc9935255f90c53bb831cc3c870d7" uuid = "47edcb42-4c32-4615-8424-f2b9edc5f35b" -version = "1.17.0" +version = "1.18.0" [deps.ADTypes.extensions] ADTypesChainRulesCoreExt = "ChainRulesCore" @@ -105,9 +105,9 @@ weakdeps = ["HTTP", "JSON"] [[deps.CTDirect]] deps = ["CTBase", "CTModels", "DocStringExtensions", "HSL", "MKL", "SparseArrays"] -git-tree-sha1 = "1b3aa9b9b9bbb32b90bed66d16998fcb89848c21" +git-tree-sha1 = "223310e80a2c0043c1b8f580349b05f0e79c58dc" uuid = "790bbbee-bee9-49ee-8912-a9de031322d5" -version = "0.16.3" +version = "0.16.4" [deps.CTDirect.extensions] CTDirectExtADNLP = ["ADNLPModels"] @@ -137,9 +137,9 @@ version = "0.8.8" [[deps.CTModels]] deps = ["CTBase", "DocStringExtensions", "Interpolations", "LinearAlgebra", "MLStyle", "MacroTools", "OrderedCollections", "Parameters", "RecipesBase"] -git-tree-sha1 = "20872a1b453a9b7a94822cc00a22c6741f71cf68" +git-tree-sha1 = "13ff06553d6396590c0b09c9b9a5e0dee058af92" uuid = "34c4fa32-2049-4079-8329-de33c2a22e2d" -version = "0.6.5" +version = "0.6.6" [deps.CTModels.extensions] CTModelsJLD = "JLD2" @@ -266,9 +266,9 @@ version = "1.16.0" [[deps.DataFrames]] deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] -git-tree-sha1 = "a37ac0840a1196cd00317b57e39d6586bf0fd6f6" +git-tree-sha1 = "c967271c27a95160e30432e011b58f42cd7501b5" uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" -version = "1.7.1" +version = "1.8.0" [[deps.DataStructures]] deps = ["OrderedCollections"] @@ -437,9 +437,9 @@ version = "1.11.0" [[deps.FillArrays]] deps = ["LinearAlgebra"] -git-tree-sha1 = "6a70198746448456524cb442b8af316927ff3e1a" +git-tree-sha1 = "173e4d8f14230a7523ae11b9a3fa9edb3e0efd78" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "1.13.0" +version = "1.14.0" [deps.FillArrays.extensions] FillArraysPDMatsExt = "PDMats" @@ -470,9 +470,9 @@ version = "1.3.7" [[deps.ForwardDiff]] deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] -git-tree-sha1 = "f0090eb9f8e9d151563dd2300fc3ca3f76b90fe8" +git-tree-sha1 = "dc41303865a16274ecb8450c220021ce1e0cf05f" uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "1.2.0" +version = "1.2.1" weakdeps = ["StaticArrays"] [deps.ForwardDiff.extensions] @@ -550,9 +550,9 @@ version = "2.51.1+0" [[deps.Glib_jll]] deps = ["Artifacts", "GettextRuntime_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] -git-tree-sha1 = "35fbd0cefb04a516104b8e183ce0df11b70a3f1a" +git-tree-sha1 = "50c11ffab2a3d50192a228c313f05b5b5dc5acb2" uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" -version = "2.84.3+0" +version = "2.86.0+0" [[deps.Graphite2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -1171,10 +1171,10 @@ uuid = "21216c6a-2e73-6563-6e65-726566657250" version = "1.5.0" [[deps.PrettyTables]] -deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "Reexport", "StringManipulation", "Tables"] -git-tree-sha1 = "1101cd475833706e4d0e7b122218257178f48f34" +deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "REPL", "Reexport", "StringManipulation", "Tables"] +git-tree-sha1 = "86e787c2c5e29c1ff9d0b72227bcc29d7d39e14e" uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" -version = "2.4.0" +version = "3.0.8" [[deps.Printf]] deps = ["Unicode"] @@ -1346,9 +1346,9 @@ version = "1.11.0" [[deps.SparseConnectivityTracer]] deps = ["ADTypes", "DocStringExtensions", "FillArrays", "LinearAlgebra", "Random", "SparseArrays"] -git-tree-sha1 = "339efef69fda0cccf14c06a483561527e9169b8f" +git-tree-sha1 = "e49c106eb7c78f55cdfa39e8bddeda24e1e09fce" uuid = "9f842d2f-2579-4b1d-911e-f412cf18a3f5" -version = "1.0.1" +version = "1.0.2" [deps.SparseConnectivityTracer.extensions] SparseConnectivityTracerLogExpFunctionsExt = "LogExpFunctions" diff --git a/docs/src/dev-add.md b/docs/src/dev-add.md index e982c89a..cf0bbf53 100644 --- a/docs/src/dev-add.md +++ b/docs/src/dev-add.md @@ -7,8 +7,8 @@ To add a new problem to **OptimalControlProblems**, you must follow these steps: ```julia new_problem_meta = OrderedDict( :grid_size => 100, # Number of steps # Whether we minimise (true) or maximise (false) - :state_name => ["x1", "x2"], # Names of the state components - :costate_name => ["∂x1", "∂x2"], # Names of the dynamics constraints (for the costate) + :state_name => ["x₁", "x₂"], # Names of the state components + :costate_name => ["∂x₁", "∂x₂"], # Names of the dynamics constraints (for the costate) :control_name => ["u"], # Names of the control components :variable_name => ["v"], # Names of the optimisation variables :parameters => (tf = 1, ), # Final time information @@ -28,7 +28,7 @@ new_problem_meta = OrderedDict( function OptimalControlProblems.new_problem( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:new_problem), + grid_size::Int=grid_size_data(:new_problem), kwargs..., ) @@ -67,7 +67,7 @@ end Documentation of the method """ function OptimalControlProblems.new_problem( - ::JuMPBackend, args...; grid_size::Int=steps_number_data(:new_problem), kwargs... + ::JuMPBackend, args...; grid_size::Int=grid_size_data(:new_problem), kwargs... ) # if tf is fixed diff --git a/docs/src/index.md b/docs/src/index.md index 977e26ed..6d2dd2a2 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -47,12 +47,12 @@ If you want to ask a question, feel free to start a discussion [here](https://gi ## Credits (not exhaustive!) -- [Nico77310](https://github.com/Nico77310) +- [BaptisteCbl](https://github.com/BaptisteCbl) - [0Yassine0](https://github.com/0Yassine0) +- [Nico77310](https://github.com/Nico77310) - [frapac](https://github.com/frapac) -- [BaptisteCbl](https://github.com/BaptisteCbl) -- [COPS: Large-Scale Optimization Problems](https://www.mcs.anl.gov/~more/cops) and [COPSBenchmark.jl](https://github.com/MadNLP/COPSBenchmark.jl) - [BOCOP - A collection of examples](https://project.inria.fr/bocop/files/2017/05/Examples-BOCOP.pdf) +- [COPS: Large-Scale Optimization Problems](https://www.mcs.anl.gov/~more/cops) and [COPSBenchmark.jl](https://github.com/MadNLP/COPSBenchmark.jl) ## Reproducibility diff --git a/ext/Descriptions/dielectrophoretic_particle.md b/ext/Descriptions/dielectrophoretic_particle.md index e9480c31..5a7d4583 100644 --- a/ext/Descriptions/dielectrophoretic_particle.md +++ b/ext/Descriptions/dielectrophoretic_particle.md @@ -8,7 +8,7 @@ The objective is to transfer the particle from an initial position to a target p The problem can be written as ```math -\min_{x,\,y,\,u,\,t_f} t_f +\min_{x,\,y,\,u,\,t_f} t_tf ``` subject to the dynamics diff --git a/ext/JuMPModels.jl b/ext/JuMPModels.jl index 4563ef05..345dc4a6 100644 --- a/ext/JuMPModels.jl +++ b/ext/JuMPModels.jl @@ -42,7 +42,7 @@ function OptimalControlProblems.time_grid(problem::Symbol, model::JuMP.GenericMo t_grid_vars = metadata(problem)[:time_grid_name] t0 = value.(model[Symbol(t_grid_vars[:initial_time])]) tf = value.(model[Symbol(t_grid_vars[:final_time])]) - N = value.(model[Symbol(t_grid_vars[:steps_number])]) + N = value.(model[Symbol(t_grid_vars[:grid_size])]) t_jp = range(t0, tf, N+1) return t_jp end diff --git a/ext/JuMPModels/beam.jl b/ext/JuMPModels/beam.jl index f1f8f4ee..8e710d34 100644 --- a/ext/JuMPModels/beam.jl +++ b/ext/JuMPModels/beam.jl @@ -29,7 +29,7 @@ julia> model = OptimalControlProblems.beam(JuMPBackend(); N=100) """ function OptimalControlProblems.beam( ::JuMPBackend, args...; - grid_size::Int=steps_number_data(:beam), + grid_size::Int=grid_size_data(:beam), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -38,10 +38,12 @@ function OptimalControlProblems.beam( params = parameters_data(:beam, parameters) t0 = params[:t0] tf = params[:tf] - x_t0 = params[:x_t0] - x_tf = params[:x_tf] x₁_l = params[:x₁_l] x₁_u = params[:x₁_u] + x₁_t0 = params[:x₁_t0] + x₂_t0 = params[:x₂_t0] + x₁_tf = params[:x₁_tf] + x₂_tf = params[:x₂_tf] # model model = JuMP.Model(args...; kwargs...) @@ -62,9 +64,9 @@ function OptimalControlProblems.beam( @variables( model, begin - x₁_l <= x1[0:N] <= x₁_u, (start = 0.05) - x2[0:N], (start = 0.1) - u[0:N], (start = 0.1) + x₁_l ≤ x₁[0:N] ≤ x₁_u, (start = 0.05) + x₂[0:N], (start = 0.1) + u[0:N], (start = 0.1) end ) @@ -72,10 +74,10 @@ function OptimalControlProblems.beam( @constraints( model, begin - x1[0] == x_t0[1] - x2[0] == x_t0[2] - x1[N] == x_tf[1] - x2[N] == x_tf[2] + x₁[0] == x₁_t0 + x₂[0] == x₂_t0 + x₁[N] == x₁_tf + x₂[N] == x₂_tf end ) @@ -83,13 +85,12 @@ function OptimalControlProblems.beam( @expressions( model, begin - # - step, (tf - t0) / N + Δt, (tf - t0) / N # dynamics - dx1[i = 0:N], x2[i] - dx2[i = 0:N], u[i] + dx₁[i = 0:N], x₂[i] + dx₂[i = 0:N], u[i] # objective dc[i = 0:N], u[i]^2 @@ -98,13 +99,13 @@ function OptimalControlProblems.beam( @constraints( model, begin - ∂x1[i = 1:N], x1[i] == x1[i - 1] + 0.5 * step * (dx1[i] + dx1[i - 1]) - ∂x2[i = 1:N], x2[i] == x2[i - 1] + 0.5 * step * (dx2[i] + dx2[i - 1]) + ∂x₁[i = 1:N], x₁[i] == x₁[i - 1] + 0.5 * Δt * (dx₁[i] + dx₁[i - 1]) + ∂x₂[i = 1:N], x₂[i] == x₂[i - 1] + 0.5 * Δt * (dx₂[i] + dx₂[i - 1]) end ) # objective - @objective(model, Min, 0.5 * step * sum(dc[i] + dc[i - 1] for i in 1:N)) + @objective(model, Min, 0.5 * Δt * sum(dc[i] + dc[i - 1] for i in 1:N)) return model end diff --git a/ext/JuMPModels/bioreactor.jl b/ext/JuMPModels/bioreactor.jl index c6f45873..c01060f4 100644 --- a/ext/JuMPModels/bioreactor.jl +++ b/ext/JuMPModels/bioreactor.jl @@ -32,7 +32,7 @@ julia> model = OptimalControlProblems.bioreactor(JuMPBackend(); N=100) """ function OptimalControlProblems.bioreactor( ::JuMPBackend, args...; - grid_size::Int=steps_number_data(:bioreactor), + grid_size::Int=grid_size_data(:bioreactor), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -49,11 +49,17 @@ function OptimalControlProblems.bioreactor( μ2m = params[:μ2m] μbar = params[:μbar] r = params[:r] - x_l = params[:x_l] + y_l = params[:y_l] + s_l = params[:s_l] + b_l = params[:b_l] u_l = params[:u_l] u_u = params[:u_u] - x0_l = params[:x0_l] - x0_u = params[:x0_u] + y_t0_l = params[:y_t0_l] + y_t0_u = params[:y_t0_u] + s_t0_l = params[:s_t0_l] + s_t0_u = params[:s_t0_u] + b_t0_l = params[:b_t0_l] + b_t0_u = params[:b_t0_u] # model model = JuMP.Model(args...; kwargs...) @@ -74,10 +80,10 @@ function OptimalControlProblems.bioreactor( @variables( model, begin - y[0:N] >= x_l[1], (start = 50) - s[0:N] >= x_l[2], (start = 50) - b[0:N] >= x_l[3], (start = 50) - u_l <= u[0:N] <= u_u, (start = 0.5) + y[0:N] ≥ y_l, (start = 50) + s[0:N] ≥ s_l, (start = 50) + b[0:N] ≥ b_l, (start = 50) + u_l ≤ u[0:N] ≤ u_u, (start = 0.5) end ) @@ -85,9 +91,9 @@ function OptimalControlProblems.bioreactor( @constraints( model, begin - x0_l[1] <= y[0] <= x0_u[1] - x0_l[2] <= s[0] <= x0_u[2] - x0_l[3] <= b[0] <= x0_u[3] + y_t0_l ≤ y[0] ≤ y_t0_u + s_t0_l ≤ s[0] ≤ s_t0_u + b_t0_l ≤ b[0] ≤ b_t0_u end ) @@ -95,15 +101,14 @@ function OptimalControlProblems.bioreactor( @expressions( model, begin - # - step, (tf-t0) / N + Δt, (tf-t0) / N # intermediate variables growth[k = 0:N], μ2m * s[k] / (s[k] + Ks) μ2[k = 0:N], growth[k] - days[k = 0:N], (k * step) / (halfperiod * 2) + days[k = 0:N], (k * Δt) / (halfperiod * 2) tau[k = 0:N], (days[k] - floor(days[k])) * 2π light[k = 0:N], max(0, sin(tau[k]))^2 μ[k = 0:N], light[k] * μbar @@ -114,21 +119,21 @@ function OptimalControlProblems.bioreactor( db[k = 0:N], (μ2[k] - u[k] * β) * b[k] # objective - dc[k = 0:N], -μ2[k] * b[k] / (β + c) + dc[k = 0:N], μ2[k] * b[k] / (β + c) end ) @constraints( model, begin - ∂y[k = 1:N], y[k] == y[k - 1] + 0.5 * step * (dy[k] + dy[k - 1]) - ∂s[k = 1:N], s[k] == s[k - 1] + 0.5 * step * (ds[k] + ds[k - 1]) - ∂b[k = 1:N], b[k] == b[k - 1] + 0.5 * step * (db[k] + db[k - 1]) + ∂y[k = 1:N], y[k] == y[k - 1] + 0.5 * Δt * (dy[k] + dy[k - 1]) + ∂s[k = 1:N], s[k] == s[k - 1] + 0.5 * Δt * (ds[k] + ds[k - 1]) + ∂b[k = 1:N], b[k] == b[k - 1] + 0.5 * Δt * (db[k] + db[k - 1]) end ) # objective - @objective(model, Min, 0.5 * step * sum(dc[k] + dc[k - 1] for k in 1:N)) + @objective(model, Max, 0.5 * Δt * sum(dc[k] + dc[k - 1] for k in 1:N)) return model end diff --git a/ext/JuMPModels/cart_pendulum.jl b/ext/JuMPModels/cart_pendulum.jl index 27c4b8e8..5e6e8b3c 100644 --- a/ext/JuMPModels/cart_pendulum.jl +++ b/ext/JuMPModels/cart_pendulum.jl @@ -28,7 +28,7 @@ julia> model = OptimalControlProblems.cart_pendulum(JuMPBackend(); N=200) - [Cart–Pendulum Optimal Control Problem](https://arxiv.org/pdf/2303.16746) """ function OptimalControlProblems.cart_pendulum( - ::JuMPBackend, args...; grid_size::Int=steps_number_data(:cart_pendulum), + ::JuMPBackend, args...; grid_size::Int=grid_size_data(:cart_pendulum), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -41,15 +41,15 @@ function OptimalControlProblems.cart_pendulum( m = params[:m] I = m * L^2 / 12 # pendulum moment of inertia mcart = params[:mcart] - max_f = params[:max_f] + max_tf = params[:max_tf] max_x = params[:max_x] max_v = params[:max_v] tf_l = params[:tf_l] - x_i = params[:x_i] - θ_i = params[:θ_i] - ω_i = params[:ω_i] - θ_f = params[:θ_f] - ω_f = params[:ω_f] + x_t0 = params[:x_t0] + θ_t0 = params[:θ_t0] + ω_t0 = params[:ω_t0] + θ_tf = params[:θ_tf] + ω_tf = params[:ω_tf] # model model = JuMP.Model(args...; kwargs...) @@ -69,13 +69,13 @@ function OptimalControlProblems.cart_pendulum( @variables( model, begin - tf >= tf_l, (start = 1.0) + tf ≥ tf_l, (start = 1.0) ddx, (start = 0.1) - -max_x <= x[0:N] <= max_x, (start = 0.1) - -max_v <= v[0:N] <= max_v, (start = 0.1) + -max_x ≤ x[0:N] ≤ max_x, (start = 0.1) + -max_v ≤ v[0:N] ≤ max_v, (start = 0.1) θ[0:N], (start = 0.1) ω[0:N], (start = 0.1) - -max_f <= Fex[0:N] <= max_f, (start = 0.1) + -max_tf ≤ Fex[0:N] ≤ max_tf, (start = 0.1) end ) @@ -83,11 +83,11 @@ function OptimalControlProblems.cart_pendulum( @constraints( model, begin - x[0] == x_i - θ[0] == θ_i - ω[0] == ω_i - θ[N] == θ_f - ω[N] == ω_f + x[0] == x_t0 + θ[0] == θ_t0 + ω[0] == ω_t0 + θ[N] == θ_tf + ω[N] == ω_tf end ) @@ -95,7 +95,7 @@ function OptimalControlProblems.cart_pendulum( @expressions( model, begin - step, (tf - t0) / N + Δt, (tf - t0) / N α_ddx[i = 0:N], 1 / (I + 0.25 * m * L^2) * 0.5 * L * m * (-ddx * cos(θ[i]) - g * sin(θ[i])) @@ -121,10 +121,10 @@ function OptimalControlProblems.cart_pendulum( @constraints( model, begin - ∂x[k = 1:N], x[k] == x[k - 1] + 0.5 * step * (dx[k] + dx[k - 1]) - ∂v[k = 1:N], v[k] == v[k - 1] + 0.5 * step * (dv[k] + dv[k - 1]) - ∂θ[k = 1:N], θ[k] == θ[k - 1] + 0.5 * step * (dθ[k] + dθ[k - 1]) - ∂ω[k = 1:N], ω[k] == ω[k - 1] + 0.5 * step * (dω[k] + dω[k - 1]) + ∂x[k = 1:N], x[k] == x[k - 1] + 0.5 * Δt * (dx[k] + dx[k - 1]) + ∂v[k = 1:N], v[k] == v[k - 1] + 0.5 * Δt * (dv[k] + dv[k - 1]) + ∂θ[k = 1:N], θ[k] == θ[k - 1] + 0.5 * Δt * (dθ[k] + dθ[k - 1]) + ∂ω[k = 1:N], ω[k] == ω[k - 1] + 0.5 * Δt * (dω[k] + dω[k - 1]) end ) diff --git a/ext/JuMPModels/chain.jl b/ext/JuMPModels/chain.jl index b2def172..cfae83c3 100644 --- a/ext/JuMPModels/chain.jl +++ b/ext/JuMPModels/chain.jl @@ -28,7 +28,7 @@ julia> model = OptimalControlProblems.chain(JuMPBackend(); N=300) - [COPS Benchmark Problems – Hanging Chain](https://www.mcs.anl.gov/~more/cops/) """ function OptimalControlProblems.chain( - ::JuMPBackend, args...; grid_size::Int=steps_number_data(:chain), + ::JuMPBackend, args...; grid_size::Int=grid_size_data(:chain), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -40,8 +40,11 @@ function OptimalControlProblems.chain( L = params[:L] a = params[:a] b = params[:b] - x2_i = params[:x2_i] - x3_i = params[:x3_i] + x₁_t0 = a + x₂_t0 = params[:x₂_t0] + x₃_t0 = params[:x₃_t0] + x₁_tf = b + x₃_tf = L # tmin = b > a ? 1 / 4 : 3 / 4 @@ -74,25 +77,25 @@ function OptimalControlProblems.chain( model, begin u[k = 0:N], (start = 4 * abs(b - a) * ((t[k] - t0) / (tf - t0) - tmin)) - x1[k = 0:N], (start = 4 * abs(b - a) * (t[k] - t0) / (tf - t0) * (0.5 * (t[k] - t0) / (tf - t0) - tmin) + a) - x2[k = 0:N], + x₁[k = 0:N], (start = 4 * abs(b - a) * (t[k] - t0) / (tf - t0) * (0.5 * (t[k] - t0) / (tf - t0) - tmin) + a) + x₂[k = 0:N], ( start = (4 * abs(b - a) * (t[k] - t0) / (tf - t0) * (0.5 * (t[k] - t0) / (tf - t0) - tmin) + a) * (4 * abs(b - a) * ((t[k] - t0) / (tf - t0) - tmin)) ) - x3[k = 0:N], (start = 4 * abs(b - a) * ((t[k] - t0) / (tf - t0) - tmin)) + x₃[k = 0:N], (start = 4 * abs(b - a) * ((t[k] - t0) / (tf - t0) - tmin)) end ) @constraints( model, begin - x1[0] == a - x2[0] == x2_i - x3[0] == x3_i - x1[N] == b - x3[N] == L + x₁[0] == x₁_t0 + x₂[0] == x₂_t0 + x₃[0] == x₃_t0 + x₁[N] == x₁_tf + x₃[N] == x₃_tf end ) @@ -100,23 +103,23 @@ function OptimalControlProblems.chain( @expressions( model, begin - step, (tf - t0) / N - dx1[k = 0:N], u[k] - dx2[k = 0:N], x1[k] * √(1 + u[k]^2) - dx3[k = 0:N], √(1 + u[k]^2) + Δt, (tf - t0) / N + dx₁[k = 0:N], u[k] + dx₂[k = 0:N], x₁[k] * √(1 + u[k]^2) + dx₃[k = 0:N], √(1 + u[k]^2) end ) @constraints( model, begin - ∂x1[k = 1:N], x1[k] == x1[k - 1] + 0.5 * step * (dx1[k] + dx1[k - 1]) - ∂x2[k = 1:N], x2[k] == x2[k - 1] + 0.5 * step * (dx2[k] + dx2[k - 1]) - ∂x3[k = 1:N], x3[k] == x3[k - 1] + 0.5 * step * (dx3[k] + dx3[k - 1]) + ∂x₁[k = 1:N], x₁[k] == x₁[k - 1] + 0.5 * Δt * (dx₁[k] + dx₁[k - 1]) + ∂x₂[k = 1:N], x₂[k] == x₂[k - 1] + 0.5 * Δt * (dx₂[k] + dx₂[k - 1]) + ∂x₃[k = 1:N], x₃[k] == x₃[k - 1] + 0.5 * Δt * (dx₃[k] + dx₃[k - 1]) end ) - @objective(model, Min, x2[N]) + @objective(model, Min, x₂[N]) return model end diff --git a/ext/JuMPModels/dielectrophoretic_particle.jl b/ext/JuMPModels/dielectrophoretic_particle.jl index bca951cd..1ffc82fe 100644 --- a/ext/JuMPModels/dielectrophoretic_particle.jl +++ b/ext/JuMPModels/dielectrophoretic_particle.jl @@ -29,7 +29,7 @@ julia> model = OptimalControlProblems.dielectrophoretic_particle(JuMPBackend(); IEEE Transactions on Automatic Control, 51(7), 1100–1114. """ function OptimalControlProblems.dielectrophoretic_particle( - ::JuMPBackend, args...; grid_size::Int=steps_number_data(:dielectrophoretic_particle), + ::JuMPBackend, args...; grid_size::Int=grid_size_data(:dielectrophoretic_particle), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -44,7 +44,7 @@ function OptimalControlProblems.dielectrophoretic_particle( u_l = params[:u_l] u_u = params[:u_u] tf_l = params[:tf_l] - y_i = params[:y_i] + y_t0 = params[:y_t0] # model model = JuMP.Model(args...; kwargs...) @@ -66,8 +66,8 @@ function OptimalControlProblems.dielectrophoretic_particle( begin x[0:N], (start = 1) y[0:N], (start = 1) - u_l <= u[0:N] <= u_u, (start = 0.1) - tf_l <= tf, (start = 5) + u_l ≤ u[0:N] ≤ u_u, (start = 0.1) + tf_l ≤ tf, (start = 5) end ) @@ -77,7 +77,7 @@ function OptimalControlProblems.dielectrophoretic_particle( begin x[0] == x0 x[N] == xf - y[0] == y_i + y[0] == y_t0 end ) @@ -85,7 +85,7 @@ function OptimalControlProblems.dielectrophoretic_particle( @expressions( model, begin - step, (tf - t0) / N + Δt, (tf - t0) / N dx[k = 0:N], y[k] * u[k] + α * u[k]^2 dy[k = 0:N], -c * y[k] + u[k] end @@ -93,8 +93,8 @@ function OptimalControlProblems.dielectrophoretic_particle( @constraints( model, begin - ∂x[k = 1:N], x[k] == x[k - 1] + 0.5 * step * (dx[k] + dx[k - 1]) - ∂y[k = 1:N], y[k] == y[k - 1] + 0.5 * step * (dy[k] + dy[k - 1]) + ∂x[k = 1:N], x[k] == x[k - 1] + 0.5 * Δt * (dx[k] + dx[k - 1]) + ∂y[k = 1:N], y[k] == y[k - 1] + 0.5 * Δt * (dy[k] + dy[k - 1]) end ) diff --git a/ext/JuMPModels/double_oscillator.jl b/ext/JuMPModels/double_oscillator.jl index b96a1dfc..d0810408 100644 --- a/ext/JuMPModels/double_oscillator.jl +++ b/ext/JuMPModels/double_oscillator.jl @@ -29,7 +29,7 @@ julia> model = OptimalControlProblems.double_oscillator(JuMPBackend(); N=200) IFAC-PapersOnLine, 51(2), 49–54. """ function OptimalControlProblems.double_oscillator( - ::JuMPBackend, args...; grid_size::Int=steps_number_data(:double_oscillator), + ::JuMPBackend, args...; grid_size::Int=grid_size_data(:double_oscillator), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -45,8 +45,8 @@ function OptimalControlProblems.double_oscillator( k2 = params[:k2] u_l = params[:u_l] u_u = params[:u_u] - x1_i = params[:x1_i] - x2_i = params[:x2_i] + x₁_t0 = params[:x₁_t0] + x₂_t0 = params[:x₂_t0] # model model = JuMP.Model(args...; kwargs...) @@ -67,11 +67,11 @@ function OptimalControlProblems.double_oscillator( @variables( model, begin - x1[0:N], (start = 0.1) - x2[0:N], (start = 0.1) - x3[0:N], (start = 0.1) - x4[0:N], (start = 0.1) - u_l <= u[0:N] <= u_u, (start = 0.1) + x₁[0:N], (start = 0.1) + x₂[0:N], (start = 0.1) + x₃[0:N], (start = 0.1) + x₄[0:N], (start = 0.1) + u_l ≤ u[0:N] ≤ u_u, (start = 0.1) end ) @@ -79,8 +79,8 @@ function OptimalControlProblems.double_oscillator( @constraints( model, begin - x1[0] == x1_i - x2[0] == x2_i + x₁[0] == x₁_t0 + x₂[0] == x₂_t0 end ) @@ -88,35 +88,34 @@ function OptimalControlProblems.double_oscillator( @expressions( model, begin - # - step, tf / N - t[k = 0:N], k * tf / N - F[k = 0:N], sin(t[k] * 2π / tf) + Δt, (tf - t0) / N + t[k = 0:N], t0 + k * (tf-t0) / N + F[k = 0:N], sin((t[k] - t0) * 2π / (tf - t0)) # dynamics - dx1[k = 0:N], x3[k] - dx2[k = 0:N], x4[k] - dx3[k = 0:N], -(k1 + k2) / m1 * x1[k] + k2 / m1 * x2[k] + 1 / m1 * F[k] - dx4[k = 0:N], k2 / m2 * x1[k] - k2 / m2 * x2[k] - c * (1 - u[k]) / m2 * x4[k] + dx₁[k = 0:N], x₃[k] + dx₂[k = 0:N], x₄[k] + dx₃[k = 0:N], -(k1 + k2) / m1 * x₁[k] + k2 / m1 * x₂[k] + 1 / m1 * F[k] + dx₄[k = 0:N], k2 / m2 * x₁[k] - k2 / m2 * x₂[k] - c * (1 - u[k]) / m2 * x₄[k] # objective - dc[k = 0:N], 0.5 * (x1[k]^2 + x2[k]^2 + u[k]^2) + dc[k = 0:N], 0.5 * (x₁[k]^2 + x₂[k]^2 + u[k]^2) end ) @constraints( model, begin - ∂x1[k = 1:N], x1[k] == x1[k - 1] + 0.5 * step * (dx1[k] + dx1[k - 1]) - ∂x2[k = 1:N], x2[k] == x2[k - 1] + 0.5 * step * (dx2[k] + dx2[k - 1]) - ∂x3[k = 1:N], x3[k] == x3[k - 1] + 0.5 * step * (dx3[k] + dx3[k - 1]) - ∂x4[k = 1:N], x4[k] == x4[k - 1] + 0.5 * step * (dx4[k] + dx4[k - 1]) + ∂x₁[k = 1:N], x₁[k] == x₁[k - 1] + 0.5 * Δt * (dx₁[k] + dx₁[k - 1]) + ∂x₂[k = 1:N], x₂[k] == x₂[k - 1] + 0.5 * Δt * (dx₂[k] + dx₂[k - 1]) + ∂x₃[k = 1:N], x₃[k] == x₃[k - 1] + 0.5 * Δt * (dx₃[k] + dx₃[k - 1]) + ∂x₄[k = 1:N], x₄[k] == x₄[k - 1] + 0.5 * Δt * (dx₄[k] + dx₄[k - 1]) end ) # objective: trapeze rule - @objective(model, Min, 0.5 * step * sum(dc[k] + dc[k - 1] for k in 1:N)) + @objective(model, Min, 0.5 * Δt * sum(dc[k] + dc[k - 1] for k in 1:N)) return model end diff --git a/ext/JuMPModels/ducted_fan.jl b/ext/JuMPModels/ducted_fan.jl index e29894cf..f5933b4c 100644 --- a/ext/JuMPModels/ducted_fan.jl +++ b/ext/JuMPModels/ducted_fan.jl @@ -29,7 +29,7 @@ julia> model = OptimalControlProblems.ducted_fan(JuMPBackend(); N=100) Optimal Control Applications and Methods, 30(6), 537–561. [GP2009] """ function OptimalControlProblems.ducted_fan( - ::JuMPBackend, args...; grid_size::Int=steps_number_data(:ducted_fan), + ::JuMPBackend, args...; grid_size::Int=grid_size_data(:ducted_fan), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -49,9 +49,19 @@ function OptimalControlProblems.ducted_fan( u₂_l = params[:u₂_l] u₂_u = params[:u₂_u] tf_l = params[:tf_l] - x_i = params[:x_i] - x_f = params[:x_f] - + x₁_t0 = params[:x₁_t0] + v₁_t0 = params[:v₁_t0] + x₂_t0 = params[:x₂_t0] + v₂_t0 = params[:v₂_t0] + α_t0 = params[:α_t0] + vα_t0 = params[:vα_t0] + x₁_tf = params[:x₁_tf] + v₁_tf = params[:v₁_tf] + x₂_tf = params[:x₂_tf] + v₂_tf = params[:v₂_tf] + α_tf = params[:α_tf] + vα_tf = params[:vα_tf] + # model model = JuMP.Model(args...; kwargs...) @@ -74,11 +84,11 @@ function OptimalControlProblems.ducted_fan( v₁[0:N], (start = 0.1) x₂[0:N], (start = -0.1) v₂[0:N], (start = 0.1) - α_l <= α[0:N] <= α_u, (start = 0.1) # radian + α_l ≤ α[0:N] ≤ α_u, (start = 0.1) # radian vα[0:N], (start = 0.1) - u₁_l <= u₁[0:N] <= u₁_u, (start = 0.1) # [N] - u₂_l <= u₂[0:N] <= u₂_u, (start = 1) # [N] - tf >= tf_l, (start = 1.5) + u₁_l ≤ u₁[0:N] ≤ u₁_u, (start = 0.1) # [N] + u₂_l ≤ u₂[0:N] ≤ u₂_u, (start = 1) # [N] + tf ≥ tf_l, (start = 1.5) end ) @@ -87,20 +97,20 @@ function OptimalControlProblems.ducted_fan( model, begin # initial - x₁[0] == x_i[1] - v₁[0] == x_i[2] - x₂[0] == x_i[3] - v₂[0] == x_i[4] - α[0] == x_i[5] - vα[0] == x_i[6] + x₁[0] == x₁_t0 + v₁[0] == v₁_t0 + x₂[0] == x₂_t0 + v₂[0] == v₂_t0 + α[0] == α_t0 + vα[0] == vα_t0 # final - x₁[N] == x_f[1] - v₁[N] == x_f[2] - x₂[N] == x_f[3] - v₂[N] == x_f[4] - α[N] == x_f[5] - vα[N] == x_f[6] + x₁[N] == x₁_tf + v₁[N] == v₁_tf + x₂[N] == x₂_tf + v₂[N] == v₂_tf + α[N] == α_tf + vα[N] == vα_tf end ) @@ -109,7 +119,7 @@ function OptimalControlProblems.ducted_fan( model, begin # - step, (tf - t0) / N + Δt, (tf - t0) / N # dynamics dx₁[k = 0:N], v₁[k] @@ -127,18 +137,18 @@ function OptimalControlProblems.ducted_fan( @constraints( model, begin - ∂x₁[k = 1:N], x₁[k] == x₁[k - 1] + 0.5 * step * (dx₁[k] + dx₁[k - 1]) - ∂v₁[k = 1:N], v₁[k] == v₁[k - 1] + 0.5 * step * (dv₁[k] + dv₁[k - 1]) - ∂x₂[k = 1:N], x₂[k] == x₂[k - 1] + 0.5 * step * (dx₂[k] + dx₂[k - 1]) - ∂v₂[k = 1:N], v₂[k] == v₂[k - 1] + 0.5 * step * (dv₂[k] + dv₂[k - 1]) - ∂α[k = 1:N], α[k] == α[k - 1] + 0.5 * step * (dα[k] + dα[k - 1]) - ∂vα[k = 1:N], vα[k] == vα[k - 1] + 0.5 * step * (dvα[k] + dvα[k - 1]) + ∂x₁[k = 1:N], x₁[k] == x₁[k - 1] + 0.5 * Δt * (dx₁[k] + dx₁[k - 1]) + ∂v₁[k = 1:N], v₁[k] == v₁[k - 1] + 0.5 * Δt * (dv₁[k] + dv₁[k - 1]) + ∂x₂[k = 1:N], x₂[k] == x₂[k - 1] + 0.5 * Δt * (dx₂[k] + dx₂[k - 1]) + ∂v₂[k = 1:N], v₂[k] == v₂[k - 1] + 0.5 * Δt * (dv₂[k] + dv₂[k - 1]) + ∂α[k = 1:N], α[k] == α[k - 1] + 0.5 * Δt * (dα[k] + dα[k - 1]) + ∂vα[k = 1:N], vα[k] == vα[k - 1] + 0.5 * Δt * (dvα[k] + dvα[k - 1]) end ) # objective @objective( - model, Min, (1 / tf) * 0.5 * step * sum(dc[k] + dc[k - 1] for k in 1:N) + (μ * tf) + model, Min, (1 / tf) * 0.5 * Δt * sum(dc[k] + dc[k - 1] for k in 1:N) + (μ * tf) ) return model diff --git a/ext/JuMPModels/electric_vehicle.jl b/ext/JuMPModels/electric_vehicle.jl index aeaf3a12..583be176 100644 --- a/ext/JuMPModels/electric_vehicle.jl +++ b/ext/JuMPModels/electric_vehicle.jl @@ -28,7 +28,7 @@ julia> model = OptimalControlProblems.electric_vehicle(JuMPBackend(); N=100) - Petit, N., & Sciarretta, A. (2011). *Optimal drive of electric vehicles using an inversion-based trajectory generation approach.* IFAC Proceedings Volumes, 44(1), 14519–14526. [PS2011] """ function OptimalControlProblems.electric_vehicle( - ::JuMPBackend, args...; grid_size::Int=steps_number_data(:electric_vehicle), + ::JuMPBackend, args...; grid_size::Int=grid_size_data(:electric_vehicle), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -46,10 +46,10 @@ function OptimalControlProblems.electric_vehicle( α1 = params[:α1] α2 = params[:α2] α3 = params[:α3] - x_i = params[:x_i] - v_i = params[:v_i] - x_f = params[:x_f] - v_f = params[:v_f] + x_t0 = params[:x_t0] + v_t0 = params[:v_t0] + x_tf = params[:x_tf] + v_tf = params[:v_tf] # model model = JuMP.Model(args...; kwargs...) @@ -80,10 +80,10 @@ function OptimalControlProblems.electric_vehicle( @constraints( model, begin - x[0] == x_i - v[0] == v_i - x[N] == x_f - v[N] == v_f + x[0] == x_t0 + v[0] == v_t0 + x[N] == x_tf + v[N] == v_tf end ) @@ -91,9 +91,8 @@ function OptimalControlProblems.electric_vehicle( @expressions( model, begin - # - step, tf / N + Δt, (tf - t0) / N road[k = 0:N], α0 + α1 * x[k] + α2 * x[k]^2 + α3 * x[k]^3 # dynamics @@ -108,13 +107,13 @@ function OptimalControlProblems.electric_vehicle( @constraints( model, begin - ∂x[k = 1:N], x[k] == x[k - 1] + 0.5 * step * (dx[k - 1] + dx[k]) - ∂v[k = 1:N], v[k] == v[k - 1] + 0.5 * step * (dv[k - 1] + dv[k]) + ∂x[k = 1:N], x[k] == x[k - 1] + 0.5 * Δt * (dx[k - 1] + dx[k]) + ∂v[k = 1:N], v[k] == v[k - 1] + 0.5 * Δt * (dv[k - 1] + dv[k]) end ) # objective - @objective(model, Min, 0.5 * step * sum(dc[k] + dc[k - 1] for k in 1:N)) + @objective(model, Min, 0.5 * Δt * sum(dc[k] + dc[k - 1] for k in 1:N)) return model end diff --git a/ext/JuMPModels/glider.jl b/ext/JuMPModels/glider.jl index 7d5b0721..c4089bc5 100644 --- a/ext/JuMPModels/glider.jl +++ b/ext/JuMPModels/glider.jl @@ -28,7 +28,7 @@ julia> model = OptimalControlProblems.glider(JuMPBackend(); N=100) - Hang Glider Problem formulation as in: https://www.mcs.anl.gov/~more/cops/ """ function OptimalControlProblems.glider( - ::JuMPBackend, args...; grid_size::Int=steps_number_data(:glider), + ::JuMPBackend, args...; grid_size::Int=grid_size_data(:glider), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -36,15 +36,15 @@ function OptimalControlProblems.glider( # parameters params = parameters_data(:glider, parameters) t0 = params[:t0] - x_i = params[:x_i] - y_i = params[:y_i] - y_f = params[:y_f] - vx_i = params[:vx_i] - vx_f = params[:vx_f] - vy_i = params[:vy_i] - vy_f = params[:vy_f] + x_t0 = params[:x_t0] + y_t0 = params[:y_t0] + y_tf = params[:y_tf] + vx_t0 = params[:vx_t0] + vx_tf = params[:vx_tf] + vy_t0 = params[:vy_t0] + vy_tf = params[:vy_tf] u_c = params[:u_c] - r_i = params[:r_i] + r_t0 = params[:r_t0] m = params[:m] g = params[:g] c0 = params[:c0] @@ -75,12 +75,12 @@ function OptimalControlProblems.glider( @variables( model, begin - tf >= tf_l, (start = 1) - x[k = 0:N] >= x_l, (start = x_i + vx_i * k / N) - y[k = 0:N], (start = y_i + (k / N) * (y_f - y_i)) - vx[k = 0:N] >= vx_l, (start = vx_i) - vy[k = 0:N], (start = vy_i) - cL_min <= cL[k = 0:N] <= cL_max, (start = cL_max / 2) + tf ≥ tf_l, (start = 1) + x[k = 0:N] ≥ x_l, (start = x_t0 + vx_t0 * k / N) + y[k = 0:N], (start = y_t0 + (k / N) * (y_tf - y_t0)) + vx[k = 0:N] ≥ vx_l, (start = vx_t0) + vy[k = 0:N], (start = vy_t0) + cL_min ≤ cL[k = 0:N] ≤ cL_max, (start = cL_max / 2) end ) @@ -88,13 +88,13 @@ function OptimalControlProblems.glider( @constraints( model, begin - x[0] == x_i - y[0] == y_i - vx[0] == vx_i - vy[0] == vy_i - y[N] == y_f - vx[N] == vx_f - vy[N] == vy_f + x[0] == x_t0 + y[0] == y_t0 + vx[0] == vx_t0 + vy[0] == vy_t0 + y[N] == y_tf + vx[N] == vx_tf + vy[N] == vy_tf end ) @@ -102,12 +102,11 @@ function OptimalControlProblems.glider( @expressions( model, begin - # - step, (tf - t0) / N + Δt, (tf - t0) / N # - r[k = 0:N], (x[k] / r_i - 2.5)^2 + r[k = 0:N], (x[k] / r_t0 - 2.5)^2 u[k = 0:N], u_c * (1 - r[k]) * exp(-r[k]) w[k = 0:N], vy[k] - u[k] v[k = 0:N], √(vx[k]^2 + w[k]^2) @@ -123,15 +122,15 @@ function OptimalControlProblems.glider( @constraints( model, begin - ∂x[k = 1:N], x[k] == x[k - 1] + 0.5 * step * (vx[k] + vx[k - 1]) - ∂y[k = 1:N], y[k] == y[k - 1] + 0.5 * step * (vy[k] + vy[k - 1]) - ∂vx[k = 1:N], vx[k] == vx[k - 1] + 0.5 * step * (dvx[k] + dvx[k - 1]) - ∂vy[k = 1:N], vy[k] == vy[k - 1] + 0.5 * step * (dvy[k] + dvy[k - 1]) + ∂x[k = 1:N], x[k] == x[k - 1] + 0.5 * Δt * (vx[k] + vx[k - 1]) + ∂y[k = 1:N], y[k] == y[k - 1] + 0.5 * Δt * (vy[k] + vy[k - 1]) + ∂vx[k = 1:N], vx[k] == vx[k - 1] + 0.5 * Δt * (dvx[k] + dvx[k - 1]) + ∂vy[k = 1:N], vy[k] == vy[k - 1] + 0.5 * Δt * (dvy[k] + dvy[k - 1]) end ) # objective - @objective(model, Min, -x[N]) + @objective(model, Max, x[N]) return model end diff --git a/ext/JuMPModels/insurance.jl b/ext/JuMPModels/insurance.jl index dddfa870..a21f5b26 100644 --- a/ext/JuMPModels/insurance.jl +++ b/ext/JuMPModels/insurance.jl @@ -28,7 +28,7 @@ julia> model = OptimalControlProblems.insurance(JuMPBackend(); N=100) - Problem formulation available at: https://github.com/control-toolbox/bocop/tree/main/bocop """ function OptimalControlProblems.insurance( - ::JuMPBackend, args...; grid_size::Int=steps_number_data(:insurance), + ::JuMPBackend, args...; grid_size::Int=grid_size_data(:insurance), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -45,7 +45,21 @@ function OptimalControlProblems.insurance( k = params[:k] σ = params[:σ] α = params[:α] - + I_l = params[:I_l] + I_u = params[:I_u] + m_l = params[:m_l] + m_u = params[:m_u] + h_l = params[:h_l] + h_u = params[:h_u] + R_l = params[:R_l] + H_l = params[:H_l] + U_l = params[:U_l] + dUdR_l = params[:dUdR_l] + P_l = params[:P_l] + I_t0 = params[:I_t0] + m_t0 = params[:m_t0] + x₃_t0 = params[:x₃_t0] + # model model = JuMP.Model(args...; kwargs...) @@ -65,15 +79,15 @@ function OptimalControlProblems.insurance( @variables( model, begin - 0 <= I[0:N] <= 1.5, (start = 0.1) - 0 <= m[0:N] <= 1.5, (start = 0.1) - x₃[0:N], (start = 0.1) - 0 <= h[0:N] <= 25, (start = 0.1) - 0 <= R[0:N], (start = 0.1) - 0 <= H[0:N], (start = 0.1) - 0 <= U[0:N], (start = 0.1) - 0.001 <= dUdR[0:N], (start = 0.1) - P >= 0, (start = 0.1) + I_l ≤ I[0:N] ≤ I_u, (start = 0.1) + m_l ≤ m[0:N] ≤ m_u, (start = 0.1) + x₃[0:N], (start = 0.1) + h_l ≤ h[0:N] ≤ h_u, (start = 0.1) + R[0:N] ≥ R_l, (start = 0.1) + H[0:N] ≥ H_l, (start = 0.1) + U[0:N] ≥ U_l, (start = 0.1) + dUdR[0:N] ≥ dUdR_l, (start = 0.1) + P ≥ P_l, (start = 0.1) end ) @@ -81,9 +95,9 @@ function OptimalControlProblems.insurance( @constraints( model, begin - I[0] == 0 - m[0] == 0.001 - x₃[0] == 0 + I[0] == I_t0 + m[0] == m_t0 + x₃[0] == x₃_t0 P - x₃[N] == 0 end ) @@ -91,10 +105,10 @@ function OptimalControlProblems.insurance( @expressions( model, begin - step, tf / N - t[i = 0:N], i*step - ε[i = 0:N], k * t[i] / (tf - t[i] + 1) - fx[i = 0:N], λ * exp(-λ * t[i]) + exp(-λ * tf) / tf + Δt, (tf - t0) / N + t[i = 0:N], t0 + i * Δt + ε[i = 0:N], k * (t[i] - t0) / (tf - t[i] + 1) + fx[i = 0:N], λ * exp(-λ * (t[i] - t0)) + exp(-λ * (tf - t0)) / (tf - t0) v[i = 0:N], m[i]^(α / 2) / (1 + m[i]^(α / 2)) vprime[i = 0:N], α / 2 * m[i]^(α / 2 - 1) / (1 + m[i]^(α / 2))^2 end @@ -104,7 +118,7 @@ function OptimalControlProblems.insurance( model, begin cond1[i = 0:N], R[i] - (w - P + I[i] - m[i] - ε[i]) == 0 - cond2[i = 0:N], H[i] - (h0 - γ * step * i * (1 - v[i])) == 0 + cond2[i = 0:N], H[i] - (h0 - γ * i * Δt * (1 - v[i])) == 0 cond3[i = 0:N], U[i] - (1 - exp(-s * R[i]) + H[i]) == 0 cond4[i = 0:N], dUdR[i] - (s * exp(-s * R[i])) == 0 end @@ -115,26 +129,26 @@ function OptimalControlProblems.insurance( model, begin # dynamics - dI[i = 0:N], (1 - γ * t[i] * vprime[i] / dUdR[i]) * h[i] + dI[i = 0:N], (1 - γ * (t[i] - t0) * vprime[i] / dUdR[i]) * h[i] dm[i = 0:N], h[i] dx₃[i = 0:N], (1 + σ) * I[i] * fx[i] # objective - dc[i = 0:N], -U[i] * fx[i] + dc[i = 0:N], U[i] * fx[i] end ) @constraints( model, begin - ∂I[i = 1:N], I[i] == I[i - 1] + 0.5 * step * (dI[i] + dI[i - 1]) - ∂m[i = 1:N], m[i] == m[i - 1] + 0.5 * step * (dm[i] + dm[i - 1]) - ∂x₃[i = 1:N], x₃[i] == x₃[i - 1] + 0.5 * step * (dx₃[i] + dx₃[i - 1]) + ∂I[i = 1:N], I[i] == I[i - 1] + 0.5 * Δt * (dI[i] + dI[i - 1]) + ∂m[i = 1:N], m[i] == m[i - 1] + 0.5 * Δt * (dm[i] + dm[i - 1]) + ∂x₃[i = 1:N], x₃[i] == x₃[i - 1] + 0.5 * Δt * (dx₃[i] + dx₃[i - 1]) end ) # objective - @objective(model, Min, 0.5 * step * sum(dc[i] + dc[i - 1] for i in 1:N)) + @objective(model, Max, 0.5 * Δt * sum(dc[i] + dc[i - 1] for i in 1:N)) return model end diff --git a/ext/JuMPModels/jackson.jl b/ext/JuMPModels/jackson.jl index 7be6e3c2..f839f7bd 100644 --- a/ext/JuMPModels/jackson.jl +++ b/ext/JuMPModels/jackson.jl @@ -2,8 +2,8 @@ $(TYPEDSIGNATURES) Constructs and returns a JuMP model for the **Jackson Optimal Control Problem**. -The model represents a dynamic system with three state variables `a`, `b`, and `x3` and a control variable `u`. -The objective is to maximise the final value of `x3` by optimising the control `u` over the time horizon `[0, tf]`. +The model represents a dynamic system with three state variables `a`, `b`, and `x₃` and a control variable `u`. +The objective is to maximise the final value of `x₃` by optimising the control `u` over the time horizon `[0, tf]`. The dynamics are discretised using `N` steps with trapezoidal collocation. # Arguments @@ -29,7 +29,7 @@ julia> model = OptimalControlProblems.jackson(JuMPBackend(); N=100) - Problem formulation available at: https://github.com/control-toolbox/bocop/tree/main/bocop """ function OptimalControlProblems.jackson( - ::JuMPBackend, args...; grid_size::Int=steps_number_data(:jackson), + ::JuMPBackend, args...; grid_size::Int=grid_size_data(:jackson), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -41,6 +41,17 @@ function OptimalControlProblems.jackson( k1 = params[:k1] k2 = params[:k2] k3 = params[:k3] + a_l = params[:a_l] + a_u = params[:a_u] + b_l = params[:b_l] + b_u = params[:b_u] + x₃_l = params[:x₃_l] + x₃_u = params[:x₃_u] + u_l = params[:u_l] + u_u = params[:u_u] + a_t0 = params[:a_t0] + b_t0 = params[:b_t0] + x₃_t0 = params[:x₃_t0] # model model = JuMP.Model(args...; kwargs...) @@ -60,10 +71,10 @@ function OptimalControlProblems.jackson( @variables( model, begin - 0 <= a[0:N] <= 1.1, (start = 0.1) - 0 <= b[0:N] <= 1.1, (start = 0.1) - 0 <= x3[0:N] <= 1.1, (start = 0.1) - 0 <= u[0:N] <= 1, (start = 0.1) + a_l ≤ a[0:N] ≤ a_u, (start = 0.1) + b_l ≤ b[0:N] ≤ b_u, (start = 0.1) + x₃_l ≤ x₃[0:N] ≤ x₃_u, (start = 0.1) + u_l ≤ u[0:N] ≤ u_u, (start = 0.1) end ) @@ -71,9 +82,9 @@ function OptimalControlProblems.jackson( @constraints( model, begin - a[0] == 1 - b[0] == 0 - x3[0] == 0 + a[0] == a_t0 + b[0] == b_t0 + x₃[0] == x₃_t0 end ) @@ -81,24 +92,24 @@ function OptimalControlProblems.jackson( @expressions( model, begin - step, tf / N + Δt, (tf - t0) / N da[i = 0:N], -u[i] * (k1 * a[i] - k2 * b[i]) db[i = 0:N], u[i] * (k1 * a[i] - k2 * b[i]) - (1 - u[i]) * k3 * b[i] - dx3[i = 0:N], (1 - u[i]) * k3 * b[i] + dx₃[i = 0:N], (1 - u[i]) * k3 * b[i] end ) @constraints( model, begin - ∂a[i = 1:N], a[i] == a[i - 1] + 0.5 * step * (da[i] + da[i - 1]) - ∂b[i = 1:N], b[i] == b[i - 1] + 0.5 * step * (db[i] + db[i - 1]) - ∂x3[i = 1:N], x3[i] == x3[i - 1] + 0.5 * step * (dx3[i] + dx3[i - 1]) + ∂a[i = 1:N], a[i] == a[i - 1] + 0.5 * Δt * (da[i] + da[i - 1]) + ∂b[i = 1:N], b[i] == b[i - 1] + 0.5 * Δt * (db[i] + db[i - 1]) + ∂x₃[i = 1:N], x₃[i] == x₃[i - 1] + 0.5 * Δt * (dx₃[i] + dx₃[i - 1]) end ) # objective - @objective(model, Min, -x3[N]) + @objective(model, Max, x₃[N]) return model end diff --git a/ext/JuMPModels/moonlander.jl b/ext/JuMPModels/moonlander.jl index 78bcc379..b7106c80 100644 --- a/ext/JuMPModels/moonlander.jl +++ b/ext/JuMPModels/moonlander.jl @@ -29,7 +29,7 @@ julia> model = OptimalControlProblems.moonlander(JuMPBackend(); N=100) - Problem formulation available at: https://arxiv.org/pdf/2303.16746 """ function OptimalControlProblems.moonlander( - ::JuMPBackend, args...; grid_size::Int=steps_number_data(:moonlander), + ::JuMPBackend, args...; grid_size::Int=grid_size_data(:moonlander), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -37,13 +37,32 @@ function OptimalControlProblems.moonlander( # parameters params = parameters_data(:moonlander, parameters) t0 = params[:t0] - target = params[:target] m = params[:m] g = params[:g] I = params[:I] D = params[:D] max_thrust = params[:max_thrust] - + tf_l = params[:tf_l] + tf_u = params[:tf_u] + F₁_l = params[:F₁_l] + F₁_u = max_thrust + F₂_l = params[:F₂_l] + F₂_u = max_thrust + tf_l = params[:tf_l] + tf_u = params[:tf_u] + F₁_l = params[:F₁_l] + F₂_l = params[:F₂_l] + p₁_t0 = params[:p₁_t0] + p₂_t0 = params[:p₂_t0] + dp₁_t0 = params[:dp₁_t0] + dp₂_t0 = params[:dp₂_t0] + θ_t0 = params[:θ_t0] + dθ_t0 = params[:dθ_t0] + p₁_tf = params[:p₁_tf] + p₂_tf = params[:p₂_tf] + dp₁_tf = params[:dp₁_tf] + dp₂_tf = params[:dp₂_tf] + # define the problem model = JuMP.Model(args...; kwargs...) @@ -63,19 +82,19 @@ function OptimalControlProblems.moonlander( model, begin # final time - 0.1 <= tf <= 1.0, (start = 0.5) + tf_l ≤ tf ≤ tf_u, (start = 0.5) # state variables - p1[k = 0:N], (start = 0.1) - p2[k = 0:N], (start = 0.1) - dp1[k = 0:N], (start = 0.1) - dp2[k = 0:N], (start = 0.1) + p₁[k = 0:N], (start = 0.1) + p₂[k = 0:N], (start = 0.1) + dp₁[k = 0:N], (start = 0.1) + dp₂[k = 0:N], (start = 0.1) θ[k = 0:N], (start = 0.1) dθ[k = 0:N], (start = 0.1) # control variables - 0 <= F1[k = 0:N] <= max_thrust, (start = 5.0) - 0 <= F2[k = 0:N] <= max_thrust, (start = 5.0) + F₁_l ≤ F₁[k = 0:N] ≤ F₁_u, (start = 5.0) + F₂_l ≤ F₂[k = 0:N] ≤ F₂_u, (start = 5.0) end ) @@ -83,16 +102,17 @@ function OptimalControlProblems.moonlander( @constraints( model, begin - p1[0] == 0 - p2[0] == 0 - dp1[0] == 0 - dp2[0] == 0 - θ[0] == 0 - dθ[0] == 0 - p1[N] == target[1] - p2[N] == target[2] - dp1[N] == 0 - dp2[N] == 0 + p₁[0] == p₁_t0 + p₂[0] == p₂_t0 + dp₁[0] == dp₁_t0 + dp₂[0] == dp₂_t0 + θ[0] == θ_t0 + dθ[0] == dθ_t0 + + p₁[N] == p₁_tf + p₂[N] == p₂_tf + dp₁[N] == dp₁_tf + dp₂[N] == dp₂_tf end ) @@ -101,8 +121,8 @@ function OptimalControlProblems.moonlander( model, begin F_r[k = 0:N], [ - cos(θ[k]) -sin(θ[k]) p1[k] - sin(θ[k]) cos(θ[k]) p2[k] + cos(θ[k]) -sin(θ[k]) p₁[k] + sin(θ[k]) cos(θ[k]) p₂[k] 0 0 1 ] end @@ -110,32 +130,31 @@ function OptimalControlProblems.moonlander( @expressions( model, begin - F_tot[k = 0:N], (F_r[k] * [0; F1[k] + F2[k]; 0])[1:2] + F_tot[k = 0:N], (F_r[k] * [0; F₁[k] + F₂[k]; 0])[1:2] end ) @expressions( model, begin - # - step, tf / N + Δt, (tf - t0) / N # - ddp1[k = 0:N], (1 / m) * F_tot[k][1] - ddp2[k = 0:N], (1 / m) * F_tot[k][2] - g - ddθ[k = 0:N], (1 / I) * (D / 2) * (F2[k] - F1[k]) + ddp₁[k = 0:N], (1 / m) * F_tot[k][1] + ddp₂[k = 0:N], (1 / m) * F_tot[k][2] - g + ddθ[k = 0:N], (1 / I) * (D / 2) * (F₂[k] - F₁[k]) end ) @constraints( model, begin - ∂p1[k = 1:N], p1[k] == p1[k - 1] + 0.5 * step * (dp1[k] + dp1[k - 1]) - ∂p2[k = 1:N], p2[k] == p2[k - 1] + 0.5 * step * (dp2[k] + dp2[k - 1]) - ∂dp1[k = 1:N], dp1[k] == dp1[k - 1] + 0.5 * step * (ddp1[k] + ddp1[k - 1]) - ∂dp2[k = 1:N], dp2[k] == dp2[k - 1] + 0.5 * step * (ddp2[k] + ddp2[k - 1]) - ∂θ[k = 1:N], θ[k] == θ[k - 1] + 0.5 * step * (dθ[k] + dθ[k - 1]) - ∂dθ[k = 1:N], dθ[k] == dθ[k - 1] + 0.5 * step * (ddθ[k] + ddθ[k - 1]) + ∂p₁[k = 1:N], p₁[k] == p₁[k - 1] + 0.5 * Δt * (dp₁[k] + dp₁[k - 1]) + ∂p₂[k = 1:N], p₂[k] == p₂[k - 1] + 0.5 * Δt * (dp₂[k] + dp₂[k - 1]) + ∂dp₁[k = 1:N], dp₁[k] == dp₁[k - 1] + 0.5 * Δt * (ddp₁[k] + ddp₁[k - 1]) + ∂dp₂[k = 1:N], dp₂[k] == dp₂[k - 1] + 0.5 * Δt * (ddp₂[k] + ddp₂[k - 1]) + ∂θ[k = 1:N], θ[k] == θ[k - 1] + 0.5 * Δt * (dθ[k] + dθ[k - 1]) + ∂dθ[k = 1:N], dθ[k] == dθ[k - 1] + 0.5 * Δt * (ddθ[k] + ddθ[k - 1]) end ) diff --git a/ext/JuMPModels/robbins.jl b/ext/JuMPModels/robbins.jl index 0609ba7b..fc4aa2fc 100644 --- a/ext/JuMPModels/robbins.jl +++ b/ext/JuMPModels/robbins.jl @@ -28,7 +28,7 @@ julia> model = OptimalControlProblems.robbins(JuMPBackend(); N=100) - Problem formulation available at: https://github.com/control-toolbox/bocop/tree/main/bocop """ function OptimalControlProblems.robbins( - ::JuMPBackend, args...; grid_size::Int=steps_number_data(:robbins), + ::JuMPBackend, args...; grid_size::Int=grid_size_data(:robbins), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -40,9 +40,13 @@ function OptimalControlProblems.robbins( α = params[:α] β = params[:β] γ = params[:γ] - - # - step = tf / N + x₁_l = params[:x₁_l] + x₁_t0 = params[:x₁_t0] + x₂_t0 = params[:x₂_t0] + x₃_t0 = params[:x₃_t0] + x₁_tf = params[:x₁_tf] + x₂_tf = params[:x₂_tf] + x₃_tf = params[:x₃_tf] # model model = JuMP.Model(args...; kwargs...) @@ -63,9 +67,9 @@ function OptimalControlProblems.robbins( @variables( model, begin - 0 <= x1[0:N], (start = 0.1) - x2[0:N], (start = 0.1) - x3[0:N], (start = 0.1) + x₁[0:N] ≥ x₁_l, (start = 0.1) + x₂[0:N], (start = 0.1) + x₃[0:N], (start = 0.1) u[0:N], (start = 0.1) end ) @@ -74,22 +78,28 @@ function OptimalControlProblems.robbins( @constraints( model, begin - x1[0] == 1 - x2[0] == -2 - x3[0] == 0 - x1[N] == 0 - x2[N] == 0 - x3[N] == 0 + x₁[0] == x₁_t0 + x₂[0] == x₂_t0 + x₃[0] == x₃_t0 + x₁[N] == x₁_tf + x₂[N] == x₂_tf + x₃[N] == x₃_tf end ) # dynamics + @expressions( + model, + begin + Δt, (tf - t0) / N + end + ) @constraints( model, begin - ∂x1[i = 1:N], x1[i] == x1[i - 1] + 0.5 * step * (x2[i] + x2[i - 1]) - ∂x2[i = 1:N], x2[i] == x2[i - 1] + 0.5 * step * (x3[i] + x3[i - 1]) - ∂x3[i = 1:N], x3[i] == x3[i - 1] + 0.5 * step * (u[i] + u[i - 1]) + ∂x₁[i = 1:N], x₁[i] == x₁[i - 1] + 0.5 * Δt * (x₂[i] + x₂[i - 1]) + ∂x₂[i = 1:N], x₂[i] == x₂[i - 1] + 0.5 * Δt * (x₃[i] + x₃[i - 1]) + ∂x₃[i = 1:N], x₃[i] == x₃[i - 1] + 0.5 * Δt * (u[i] + u[i - 1]) end ) @@ -97,11 +107,11 @@ function OptimalControlProblems.robbins( @expressions( model, begin - dc[i = 0:N], (α * x1[i] + β * x1[i]^2 + γ * u[i]^2) + dc[i = 0:N], (α * x₁[i] + β * x₁[i]^2 + γ * u[i]^2) end ) - @objective(model, Min, 0.5 * step * sum(dc[i] + dc[i - 1] for i in 1:N)) + @objective(model, Min, 0.5 * Δt * sum(dc[i] + dc[i - 1] for i in 1:N)) return model end diff --git a/ext/JuMPModels/robot.jl b/ext/JuMPModels/robot.jl index c8eda1fc..56424688 100644 --- a/ext/JuMPModels/robot.jl +++ b/ext/JuMPModels/robot.jl @@ -28,7 +28,7 @@ julia> model = OptimalControlProblems.robot(JuMPBackend(); N=100) - Problem formulation available at: https://github.com/MadNLP/COPSBenchmark.jl/blob/main/src/robot.jl """ function OptimalControlProblems.robot( - ::JuMPBackend, args...; grid_size::Int=steps_number_data(:robot), + ::JuMPBackend, args...; grid_size::Int=grid_size_data(:robot), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -41,14 +41,37 @@ function OptimalControlProblems.robot( L = params[:L] # Upper bounds on the controls - max_uρ = params[:max_uρ] - max_uθ = params[:max_uθ] - max_uϕ = params[:max_uϕ] + uρ_l = params[:uρ_l] + uρ_u = params[:uρ_u] + uθ_l = params[:uθ_l] + uθ_u = params[:uθ_u] + uϕ_l = params[:uϕ_l] + uϕ_u = params[:uϕ_u] # Initial positions of the length and the angles for the robot arm - ρ0 = params[:ρ0] - ϕ0 = params[:ϕ0] - θf = params[:θf] + ρ_t0 = params[:ρ_t0] + θ_t0 = params[:θ_t0] + ϕ_t0 = params[:ϕ_t0] + dρ_t0 = params[:dρ_t0] + dθ_t0 = params[:dθ_t0] + dϕ_t0 = params[:dϕ_t0] + + # Final positions + ρ_tf = params[:ρ_tf] + θ_tf = params[:θ_tf] + ϕ_tf = params[:ϕ_tf] + dρ_tf = params[:dρ_tf] + dθ_tf = params[:dθ_tf] + dϕ_tf = params[:dϕ_tf] + + # + ρ_l = params[:ρ_l] + ρ_u = L + θ_l = params[:θ_l] + θ_u = params[:θ_u] + ϕ_l = params[:ϕ_l] + ϕ_u = params[:ϕ_u] + tf_l = params[:tf_l] # model model = JuMP.Model(args...; kwargs...) @@ -68,19 +91,19 @@ function OptimalControlProblems.robot( @variables( model, begin - 0 <= ρ[k = 0:N] <= L, (start = ρ0) - -π <= θ[k = 0:N] <= π, (start = 2π/3 * (k / N)^2) - 0 <= ϕ[k = 0:N] <= π, (start = ϕ0) + ρ_l ≤ ρ[k = 0:N] ≤ ρ_u, (start = ρ_t0) + θ_l ≤ θ[k = 0:N] ≤ θ_u, (start = 2π/3 * (k / N)^2) + ϕ_l ≤ ϕ[k = 0:N] ≤ ϕ_u, (start = ϕ_t0) - dρ[k = 0:N], (start = 0) - dθ[k = 0:N], (start = 4π/3 * (k / N)) - dϕ[k = 0:N], (start = 0) + dρ[k = 0:N], (start = 0) + dθ[k = 0:N], (start = 4π/3 * (k / N)) + dϕ[k = 0:N], (start = 0) - -max_uρ <= uρ[0:N] <= max_uρ, (start = 0) - -max_uθ <= uθ[0:N] <= max_uθ, (start = 0) - -max_uϕ <= uϕ[0:N] <= max_uϕ, (start = 0) + uρ_l ≤ uρ[0:N] ≤ uρ_u, (start = 0) + uθ_l ≤ uθ[0:N] ≤ uθ_u, (start = 0) + uϕ_l ≤ uϕ[0:N] ≤ uϕ_u, (start = 0) - tf >= 0.1, (start = 1) + tf ≥ tf_l, (start = 1) end ) @@ -89,20 +112,20 @@ function OptimalControlProblems.robot( model, begin # initial - ρ[0] == ρ0 - ϕ[0] == ϕ0 - θ[0] == 0 - dρ[0] == 0 - dθ[0] == 0 - dϕ[0] == 0 + ρ[0] == ρ_t0 + θ[0] == θ_t0 + ϕ[0] == ϕ_t0 + dρ[0] == dρ_t0 + dθ[0] == dθ_t0 + dϕ[0] == dϕ_t0 # final - ρ[N] == ρ0 - θ[N] == θf - ϕ[N] == ϕ0 - dρ[N] == 0 - dθ[N] == 0 - dϕ[N] == 0 + ρ[N] == ρ_tf + θ[N] == θ_tf + ϕ[N] == ϕ_tf + dρ[N] == dρ_tf + dθ[N] == dθ_tf + dϕ[N] == dϕ_tf end ) @@ -110,9 +133,8 @@ function OptimalControlProblems.robot( @expressions( model, begin - # - step, tf / N + Δt, (tf - t0) / N # I_θ[i = 0:N], ((L - ρ[i])^3 + ρ[i]^3) * (sin(ϕ[i]))^2 @@ -128,12 +150,12 @@ function OptimalControlProblems.robot( @constraints( model, begin - ∂ρ[i = 1:N], ρ[i] == ρ[i - 1] + 0.5 * step * (dρ[i] + dρ[i - 1]) - ∂ϕ[i = 1:N], ϕ[i] == ϕ[i - 1] + 0.5 * step * (dϕ[i] + dϕ[i - 1]) - ∂θ[i = 1:N], θ[i] == θ[i - 1] + 0.5 * step * (dθ[i] + dθ[i - 1]) - ∂dρ[i = 1:N], dρ[i] == dρ[i - 1] + 0.5 * step * (ddρ[i] + ddρ[i - 1]) - ∂dθ[i = 1:N], dθ[i] == dθ[i - 1] + 0.5 * step * (ddθ[i] + ddθ[i - 1]) - ∂dϕ[i = 1:N], dϕ[i] == dϕ[i - 1] + 0.5 * step * (ddϕ[i] + ddϕ[i - 1]) + ∂ρ[i = 1:N], ρ[i] == ρ[i - 1] + 0.5 * Δt * (dρ[i] + dρ[i - 1]) + ∂ϕ[i = 1:N], ϕ[i] == ϕ[i - 1] + 0.5 * Δt * (dϕ[i] + dϕ[i - 1]) + ∂θ[i = 1:N], θ[i] == θ[i - 1] + 0.5 * Δt * (dθ[i] + dθ[i - 1]) + ∂dρ[i = 1:N], dρ[i] == dρ[i - 1] + 0.5 * Δt * (ddρ[i] + ddρ[i - 1]) + ∂dθ[i = 1:N], dθ[i] == dθ[i - 1] + 0.5 * Δt * (ddθ[i] + ddθ[i - 1]) + ∂dϕ[i = 1:N], dϕ[i] == dϕ[i - 1] + 0.5 * Δt * (ddϕ[i] + ddϕ[i - 1]) end ) diff --git a/ext/JuMPModels/rocket.jl b/ext/JuMPModels/rocket.jl index 373c8a58..a1d6ad8d 100644 --- a/ext/JuMPModels/rocket.jl +++ b/ext/JuMPModels/rocket.jl @@ -28,7 +28,7 @@ julia> model = OptimalControlProblems.rocket(JuMPBackend(); N=200) - Problem formulation available at: https://github.com/MadNLP/COPSBenchmark.jl/blob/main/src/rocket.jl """ function OptimalControlProblems.rocket( - ::JuMPBackend, args...; grid_size::Int=steps_number_data(:rocket), + ::JuMPBackend, args...; grid_size::Int=grid_size_data(:rocket), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -36,20 +36,22 @@ function OptimalControlProblems.rocket( # parameters params = parameters_data(:rocket, parameters) t0 = params[:t0] - h0 = params[:h0] - v0 = params[:v0] - m0 = params[:m0] + h_t0 = params[:h_t0] + v_t0 = params[:v_t0] + m_t0 = params[:m_t0] g0 = params[:g0] Tc = params[:Tc] hc = params[:hc] vc = params[:vc] mc = params[:mc] + T_l = params[:T_l] + tf_l = params[:tf_l] # - c = 0.5 * sqrt(g0 * h0) - mf = mc * m0 - Dc = 0.5 * vc * (m0 / g0) - Tmax = Tc * m0 * g0 + c = 0.5 * sqrt(g0 * h_t0) + m_tf = mc * m_t0 + Dc = 0.5 * vc * (m_t0 / g0) + Tmax = Tc * m_t0 * g0 # model model = JuMP.Model(args...; kwargs...) @@ -69,11 +71,11 @@ function OptimalControlProblems.rocket( @variables( model, begin - h[i = 0:N] >= h0, (start = 1) - v[i = 0:N] >= v0, (start = i / N * (1 - i / N)) - mf <= m[i = 0:N] <= m0, (start = (mf - m0) * (i / N) + m0) - 0 <= T[i = 0:N] <= Tmax, (start = Tmax / 2) - 0 <= tf, (start = 1) + h[i = 0:N] ≥ h_t0, (start = 1) + v[i = 0:N] ≥ v_t0, (start = i / N * (1 - i / N)) + m_tf ≤ m[i = 0:N] ≤ m_t0, (start = (m_tf - m_t0) * (i / N) + m_t0) + T_l ≤ T[i = 0:N] ≤ Tmax, (start = Tmax / 2) + tf ≥ tf_l, (start = 1) end ) @@ -81,10 +83,10 @@ function OptimalControlProblems.rocket( @constraints( model, begin - h_ic, h[0] == h0 - v_ic, v[0] == v0 - m_ic, m[0] == m0 - mfc, m[N] == mf + h[0] == h_t0 + v[0] == v_t0 + m[0] == m_t0 + m[N] == m_tf end ) @@ -92,13 +94,12 @@ function OptimalControlProblems.rocket( @expressions( model, begin - # - step, tf / N + Δt, (tf - t0) / N # - D[i = 0:N], Dc * v[i]^2 * exp(-hc * (h[i] - h0)) / h0 - g[i = 0:N], g0 * (h0 / h[i])^2 + D[i = 0:N], Dc * v[i]^2 * exp(-hc * (h[i] - h_t0)) / h_t0 + g[i = 0:N], g0 * (h_t0 / h[i])^2 # dh[i = 0:N], v[i] @@ -110,14 +111,14 @@ function OptimalControlProblems.rocket( @constraints( model, begin - ∂h[i = 1:N], h[i] == h[i - 1] + 0.5 * step * (dh[i] + dh[i - 1]) - ∂v[i = 1:N], v[i] == v[i - 1] + 0.5 * step * (dv[i] + dv[i - 1]) - ∂m[i = 1:N], m[i] == m[i - 1] + 0.5 * step * (dm[i] + dm[i - 1]) + ∂h[i = 1:N], h[i] == h[i - 1] + 0.5 * Δt * (dh[i] + dh[i - 1]) + ∂v[i = 1:N], v[i] == v[i - 1] + 0.5 * Δt * (dv[i] + dv[i - 1]) + ∂m[i = 1:N], m[i] == m[i - 1] + 0.5 * Δt * (dm[i] + dm[i - 1]) end ) # objective - @objective(model, Min, -h[N]) + @objective(model, Max, h[N]) return model end diff --git a/ext/JuMPModels/space_shuttle.jl b/ext/JuMPModels/space_shuttle.jl index 9147b757..40915f46 100644 --- a/ext/JuMPModels/space_shuttle.jl +++ b/ext/JuMPModels/space_shuttle.jl @@ -29,7 +29,7 @@ julia> model = OptimalControlProblems.space_shuttle(JuMPBackend(); N=200) - Problem formulation and tutorial available at: https://jump.dev/JuMP.jl/stable/tutorials/nonlinear/space_shuttle_reentry_trajectory/ """ function OptimalControlProblems.space_shuttle( - ::JuMPBackend, args...; grid_size::Int=steps_number_data(:space_shuttle), + ::JuMPBackend, args...; grid_size::Int=grid_size_data(:space_shuttle), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -58,24 +58,41 @@ function OptimalControlProblems.space_shuttle( # Δt_min = params[:Δt_min] Δt_max = params[:Δt_max] - tf_min = N*Δt_min - tf_max = N*Δt_max + tf_l = grid_size*Δt_min + tf_u = grid_size*Δt_max ## Initial conditions - h_s = params[:h_s] - ϕ_s = params[:ϕ_s] - θ_s = params[:θ_s] - v_s = params[:v_s] - γ_s = params[:γ_s] - ψ_s = params[:ψ_s] + h_t0 = params[:h_t0] + ϕ_t0 = params[:ϕ_t0] + θ_t0 = params[:θ_t0] + v_t0 = params[:v_t0] + γ_t0 = params[:γ_t0] + ψ_t0 = params[:ψ_t0] + + # for initial guess α_s = params[:α_s] β_s = params[:β_s] - t_s = params[:t_s] ## Final conditions, the so-called Terminal Area Energy Management (TAEM) - h_t = params[:h_t] - v_t = params[:v_t] - γ_t = params[:γ_t] + h_tf = params[:h_tf] + v_tf = params[:v_tf] + γ_tf = params[:γ_tf] + + ## + h_l = params[:h_l] + ϕ_l = params[:ϕ_l] + ϕ_u = params[:ϕ_u] + θ_l = params[:θ_l] + θ_u = params[:θ_u] + v_l = params[:v_l] + γ_l = params[:γ_l] + γ_u = params[:γ_u] + ψ_l = params[:ψ_l] + ψ_u = params[:ψ_u] + α_l = params[:α_l] + α_u = params[:α_u] + β_l = params[:β_l] + β_u = params[:β_u] ## Scalings scaling_h = 1e5 @@ -99,21 +116,20 @@ function OptimalControlProblems.space_shuttle( @variables( model, begin - # state - 0 ≤ scaled_h[0:N] # altitude (ft) / scaling_h - -2π ≤ ϕ[0:N] ≤ 2π # longitude (rad) - deg2rad(-89) ≤ θ[0:N] ≤ deg2rad(89) # latitude (rad) - 1e-4 ≤ scaled_v[0:N] # velocity (ft/sec) / scaling_v - deg2rad(-89) ≤ γ[0:N] ≤ deg2rad(89) # flight path angle (rad) - -2π ≤ ψ[0:N] ≤ 2π # azimuth (rad) + scaled_h[0:N] ≥ h_l # altitude (ft) / scaling_h + ϕ_l ≤ ϕ[0:N] ≤ ϕ_u # longitude (rad) + θ_l ≤ θ[0:N] ≤ θ_u # latitude (rad) + scaled_v[0:N] ≥ v_l # velocity (ft/sec) / scaling_v + γ_l ≤ γ[0:N] ≤ γ_u # flight path angle (rad) + ψ_l ≤ ψ[0:N] ≤ ψ_u # azimuth (rad) # control - deg2rad(-90) ≤ α[0:N] ≤ deg2rad(90) # angle of attack (rad) - deg2rad(-89) ≤ β[0:N] ≤ deg2rad(1) # bank angle (rad) + α_l ≤ α[0:N] ≤ α_u # angle of attack (rad) + β_l ≤ β[0:N] ≤ β_u # bank angle (rad) # - tf_min ≤ tf ≤ tf_max # final time (sec) + tf_l ≤ tf ≤ tf_u # final time (sec) end ) @@ -122,15 +138,16 @@ function OptimalControlProblems.space_shuttle( @constraints( model, begin - con_h0, scaled_h[0] == h_s - con_ϕ0, ϕ[0] == ϕ_s - con_θ0, θ[0] == θ_s - con_v0, scaled_v[0] == v_s - con_γ0, γ[0] == γ_s - con_ψ0, ψ[0] == ψ_s - con_hf, scaled_h[N] == h_t - con_vf, scaled_v[N] == v_t - con_γf, γ[N] == γ_t + scaled_h[0] == h_t0 + ϕ[0] == ϕ_t0 + θ[0] == θ_t0 + scaled_v[0] == v_t0 + γ[0] == γ_t0 + ψ[0] == ψ_t0 + + scaled_h[N] == h_tf + scaled_v[N] == v_tf + γ[N] == γ_tf end ) @@ -141,19 +158,18 @@ function OptimalControlProblems.space_shuttle( end ## Interpolate each parameter separately - h_interp = linear_interpolate(h_s, h_t, N+1) - ϕ_interp = linear_interpolate(ϕ_s, ϕ_s, N+1) # no change in longitude - θ_interp = linear_interpolate(θ_s, θ_s, N+1) # no change in latitude - v_interp = linear_interpolate(v_s, v_t, N+1) - γ_interp = linear_interpolate(γ_s, γ_t, N+1) - ψ_interp = linear_interpolate(ψ_s, ψ_s, N+1) # no change in azimuth + h_interp = linear_interpolate(h_t0, h_tf, N+1) + ϕ_interp = linear_interpolate(ϕ_t0, ϕ_t0, N+1) # no change in longitude + θ_interp = linear_interpolate(θ_t0, θ_t0, N+1) # no change in latitude + v_interp = linear_interpolate(v_t0, v_tf, N+1) + γ_interp = linear_interpolate(γ_t0, γ_tf, N+1) + ψ_interp = linear_interpolate(ψ_t0, ψ_t0, N+1) # no change in azimuth α_interp = linear_interpolate(α_s, α_s, N+1) # no change in angle of attack β_interp = linear_interpolate(β_s, β_s, N+1) # no change in bank angle - t_interp = linear_interpolate(t_s, t_s, N+1) # no change in time step ## Combine all interpolated parameters into an array of arrays interpolated_values = [ - transpose([h, ϕ, θ, v, γ, ψ, α, β, t]) for (h, ϕ, θ, v, γ, ψ, α, β, t) in zip( + transpose([h, ϕ, θ, v, γ, ψ, α, β]) for (h, ϕ, θ, v, γ, ψ, α, β) in zip( h_interp, ϕ_interp, θ_interp, @@ -162,7 +178,6 @@ function OptimalControlProblems.space_shuttle( ψ_interp, α_interp, β_interp, - t_interp, ) ] @@ -176,8 +191,7 @@ function OptimalControlProblems.space_shuttle( set_start_value.(model[:ψ], vec(initial_guess[:, 6])) set_start_value.(model[:α], vec(initial_guess[:, 7])) set_start_value.(model[:β], vec(initial_guess[:, 8])) - set_start_value.(model[:tf], (tf_min+tf_max)/2) - #set_start_value.(model[:Δt], vec(initial_guess[1:(end - 1), 9])) + set_start_value.(model[:tf], (tf_l+tf_u)/2) # Functions to restore `h` and `v` to their true scale @expression(model, h[j = 0:N], scaled_h[j] * scaling_h) @@ -209,21 +223,21 @@ function OptimalControlProblems.space_shuttle( (v[j] / (r[j] * cos(θ[j]))) * cos(γ[j]) * sin(ψ[j]) * sin(θ[j]) ) - @expression(model, Δt[i = 1:N], tf / N) + @expression(model, Δt, (tf - t0) / N) @constraints( model, begin - ∂h[i = 1:N], h[i] == h[i - 1] + 0.5 * Δt[i] * (δh[i - 1] + δh[i]) - ∂ϕ[i = 1:N], ϕ[i] == ϕ[i - 1] + 0.5 * Δt[i] * (δϕ[i - 1] + δϕ[i]) - ∂θ[i = 1:N], θ[i] == θ[i - 1] + 0.5 * Δt[i] * (δθ[i - 1] + δθ[i]) - ∂v[i = 1:N], v[i] == v[i - 1] + 0.5 * Δt[i] * (δv[i - 1] + δv[i]) - ∂γ[i = 1:N], γ[i] == γ[i - 1] + 0.5 * Δt[i] * (δγ[i - 1] + δγ[i]) - ∂ψ[i = 1:N], ψ[i] == ψ[i - 1] + 0.5 * Δt[i] * (δψ[i - 1] + δψ[i]) + ∂h[i = 1:N], h[i] == h[i - 1] + 0.5 * Δt * (δh[i - 1] + δh[i]) + ∂ϕ[i = 1:N], ϕ[i] == ϕ[i - 1] + 0.5 * Δt * (δϕ[i - 1] + δϕ[i]) + ∂θ[i = 1:N], θ[i] == θ[i - 1] + 0.5 * Δt * (δθ[i - 1] + δθ[i]) + ∂v[i = 1:N], v[i] == v[i - 1] + 0.5 * Δt * (δv[i - 1] + δv[i]) + ∂γ[i = 1:N], γ[i] == γ[i - 1] + 0.5 * Δt * (δγ[i - 1] + δγ[i]) + ∂ψ[i = 1:N], ψ[i] == ψ[i - 1] + 0.5 * Δt * (δψ[i - 1] + δψ[i]) end ) - @objective(model, Min, -θ[N]) + @objective(model, Max, θ[N]) return model end diff --git a/ext/JuMPModels/steering.jl b/ext/JuMPModels/steering.jl index a2ff4425..ba3612e3 100644 --- a/ext/JuMPModels/steering.jl +++ b/ext/JuMPModels/steering.jl @@ -2,7 +2,7 @@ $(TYPEDSIGNATURES) Constructs and returns a JuMP model for the **Particle Steering Problem**. -The model represents the dynamics of a particle with four state variables (`x1`, `x2`, `x3`, `x4`) and a control input `u`. +The model represents the dynamics of a particle with four state variables (`x₁`, `x₂`, `x₃`, `x₄`) and a control input `u`. The objective is to minimise the final time required for the particle to reach a specified altitude and terminal velocity while satisfying the system dynamics and boundary conditions. # Arguments @@ -28,7 +28,7 @@ julia> model = OptimalControlProblems.steering(JuMPBackend(); N=200) - Problem formulation available at: https://github.com/MadNLP/COPSBenchmark.jl/blob/main/src/steering.jl """ function OptimalControlProblems.steering( - ::JuMPBackend, args...; grid_size::Int=steps_number_data(:steering), + ::JuMPBackend, args...; grid_size::Int=grid_size_data(:steering), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -39,11 +39,17 @@ function OptimalControlProblems.steering( a = params[:a] u_min = params[:u_min] u_max = params[:u_max] - xs = params[:xs] - yf = params[:yf] - + tf_l = params[:tf_l] + x₁_t0 = params[:x₁_t0] + x₂_t0 = params[:x₂_t0] + x₃_t0 = params[:x₃_t0] + x₄_t0 = params[:x₄_t0] + x₂_tf = params[:x₂_tf] + x₃_tf = params[:x₃_tf] + x₄_tf = params[:x₄_tf] + + # tf_start = 1 - function gen_x0(k, i) if i == 1 || i == 4 return 0.0 @@ -72,12 +78,12 @@ function OptimalControlProblems.steering( @variables( model, begin - u_min <= u[i = 0:N] <= u_max, (start = 0) - x1[i = 0:N], (start = gen_x0(i, 1)) - x2[i = 0:N], (start = gen_x0(i, 2)) - x3[i = 0:N], (start = gen_x0(i, 3)) - x4[i = 0:N], (start = gen_x0(i, 4)) - tf >= 0, (start = tf_start) + u_min ≤ u[i = 0:N] ≤ u_max, (start = 0) + x₁[i = 0:N], (start = gen_x0(i, 1)) + x₂[i = 0:N], (start = gen_x0(i, 2)) + x₃[i = 0:N], (start = gen_x0(i, 3)) + x₄[i = 0:N], (start = gen_x0(i, 4)) + tf ≥ tf_l, (start = tf_start) end ) @@ -85,24 +91,25 @@ function OptimalControlProblems.steering( @constraints( model, begin - x1[0] == xs[1] - x3[0] == xs[3] - x4[0] == xs[4] - x2[N] == yf[1] - x3[N] == yf[2] - x4[N] == yf[3] + x₁[0] == x₁_t0 + x₂[0] == x₂_t0 + x₃[0] == x₃_t0 + x₄[0] == x₄_t0 + x₂[N] == x₂_tf + x₃[N] == x₃_tf + x₄[N] == x₄_tf end ) # dynamics - @expression(model, Δt, (tf-t0) / N) # step size + @expression(model, Δt, (tf - t0) / N) # Δt size @constraints( model, begin - ∂x1[i = 1:N], x1[i] == x1[i - 1] + 0.5 * Δt * (x3[i - 1] + x3[i]) - ∂x2[i = 1:N], x2[i] == x2[i - 1] + 0.5 * Δt * (x4[i - 1] + x4[i]) - ∂x3[i = 1:N], x3[i] == x3[i - 1] + 0.5 * Δt * (a * cos(u[i - 1]) + a * cos(u[i])) - ∂x4[i = 1:N], x4[i] == x4[i - 1] + 0.5 * Δt * (a * sin(u[i - 1]) + a * sin(u[i])) + ∂x₁[i = 1:N], x₁[i] == x₁[i - 1] + 0.5 * Δt * (x₃[i - 1] + x₃[i]) + ∂x₂[i = 1:N], x₂[i] == x₂[i - 1] + 0.5 * Δt * (x₄[i - 1] + x₄[i]) + ∂x₃[i = 1:N], x₃[i] == x₃[i - 1] + 0.5 * Δt * (a * cos(u[i - 1]) + a * cos(u[i])) + ∂x₄[i = 1:N], x₄[i] == x₄[i - 1] + 0.5 * Δt * (a * sin(u[i - 1]) + a * sin(u[i])) end ) diff --git a/ext/JuMPModels/vanderpol.jl b/ext/JuMPModels/vanderpol.jl index dab7e352..aef5cef8 100644 --- a/ext/JuMPModels/vanderpol.jl +++ b/ext/JuMPModels/vanderpol.jl @@ -27,7 +27,7 @@ julia> model = OptimalControlProblems.vanderpol(JuMPBackend(); N=100) - Problem formulation available at: https://github.com/control-toolbox/bocop/tree/main/bocop """ function OptimalControlProblems.vanderpol( - ::JuMPBackend, args...; grid_size::Int=steps_number_data(:vanderpol), + ::JuMPBackend, args...; grid_size::Int=grid_size_data(:vanderpol), parameters::Union{Nothing, NamedTuple}=nothing, kwargs... ) @@ -38,7 +38,9 @@ function OptimalControlProblems.vanderpol( tf = params[:tf] ω = params[:ω] ε = params[:ε] - + x₁_t0 = params[:x₁_t0] + x₂_t0 = params[:x₂_t0] + # model model = JuMP.Model(args...; kwargs...) @@ -58,8 +60,8 @@ function OptimalControlProblems.vanderpol( @variables( model, begin - x1[0:N], (start = 0.1) - x2[0:N], (start = 0.1) + x₁[0:N], (start = 0.1) + x₂[0:N], (start = 0.1) u[0:N], (start = 0.1) end ) @@ -68,8 +70,8 @@ function OptimalControlProblems.vanderpol( @constraints( model, begin - x1[0] == 1 - x2[0] == 0 + x₁[0] == x₁_t0 + x₂[0] == x₂_t0 end ) @@ -77,29 +79,28 @@ function OptimalControlProblems.vanderpol( @expressions( model, begin - # - step, tf / N + Δt, (tf - t0) / N # dynamics - dx1[i = 0:N], x2[i] - dx2[i = 0:N], ε * ω * (1 - x1[i]^2) * x2[i] - ω^2 * x1[i] + u[i] + dx₁[i = 0:N], x₂[i] + dx₂[i = 0:N], ε * ω * (1 - x₁[i]^2) * x₂[i] - ω^2 * x₁[i] + u[i] # objective - dc[i = 0:N], 0.5 * (x1[i]^2 + x2[i]^2 + u[i]^2) + dc[i = 0:N], 0.5 * (x₁[i]^2 + x₂[i]^2 + u[i]^2) end ) @constraints( model, begin - ∂x1[i = 1:N], x1[i] == x1[i - 1] + 0.5 * step * (dx1[i] + dx1[i - 1]) - ∂x2[i = 1:N], x2[i] == x2[i - 1] + 0.5 * step * (dx2[i] + dx2[i - 1]) + ∂x₁[i = 1:N], x₁[i] == x₁[i - 1] + 0.5 * Δt * (dx₁[i] + dx₁[i - 1]) + ∂x₂[i = 1:N], x₂[i] == x₂[i - 1] + 0.5 * Δt * (dx₂[i] + dx₂[i - 1]) end ) # objective - @objective(model, Min, 0.5 * step * sum(dc[i] + dc[i - 1] for i in 1:N)) + @objective(model, Min, 0.5 * Δt * sum(dc[i] + dc[i - 1] for i in 1:N)) return model -end +end \ No newline at end of file diff --git a/ext/MetaData/beam.jl b/ext/MetaData/beam.jl index 8175bc59..6d1b897e 100644 --- a/ext/MetaData/beam.jl +++ b/ext/MetaData/beam.jl @@ -1,20 +1,22 @@ beam_meta = OrderedDict( :grid_size => 500, - :state_name => ["x1", "x2"], - :costate_name => ["∂x1", "∂x2"], + :state_name => ["x₁", "x₂"], + :costate_name => ["∂x₁", "∂x₂"], :control_name => ["u"], :variable_name => nothing, :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :steps_number => "N" + :grid_size => "N" ), :parameters => ( t0 = 0, tf = 1, - x_t0 = [0, 1], - x_tf = [0, -1], x₁_l = 0, x₁_u = 0.1, + x₁_t0 = 0, + x₂_t0 = 1, + x₁_tf = 0, + x₂_tf = -1, ), ) diff --git a/ext/MetaData/bioreactor.jl b/ext/MetaData/bioreactor.jl index 119752b2..22779317 100644 --- a/ext/MetaData/bioreactor.jl +++ b/ext/MetaData/bioreactor.jl @@ -7,7 +7,7 @@ bioreactor_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :steps_number => "N" + :grid_size => "N" ), :parameters => ( t0 = 0, @@ -20,10 +20,16 @@ bioreactor_meta = OrderedDict( μ2m = 0.1, μbar = 1, r = 0.005, - x_l = [0, 0, 0.001], + y_l = 0, + s_l = 0, + b_l = 0.001, u_l = 0, u_u = 1, - x0_l = [0.05, 0.5, 0.5], - x0_u = [0.25, 5, 3], + y_t0_l = 0.05, + y_t0_u = 0.25, + s_t0_l = 0.5, + s_t0_u = 5, + b_t0_l = 0.5, + b_t0_u = 3, ), ) diff --git a/ext/MetaData/cart_pendulum.jl b/ext/MetaData/cart_pendulum.jl index 1f5aa2b8..842043f3 100644 --- a/ext/MetaData/cart_pendulum.jl +++ b/ext/MetaData/cart_pendulum.jl @@ -7,7 +7,7 @@ cart_pendulum_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :steps_number => "N", + :grid_size => "N", ), :parameters => ( t0 = 0, @@ -15,14 +15,14 @@ cart_pendulum_meta = OrderedDict( L = 1, # pendulum length [m] m = 1, # pendulum mass [kg] mcart = 0.5, # cart mass [kg] - max_f = 5, + max_tf = 5, max_x = 1, max_v = 2, tf_l = 0.1, - x_i = 0, - θ_i = 0, - ω_i = 0, - θ_f = π, - ω_f = 0, + x_t0 = 0, + θ_t0 = 0, + ω_t0 = 0, + θ_tf = π, + ω_tf = 0, ), ) diff --git a/ext/MetaData/chain.jl b/ext/MetaData/chain.jl index f69304c4..fd4499e6 100644 --- a/ext/MetaData/chain.jl +++ b/ext/MetaData/chain.jl @@ -1,13 +1,13 @@ chain_meta = OrderedDict( :grid_size => 500, - :state_name => ["x1", "x2", "x3"], - :costate_name => ["∂x1", "∂x2", "∂x3"], + :state_name => ["x₁", "x₂", "x₃"], + :costate_name => ["∂x₁", "∂x₂", "∂x₃"], :control_name => ["u"], :variable_name => nothing, :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :steps_number => "N" + :grid_size => "N" ), :parameters => ( t0 = 0, @@ -15,7 +15,7 @@ chain_meta = OrderedDict( L = 4, a = 1, b = 3, - x2_i = 0, - x3_i = 0, + x₂_t0 = 0, + x₃_t0 = 0, ), ) diff --git a/ext/MetaData/dielectrophoretic_particle.jl b/ext/MetaData/dielectrophoretic_particle.jl index f8dd0240..99221339 100644 --- a/ext/MetaData/dielectrophoretic_particle.jl +++ b/ext/MetaData/dielectrophoretic_particle.jl @@ -7,7 +7,7 @@ dielectrophoretic_particle_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :steps_number => "N" + :grid_size => "N" ), :parameters => ( t0 = 0, @@ -18,6 +18,6 @@ dielectrophoretic_particle_meta = OrderedDict( u_l = -1, u_u = 1, tf_l = 0, - y_i = 0, + y_t0 = 0, ), ) diff --git a/ext/MetaData/double_oscillator.jl b/ext/MetaData/double_oscillator.jl index 2d0ec95e..69d15c1e 100644 --- a/ext/MetaData/double_oscillator.jl +++ b/ext/MetaData/double_oscillator.jl @@ -1,13 +1,13 @@ double_oscillator_meta = OrderedDict( :grid_size => 500, - :state_name => ["x1", "x2", "x3", "x4"], - :costate_name => ["∂x1", "∂x2", "∂x3", "∂x4"], + :state_name => ["x₁", "x₂", "x₃", "x₄"], + :costate_name => ["∂x₁", "∂x₂", "∂x₃", "∂x₄"], :control_name => ["u"], :variable_name => nothing, :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :steps_number => "N" + :grid_size => "N" ), :parameters => ( t0 = 0, @@ -19,7 +19,7 @@ double_oscillator_meta = OrderedDict( k2 = 3, # [N/m] u_l = -1, u_u = 1, - x1_i = 0, - x2_i = 0, + x₁_t0 = 0, + x₂_t0 = 0, ), ) diff --git a/ext/MetaData/ducted_fan.jl b/ext/MetaData/ducted_fan.jl index cfce45ce..0aa58793 100644 --- a/ext/MetaData/ducted_fan.jl +++ b/ext/MetaData/ducted_fan.jl @@ -7,7 +7,7 @@ ducted_fan_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :steps_number => "N" + :grid_size => "N" ), :parameters => ( t0 = 0, @@ -23,7 +23,17 @@ ducted_fan_meta = OrderedDict( u₂_l = 0, u₂_u = 17, tf_l = 0.1, - x_i = [0, 0, 0, 0, 0, 0], - x_f = [1, 0, 0, 0, 0, 0], + x₁_t0 = 0, + v₁_t0 = 0, + x₂_t0 = 0, + v₂_t0 = 0, + α_t0 = 0, + vα_t0 = 0, + x₁_tf = 1, + v₁_tf = 0, + x₂_tf = 0, + v₂_tf = 0, + α_tf = 0, + vα_tf = 0, ), ) diff --git a/ext/MetaData/electric_vehicle.jl b/ext/MetaData/electric_vehicle.jl index 45e2a671..17a43b26 100644 --- a/ext/MetaData/electric_vehicle.jl +++ b/ext/MetaData/electric_vehicle.jl @@ -7,7 +7,7 @@ electric_vehicle_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :steps_number => "N" + :grid_size => "N" ), :parameters => ( t0 = 0, @@ -21,9 +21,9 @@ electric_vehicle_meta = OrderedDict( α1 = 0.4, α2 = -1, α3 = 0.1, - x_i = 0, - v_i = 0, - x_f = 10, - v_f = 0, + x_t0 = 0, + v_t0 = 0, + x_tf = 10, + v_tf = 0, ), ) diff --git a/ext/MetaData/glider.jl b/ext/MetaData/glider.jl index 69694e02..88fff2ec 100644 --- a/ext/MetaData/glider.jl +++ b/ext/MetaData/glider.jl @@ -7,19 +7,19 @@ glider_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :steps_number => "N" + :grid_size => "N" ), :parameters => ( t0 = 0, - x_i = 0, - y_i = 1000, - y_f = 900, - vx_i = 13.23, - vx_f = 13.23, - vy_i = -1.288, - vy_f = -1.288, + x_t0 = 0, + y_t0 = 1000, + y_tf = 900, + vx_t0 = 13.23, + vx_tf = 13.23, + vy_t0 = -1.288, + vy_tf = -1.288, u_c = 2.5, - r_i = 100, + r_t0 = 100, m = 100, g = 9.81, c0 = 0.034, diff --git a/ext/MetaData/insurance.jl b/ext/MetaData/insurance.jl index 0c23b4e9..dfe2c913 100644 --- a/ext/MetaData/insurance.jl +++ b/ext/MetaData/insurance.jl @@ -7,7 +7,7 @@ insurance_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :steps_number => "N" + :grid_size => "N" ), :parameters => ( t0 = 0, @@ -20,5 +20,19 @@ insurance_meta = OrderedDict( k = 0, σ = 0, α = 4, + I_l = 0, + I_u = 1.5, + m_l = 0, + m_u = 1.5, + h_l = 0, + h_u = 25, + R_l = 0, + H_l = 0, + U_l = 0, + dUdR_l = 0.001, + P_l = 0, + I_t0 = 0, + m_t0 = 0.001, + x₃_t0 = 0, ), ) diff --git a/ext/MetaData/jackson.jl b/ext/MetaData/jackson.jl index f7a359f4..ff17d666 100644 --- a/ext/MetaData/jackson.jl +++ b/ext/MetaData/jackson.jl @@ -1,13 +1,13 @@ jackson_meta = OrderedDict( :grid_size => 500, - :state_name => ["a", "b", "x3"], - :costate_name => ["∂a", "∂b", "∂x3"], + :state_name => ["a", "b", "x₃"], + :costate_name => ["∂a", "∂b", "∂x₃"], :control_name => ["u"], :variable_name => nothing, :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :steps_number => "N" + :grid_size => "N" ), :parameters => ( t0 = 0, @@ -15,5 +15,16 @@ jackson_meta = OrderedDict( k1 = 1, k2 = 10, k3 = 1, + a_l = 0, + a_u = 1.1, + b_l = 0, + b_u = 1.1, + x₃_l = 0, + x₃_u = 1.1, + u_l = 0, + u_u = 1, + a_t0 = 1, + b_t0 = 0, + x₃_t0 = 0, ), ) diff --git a/ext/MetaData/moonlander.jl b/ext/MetaData/moonlander.jl index 7d919a46..f1c6aa46 100644 --- a/ext/MetaData/moonlander.jl +++ b/ext/MetaData/moonlander.jl @@ -1,21 +1,34 @@ moonlander_meta = OrderedDict( :grid_size => 500, - :state_name => ["p1", "p2", "dp1", "dp2", "θ", "dθ"], - :costate_name => ["∂p1", "∂p2", "∂dp1", "∂dp2", "∂θ", "∂dθ"], - :control_name => ["F1", "F2"], + :state_name => ["p₁", "p₂", "dp₁", "dp₂", "θ", "dθ"], + :costate_name => ["∂p₁", "∂p₂", "∂dp₁", "∂dp₂", "∂θ", "∂dθ"], + :control_name => ["F₁", "F₂"], :variable_name => ["tf"], :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :steps_number => "N" + :grid_size => "N" ), :parameters => ( t0 = 0, - target=[5.0, 5.0], m = 1, g = 9.81, I = 0.1, D = 1, max_thrust = 2*9.81, + tf_l = 0.1, + tf_u = 1.0, + F₁_l = 0, + F₂_l = 0, + p₁_t0 = 0, + p₂_t0 = 0, + dp₁_t0 = 0, + dp₂_t0 = 0, + θ_t0 = 0, + dθ_t0 = 0, + p₁_tf = 5, + p₂_tf = 5, + dp₁_tf = 0, + dp₂_tf = 0, ), ) diff --git a/ext/MetaData/robbins.jl b/ext/MetaData/robbins.jl index ca009a51..a3880152 100644 --- a/ext/MetaData/robbins.jl +++ b/ext/MetaData/robbins.jl @@ -1,13 +1,13 @@ robbins_meta = OrderedDict( :grid_size => 500, - :state_name => ["x1", "x2", "x3"], - :costate_name => ["∂x1", "∂x2", "∂x3"], + :state_name => ["x₁", "x₂", "x₃"], + :costate_name => ["∂x₁", "∂x₂", "∂x₃"], :control_name => ["u"], :variable_name => nothing, :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :steps_number => "N" + :grid_size => "N" ), :parameters => ( t0 = 0, @@ -15,5 +15,12 @@ robbins_meta = OrderedDict( α = 3, β = 0, γ = 0.5, + x₁_l = 0, + x₁_t0 = 1, + x₂_t0 = -2, + x₃_t0 = 0, + x₁_tf = 0, + x₂_tf = 0, + x₃_tf = 0, ), ) diff --git a/ext/MetaData/robot.jl b/ext/MetaData/robot.jl index b407bc32..35c79549 100644 --- a/ext/MetaData/robot.jl +++ b/ext/MetaData/robot.jl @@ -7,18 +7,38 @@ robot_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :steps_number => "N" + :grid_size => "N" ), :parameters => ( t0 = 0, L = 5, - # Upper bounds on the controls, - max_uρ = 1, - max_uθ = 1, - max_uϕ = 1, + # Lower and upper bounds on the controls, + uρ_l = -1, + uρ_u = 1, + uθ_l = -1, + uθ_u = 1, + uϕ_l = -1, + uϕ_u = 1, # Initial positions of the length and the angles for the robot arm, - ρ0 = 4.5, - ϕ0 = π/4, - θf = 2π/3, + ρ_t0 = 4.5, + θ_t0 = 0, + ϕ_t0 = π/4, + dρ_t0 = 0, + dθ_t0 = 0, + dϕ_t0 = 0, + # Final positions + ρ_tf = 4.5, + θ_tf = 2π/3, + ϕ_tf = π/4, + dρ_tf = 0, + dθ_tf = 0, + dϕ_tf = 0, + # + ρ_l = 0, + θ_l = -π, + θ_u = π, + ϕ_l = 0, + ϕ_u = π, + tf_l = 0.1, ), ) diff --git a/ext/MetaData/rocket.jl b/ext/MetaData/rocket.jl index 5be713e1..487fb2a5 100644 --- a/ext/MetaData/rocket.jl +++ b/ext/MetaData/rocket.jl @@ -7,17 +7,19 @@ rocket_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :steps_number => "N" + :grid_size => "N" ), :parameters => ( t0 = 0, - h0 = 1, - v0 = 0, - m0 = 1, + h_t0 = 1, + v_t0 = 0, + m_t0 = 1, g0 = 1, Tc = 3.5, hc = 500, vc = 620, mc = 0.6, + T_l = 0, + tf_l = 0, ), ) diff --git a/ext/MetaData/space_shuttle.jl b/ext/MetaData/space_shuttle.jl index b8cdd9e6..cf91fa2f 100644 --- a/ext/MetaData/space_shuttle.jl +++ b/ext/MetaData/space_shuttle.jl @@ -7,7 +7,7 @@ space_shuttle_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :steps_number => "N" + :grid_size => "N" ), :parameters => ( t0 = 0, @@ -28,18 +28,34 @@ space_shuttle_meta = OrderedDict( Δt_min = 3.5, Δt_max = 4.5, ## Initial conditions, - h_s = 2.6, # altitude (ft) / 1e5, - ϕ_s = deg2rad(0), # longitude (rad), - θ_s = deg2rad(0), # latitude (rad), - v_s = 2.56, # velocity (ft/sec) / 1e4, - γ_s = deg2rad(-1), # flight path angle (rad), - ψ_s = deg2rad(90), # azimuth (rad), - α_s = deg2rad(0), # angle of attack (rad), + h_t0 = 2.6, # altitude (ft) / 1e5, + ϕ_t0 = deg2rad(0), # longitude (rad), + θ_t0 = deg2rad(0), # latitude (rad), + v_t0 = 2.56, # velocity (ft/sec) / 1e4, + γ_t0 = deg2rad(-1), # flight path angle (rad), + ψ_t0 = deg2rad(90), # azimuth (rad), + α_t0 = deg2rad(0), # angle of attack (rad), + ## for initial guess + α_s = deg2rad(0), # angle of attack (rad) β_s = deg2rad(0), # bank angle (rad), - t_s = 1.00, # time step (sec), ## Final conditions, the so-called Terminal Area Energy Management (TAEM), - h_t = 0.8, # altitude (ft) / 1e5, - v_t = 0.25, # velocity (ft/sec) / 1e4, - γ_t = deg2rad(-5), # flight path angle (rad), + h_tf = 0.8, # altitude (ft) / 1e5, + v_tf = 0.25, # velocity (ft/sec) / 1e4, + γ_tf = deg2rad(-5), # flight path angle (rad), + # + h_l = 0, + ϕ_l = -2π, + ϕ_u = 2π, + θ_l = deg2rad(-89), + θ_u = deg2rad(89), + v_l = 1e-4, + γ_l = deg2rad(-89), + γ_u = deg2rad(89), + ψ_l = -2π, + ψ_u = 2π, + α_l = deg2rad(-90), + α_u = deg2rad(90), + β_l = deg2rad(-89), + β_u = deg2rad(1), ), ) diff --git a/ext/MetaData/steering.jl b/ext/MetaData/steering.jl index f8d05982..dd472c30 100644 --- a/ext/MetaData/steering.jl +++ b/ext/MetaData/steering.jl @@ -1,20 +1,26 @@ steering_meta = OrderedDict( :grid_size => 500, - :state_name => ["x1", "x2", "x3", "x4"], - :costate_name => ["∂x1", "∂x2", "∂x3", "∂x4"], + :state_name => ["x₁", "x₂", "x₃", "x₄"], + :costate_name => ["∂x₁", "∂x₂", "∂x₃", "∂x₄"], :control_name => ["u"], :variable_name => ["tf"], :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :steps_number => "N" + :grid_size => "N" ), :parameters => ( t0 = 0, a = 100, u_min = -π/2, u_max = π/2, - xs = zeros(4), - yf = [5, 45, 0], + tf_l = 0, + x₁_t0 = 0, + x₂_t0 = 0, + x₃_t0 = 0, + x₄_t0 = 0, + x₂_tf = 5, + x₃_tf = 45, + x₄_tf = 0, ), ) diff --git a/ext/MetaData/vanderpol.jl b/ext/MetaData/vanderpol.jl index ce2899e4..34623fb9 100644 --- a/ext/MetaData/vanderpol.jl +++ b/ext/MetaData/vanderpol.jl @@ -1,18 +1,20 @@ vanderpol_meta = OrderedDict( :grid_size => 500, - :state_name => ["x1", "x2"], - :costate_name => ["∂x1", "∂x2"], + :state_name => ["x₁", "x₂"], + :costate_name => ["∂x₁", "∂x₂"], :control_name => ["u"], :variable_name => nothing, :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :steps_number => "N" + :grid_size => "N" ), :parameters => ( t0 = 0, tf = 2, ω = 1, ε = 1, + x₁_t0 = 1, + x₂_t0 = 0, ), ) diff --git a/ext/OptimalControlModels/beam.jl b/ext/OptimalControlModels/beam.jl index f550bb75..79863cbb 100644 --- a/ext/OptimalControlModels/beam.jl +++ b/ext/OptimalControlModels/beam.jl @@ -30,7 +30,7 @@ julia> docp = OptimalControlProblems.beam(OptimalControlBackend(); N=100); function OptimalControlProblems.beam( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:beam), + grid_size::Int=grid_size_data(:beam), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -39,20 +39,25 @@ function OptimalControlProblems.beam( params = parameters_data(:beam, parameters) t0 = params[:t0] tf = params[:tf] - x_t0 = params[:x_t0] - x_tf = params[:x_tf] x₁_l = params[:x₁_l] x₁_u = params[:x₁_u] + x₁_t0 = params[:x₁_t0] + x₂_t0 = params[:x₂_t0] + x₁_tf = params[:x₁_tf] + x₂_tf = params[:x₂_tf] # model ocp = @def begin t ∈ [t0, tf], time x ∈ R², state u ∈ R, control - x(t0) == x_t0 - x(tf) == x_tf - ẋ(t) == [x₂(t), u(t)] + + x(t0) == [x₁_t0, x₂_t0] + x(tf) == [x₁_tf, x₂_tf] x₁_l ≤ x₁(t) ≤ x₁_u + + ẋ(t) == [x₂(t), u(t)] + ∫(u(t)^2) → min end diff --git a/ext/OptimalControlModels/bioreactor.jl b/ext/OptimalControlModels/bioreactor.jl index b686f6af..128b631c 100644 --- a/ext/OptimalControlModels/bioreactor.jl +++ b/ext/OptimalControlModels/bioreactor.jl @@ -30,7 +30,7 @@ julia> docp = OptimalControlProblems.bioreactor(OptimalControlBackend(); N=100); function OptimalControlProblems.bioreactor( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:bioreactor), + grid_size::Int=grid_size_data(:bioreactor), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -47,11 +47,17 @@ function OptimalControlProblems.bioreactor( μ2m = params[:μ2m] μbar = params[:μbar] r = params[:r] - x_l = params[:x_l] + y_l = params[:y_l] + s_l = params[:s_l] + b_l = params[:b_l] u_l = params[:u_l] u_u = params[:u_u] - x0_l = params[:x0_l] - x0_u = params[:x0_u] + y_t0_l = params[:y_t0_l] + y_t0_u = params[:y_t0_u] + s_t0_l = params[:s_t0_l] + s_t0_u = params[:s_t0_u] + b_t0_l = params[:b_t0_l] + b_t0_u = params[:b_t0_u] # Model ocp = @def begin @@ -59,9 +65,9 @@ function OptimalControlProblems.bioreactor( x = (y, s, b) ∈ R³, state u ∈ R, control - x(t) ≥ x_l + x(t) ≥ [y_l, s_l, b_l] u_l ≤ u(t) ≤ u_u - x0_l ≤ x(t0) ≤ x0_u + [y_t0_l, s_t0_l, b_t0_l] ≤ x(t0) ≤ [y_t0_u, s_t0_u, b_t0_u] μ = light(t, halfperiod) * μbar μ2 = growth(s(t), μ2m, Ks) @@ -72,7 +78,7 @@ function OptimalControlProblems.bioreactor( (μ2 - u(t) * β) * b(t), ] - -∫(μ2 * b(t) / (β + c)) → min + ∫(μ2 * b(t) / (β + c)) → max end # METHANE PROBLEM diff --git a/ext/OptimalControlModels/cart_pendulum.jl b/ext/OptimalControlModels/cart_pendulum.jl index 033f0950..68bab9d1 100644 --- a/ext/OptimalControlModels/cart_pendulum.jl +++ b/ext/OptimalControlModels/cart_pendulum.jl @@ -30,7 +30,7 @@ julia> docp = OptimalControlProblems.cart_pendulum(OptimalControlBackend(); N=10 function OptimalControlProblems.cart_pendulum( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:cart_pendulum), + grid_size::Int=grid_size_data(:cart_pendulum), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -43,15 +43,15 @@ function OptimalControlProblems.cart_pendulum( m = params[:m] I = m * L^2 / 12 # pendulum moment of inertia mcart = params[:mcart] - max_f = params[:max_f] + max_tf = params[:max_tf] max_x = params[:max_x] max_v = params[:max_v] tf_l = params[:tf_l] - x_i = params[:x_i] - θ_i = params[:θ_i] - ω_i = params[:ω_i] - θ_f = params[:θ_f] - ω_f = params[:ω_f] + x_t0 = params[:x_t0] + θ_t0 = params[:θ_t0] + ω_t0 = params[:ω_t0] + θ_tf = params[:θ_tf] + ω_tf = params[:ω_tf] ocp = @def begin # time, variable, state and control @@ -65,19 +65,19 @@ function OptimalControlProblems.cart_pendulum( -max_v ≤ v(t) ≤ max_v, (v_c) # control constraints - -max_f ≤ Fex(t) ≤ max_f, (Fex_c) + -max_tf ≤ Fex(t) ≤ max_tf, (Fex_c) # variables constraints tf ≥ tf_l, (tf_c) # initial conditions - x(t0) == x_i, (x_i) - θ(t0) == θ_i, (θ_i) - ω(t0) == ω_i, (ω_i) + x(t0) == x_t0, (x_t0) + θ(t0) == θ_t0, (θ_t0) + ω(t0) == ω_t0, (ω_t0) # final conditions - θ(tf) == θ_f, (θ_f) - ω(tf) == ω_f, (ω_f) + θ(tf) == θ_tf, (θ_tf) + ω(tf) == ω_tf, (ω_tf) # dynamics ẏ(t) == dynamics(v(t), θ(t), ω(t), Fex(t), ddx) diff --git a/ext/OptimalControlModels/chain.jl b/ext/OptimalControlModels/chain.jl index 509fb1a1..ee9e613d 100644 --- a/ext/OptimalControlModels/chain.jl +++ b/ext/OptimalControlModels/chain.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.chain(OptimalControlBackend(); N=100); function OptimalControlProblems.chain( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:chain), + grid_size::Int=grid_size_data(:chain), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -43,8 +43,11 @@ function OptimalControlProblems.chain( L = params[:L] a = params[:a] b = params[:b] - x2_i = params[:x2_i] - x3_i = params[:x3_i] + x₁_t0 = a + x₂_t0 = params[:x₂_t0] + x₃_t0 = params[:x₃_t0] + x₁_tf = b + x₃_tf = L # model ocp = @def begin @@ -53,13 +56,13 @@ function OptimalControlProblems.chain( u ∈ R, control # initial conditions - x₁(t0) == a, (x1_i) - x₂(t0) == x2_i, (x2_i) - x₃(t0) == x3_i, (x3_i) + x₁(t0) == x₁_t0, (x₁_t0) + x₂(t0) == x₂_t0, (x₂_t0) + x₃(t0) == x₃_t0, (x₃_t0) # final conditions - x₁(tf) == b, (x1_f) - x₃(tf) == L, (x3_f) + x₁(tf) == x₁_tf, (x₁_tf) + x₃(tf) == x₃_tf, (x₃_tf) # dynamics ẋ(t) == dynamics(x(t), u(t)) diff --git a/ext/OptimalControlModels/dielectrophoretic_particle.jl b/ext/OptimalControlModels/dielectrophoretic_particle.jl index 5956ea15..e152cb41 100644 --- a/ext/OptimalControlModels/dielectrophoretic_particle.jl +++ b/ext/OptimalControlModels/dielectrophoretic_particle.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.dielectrophoretic_particle(OptimalControlBa function OptimalControlProblems.dielectrophoretic_particle( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:dielectrophoretic_particle), + grid_size::Int=grid_size_data(:dielectrophoretic_particle), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -46,7 +46,7 @@ function OptimalControlProblems.dielectrophoretic_particle( u_l = params[:u_l] u_u = params[:u_u] tf_l = params[:tf_l] - y_i = params[:y_i] + y_t0 = params[:y_t0] ocp = @def begin tf ∈ R, variable @@ -54,9 +54,9 @@ function OptimalControlProblems.dielectrophoretic_particle( q = (x, y) ∈ R², state u ∈ R, control - x(t0) == x0, (x_i) - y(t0) == y_i, (y_i) - x(tf) == xf, (x_f) + x(t0) == x0, (x_t0) + y(t0) == y_t0, (y_t0) + x(tf) == xf, (x_tf) tf ≥ tf_l, (tf_c) u_l ≤ u(t) ≤ u_u, (u_c) diff --git a/ext/OptimalControlModels/double_oscillator.jl b/ext/OptimalControlModels/double_oscillator.jl index a896fb23..f76728af 100644 --- a/ext/OptimalControlModels/double_oscillator.jl +++ b/ext/OptimalControlModels/double_oscillator.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.double_oscillator(OptimalControlBackend(); function OptimalControlProblems.double_oscillator( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:double_oscillator), + grid_size::Int=grid_size_data(:double_oscillator), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -47,8 +47,8 @@ function OptimalControlProblems.double_oscillator( k2 = params[:k2] u_l = params[:u_l] u_u = params[:u_u] - x1_i = params[:x1_i] - x2_i = params[:x2_i] + x₁_t0 = params[:x₁_t0] + x₂_t0 = params[:x₂_t0] # model ocp = @def begin @@ -57,8 +57,8 @@ function OptimalControlProblems.double_oscillator( u ∈ R, control u_l ≤ u(t) ≤ u_u, (u_c) - x₁(t0) == x1_i, (x1_i) - x₂(t0) == x2_i, (x2_i) + x₁(t0) == x₁_t0, (x₁_t0) + x₂(t0) == x₂_t0, (x₂_t0) ẋ(t) == dynamics(x(t), u(t), F(t)) @@ -66,20 +66,20 @@ function OptimalControlProblems.double_oscillator( end function F(t) - return sin(t * 2π / tf) + return sin((t - t0) * 2π / (tf - t0)) end function dynamics(x, u, F) - x1, x2, x3, x4 = x - dx1 = x3 - dx2 = x4 - dx3 = -(k1 + k2) / m1 * x1 + k2 / m1 * x2 + 1 / m1 * F - dx4 = k2 / m2 * x1 - k2 / m2 * x2 - c * (1 - u) / m2 * x4 - return [dx1, dx2, dx3, dx4] + x₁, x₂, x₃, x₄ = x + dx₁ = x₃ + dx₂ = x₄ + dx₃ = -(k1 + k2) / m1 * x₁ + k2 / m1 * x₂ + 1 / m1 * F + dx₄ = k2 / m2 * x₁ - k2 / m2 * x₂ - c * (1 - u) / m2 * x₄ + return [dx₁, dx₂, dx₃, dx₄] end # initial guess - xinit = [0.1, 0.1, 0.1, 0.1] # [x1, x2, x3, x4] + xinit = [0.1, 0.1, 0.1, 0.1] # [x₁, x₂, x₃, x₄] uinit = [0.1] # [u] init = (state=xinit, control=uinit) diff --git a/ext/OptimalControlModels/ducted_fan.jl b/ext/OptimalControlModels/ducted_fan.jl index 7def24ab..a2460044 100644 --- a/ext/OptimalControlModels/ducted_fan.jl +++ b/ext/OptimalControlModels/ducted_fan.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.ducted_fan(OptimalControlBackend(); N=250); function OptimalControlProblems.ducted_fan( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:ducted_fan), + grid_size::Int=grid_size_data(:ducted_fan), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -51,8 +51,18 @@ function OptimalControlProblems.ducted_fan( u₂_l = params[:u₂_l] u₂_u = params[:u₂_u] tf_l = params[:tf_l] - x_i = params[:x_i] - x_f = params[:x_f] + x₁_t0 = params[:x₁_t0] + v₁_t0 = params[:v₁_t0] + x₂_t0 = params[:x₂_t0] + v₂_t0 = params[:v₂_t0] + α_t0 = params[:α_t0] + vα_t0 = params[:vα_t0] + x₁_tf = params[:x₁_tf] + v₁_tf = params[:v₁_tf] + x₂_tf = params[:x₂_tf] + v₂_tf = params[:v₂_tf] + α_tf = params[:α_tf] + vα_tf = params[:vα_tf] ocp = @def begin tf ∈ R, variable @@ -71,20 +81,20 @@ function OptimalControlProblems.ducted_fan( u₂_l ≤ u₂(t) ≤ u₂_u, (u₂_c) # initial constraints - x₁(t0) == x_i[1], (x₁_i) - v₁(t0) == x_i[2], (v₁_i) - x₂(t0) == x_i[3], (x₂_i) - v₂(t0) == x_i[4], (v₂_i) - α(t0) == x_i[5], (α_i) - vα(t0) == x_i[6], (vα_i) + x₁(t0) == x₁_t0, (x₁_t0) + v₁(t0) == v₁_t0, (v₁_t0) + x₂(t0) == x₂_t0, (x₂_t0) + v₂(t0) == v₂_t0, (v₂_t0) + α(t0) == α_t0, (α_t0) + vα(t0) == vα_t0, (vα_t0) # final constraints - x₁(tf) == x_f[1], (x₁_f) - v₁(tf) == x_f[2], (v₁_f) - x₂(tf) == x_f[3], (x₂_f) - v₂(tf) == x_f[4], (v₂_f) - α(tf) == x_f[5], (α_f) - vα(tf) == x_f[6], (vα_f) + x₁(tf) == x₁_tf, (x₁_tf) + v₁(tf) == v₁_tf, (v₁_tf) + x₂(tf) == x₂_tf, (x₂_tf) + v₂(tf) == v₂_tf, (v₂_tf) + α(tf) == α_tf , (α_tf ) + vα(tf) == vα_tf, (vα_tf) # dynamics ẋ(t) == dynamics(v₁(t), v₂(t), α(t), vα(t), u₁(t), u₂(t)) diff --git a/ext/OptimalControlModels/electric_vehicle.jl b/ext/OptimalControlModels/electric_vehicle.jl index 58805726..b331cb13 100644 --- a/ext/OptimalControlModels/electric_vehicle.jl +++ b/ext/OptimalControlModels/electric_vehicle.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.electric_vehicle(OptimalControlBackend(); N function OptimalControlProblems.electric_vehicle( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:electric_vehicle), + grid_size::Int=grid_size_data(:electric_vehicle), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -49,10 +49,10 @@ function OptimalControlProblems.electric_vehicle( α1 = params[:α1] α2 = params[:α2] α3 = params[:α3] - x_i = params[:x_i] - v_i = params[:v_i] - x_f = params[:x_f] - v_f = params[:v_f] + x_t0 = params[:x_t0] + v_t0 = params[:v_t0] + x_tf = params[:x_tf] + v_tf = params[:v_tf] # model ocp = @def begin @@ -60,10 +60,10 @@ function OptimalControlProblems.electric_vehicle( y = (x, v) ∈ R², state u ∈ R, control - x(t0) == x_i, (x_i) - v(t0) == v_i, (v_i) - x(tf) == x_f, (x_f) - v(tf) == v_f, (v_f) + x(t0) == x_t0, (x_t0) + v(t0) == v_t0, (v_t0) + x(tf) == x_tf, (x_tf) + v(tf) == v_tf, (v_tf) ẏ(t) == dynamics(x(t), v(t), u(t)) diff --git a/ext/OptimalControlModels/glider.jl b/ext/OptimalControlModels/glider.jl index 35c30998..dac8b797 100644 --- a/ext/OptimalControlModels/glider.jl +++ b/ext/OptimalControlModels/glider.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.glider(OptimalControlBackend(); N=500); function OptimalControlProblems.glider( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:glider), + grid_size::Int=grid_size_data(:glider), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -39,15 +39,15 @@ function OptimalControlProblems.glider( # parameters params = parameters_data(:glider, parameters) t0 = params[:t0] - x_i = params[:x_i] - y_i = params[:y_i] - y_f = params[:y_f] - vx_i = params[:vx_i] - vx_f = params[:vx_f] - vy_i = params[:vy_i] - vy_f = params[:vy_f] + x_t0 = params[:x_t0] + y_t0 = params[:y_t0] + y_tf = params[:y_tf] + vx_t0 = params[:vx_t0] + vx_tf = params[:vx_tf] + vy_t0 = params[:vy_t0] + vy_tf = params[:vy_tf] u_c = params[:u_c] - r_i = params[:r_i] + r_t0 = params[:r_t0] m = params[:m] g = params[:g] c0 = params[:c0] @@ -75,26 +75,26 @@ function OptimalControlProblems.glider( cL_min ≤ cL(t) ≤ cL_max, (cL_c) # initial conditions - x(t0) == x_i, (x0_i) - y(t0) == y_i, (y0_i) - vx(t0) == vx_i, (vx0_i) - vy(t0) == vy_i, (vy0_i) + x(t0) == x_t0, (x0_t0) + y(t0) == y_t0, (y0_t0) + vx(t0) == vx_t0, (vx0_t0) + vy(t0) == vy_t0, (vy0_t0) # final conditions tf ≥ tf_l - y(tf) == y_f, (yf_f) - vx(tf) == vx_f, (vxf_f) - vy(tf) == vy_f, (vyf_f) + y(tf) == y_tf, (yf_tf) + vx(tf) == vx_tf, (vxf_tf) + vy(tf) == vy_tf, (vyf_tf) # dynamics ż(t) == dynamics(x(t), vx(t), vy(t), cL(t)) # objective - -x(tf) → min + x(tf) → max end function dynamics(x, vx, vy, cL) - r = (x / r_i - 2.5)^2 + r = (x / r_t0 - 2.5)^2 UpD = u_c * (1 - r) * exp(-r) w = vy - UpD v = √(vx^2 + w^2) @@ -111,7 +111,7 @@ function OptimalControlProblems.glider( # initial guess tfinit = 1 - xinit = t -> [x_i + vx_i * t / tfinit, y_i + t / tfinit * (y_f - y_i), vx_i, vy_i] + xinit = t -> [x_t0 + vx_t0 * t / tfinit, y_t0 + t / tfinit * (y_tf - y_t0), vx_t0, vy_t0] uinit = cL_max / 2 init = (state=xinit, control=uinit, variable=tfinit) diff --git a/ext/OptimalControlModels/insurance.jl b/ext/OptimalControlModels/insurance.jl index 115a0b5b..e2ee4de0 100644 --- a/ext/OptimalControlModels/insurance.jl +++ b/ext/OptimalControlModels/insurance.jl @@ -30,7 +30,7 @@ julia> docp = OptimalControlProblems.insurance(OptimalControlBackend(); N=500); function OptimalControlProblems.insurance( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:insurance), + grid_size::Int=grid_size_data(:insurance), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -47,6 +47,20 @@ function OptimalControlProblems.insurance( k = params[:k] σ = params[:σ] α = params[:α] + I_l = params[:I_l] + I_u = params[:I_u] + m_l = params[:m_l] + m_u = params[:m_u] + h_l = params[:h_l] + h_u = params[:h_u] + R_l = params[:R_l] + H_l = params[:H_l] + U_l = params[:U_l] + dUdR_l = params[:dUdR_l] + P_l = params[:P_l] + I_t0 = params[:I_t0] + m_t0 = params[:m_t0] + x₃_t0 = params[:x₃_t0] # I: Insurance # m: Expense @@ -62,22 +76,23 @@ function OptimalControlProblems.insurance( u = (h, R, H, U, dUdR) ∈ R⁵, control # constraints - 0 ≤ I(t) ≤ 1.5 - 0 ≤ m(t) ≤ 1.5 - 0 ≤ h(t) ≤ 25 - 0 ≤ R(t) ≤ Inf - 0 ≤ H(t) ≤ Inf - 0 ≤ U(t) ≤ Inf - 0.001 ≤ dUdR(t) ≤ Inf - 0 ≤ P ≤ Inf - - x(t0) == [0, 0.001, 0] + I_l ≤ I(t) ≤ I_u + m_l ≤ m(t) ≤ m_u + h_l ≤ h(t) ≤ h_u + R(t) ≥ R_l + H(t) ≥ H_l + U(t) ≥ U_l + dUdR(t) ≥ dUdR_l + P ≥ P_l + + x(t0) == [I_t0, m_t0, x₃_t0] P - x₃(tf) == 0 - ε = k * t / (tf - t + 1) + # + ε = k * (t - t0) / (tf - t + 1) # illness distribution - fx = λ * exp(-λ * t) + exp(-λ * tf) / tf + fx = λ * exp(-λ * (t - t0)) + exp(-λ * (tf - t0)) / (tf - t0) # expense effect v = m(t)^(α / 2) / (1 + m(t)^(α / 2)) @@ -85,15 +100,15 @@ function OptimalControlProblems.insurance( # constraints R(t) - (w - P + I(t) - m(t) - ε) == 0 - H(t) - (h0 - γ * t * (1 - v)) == 0 + H(t) - (h0 - γ * (t - t0) * (1 - v)) == 0 U(t) - (1 - exp(-s * R(t)) + H(t)) == 0 dUdR(t) - (s * exp(-s * R(t))) == 0 # dynamics - ẋ(t) == [(1 - γ * t * vprime / dUdR(t)) * h(t), h(t), (1 + σ) * I(t) * fx] + ẋ(t) == [(1 - γ * (t - t0) * vprime / dUdR(t)) * h(t), h(t), (1 + σ) * I(t) * fx] # objective - -∫(U(t) * fx) → min + ∫(U(t) * fx) → max end # initial guess diff --git a/ext/OptimalControlModels/jackson.jl b/ext/OptimalControlModels/jackson.jl index 24c276d3..6117f157 100644 --- a/ext/OptimalControlModels/jackson.jl +++ b/ext/OptimalControlModels/jackson.jl @@ -30,7 +30,7 @@ julia> docp = OptimalControlProblems.jackson(OptimalControlBackend(); N=500); function OptimalControlProblems.jackson( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:jackson), + grid_size::Int=grid_size_data(:jackson), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -42,20 +42,28 @@ function OptimalControlProblems.jackson( k1 = params[:k1] k2 = params[:k2] k3 = params[:k3] + a_l = params[:a_l] + a_u = params[:a_u] + b_l = params[:b_l] + b_u = params[:b_u] + x₃_l = params[:x₃_l] + x₃_u = params[:x₃_u] + u_l = params[:u_l] + u_u = params[:u_u] + a_t0 = params[:a_t0] + b_t0 = params[:b_t0] + x₃_t0 = params[:x₃_t0] # model ocp = @def begin t ∈ [t0, tf], time - x ∈ R³, state + x = (a, b, x₃) ∈ R³, state u ∈ R, control - a = x[1] - b = x[2] + x(t0) == [a_t0, b_t0, x₃_t0] - x(t0) == [1, 0, 0] - - [0, 0, 0] ≤ x(t) ≤ [1.1, 1.1, 1.1] - 0 ≤ u(t) ≤ 1 + [a_l, b_l, x₃_l] ≤ x(t) ≤ [a_u, b_u, x₃_u] + u_l ≤ u(t) ≤ u_u ẋ(t) == [ -u(t) * (k1 * a(t) - k2 * b(t)), @@ -63,11 +71,11 @@ function OptimalControlProblems.jackson( (1 - u(t)) * k3 * b(t), ] - -x[3](tf) → min + x[3](tf) → max end # initial guess - xinit = [0.1, 0.1, 0.1] # [a, b, x3] + xinit = [0.1, 0.1, 0.1] # [a, b, x₃] uinit = [0.1] # [u] init = (state=xinit, control=uinit) diff --git a/ext/OptimalControlModels/moonlander.jl b/ext/OptimalControlModels/moonlander.jl index 57a0acbf..97ba43cf 100644 --- a/ext/OptimalControlModels/moonlander.jl +++ b/ext/OptimalControlModels/moonlander.jl @@ -26,7 +26,7 @@ julia> docp = OptimalControlProblems.moonlander(OptimalControlBackend(); N=500); function OptimalControlProblems.moonlander( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:moonlander), + grid_size::Int=grid_size_data(:moonlander), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -34,12 +34,31 @@ function OptimalControlProblems.moonlander( # parameters params = parameters_data(:moonlander, parameters) t0 = params[:t0] - target = params[:target] m = params[:m] g = params[:g] I = params[:I] D = params[:D] max_thrust = params[:max_thrust] + tf_l = params[:tf_l] + tf_u = params[:tf_u] + F₁_l = params[:F₁_l] + F₁_u = max_thrust + F₂_l = params[:F₂_l] + F₂_u = max_thrust + tf_l = params[:tf_l] + tf_u = params[:tf_u] + F₁_l = params[:F₁_l] + F₂_l = params[:F₂_l] + p₁_t0 = params[:p₁_t0] + p₂_t0 = params[:p₂_t0] + dp₁_t0 = params[:dp₁_t0] + dp₂_t0 = params[:dp₂_t0] + θ_t0 = params[:θ_t0] + dθ_t0 = params[:dθ_t0] + p₁_tf = params[:p₁_tf] + p₂_tf = params[:p₂_tf] + dp₁_tf = params[:dp₁_tf] + dp₂_tf = params[:dp₂_tf] # define the problem ocp = @def begin @@ -47,29 +66,29 @@ function OptimalControlProblems.moonlander( # state, control and final time variables, and time tf ∈ R, variable t ∈ [t0, tf], time - x = (p1, p2, dp1, dp2, θ, dθ) ∈ R⁶, state - u = (F1, F2) ∈ R², control + x = (p₁, p₂, dp₁, dp₂, θ, dθ) ∈ R⁶, state + u = (F₁, F₂) ∈ R², control # final time constraint - 0.1 ≤ tf ≤ 1.0 + tf_l ≤ tf ≤ tf_u # control constraints - 0 ≤ F1(t) ≤ max_thrust, (F1_c) - 0 ≤ F2(t) ≤ max_thrust, (F2_c) + F₁_l ≤ F₁(t) ≤ F₁_u, (F₁_c) + F₂_l ≤ F₂(t) ≤ F₂_u, (F₂_c) # initial conditions - p1(t0) == 0, (p1_i) - p2(t0) == 0, (p2_i) - dp1(t0) == 0, (dp1_i) - dp2(t0) == 0, (dp2_i) - θ(t0) == 0, (θ_i) - dθ(t0) == 0, (dθ_i) + p₁(t0) == p₁_t0, (p₁_t0) + p₂(t0) == p₂_t0, (p₂_t0) + dp₁(t0) == dp₁_t0, (dp₁_t0) + dp₂(t0) == dp₂_t0, (dp₂_t0) + θ(t0) == θ_t0, (θ_t0) + dθ(t0) == dθ_t0, (dθ_t0) # final conditions - p1(tf) == target[1], (p1_f) - p2(tf) == target[2], (p2_f) - dp1(tf) == 0, (dp1_f) - dp2(tf) == 0, (dp2_f) + p₁(tf) == p₁_tf, (p₁_tf) + p₂(tf) == p₂_tf, (p₂_tf) + dp₁(tf) == dp₁_tf, (dp₁_tf) + dp₂(tf) == dp₂_tf, (dp₂_tf) # dynamics ẋ(t) == dynamics(x(t), u(t)) @@ -80,25 +99,25 @@ function OptimalControlProblems.moonlander( # dynamics function dynamics(x, u) - p1, p2, dp1, dp2, θ, dθ = x - F1, F2 = u + p₁, p₂, dp₁, dp₂, θ, dθ = x + F₁, F₂ = u F_r = [ - cos(θ) -sin(θ) p1 - sin(θ) cos(θ) p2 + cos(θ) -sin(θ) p₁ + sin(θ) cos(θ) p₂ 0 0 1 ] - F_tot = (F_r * [0; F1 + F2; 0])[1:2] - ddp1 = (1 / m) * F_tot[1] - ddp2 = (1 / m) * F_tot[2] - g - ddθ = (1 / I) * (D / 2) * (F2 - F1) + F_tot = (F_r * [0; F₁ + F₂; 0])[1:2] + ddp₁ = (1 / m) * F_tot[1] + ddp₂ = (1 / m) * F_tot[2] - g + ddθ = (1 / I) * (D / 2) * (F₂ - F₁) - return [dp1, dp2, ddp1, ddp2, dθ, ddθ] + return [dp₁, dp₂, ddp₁, ddp₂, dθ, ddθ] end # initial guess - xinit = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1] # [p1, p2, dp1, dp2, θ, dθ] - uinit = [5.0, 5.0] # [F1, F2] + xinit = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1] # [p₁, p₂, dp₁, dp₂, θ, dθ] + uinit = [5.0, 5.0] # [F₁, F₂] varinit = [0.5] # [tf] init = (state=xinit, control=uinit, variable=varinit) diff --git a/ext/OptimalControlModels/robbins.jl b/ext/OptimalControlModels/robbins.jl index c7e1afb3..14a201a5 100644 --- a/ext/OptimalControlModels/robbins.jl +++ b/ext/OptimalControlModels/robbins.jl @@ -27,7 +27,7 @@ julia> docp = OptimalControlProblems.robbins(OptimalControlBackend(); N=500); function OptimalControlProblems.robbins( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:robbins), + grid_size::Int=grid_size_data(:robbins), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -39,6 +39,13 @@ function OptimalControlProblems.robbins( α = params[:α] β = params[:β] γ = params[:γ] + x₁_l = params[:x₁_l] + x₁_t0 = params[:x₁_t0] + x₂_t0 = params[:x₂_t0] + x₃_t0 = params[:x₃_t0] + x₁_tf = params[:x₁_tf] + x₂_tf = params[:x₂_tf] + x₃_tf = params[:x₃_tf] # model ocp = @def begin @@ -46,10 +53,10 @@ function OptimalControlProblems.robbins( x ∈ R³, state u ∈ R, control - 0 ≤ x[1](t) ≤ Inf + x[1](t) ≥ x₁_l - x(t0) == [1, -2, 0] - x(tf) == [0, 0, 0] + x(t0) == [x₁_t0, x₂_t0, x₃_t0] + x(tf) == [x₁_tf, x₂_tf, x₃_tf] ẋ(t) == [x[2](t), x[3](t), u(t)] @@ -57,7 +64,7 @@ function OptimalControlProblems.robbins( end # initial guess - xinit = [0.1, 0.1, 0.1] # [x1, x2, x3] + xinit = [0.1, 0.1, 0.1] # [x₁, x₂, x₃] uinit = [0.1] # [u] init = (state=xinit, control=uinit) diff --git a/ext/OptimalControlModels/robot.jl b/ext/OptimalControlModels/robot.jl index 36bd4740..ad5527f6 100644 --- a/ext/OptimalControlModels/robot.jl +++ b/ext/OptimalControlModels/robot.jl @@ -26,7 +26,7 @@ julia> docp = OptimalControlProblems.robot(OptimalControlBackend(); N=250); function OptimalControlProblems.robot( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:robot), + grid_size::Int=grid_size_data(:robot), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -39,14 +39,37 @@ function OptimalControlProblems.robot( L = params[:L] # Upper bounds on the controls - max_uρ = params[:max_uρ] - max_uθ = params[:max_uθ] - max_uϕ = params[:max_uϕ] + uρ_l = params[:uρ_l] + uρ_u = params[:uρ_u] + uθ_l = params[:uθ_l] + uθ_u = params[:uθ_u] + uϕ_l = params[:uϕ_l] + uϕ_u = params[:uϕ_u] # Initial positions of the length and the angles for the robot arm - ρ0 = params[:ρ0] - ϕ0 = params[:ϕ0] - θf = params[:θf] + ρ_t0 = params[:ρ_t0] + θ_t0 = params[:θ_t0] + ϕ_t0 = params[:ϕ_t0] + dρ_t0 = params[:dρ_t0] + dθ_t0 = params[:dθ_t0] + dϕ_t0 = params[:dϕ_t0] + + # Final positions + ρ_tf = params[:ρ_tf] + θ_tf = params[:θ_tf] + ϕ_tf = params[:ϕ_tf] + dρ_tf = params[:dρ_tf] + dθ_tf = params[:dθ_tf] + dϕ_tf = params[:dϕ_tf] + + # + ρ_l = params[:ρ_l] + ρ_u = L + θ_l = params[:θ_l] + θ_u = params[:θ_u] + ϕ_l = params[:ϕ_l] + ϕ_u = params[:ϕ_u] + tf_l = params[:tf_l] ocp = @def begin tf ∈ R, variable @@ -54,33 +77,33 @@ function OptimalControlProblems.robot( x = (ρ, dρ, θ, dθ, ϕ, dϕ) ∈ R⁶, state u = (uρ, uθ, uϕ) ∈ R³, control - tf ≥ 0.1 + tf ≥ tf_l # state constraints - 0 ≤ ρ(t) ≤ L, (ρ_c) - -π ≤ θ(t) ≤ π, (θ_c) - 0 ≤ ϕ(t) ≤ π, (ϕ_c) + ρ_l ≤ ρ(t) ≤ ρ_u, (ρ_c) + θ_l ≤ θ(t) ≤ θ_u, (θ_c) + ϕ_l ≤ ϕ(t) ≤ ϕ_u, (ϕ_c) # control constraints - -max_uρ ≤ uρ(t) ≤ max_uρ, (u_ρ_c) - -max_uθ ≤ uθ(t) ≤ max_uθ, (u_θ_c) - -max_uϕ ≤ uϕ(t) ≤ max_uϕ, (u_ϕ_c) + uρ_l ≤ uρ(t) ≤ uρ_u, (u_ρ_c) + uθ_l ≤ uθ(t) ≤ uθ_u, (u_θ_c) + uϕ_l ≤ uϕ(t) ≤ uϕ_u, (u_ϕ_c) # initial conditions - ρ(t0) == ρ0, (ρ_i) - ϕ(t0) == ϕ0, (ϕ_i) - θ(t0) == 0, (θ_i) - dθ(t0) == 0, (dθ_i) - dϕ(t0) == 0, (dϕ_i) - dρ(t0) == 0, (dρ0_i) + ρ(t0) == ρ_t0, (ρ_t0) + θ(t0) == θ_t0, (θ_t0) + ϕ(t0) == ϕ_t0, (ϕ_t0) + dρ(t0) == dρ_t0, (dρ_t0) + dθ(t0) == dθ_t0, (dθ_t0) + dϕ(t0) == dϕ_t0, (dϕ_t0) # final conditions - ρ(tf) == ρ0, (ρ_f) - θ(tf) == θf, (θ_f) - ϕ(tf) == ϕ0, (ϕ_f) - dθ(tf) == 0, (dθ_f) - dϕ(tf) == 0, (dϕ_f) - dρ(tf) == 0, (dρ_f) + ρ(tf) == ρ_tf, (ρ_tf) + θ(tf) == θ_tf, (θ_tf) + ϕ(tf) == ϕ_tf, (ϕ_tf) + dρ(tf) == dρ_tf, (dρ_tf) + dθ(tf) == dθ_tf, (dθ_tf) + dϕ(tf) == dϕ_tf, (dϕ_tf) # aliases I_θ = ((L - ρ(t))^3 + ρ(t)^3) * sin(ϕ(t))^2 @@ -95,7 +118,7 @@ function OptimalControlProblems.robot( # initial guess tf = 1 - xinit = t -> [ρ0, 0, 2π/3 * ((t - t0) / (tf - t0))^2, 4π/3 * ((t - t0) / (tf - t0)), ϕ0, 0] + xinit = t -> [ρ_t0, 0, 2π/3 * ((t - t0) / (tf - t0))^2, 4π/3 * ((t - t0) / (tf - t0)), ϕ_t0, 0] uinit = [0, 0, 0] init = (state=xinit, control=uinit, variable=tf) diff --git a/ext/OptimalControlModels/rocket.jl b/ext/OptimalControlModels/rocket.jl index 5efdcf34..7654b566 100644 --- a/ext/OptimalControlModels/rocket.jl +++ b/ext/OptimalControlModels/rocket.jl @@ -26,7 +26,7 @@ julia> docp = OptimalControlProblems.rocket(OptimalControlBackend(); N=500); function OptimalControlProblems.rocket( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:rocket), + grid_size::Int=grid_size_data(:rocket), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -34,20 +34,22 @@ function OptimalControlProblems.rocket( # parameters params = parameters_data(:rocket, parameters) t0 = params[:t0] - h0 = params[:h0] - v0 = params[:v0] - m0 = params[:m0] + h_t0 = params[:h_t0] + v_t0 = params[:v_t0] + m_t0 = params[:m_t0] g0 = params[:g0] Tc = params[:Tc] hc = params[:hc] vc = params[:vc] mc = params[:mc] + T_l = params[:T_l] + tf_l = params[:tf_l] # - c = 0.5 * sqrt(g0 * h0) - mf = mc * m0 - Dc = 0.5 * vc * (m0 / g0) - Tmax = Tc * m0 * g0 + c = 0.5 * sqrt(g0 * h_t0) + m_tf = mc * m_t0 + Dc = 0.5 * vc * (m_t0 / g0) + Tmax = Tc * m_t0 * g0 # Model ocp = @def begin @@ -57,41 +59,42 @@ function OptimalControlProblems.rocket( T ∈ R, control # state constraints - h(t) ≥ h0, (x1_c) - v(t) ≥ v0, (x2_c) - mf ≤ m(t) ≤ m0, (x3_c) + h(t) ≥ h_t0, (h_c) + v(t) ≥ v_t0, (v_c) + m_tf ≤ m(t) ≤ m_t0, (m_c) # control constraints - 0 ≤ T(t) ≤ Tmax, (T_c) + T_l ≤ T(t) ≤ Tmax, (T_c) # time constraints - tf ≥ 0, (tf_c) + tf ≥ tf_l, (tf_c) # initial conditions - h(t0) == h0, (x1_i) - v(t0) == v0, (x2_i) - m(t0) == m0, (x3_i) + h(t0) == h_t0, (h_t0) + v(t0) == v_t0, (v_t0) + m(t0) == m_t0, (m_t0) # final conditions - m(tf) == mf, (x3_f) + m(tf) == m_tf, (m_tf) # dynamics ẋ(t) == dynamics(h(t), v(t), m(t), T(t)) # objective - -h(tf) → min + h(tf) → max end # dynamics function dynamics(h, v, m, T) - D = (Dc * v^2 * exp(-hc * (h - h0)) / h0) - g = g0 * (h0 / h)^2 + D = (Dc * v^2 * exp(-hc * (h - h_t0)) / h_t0) + g = g0 * (h_t0 / h)^2 return [v, (T - D - m * g) / m, -T / c] end # initial guess + N = grid_size tf_init = 1 - xinit = [[1, i / N * (1 - i / N), (mf - m0) * (i / N) + m0] for i in 0:N] + xinit = [[1, i / N * (1 - i / N), (m_tf - m_t0) * (i / N) + m_t0] for i in 0:N] time_vec = LinRange(0, tf_init, N+1) init = (time=time_vec, state=xinit, control=Tmax/2, variable=tf_init) diff --git a/ext/OptimalControlModels/space_shuttle.jl b/ext/OptimalControlModels/space_shuttle.jl index e738424a..79d39497 100644 --- a/ext/OptimalControlModels/space_shuttle.jl +++ b/ext/OptimalControlModels/space_shuttle.jl @@ -27,7 +27,7 @@ julia> docp = OptimalControlProblems.space_shuttle(OptimalControlBackend(); N=50 function OptimalControlProblems.space_shuttle( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:space_shuttle), + grid_size::Int=grid_size_data(:space_shuttle), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -53,27 +53,44 @@ function OptimalControlProblems.space_shuttle( b₁ = params[:b₁] b₂ = params[:b₂] - ## + # Δt_min = params[:Δt_min] Δt_max = params[:Δt_max] - tf_min = N*Δt_min - tf_max = N*Δt_max + tf_l = grid_size*Δt_min + tf_u = grid_size*Δt_max ## Initial conditions - h_s = params[:h_s] - ϕ_s = params[:ϕ_s] - θ_s = params[:θ_s] - v_s = params[:v_s] - γ_s = params[:γ_s] - ψ_s = params[:ψ_s] + h_t0 = params[:h_t0] + ϕ_t0 = params[:ϕ_t0] + θ_t0 = params[:θ_t0] + v_t0 = params[:v_t0] + γ_t0 = params[:γ_t0] + ψ_t0 = params[:ψ_t0] + + # for initial guess α_s = params[:α_s] β_s = params[:β_s] - t_s = params[:t_s] ## Final conditions, the so-called Terminal Area Energy Management (TAEM) - h_t = params[:h_t] - v_t = params[:v_t] - γ_t = params[:γ_t] + h_tf = params[:h_tf] + v_tf = params[:v_tf] + γ_tf = params[:γ_tf] + + ## + h_l = params[:h_l] + ϕ_l = params[:ϕ_l] + ϕ_u = params[:ϕ_u] + θ_l = params[:θ_l] + θ_u = params[:θ_u] + v_l = params[:v_l] + γ_l = params[:γ_l] + γ_u = params[:γ_u] + ψ_l = params[:ψ_l] + ψ_u = params[:ψ_u] + α_l = params[:α_l] + α_u = params[:α_u] + β_l = params[:β_l] + β_u = params[:β_u] ## Scalings scaling_h = 1e5 @@ -89,40 +106,40 @@ function OptimalControlProblems.space_shuttle( # constraints ## to help convergence and avoid domain value error - -2π ≤ ϕ(t) ≤ 2π - -2π ≤ ψ(t) ≤ 2π + ϕ_l ≤ ϕ(t) ≤ ϕ_u + ψ_l ≤ ψ(t) ≤ ψ_u ## final time constraints - tf_min ≤ tf ≤ tf_max + tf_l ≤ tf ≤ tf_u ## state constraints - 0 ≤ scaled_h(t) ≤ Inf, (scaled_h_c) - deg2rad(-89) ≤ θ(t) ≤ deg2rad(89), (θ_c) - 0 ≤ scaled_v(t) ≤ Inf, (scaled_v_c) - deg2rad(-89) ≤ γ(t) ≤ deg2rad(89), (γ_c) + scaled_h(t) ≥ h_l, (scaled_h_c) + θ_l ≤ θ(t) ≤ θ_u, (θ_c) + scaled_v(t) ≥ v_l, (scaled_v_c) + γ_l ≤ γ(t) ≤ γ_u, (γ_c) ## control constraints - deg2rad(-90) ≤ α(t) ≤ deg2rad(90), (α_c) - deg2rad(-89) ≤ β(t) ≤ deg2rad(1), (β_c) + α_l ≤ α(t) ≤ α_u, (α_c) + β_l ≤ β(t) ≤ β_u, (β_c) ## initial conditions - scaled_h(t0) == h_s, (scaled_h_i) - ϕ(t0) == ϕ_s, (ϕ_i) - θ(t0) == θ_s, (θ_i) - scaled_v(t0) == v_s, (scaled_v_i) - γ(t0) == γ_s, (γ_i) - ψ(t0) == ψ_s, (ψ_i) + scaled_h(t0) == h_t0, (scaled_h_t0) + ϕ(t0) == ϕ_t0, (ϕ_t0) + θ(t0) == θ_t0, (θ_t0) + scaled_v(t0) == v_t0, (scaled_v_t0) + γ(t0) == γ_t0, (γ_t0) + ψ(t0) == ψ_t0, (ψ_t0) ## final conditions - scaled_h(tf) == h_t, (scaled_h_f) - scaled_v(tf) == v_t, (scaled_v_f) - γ(tf) == γ_t, (γ_f) + scaled_h(tf) == h_tf, (scaled_h_tf) + scaled_v(tf) == v_tf, (scaled_v_tf) + γ(tf) == γ_tf, (γ_tf) # dynamics ẋ(t) == dynamics(x(t), u(t)) # objective - -θ(tf) → min + θ(tf) → max end # dynamics @@ -157,15 +174,15 @@ function OptimalControlProblems.space_shuttle( # initial guess: linear interpolation for h, v, gamma (NB. t0 = 0), constant for the rest # variable time step seems to be initialized at 1 in jump # note that ipopt will project the initial guess inside the bounds anyway. - tf_init = (tf_min+tf_max)/2 + tf_init = (tf_l+tf_u)/2 x_init = t -> [ - h_s + t / tf_init * (h_t - h_s), - ϕ_s, - θ_s, - v_s + t / tf_init * (v_t - v_s), - γ_s + t / tf_init * (γ_t - γ_s), - ψ_s, + h_t0 + (t - t0) / (tf_init - t0) * (h_tf - h_t0), + ϕ_t0, + θ_t0, + v_t0 + (t - t0) / (tf_init - t0) * (v_tf - v_t0), + γ_t0 + (t - t0) / (tf_init - t0) * (γ_tf - γ_t0), + ψ_t0, ] init = (state=x_init, control=[α_s, β_s], variable=[tf_init]) diff --git a/ext/OptimalControlModels/steering.jl b/ext/OptimalControlModels/steering.jl index eeb7d352..9cd31f4d 100644 --- a/ext/OptimalControlModels/steering.jl +++ b/ext/OptimalControlModels/steering.jl @@ -26,7 +26,7 @@ julia> docp = OptimalControlProblems.steering(OptimalControlBackend(); N=500); function OptimalControlProblems.steering( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:steering), + grid_size::Int=grid_size_data(:steering), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -37,8 +37,14 @@ function OptimalControlProblems.steering( a = params[:a] u_min = params[:u_min] u_max = params[:u_max] - xs = params[:xs] - yf = params[:yf] + tf_l = params[:tf_l] + x₁_t0 = params[:x₁_t0] + x₂_t0 = params[:x₂_t0] + x₃_t0 = params[:x₃_t0] + x₄_t0 = params[:x₄_t0] + x₂_tf = params[:x₂_tf] + x₃_tf = params[:x₃_tf] + x₄_tf = params[:x₄_tf] # Model ocp = @def begin @@ -47,11 +53,17 @@ function OptimalControlProblems.steering( x ∈ R⁴, state u ∈ R, control - tf ≥ 0, (tf_c) - x(t0) == xs, (x_i) - x[2:4](tf) == yf, (y_f) - u_min ≤ u(t) ≤ u_max, (u_c) + x₁(t0) == x₁_t0, (x₁_t0) + x₂(t0) == x₂_t0, (x₂_t0) + x₃(t0) == x₃_t0, (x₃_t0) + x₄(t0) == x₄_t0, (x₄_t0) + x₂(tf) == x₂_tf, (x₂_tf) + x₃(tf) == x₃_tf, (x₃_tf) + x₄(tf) == x₄_tf, (x₄_tf) + tf ≥ tf_l, (tf_c) + u_min ≤ u(t) ≤ u_max, (u_c) + ẋ(t) == dynamics(x(t), u(t)) tf → min diff --git a/ext/OptimalControlModels/vanderpol.jl b/ext/OptimalControlModels/vanderpol.jl index 42e826c0..2678d52d 100644 --- a/ext/OptimalControlModels/vanderpol.jl +++ b/ext/OptimalControlModels/vanderpol.jl @@ -26,7 +26,7 @@ julia> docp = OptimalControlProblems.vanderpol(OptimalControlBackend(); N=500); function OptimalControlProblems.vanderpol( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:vanderpol), + grid_size::Int=grid_size_data(:vanderpol), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -37,6 +37,8 @@ function OptimalControlProblems.vanderpol( tf = params[:tf] ω = params[:ω] ε = params[:ε] + x₁_t0 = params[:x₁_t0] + x₂_t0 = params[:x₂_t0] # model ocp = @def begin @@ -44,7 +46,7 @@ function OptimalControlProblems.vanderpol( x ∈ R², state u ∈ R, control - x(t0) == [1, 0] + x(t0) == [x₁_t0, x₂_t0] ẋ(t) == [x[2](t), ε * ω * (1 - x[1](t)^2) * x[2](t) - ω^2 * x[1](t) + u(t)] @@ -52,7 +54,7 @@ function OptimalControlProblems.vanderpol( end # initial guess - xinit = [0.1, 0.1] # [x1, x2] + xinit = [0.1, 0.1] # [x₁, x₂] uinit = [0.1] # [u] init = (state=xinit, control=uinit) diff --git a/ext/OptimalControlModels_s/beam_s.jl b/ext/OptimalControlModels_s/beam_s.jl index 28725226..a8544781 100644 --- a/ext/OptimalControlModels_s/beam_s.jl +++ b/ext/OptimalControlModels_s/beam_s.jl @@ -30,7 +30,7 @@ julia> docp = OptimalControlProblems.beam(OptimalControlBackend(); N=100); function OptimalControlProblems.beam_s( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:beam), + grid_size::Int=grid_size_data(:beam), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -39,21 +39,26 @@ function OptimalControlProblems.beam_s( params = parameters_data(:beam, parameters) t0 = params[:t0] tf = params[:tf] - x_t0 = params[:x_t0] - x_tf = params[:x_tf] x₁_l = params[:x₁_l] x₁_u = params[:x₁_u] + x₁_t0 = params[:x₁_t0] + x₂_t0 = params[:x₂_t0] + x₁_tf = params[:x₁_tf] + x₂_tf = params[:x₂_tf] # model ocp = @def begin t ∈ [t0, tf], time x ∈ R², state u ∈ R, control - x(t0) == x_t0 - x(tf) == x_tf + + x(t0) == [x₁_t0, x₂_t0] + x(tf) == [x₁_tf, x₂_tf] + x₁_l ≤ x₁(t) ≤ x₁_u + ∂(x₁)(t) == x₂(t) ∂(x₂)(t) == u(t) - x₁_l ≤ x₁(t) ≤ x₁_u + ∫(u(t)^2) → min end diff --git a/ext/OptimalControlModels_s/chain_s.jl b/ext/OptimalControlModels_s/chain_s.jl index 6a0af3d0..f9f2c332 100644 --- a/ext/OptimalControlModels_s/chain_s.jl +++ b/ext/OptimalControlModels_s/chain_s.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.chain(OptimalControlBackend(); N=100); function OptimalControlProblems.chain_s( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:chain), + grid_size::Int=grid_size_data(:chain), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -43,8 +43,11 @@ function OptimalControlProblems.chain_s( L = params[:L] a = params[:a] b = params[:b] - x2_i = params[:x2_i] - x3_i = params[:x3_i] + x₁_t0 = a + x₂_t0 = params[:x₂_t0] + x₃_t0 = params[:x₃_t0] + x₁_tf = b + x₃_tf = L # model ocp = @def begin @@ -53,13 +56,13 @@ function OptimalControlProblems.chain_s( u ∈ R, control # initial conditions - x₁(t0) == a, (x1_i) - x₂(t0) == x2_i, (x2_i) - x₃(t0) == x3_i, (x3_i) + x₁(t0) == x₁_t0, (x₁_t0) + x₂(t0) == x₂_t0, (x₂_t0) + x₃(t0) == x₃_t0, (x₃_t0) # final conditions - x₁(tf) == b, (x1_f) - x₃(tf) == L, (x3_f) + x₁(tf) == x₁_tf, (x₁_tf) + x₃(tf) == x₃_tf, (x₃_tf) # dynamics ∂(x₁)(t) == u(t) diff --git a/ext/OptimalControlModels_s/dielectrophoretic_particle_s.jl b/ext/OptimalControlModels_s/dielectrophoretic_particle_s.jl index 686292df..80988bdd 100644 --- a/ext/OptimalControlModels_s/dielectrophoretic_particle_s.jl +++ b/ext/OptimalControlModels_s/dielectrophoretic_particle_s.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.dielectrophoretic_particle(OptimalControlBa function OptimalControlProblems.dielectrophoretic_particle_s( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:dielectrophoretic_particle), + grid_size::Int=grid_size_data(:dielectrophoretic_particle), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -46,7 +46,7 @@ function OptimalControlProblems.dielectrophoretic_particle_s( u_l = params[:u_l] u_u = params[:u_u] tf_l = params[:tf_l] - y_i = params[:y_i] + y_t0 = params[:y_t0] ocp = @def begin tf ∈ R, variable @@ -54,9 +54,9 @@ function OptimalControlProblems.dielectrophoretic_particle_s( q = (x, y) ∈ R², state u ∈ R, control - x(t0) == x0, (x_i) - y(t0) == y_i, (y_i) - x(tf) == xf, (x_f) + x(t0) == x0, (x_t0) + y(t0) == y_t0, (y_t0) + x(tf) == xf, (x_tf) tf ≥ tf_l, (tf_c) u_l ≤ u(t) ≤ u_u, (u_c) diff --git a/ext/OptimalControlModels_s/double_oscillator_s.jl b/ext/OptimalControlModels_s/double_oscillator_s.jl index 9913bde5..0adbb3c3 100644 --- a/ext/OptimalControlModels_s/double_oscillator_s.jl +++ b/ext/OptimalControlModels_s/double_oscillator_s.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.double_oscillator(OptimalControlBackend(); function OptimalControlProblems.double_oscillator_s( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:double_oscillator), + grid_size::Int=grid_size_data(:double_oscillator), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -47,8 +47,8 @@ function OptimalControlProblems.double_oscillator_s( k2 = params[:k2] u_l = params[:u_l] u_u = params[:u_u] - x1_i = params[:x1_i] - x2_i = params[:x2_i] + x₁_t0 = params[:x₁_t0] + x₂_t0 = params[:x₂_t0] # model ocp = @def begin @@ -57,10 +57,10 @@ function OptimalControlProblems.double_oscillator_s( u ∈ R, control u_l ≤ u(t) ≤ u_u, (u_c) - x₁(t0) == x1_i, (x1_i) - x₂(t0) == x2_i, (x2_i) + x₁(t0) == x₁_t0, (x₁_t0) + x₂(t0) == x₂_t0, (x₂_t0) - F = sin(t * 2π / tf) + F = sin((t - t0) * 2π / (tf - t0)) ∂(x₁)(t) == x₃(t) ∂(x₂)(t) == x₄(t) ∂(x₃)(t) == -(k1 + k2) / m1 * x₁(t) + k2 / m1 * x₂(t) + 1 / m1 * F @@ -70,7 +70,7 @@ function OptimalControlProblems.double_oscillator_s( end # initial guess - xinit = [0.1, 0.1, 0.1, 0.1] # [x1, x2, x3, x4] + xinit = [0.1, 0.1, 0.1, 0.1] # [x₁, x₂, x₃, x₄] uinit = [0.1] # [u] init = (state=xinit, control=uinit) diff --git a/ext/OptimalControlModels_s/ducted_fan_s.jl b/ext/OptimalControlModels_s/ducted_fan_s.jl index a9ab68fd..91f88702 100644 --- a/ext/OptimalControlModels_s/ducted_fan_s.jl +++ b/ext/OptimalControlModels_s/ducted_fan_s.jl @@ -8,7 +8,7 @@ Ref: Graichen, K., & Petit, N. (2009). Incorporating a class of constraints into function OptimalControlProblems.ducted_fan_s( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:ducted_fan), + grid_size::Int=grid_size_data(:ducted_fan), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -28,8 +28,18 @@ function OptimalControlProblems.ducted_fan_s( u₂_l = params[:u₂_l] u₂_u = params[:u₂_u] tf_l = params[:tf_l] - x_i = params[:x_i] - x_f = params[:x_f] + x₁_t0 = params[:x₁_t0] + v₁_t0 = params[:v₁_t0] + x₂_t0 = params[:x₂_t0] + v₂_t0 = params[:v₂_t0] + α_t0 = params[:α_t0] + vα_t0 = params[:vα_t0] + x₁_tf = params[:x₁_tf] + v₁_tf = params[:v₁_tf] + x₂_tf = params[:x₂_tf] + v₂_tf = params[:v₂_tf] + α_tf = params[:α_tf] + vα_tf = params[:vα_tf] ocp = @def begin tf ∈ R, variable @@ -48,20 +58,20 @@ function OptimalControlProblems.ducted_fan_s( u₂_l ≤ u₂(t) ≤ u₂_u, (u₂_c) # initial constraints - x₁(t0) == x_i[1], (x₁_i) - v₁(t0) == x_i[2], (v₁_i) - x₂(t0) == x_i[3], (x₂_i) - v₂(t0) == x_i[4], (v₂_i) - α(t0) == x_i[5], (α_i) - vα(t0) == x_i[6], (vα_i) + x₁(t0) == x₁_t0, (x₁_t0) + v₁(t0) == v₁_t0, (v₁_t0) + x₂(t0) == x₂_t0, (x₂_t0) + v₂(t0) == v₂_t0, (v₂_t0) + α(t0) == α_t0, (α_t0) + vα(t0) == vα_t0, (vα_t0) # final constraints - x₁(tf) == x_f[1], (x₁_f) - v₁(tf) == x_f[2], (v₁_f) - x₂(tf) == x_f[3], (x₂_f) - v₂(tf) == x_f[4], (v₂_f) - α(tf) == x_f[5], (α_f) - vα(tf) == x_f[6], (vα_f) + x₁(tf) == x₁_tf, (x₁_tf) + v₁(tf) == v₁_tf, (v₁_tf) + x₂(tf) == x₂_tf, (x₂_tf) + v₂(tf) == v₂_tf, (v₂_tf) + α(tf) == α_tf , (α_tf ) + vα(tf) == vα_tf, (vα_tf) # dynamics ∂(x₁)(t) == v₁(t) diff --git a/ext/OptimalControlModels_s/electric_vehicle_s.jl b/ext/OptimalControlModels_s/electric_vehicle_s.jl index 523611c9..385ed044 100644 --- a/ext/OptimalControlModels_s/electric_vehicle_s.jl +++ b/ext/OptimalControlModels_s/electric_vehicle_s.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.electric_vehicle(OptimalControlBackend(); N function OptimalControlProblems.electric_vehicle_s( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:electric_vehicle), + grid_size::Int=grid_size_data(:electric_vehicle), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -49,10 +49,10 @@ function OptimalControlProblems.electric_vehicle_s( α1 = params[:α1] α2 = params[:α2] α3 = params[:α3] - x_i = params[:x_i] - v_i = params[:v_i] - x_f = params[:x_f] - v_f = params[:v_f] + x_t0 = params[:x_t0] + v_t0 = params[:v_t0] + x_tf = params[:x_tf] + v_tf = params[:v_tf] # model ocp = @def begin @@ -60,10 +60,10 @@ function OptimalControlProblems.electric_vehicle_s( y = (x, v) ∈ R², state u ∈ R, control - x(t0) == x_i, (x_i) - v(t0) == v_i, (v_i) - x(tf) == x_f, (x_f) - v(tf) == v_f, (v_f) + x(t0) == x_t0, (x_t0) + v(t0) == v_t0, (v_t0) + x(tf) == x_tf, (x_tf) + v(tf) == v_tf, (v_tf) road = α0 + α1 * x(t) + α2 * x(t)^2 + α3 * x(t)^3 ∂(x)(t) == v(t) diff --git a/ext/OptimalControlModels_s/glider_s.jl b/ext/OptimalControlModels_s/glider_s.jl index 5f10d5f0..5e9d5227 100644 --- a/ext/OptimalControlModels_s/glider_s.jl +++ b/ext/OptimalControlModels_s/glider_s.jl @@ -31,7 +31,7 @@ julia> docp = OptimalControlProblems.glider(OptimalControlBackend(); N=500); function OptimalControlProblems.glider_s( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:glider), + grid_size::Int=grid_size_data(:glider), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -39,15 +39,15 @@ function OptimalControlProblems.glider_s( # parameters params = parameters_data(:glider, parameters) t0 = params[:t0] - x_i = params[:x_i] - y_i = params[:y_i] - y_f = params[:y_f] - vx_i = params[:vx_i] - vx_f = params[:vx_f] - vy_i = params[:vy_i] - vy_f = params[:vy_f] + x_t0 = params[:x_t0] + y_t0 = params[:y_t0] + y_tf = params[:y_tf] + vx_t0 = params[:vx_t0] + vx_tf = params[:vx_tf] + vy_t0 = params[:vy_t0] + vy_tf = params[:vy_tf] u_c = params[:u_c] - r_i = params[:r_i] + r_t0 = params[:r_t0] m = params[:m] g = params[:g] c0 = params[:c0] @@ -75,19 +75,19 @@ function OptimalControlProblems.glider_s( cL_min ≤ cL(t) ≤ cL_max, (cL_c) # initial conditions - x(t0) == x_i, (x0_i) - y(t0) == y_i, (y0_i) - vx(t0) == vx_i, (vx0_i) - vy(t0) == vy_i, (vy0_i) + x(t0) == x_t0, (x0_t0) + y(t0) == y_t0, (y0_t0) + vx(t0) == vx_t0, (vx0_t0) + vy(t0) == vy_t0, (vy0_t0) # final conditions tf ≥ tf_l - y(tf) == y_f, (yf_f) - vx(tf) == vx_f, (vxf_f) - vy(tf) == vy_f, (vyf_f) + y(tf) == y_tf, (yf_tf) + vx(tf) == vx_tf, (vxf_tf) + vy(tf) == vy_tf, (vyf_tf) # dynamics - r = (x(t) / r_i - 2.5)^2 + r = (x(t) / r_t0 - 2.5)^2 UpD = u_c * (1 - r) * exp(-r) w = vy(t) - UpD v = √(vx(t)^2 + w^2) @@ -100,12 +100,12 @@ function OptimalControlProblems.glider_s( ∂(vy)(t) == (L * vx(t) - D * w) / (m * v) - g # objective - -x(tf) → min + x(tf) → max end # initial guess tfinit = 1 - xinit = t -> [x_i + vx_i * t / tfinit, y_i + t / tfinit * (y_f - y_i), vx_i, vy_i] + xinit = t -> [x_t0 + vx_t0 * t / tfinit, y_t0 + t / tfinit * (y_tf - y_t0), vx_t0, vy_t0] uinit = cL_max / 2 init = (state=xinit, control=uinit, variable=tfinit) diff --git a/ext/OptimalControlModels_s/insurance_s.jl b/ext/OptimalControlModels_s/insurance_s.jl index 7f108b5a..63e5996f 100644 --- a/ext/OptimalControlModels_s/insurance_s.jl +++ b/ext/OptimalControlModels_s/insurance_s.jl @@ -30,7 +30,7 @@ julia> docp = OptimalControlProblems.insurance(OptimalControlBackend(); N=500); function OptimalControlProblems.insurance_s( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:insurance), + grid_size::Int=grid_size_data(:insurance), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -47,6 +47,20 @@ function OptimalControlProblems.insurance_s( k = params[:k] σ = params[:σ] α = params[:α] + I_l = params[:I_l] + I_u = params[:I_u] + m_l = params[:m_l] + m_u = params[:m_u] + h_l = params[:h_l] + h_u = params[:h_u] + R_l = params[:R_l] + H_l = params[:H_l] + U_l = params[:U_l] + dUdR_l = params[:dUdR_l] + P_l = params[:P_l] + I_t0 = params[:I_t0] + m_t0 = params[:m_t0] + x₃_t0 = params[:x₃_t0] # I: Insurance # m: Expense @@ -62,22 +76,23 @@ function OptimalControlProblems.insurance_s( u = (h, R, H, U, dUdR) ∈ R⁵, control # constraints - 0 ≤ I(t) ≤ 1.5 - 0 ≤ m(t) ≤ 1.5 - 0 ≤ h(t) ≤ 25 - 0 ≤ R(t) ≤ Inf - 0 ≤ H(t) ≤ Inf - 0 ≤ U(t) ≤ Inf - 0.001 ≤ dUdR(t) ≤ Inf - 0 ≤ P ≤ Inf - - x(t0) == [0, 0.001, 0] + I_l ≤ I(t) ≤ I_u + m_l ≤ m(t) ≤ m_u + h_l ≤ h(t) ≤ h_u + R(t) ≥ R_l + H(t) ≥ H_l + U(t) ≥ U_l + dUdR(t) ≥ dUdR_l + P ≥ P_l + + x(t0) == [I_t0, m_t0, x₃_t0] P - x₃(tf) == 0 - ε = k * t / (tf - t + 1) + # + ε = k * (t - t0) / (tf - t + 1) # illness distribution - fx = λ * exp(-λ * t) + exp(-λ * tf) / tf + fx = λ * exp(-λ * (t - t0)) + exp(-λ * (tf - t0)) / (tf - t0) # expense effect v = m(t)^(α / 2) / (1 + m(t)^(α / 2)) @@ -85,17 +100,17 @@ function OptimalControlProblems.insurance_s( # constraints R(t) - (w - P + I(t) - m(t) - ε) == 0 - H(t) - (h0 - γ * t * (1 - v)) == 0 + H(t) - (h0 - γ * (t - t0) * (1 - v)) == 0 U(t) - (1 - exp(-s * R(t)) + H(t)) == 0 dUdR(t) - (s * exp(-s * R(t))) == 0 # dynamics - ∂(I)(t) == (1 - γ * t * vprime / dUdR(t)) * h(t) + ∂(I)(t) == (1 - γ * (t - t0) * vprime / dUdR(t)) * h(t) ∂(m)(t) == h(t) ∂(x₃)(t) == (1 + σ) * I(t) * fx # objective - -∫(U(t) * fx) → min + ∫(U(t) * fx) → max end # initial guess diff --git a/ext/OptimalControlModels_s/jackson_s.jl b/ext/OptimalControlModels_s/jackson_s.jl index 9299c4ba..5d0e37fa 100644 --- a/ext/OptimalControlModels_s/jackson_s.jl +++ b/ext/OptimalControlModels_s/jackson_s.jl @@ -30,7 +30,7 @@ julia> docp = OptimalControlProblems.jackson(OptimalControlBackend(); N=500); function OptimalControlProblems.jackson_s( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:jackson), + grid_size::Int=grid_size_data(:jackson), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -42,30 +42,38 @@ function OptimalControlProblems.jackson_s( k1 = params[:k1] k2 = params[:k2] k3 = params[:k3] + a_l = params[:a_l] + a_u = params[:a_u] + b_l = params[:b_l] + b_u = params[:b_u] + x₃_l = params[:x₃_l] + x₃_u = params[:x₃_u] + u_l = params[:u_l] + u_u = params[:u_u] + a_t0 = params[:a_t0] + b_t0 = params[:b_t0] + x₃_t0 = params[:x₃_t0] # model ocp = @def begin t ∈ [t0, tf], time - x ∈ R³, state + x = (a, b, x₃) ∈ R³, state u ∈ R, control - a = x[1] - b = x[2] + x(t0) == [a_t0, b_t0, x₃_t0] - x(t0) == [1, 0, 0] - - [0, 0, 0] ≤ x(t) ≤ [1.1, 1.1, 1.1] - 0 ≤ u(t) ≤ 1 + [a_l, b_l, x₃_l] ≤ x(t) ≤ [a_u, b_u, x₃_u] + u_l ≤ u(t) ≤ u_u ∂(x₁)(t) == -u(t) * (k1 * a(t) - k2 * b(t)) ∂(x₂)(t) == u(t) * (k1 * a(t) - k2 * b(t)) - (1 - u(t)) * k3 * b(t) ∂(x₃)(t) == (1 - u(t)) * k3 * b(t) - -x₃(tf) → min + x₃(tf) → max end # initial guess - xinit = [0.1, 0.1, 0.1] # [a, b, x3] + xinit = [0.1, 0.1, 0.1] # [a, b, x₃] uinit = [0.1] # [u] init = (state=xinit, control=uinit) diff --git a/ext/OptimalControlModels_s/robbins_s.jl b/ext/OptimalControlModels_s/robbins_s.jl index 1a8c363c..cce363d2 100644 --- a/ext/OptimalControlModels_s/robbins_s.jl +++ b/ext/OptimalControlModels_s/robbins_s.jl @@ -27,7 +27,7 @@ julia> docp = OptimalControlProblems.robbins(OptimalControlBackend(); N=500); function OptimalControlProblems.robbins_s( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:robbins), + grid_size::Int=grid_size_data(:robbins), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -39,6 +39,13 @@ function OptimalControlProblems.robbins_s( α = params[:α] β = params[:β] γ = params[:γ] + x₁_l = params[:x₁_l] + x₁_t0 = params[:x₁_t0] + x₂_t0 = params[:x₂_t0] + x₃_t0 = params[:x₃_t0] + x₁_tf = params[:x₁_tf] + x₂_tf = params[:x₂_tf] + x₃_tf = params[:x₃_tf] # model ocp = @def begin @@ -46,10 +53,10 @@ function OptimalControlProblems.robbins_s( x ∈ R³, state u ∈ R, control - 0 ≤ x[1](t) ≤ Inf + x[1](t) ≥ x₁_l - x(t0) == [1, -2, 0] - x(tf) == [0, 0, 0] + x(t0) == [x₁_t0, x₂_t0, x₃_t0] + x(tf) == [x₁_tf, x₂_tf, x₃_tf] ∂(x₁)(t) == x₂(t) ∂(x₂)(t) == x₃(t) @@ -59,7 +66,7 @@ function OptimalControlProblems.robbins_s( end # initial guess - xinit = [0.1, 0.1, 0.1] # [x1, x2, x3] + xinit = [0.1, 0.1, 0.1] # [x₁, x₂, x₃] uinit = [0.1] # [u] init = (state=xinit, control=uinit) diff --git a/ext/OptimalControlModels_s/robot_s.jl b/ext/OptimalControlModels_s/robot_s.jl index 9684a589..f75af2b9 100644 --- a/ext/OptimalControlModels_s/robot_s.jl +++ b/ext/OptimalControlModels_s/robot_s.jl @@ -26,7 +26,7 @@ julia> docp = OptimalControlProblems.robot(OptimalControlBackend(); N=250); function OptimalControlProblems.robot_s( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:robot), + grid_size::Int=grid_size_data(:robot), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -39,14 +39,37 @@ function OptimalControlProblems.robot_s( L = params[:L] # Upper bounds on the controls - max_uρ = params[:max_uρ] - max_uθ = params[:max_uθ] - max_uϕ = params[:max_uϕ] + uρ_l = params[:uρ_l] + uρ_u = params[:uρ_u] + uθ_l = params[:uθ_l] + uθ_u = params[:uθ_u] + uϕ_l = params[:uϕ_l] + uϕ_u = params[:uϕ_u] # Initial positions of the length and the angles for the robot arm - ρ0 = params[:ρ0] - ϕ0 = params[:ϕ0] - θf = params[:θf] + ρ_t0 = params[:ρ_t0] + θ_t0 = params[:θ_t0] + ϕ_t0 = params[:ϕ_t0] + dρ_t0 = params[:dρ_t0] + dθ_t0 = params[:dθ_t0] + dϕ_t0 = params[:dϕ_t0] + + # Final positions + ρ_tf = params[:ρ_tf] + θ_tf = params[:θ_tf] + ϕ_tf = params[:ϕ_tf] + dρ_tf = params[:dρ_tf] + dθ_tf = params[:dθ_tf] + dϕ_tf = params[:dϕ_tf] + + # + ρ_l = params[:ρ_l] + ρ_u = L + θ_l = params[:θ_l] + θ_u = params[:θ_u] + ϕ_l = params[:ϕ_l] + ϕ_u = params[:ϕ_u] + tf_l = params[:tf_l] ocp = @def begin tf ∈ R, variable @@ -54,33 +77,33 @@ function OptimalControlProblems.robot_s( x = (ρ, dρ, θ, dθ, ϕ, dϕ) ∈ R⁶, state u = (uρ, uθ, uϕ) ∈ R³, control - tf ≥ 0.1 + tf ≥ tf_l # state constraints - 0 ≤ ρ(t) ≤ L, (ρ_c) - -π ≤ θ(t) ≤ π, (θ_c) - 0 ≤ ϕ(t) ≤ π, (ϕ_c) + ρ_l ≤ ρ(t) ≤ ρ_u, (ρ_c) + θ_l ≤ θ(t) ≤ θ_u, (θ_c) + ϕ_l ≤ ϕ(t) ≤ ϕ_u, (ϕ_c) # control constraints - -max_uρ ≤ uρ(t) ≤ max_uρ, (u_ρ_c) - -max_uθ ≤ uθ(t) ≤ max_uθ, (u_θ_c) - -max_uϕ ≤ uϕ(t) ≤ max_uϕ, (u_ϕ_c) + uρ_l ≤ uρ(t) ≤ uρ_u, (u_ρ_c) + uθ_l ≤ uθ(t) ≤ uθ_u, (u_θ_c) + uϕ_l ≤ uϕ(t) ≤ uϕ_u, (u_ϕ_c) # initial conditions - ρ(t0) == ρ0, (ρ_i) - ϕ(t0) == ϕ0, (ϕ_i) - θ(t0) == 0, (θ_i) - dθ(t0) == 0, (dθ_i) - dϕ(t0) == 0, (dϕ_i) - dρ(t0) == 0, (dρ0_i) + ρ(t0) == ρ_t0, (ρ_t0) + θ(t0) == θ_t0, (θ_t0) + ϕ(t0) == ϕ_t0, (ϕ_t0) + dρ(t0) == dρ_t0, (dρ_t0) + dθ(t0) == dθ_t0, (dθ_t0) + dϕ(t0) == dϕ_t0, (dϕ_t0) # final conditions - ρ(tf) == ρ0, (ρ_f) - θ(tf) == θf, (θ_f) - ϕ(tf) == ϕ0, (ϕ_f) - dθ(tf) == 0, (dθ_f) - dϕ(tf) == 0, (dϕ_f) - dρ(tf) == 0, (dρ_f) + ρ(tf) == ρ_tf, (ρ_tf) + θ(tf) == θ_tf, (θ_tf) + ϕ(tf) == ϕ_tf, (ϕ_tf) + dρ(tf) == dρ_tf, (dρ_tf) + dθ(tf) == dθ_tf, (dθ_tf) + dϕ(tf) == dϕ_tf, (dϕ_tf) # aliases I_θ = ((L - ρ(t))^3 + ρ(t)^3) * sin(ϕ(t))^2 @@ -100,7 +123,7 @@ function OptimalControlProblems.robot_s( # initial guess tf = 1 - xinit = t -> [ρ0, 0, 2π/3 * ((t - t0) / (tf - t0))^2, 4π/3 * ((t - t0) / (tf - t0)), ϕ0, 0] + xinit = t -> [ρ_t0, 0, 2π/3 * ((t - t0) / (tf - t0))^2, 4π/3 * ((t - t0) / (tf - t0)), ϕ_t0, 0] uinit = [0, 0, 0] init = (state=xinit, control=uinit, variable=tf) diff --git a/ext/OptimalControlModels_s/rocket_s.jl b/ext/OptimalControlModels_s/rocket_s.jl index 7279e22f..4e023a9d 100644 --- a/ext/OptimalControlModels_s/rocket_s.jl +++ b/ext/OptimalControlModels_s/rocket_s.jl @@ -26,7 +26,7 @@ julia> docp = OptimalControlProblems.rocket(OptimalControlBackend(); N=500); function OptimalControlProblems.rocket_s( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:rocket), + grid_size::Int=grid_size_data(:rocket), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -34,20 +34,22 @@ function OptimalControlProblems.rocket_s( # parameters params = parameters_data(:rocket, parameters) t0 = params[:t0] - h0 = params[:h0] - v0 = params[:v0] - m0 = params[:m0] + h_t0 = params[:h_t0] + v_t0 = params[:v_t0] + m_t0 = params[:m_t0] g0 = params[:g0] Tc = params[:Tc] hc = params[:hc] vc = params[:vc] mc = params[:mc] + T_l = params[:T_l] + tf_l = params[:tf_l] # - c = 0.5 * sqrt(g0 * h0) - mf = mc * m0 - Dc = 0.5 * vc * (m0 / g0) - Tmax = Tc * m0 * g0 + c = 0.5 * sqrt(g0 * h_t0) + m_tf = mc * m_t0 + Dc = 0.5 * vc * (m_t0 / g0) + Tmax = Tc * m_t0 * g0 # Model ocp = @def begin @@ -57,38 +59,39 @@ function OptimalControlProblems.rocket_s( T ∈ R, control # state constraints - h(t) ≥ h0, (x1_c) - v(t) ≥ v0, (x2_c) - mf ≤ m(t) ≤ m0, (x3_c) + h(t) ≥ h_t0, (h_c) + v(t) ≥ v_t0, (v_c) + m_tf ≤ m(t) ≤ m_t0, (m_c) # control constraints - 0 ≤ T(t) ≤ Tmax, (T_c) + T_l ≤ T(t) ≤ Tmax, (T_c) # time constraints - tf ≥ 0, (tf_c) + tf ≥ tf_l, (tf_c) # initial conditions - h(t0) == h0, (x1_i) - v(t0) == v0, (x2_i) - m(t0) == m0, (x3_i) + h(t0) == h_t0, (h_t0) + v(t0) == v_t0, (v_t0) + m(t0) == m_t0, (m_t0) # final conditions - m(tf) == mf, (x3_f) + m(tf) == m_tf, (m_tf) # dynamics - D = (Dc * v(t)^2 * exp(-hc * (h(t) - h0)) / h0) - g = g0 * (h0 / h(t))^2 + D = (Dc * v(t)^2 * exp(-hc * (h(t) - h_t0)) / h_t0) + g = g0 * (h_t0 / h(t))^2 ∂(h)(t) == v(t) ∂(v)(t) == (T(t) - D - m(t) * g) / m(t) ∂(m)(t) == -T(t) / c # objective - -h(tf) → min + h(tf) → max end # initial guess + N = grid_size tf_init = 1 - xinit = [[1, i / N * (1 - i / N), (mf - m0) * (i / N) + m0] for i in 0:N] + xinit = [[1, i / N * (1 - i / N), (m_tf - m_t0) * (i / N) + m_t0] for i in 0:N] time_vec = LinRange(0, tf_init, N+1) init = (time=time_vec, state=xinit, control=Tmax/2, variable=tf_init) diff --git a/ext/OptimalControlModels_s/space_shuttle_s.jl b/ext/OptimalControlModels_s/space_shuttle_s.jl index 3815c5e7..240eca6b 100644 --- a/ext/OptimalControlModels_s/space_shuttle_s.jl +++ b/ext/OptimalControlModels_s/space_shuttle_s.jl @@ -27,7 +27,7 @@ julia> docp = OptimalControlProblems.space_shuttle(OptimalControlBackend(); N=50 function OptimalControlProblems.space_shuttle_s( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:space_shuttle), + grid_size::Int=grid_size_data(:space_shuttle), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -53,27 +53,44 @@ function OptimalControlProblems.space_shuttle_s( b₁ = params[:b₁] b₂ = params[:b₂] - ## + # Δt_min = params[:Δt_min] Δt_max = params[:Δt_max] - tf_min = N*Δt_min - tf_max = N*Δt_max + tf_l = grid_size*Δt_min + tf_u = grid_size*Δt_max ## Initial conditions - h_s = params[:h_s] - ϕ_s = params[:ϕ_s] - θ_s = params[:θ_s] - v_s = params[:v_s] - γ_s = params[:γ_s] - ψ_s = params[:ψ_s] + h_t0 = params[:h_t0] + ϕ_t0 = params[:ϕ_t0] + θ_t0 = params[:θ_t0] + v_t0 = params[:v_t0] + γ_t0 = params[:γ_t0] + ψ_t0 = params[:ψ_t0] + + # for initial guess α_s = params[:α_s] β_s = params[:β_s] - t_s = params[:t_s] ## Final conditions, the so-called Terminal Area Energy Management (TAEM) - h_t = params[:h_t] - v_t = params[:v_t] - γ_t = params[:γ_t] + h_tf = params[:h_tf] + v_tf = params[:v_tf] + γ_tf = params[:γ_tf] + + ## + h_l = params[:h_l] + ϕ_l = params[:ϕ_l] + ϕ_u = params[:ϕ_u] + θ_l = params[:θ_l] + θ_u = params[:θ_u] + v_l = params[:v_l] + γ_l = params[:γ_l] + γ_u = params[:γ_u] + ψ_l = params[:ψ_l] + ψ_u = params[:ψ_u] + α_l = params[:α_l] + α_u = params[:α_u] + β_l = params[:β_l] + β_u = params[:β_u] ## Scalings scaling_h = 1e5 @@ -89,34 +106,34 @@ function OptimalControlProblems.space_shuttle_s( # constraints ## to help convergence and avoid domain value error - -2π ≤ ϕ(t) ≤ 2π - -2π ≤ ψ(t) ≤ 2π + ϕ_l ≤ ϕ(t) ≤ ϕ_u + ψ_l ≤ ψ(t) ≤ ψ_u ## final time constraints - tf_min ≤ tf ≤ tf_max + tf_l ≤ tf ≤ tf_u ## state constraints - 0 ≤ scaled_h(t) ≤ Inf, (scaled_h_c) - deg2rad(-89) ≤ θ(t) ≤ deg2rad(89), (θ_c) - 0 ≤ scaled_v(t) ≤ Inf, (scaled_v_c) - deg2rad(-89) ≤ γ(t) ≤ deg2rad(89), (γ_c) + scaled_h(t) ≥ h_l, (scaled_h_c) + θ_l ≤ θ(t) ≤ θ_u, (θ_c) + scaled_v(t) ≥ v_l, (scaled_v_c) + γ_l ≤ γ(t) ≤ γ_u, (γ_c) ## control constraints - deg2rad(-90) ≤ α(t) ≤ deg2rad(90), (α_c) - deg2rad(-89) ≤ β(t) ≤ deg2rad(1), (β_c) + α_l ≤ α(t) ≤ α_u, (α_c) + β_l ≤ β(t) ≤ β_u, (β_c) ## initial conditions - scaled_h(t0) == h_s, (scaled_h_i) - ϕ(t0) == ϕ_s, (ϕ_i) - θ(t0) == θ_s, (θ_i) - scaled_v(t0) == v_s, (scaled_v_i) - γ(t0) == γ_s, (γ_i) - ψ(t0) == ψ_s, (ψ_i) + scaled_h(t0) == h_t0, (scaled_h_t0) + ϕ(t0) == ϕ_t0, (ϕ_t0) + θ(t0) == θ_t0, (θ_t0) + scaled_v(t0) == v_t0, (scaled_v_t0) + γ(t0) == γ_t0, (γ_t0) + ψ(t0) == ψ_t0, (ψ_t0) ## final conditions - scaled_h(tf) == h_t, (scaled_h_f) - scaled_v(tf) == v_t, (scaled_v_f) - γ(tf) == γ_t, (γ_f) + scaled_h(tf) == h_tf, (scaled_h_tf) + scaled_v(tf) == v_tf, (scaled_v_tf) + γ(tf) == γ_tf, (γ_tf) # Helper functions h = scaled_h(t) * scaling_h @@ -139,21 +156,21 @@ function OptimalControlProblems.space_shuttle_s( ∂(ψ)(t) == (1 / (m * v * cos(γ(t)))) * L * sin(β(t)) + (v / (r * cos(θ(t)))) * cos(γ(t)) * sin(ψ(t)) * sin(θ(t)) # objective - -θ(tf) → min + θ(tf) → max end # initial guess: linear interpolation for h, v, gamma (NB. t0 = 0), constant for the rest # variable time step seems to be initialized at 1 in jump # note that ipopt will project the initial guess inside the bounds anyway. - tf_init = (tf_min+tf_max)/2 + tf_init = (tf_l+tf_u)/2 x_init = t -> [ - h_s + t / tf_init * (h_t - h_s), - ϕ_s, - θ_s, - v_s + t / tf_init * (v_t - v_s), - γ_s + t / tf_init * (γ_t - γ_s), - ψ_s, + h_t0 + (t - t0) / (tf_init - t0) * (h_tf - h_t0), + ϕ_t0, + θ_t0, + v_t0 + (t - t0) / (tf_init - t0) * (v_tf - v_t0), + γ_t0 + (t - t0) / (tf_init - t0) * (γ_tf - γ_t0), + ψ_t0, ] init = (state=x_init, control=[α_s, β_s], variable=[tf_init]) diff --git a/ext/OptimalControlModels_s/steering_s.jl b/ext/OptimalControlModels_s/steering_s.jl index ec866147..f987202f 100644 --- a/ext/OptimalControlModels_s/steering_s.jl +++ b/ext/OptimalControlModels_s/steering_s.jl @@ -26,7 +26,7 @@ julia> docp = OptimalControlProblems.steering(OptimalControlBackend(); N=500); function OptimalControlProblems.steering_s( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:steering), + grid_size::Int=grid_size_data(:steering), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -37,8 +37,14 @@ function OptimalControlProblems.steering_s( a = params[:a] u_min = params[:u_min] u_max = params[:u_max] - xs = params[:xs] - yf = params[:yf] + tf_l = params[:tf_l] + x₁_t0 = params[:x₁_t0] + x₂_t0 = params[:x₂_t0] + x₃_t0 = params[:x₃_t0] + x₄_t0 = params[:x₄_t0] + x₂_tf = params[:x₂_tf] + x₃_tf = params[:x₃_tf] + x₄_tf = params[:x₄_tf] # Model ocp = @def begin @@ -47,9 +53,15 @@ function OptimalControlProblems.steering_s( x ∈ R⁴, state u ∈ R, control - tf ≥ 0, (tf_c) - x(t0) == xs, (x_i) - x[2:4](tf) == yf, (y_f) + x₁(t0) == x₁_t0, (x₁_t0) + x₂(t0) == x₂_t0, (x₂_t0) + x₃(t0) == x₃_t0, (x₃_t0) + x₄(t0) == x₄_t0, (x₄_t0) + x₂(tf) == x₂_tf, (x₂_tf) + x₃(tf) == x₃_tf, (x₃_tf) + x₄(tf) == x₄_tf, (x₄_tf) + + tf ≥ tf_l, (tf_c) u_min ≤ u(t) ≤ u_max, (u_c) ∂(x₁)(t) == x₃(t) diff --git a/ext/OptimalControlModels_s/vanderpol_s.jl b/ext/OptimalControlModels_s/vanderpol_s.jl index cf4fe7d0..7aead2cb 100644 --- a/ext/OptimalControlModels_s/vanderpol_s.jl +++ b/ext/OptimalControlModels_s/vanderpol_s.jl @@ -26,7 +26,7 @@ julia> docp = OptimalControlProblems.vanderpol(OptimalControlBackend(); N=500); function OptimalControlProblems.vanderpol_s( ::OptimalControlBackend, description::Symbol...; - grid_size::Int=steps_number_data(:vanderpol), + grid_size::Int=grid_size_data(:vanderpol), parameters::Union{Nothing, NamedTuple}=nothing, kwargs..., ) @@ -37,6 +37,8 @@ function OptimalControlProblems.vanderpol_s( tf = params[:tf] ω = params[:ω] ε = params[:ε] + x₁_t0 = params[:x₁_t0] + x₂_t0 = params[:x₂_t0] # model ocp = @def begin @@ -44,7 +46,7 @@ function OptimalControlProblems.vanderpol_s( x ∈ R², state u ∈ R, control - x(t0) == [1, 0] + x(t0) == [x₁_t0, x₂_t0] ∂(x₁)(t) == x₂(t) ∂(x₂)(t) == ε * ω * (1 - x₁(t)^2) * x₂(t) - ω^2 * x₁(t) + u(t) @@ -53,7 +55,7 @@ function OptimalControlProblems.vanderpol_s( end # initial guess - xinit = [0.1, 0.1] # [x1, x2] + xinit = [0.1, 0.1] # [x₁, x₂] uinit = [0.1] # [u] init = (state=xinit, control=uinit) diff --git a/src/OptimalControlProblems.jl b/src/OptimalControlProblems.jl index 919bf536..365e6c21 100644 --- a/src/OptimalControlProblems.jl +++ b/src/OptimalControlProblems.jl @@ -444,11 +444,11 @@ Return the number of discretisation steps, from the metadata, for a given optima # Example ```julia-repl -julia> steps_number_data(:beam) +julia> grid_size_data(:beam) 500 ``` """ -function steps_number_data(problem::Symbol) +function grid_size_data(problem::Symbol) return metadata(problem)[:grid_size] end @@ -477,6 +477,6 @@ end export JuMPBackend, OptimalControlBackend, problems export time_grid, state, costate, control, variable, iterations, objective -export metadata, steps_number_data, parameters_data +export metadata, grid_size_data, parameters_data end diff --git a/test/figures/init/beam.pdf b/test/figures/init/beam.pdf index 8c112c7a6f84921cb93f031a9c67b9352cfc2974..1c801f4c96965420a8377547d40f011f1ac5ee69 100644 GIT binary patch delta 30 lcmaFRDEOdJaDp?dsiCEjd80?G2V<)TQ>zE_Ru7gL4gjR`3Df`p delta 30 lcmaFRDEOdJaDp?dfr){kS))g*2V<)TQ>zE_Ru7gL4gjO~3C92c diff --git a/test/figures/init/chain.pdf b/test/figures/init/chain.pdf index df67dfc3fd776c5315b06a654efff1129b810c03..cfac619665c812e04ce296b6951a04f0291bd9cb 100644 GIT binary patch delta 34 pcmeBQD%QVLY=RS;p{b#zv00->s|RDN2UDvDbE^l-Ru5M9NdUmm3Wxvz delta 34 pcmeBQD%QVLY=RS;fu*5=sd1x6s|RDN2UDvDbE^l-Ru5M9NdUk<3V{Fs diff --git a/test/figures/init/double_oscillator.pdf b/test/figures/init/double_oscillator.pdf index 0dfc56de38d7b228be30b110adc5e1cdafa7b93f..5a5e2f7e6243241b013101fbc57172d4abaab44e 100644 GIT binary patch delta 37 scmey{BlWjOYJwA+p{b#ziAAGFs|RDN2UDvDbE^kSs|V{=4>r>_0Qvt5@&Et; delta 37 scmey{BlWjOYJwA+fu*6Lp-H1hs|RDN2UDvDbE^kSs|V{=4>r>_0Qlnz<^TWy diff --git a/test/figures/init/ducted_fan.pdf b/test/figures/init/ducted_fan.pdf index a8e5f88923a97169b3a6718a76ecb24c4fdc3504..fa6a05eadc41bbafa8d6bbbc54f8fc7e86ce7621 100644 GIT binary patch delta 40 vcmX@{T;{}cnF&s8hNeaa29}K;tsac69!#ws%&i_Qtsbnc9&B4Z*c*%iDNPLn delta 40 vcmX@{T;{}cnF&s829|~vMh1-@tsac69!#ws%&i_Qtsbnc9&B4Z*c*%iDYXp- diff --git a/test/figures/init/electric_vehicle.pdf b/test/figures/init/electric_vehicle.pdf index f4cbb95a28335e90d08b9165e7c912dc5b112cdd..145b6dc0a8347efd1a3e0eb90742a9501e94a6f8 100644 GIT binary patch delta 31 mcmeCaEYN*fV1g5yp{bF9kzu1ps|RDN2UDvD^HvWQXH5X9nhApd delta 31 mcmeCaEYN*fV1g5yfu*6Li9w@Bs|RDN2UDvD^HvWQXH5X9>IsJc diff --git a/test/figures/init/glider.pdf b/test/figures/init/glider.pdf index fe12363341c9f18f50dd6c0f44155c1d50220477..1c67f21ed26ea7adb83aac8a2cb6dc6798b495d4 100644 GIT binary patch delta 40 wcmcb4QRe1FnF&s8hNeb_#s-ZZtsac69!#ws%&i_Qtsbnc9&B4Z*e7ZL04I_R`Tzg` delta 40 wcmcb4QRe1FnF&s829}1#1}2Rjtsac69!#ws%&i_Qtsbnc9&B4Z*e7ZL04N;{{{R30 diff --git a/test/figures/init/insurance.pdf b/test/figures/init/insurance.pdf index a896d8ec1c6e596639c62fb72705895e1715c617..6348a6dd184e76a808b68392ab6de1f67c354414 100644 GIT binary patch delta 4690 zcmZ9QKaVU&6~)Cq^WJ(M1P%zuhTug=rLO9(uI|uCMh-0d1HeaE2bR#w9*qIX0Z1SW z+SuX~U)5G2UtA8EKlIn7C1w0@0!}lqrENMdQ_rKNvM8J>HL0#? z-6RW;=Ns9QRzl6GiPJglMY57wHq7f8f_Xx+sUj2q!Q+C_IW-Z!q-;f)?!+~U5umDG z7!BA`Mz-_^x0KCWO|t^sWqK6K0KKid=(7DtP3dlFY8b5~)w7?7F+fymz*)tlYO^X_ zR2hsymmKD_!dgvP*&8_f+6EN8da$HTfzJB}smdWF%x6ktu%>CVaKN=lw#q2!hOAXX zel8__eD|L(kAupH;kKkUsiOlDH$-LCwKmwF6n9BGm1!j{^N70x=OhwCw&^@v^?K7{ zMm7W3-?gI~rv;;-NGsZ5b7k6^b`(2N9bALyvIunOMH1cSZG!G-(Khluf=0~N>=stw zP4U|Yanwds*Mtq6u!F`x`~Hi+>-4O&c;Ud6KD`X-T!sm!fbTLTjvd};EBMG% z%fo~|3V_U~f5KsElf|JLOJZ<5=_V<(4iMO zb(^;dqBrSmEQP-+Urn!tdE2q4mqrYb;vKXC0K}@%zdl`ijOmMOs&dH_uN(F9XKn~*kzl${-PIc+--Ky{h@aRE-7QQE6ydY zcE}uoftgk%7;ar0c7S3JCS*O(i(cf^ZQdq$VQS<%<6q37+C+BZDv}RQpUY99Z1(6G z{$mbB8AH}fJoKXc-R1x$_}Vsm%5IIH`$Tb-#?7YQC|&`=VF#CBLe>L?ed|$im)}MM zD8t8he)sIn)7$@e`v+ge>QxxH+?QkZDvVsk;f2R%Bkils}t@OT_9`bQjaFOwHZEy%ejL zp4HIw>LoA+6swnr(RtX_(Yp=BAf-evO2HcI;V=^viI(cS#~C>w>(YH8*ajBl(o)45kzAH zy3Am60Q-A=T8|J`4fCN$$wm4wN*JuY;m`nC1k+^^=+KKKY;$B34r@+Taksup)WcU* zU^rvsiw=62hGbFL0p2Nb=}RupRlCF$c$XNEmmg#t6&ZmyosR0-iYj&q!l7jayi3%h z4jwrkm2)H((GNw&uxi77hm`<6sspkrBO@d+>|uaIT1`39CcIY#Zw3&~o}!u>QjEh6 zQPf4l8;S#8b(;?`Dit#LLdIn#W>}hZwNoetMrPErTHu{J2XOYTewRUS?;7tC6yrmt zuoBkmD6Jp>30`b2Q19Qou*xXu+F{l+E)#DuHzj@iK_`j8D7UQ2qXho5OIQ+{FguxU;`vUOK zaxHGUj4fDz^X#O!`MVjv2KNUcR?7kG(?cRk@3y?kD_?B!e~BNeA&vbOGD=F_KY!=_ fH=n({f63>2PcQGk|JPrirq)icUcL9xPfz~^c1Ee3 delta 4861 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 O;&*7ec5(K-ul)}b5nzM> delta 7807 zcmeHL&8wcp73Z1hP0TB5Zb}<5z4~5T(3m*RJo9`_P5dg-xDd30&LQN8)+-? zH5Rc560syxu+*=GAW93iJapm0E<~YS^lQ;oOE)eWa8rqmz0%+B%z56#|G>q&c)2;h zIdf*_oZtC)^2`edpLyZnbGPj9DRf~te&nem)o+iOyWh>PUu&<*{$2Cndg`6;<`2)B zrgwFkr2tt#-dt+hVi^uD=myyrc0^1$u^8X*qO5A)O|m-3(X zn;-2-lj&(mOds33G^)57&DDR*5A%24GqdsKkIY-uMugQAT;I)8A6*;g5MqE(yROMw zXUx8;&(EGQ*KE}D1gyv5oonj(qq7A4Nz8veW3GngHa2WD=N8pw*(gG8KQ?KB<676X zvim+4;`-}+XeEdsxu|Lwb`VqnM(fOr} z0Jv`H*b`^X2Hf@LS##|b^_-gAIe9ktr30Ee|M#ppaF{*{z7_BEh*yhEt&6y;L`qi6 zrsDF+Wbyg^pP0k&dGMV}a6Rc$45}<1;%b0{C%5x}hRzUIPX>#`%hax2MkRQ;(|LQn zOSGkyAzeywd2m@S-f#bBe)IJ}BG%3a+|qk-Rd6jBl9KC%Zovf)ad3mMR0QNzo4>kk z_Fvv&t#%0>CNDi{6WxFdikKhVHdkNY7BcnNuVxxo!|%%@WXJM+F{e`gZf}>;t-`$AefQN65!;f4b^b+F8l4OJNc%4y6SRU;ZMkK zSN6blOfqt=qq}<7^w<~AleijPU@*9v_ZqwL719Yo=hN_-VnSq`nHNu1KgoYFHdRBu z$l5E`C4C~(6T}%@)8)g~UbkNJLEc547!u-@k6HWkn-aYsxd&}zc%quhqE`HXWYlfv z$<)vHzhaN&-T&IP^C}qVT}Oj_1M+bK@RuyZpUw^b)SA6xbATk72++HBP`98KDUi3; z?Cn<$WS8bB7R3CyjTG}g*X+%n?w16E5=vN(!Gh{d z;?m9pFwFV)JM0HlH@?2pe%Vw_erK0GTGe@TWt(iT#$-96Wd_H;*a)&RNfWg&6 z{`1T}f|B%&3+;`Y5o$sJ)PUf+a&uvT0^_R}+CP{ojE`JwKdd$xRdrn7keBEAM}Yjq zZu<|g?!I+CLeiBXqv1lNmWF>%5G@`5Nqe$Olhp5Le9s20Z9)d+~A0D$BG z2JdQa1%Q@P0K8HF%o_yYeR`}xk`@hkpB@9CHsDJI)JAmsYWff=Y6SI_o@rRa$Lo*V zo6UkjkElHokH+(+1f-OLRICXKpwtL}p@SM)-=KjyR{)6z0JVW2)9sj<)CPjAfZ7<` zVUz|@Q6s3tQUx$)m1A%L`aSk)Bw)r+pzX(Beb;)kAlYI>)1q|{1+yLj6e0m|e$haA z&-(yS8*rHdY6Ar21p`Ynw}AEw;S!KygqcAu0Vqb0ZjA!PNC$?} z|Dm0XU}B;F0jLcW3Pu}%+Cb};$FywkJeO678jUl9AHz58>1x4ri>N6W+R^J|qA!3j z6aXGW0CkB@1yd3B0tiC^fb9f8dtMoUw758c_PjCxwSmc#S1ywuw{&m>?+iqZz()$G z5$)j6P$R-7Y>_HMBLin|0n`QukOHU;&|ZOJ15FyUAhtyJwelKF-qPWK6e9qnp8}}U zc;~bBjY{fI1CMa>O~Sf|W{pR`;S7aWv$jx%Ny?}wl#$Y$e=zNqbyV6SgSA*k3i87P z>t%nyWXOpK?=9FLwYTl~I&-x_{9@Y{*s P1^De6Pd`8V<&XalBP&?> diff --git a/test/figures/init/steering.pdf b/test/figures/init/steering.pdf index 224085687674b4c78f581ece9262f7e71bcc48d5..c20dcb14786e2c6b8613c2fcdfcaafab6cfda907 100644 GIT binary patch delta 40 vcmdn8S!T;-nF&s8hNcDvh6arutsac69!#ws%&i_Qtsbnc9&B4Z*mEQS62c5S delta 40 vcmdn8S!T;-nF&s829}0q#-@!Ptsac69!#ws%&i_Qtsbnc9&B4Z*mEQS6qpQ5 diff --git a/test/figures/init/vanderpol.pdf b/test/figures/init/vanderpol.pdf index 3fb213c88f50e4b4edb3410fe96f768c545fd388..6b0a0b560e448a059f2ebc6c6ff0521da93c2205 100644 GIT binary patch delta 28 kcmdnHgn#c6{s~TOhNcDvM&^wktsac69!y(3n7>{G0Fa#u6aWAK delta 28 kcmdnHgn#c6{s~TO29}0qrbdk(tsac69!y(3n7>{G0Ff#R8~^|S diff --git a/test/runtests.jl b/test/runtests.jl index 96f2658c..2f24a444 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -56,14 +56,14 @@ const VERBOSE = true # print or not details during tests @testset "OptimalControlProblems tests" verbose=VERBOSE showtiming=true begin for name in ( #:aqua, - # :kwargs, - # :JuMP, # convergence tests for JuMP models - # :OptimalControl, # convergence tests for OptimalControl models - # :OptimalControl_s, # convergence tests for OptimalControl models + :kwargs, + :JuMP, # convergence tests for JuMP models + :OptimalControl, # convergence tests for OptimalControl models + :OptimalControl_s, # convergence tests for OptimalControl models :init, # comparison between OptimalControl and JuMP: init - # :solution, # comparison between OptimalControl and JuMP: solution - # :quick, # quick comparison: objective rel error only - # :parameters, # tests with different parameters values, does no depend on `list_of_problems` + :solution, # comparison between OptimalControl and JuMP: solution + :quick, # quick comparison: objective rel error only + :parameters, # tests with different parameters values, does no depend on `list_of_problems` ) @testset "$(name)" verbose=VERBOSE begin test_name = Symbol(:test_, name) diff --git a/test/test_JuMP.jl b/test/test_JuMP.jl index 8ee6daf7..9079cb7a 100644 --- a/test/test_JuMP.jl +++ b/test/test_JuMP.jl @@ -2,7 +2,7 @@ function test_JuMP() for f in LIST_OF_PROBLEMS @testset "$(f)" verbose=VERBOSE begin - N = metadata(f)[:grid_size] + grid_size = metadata(f)[:grid_size] # do we keep or remove the problem from the list keep_problem = true @@ -12,7 +12,7 @@ function test_JuMP() DEBUG && println("│") # Set up the model - nlp = OptimalControlProblems.eval(f)(JuMPBackend(); N=N) + nlp = OptimalControlProblems.eval(f)(JuMPBackend(); grid_size=grid_size) set_optimizer(nlp, Ipopt.Optimizer) set_silent(nlp) set_optimizer_attribute(nlp, "tol", TOL) diff --git a/test/test_OptimalControl.jl b/test/test_OptimalControl.jl index 69ceeb13..551662c6 100644 --- a/test/test_OptimalControl.jl +++ b/test/test_OptimalControl.jl @@ -1,6 +1,6 @@ # test_OptimalControl_optimality function test_OptimalControl() - kwargs = Dict( + options_ipopt = Dict( :print_level => 0, :tol => TOL, :mu_strategy => MU_STRATEGY, @@ -11,7 +11,7 @@ function test_OptimalControl() for f in LIST_OF_PROBLEMS @testset "$(f)" verbose=VERBOSE begin - N = metadata(f)[:grid_size] + grid_size = metadata(f)[:grid_size] # do we keep or remove the problem from the list keep_problem = true @@ -21,16 +21,16 @@ function test_OptimalControl() DEBUG && println("│") # Set up the model - docp = OptimalControlProblems.eval(f)(OptimalControlBackend(); N=N) + docp = OptimalControlProblems.eval(f)(OptimalControlBackend(); grid_size=grid_size) nlp = nlp_model(docp) # Solve the model DEBUG && println("├─ Solve") DEBUG && println("│") print(" First solve: "); - @time sol = NLPModelsIpopt.ipopt(nlp; kwargs...) + @time sol = NLPModelsIpopt.ipopt(nlp; options_ipopt...) print(" Second solve: "); - @time sol = NLPModelsIpopt.ipopt(nlp; kwargs...) + @time sol = NLPModelsIpopt.ipopt(nlp; options_ipopt...) DEBUG && println("│") # Infos diff --git a/test/test_OptimalControl_s.jl b/test/test_OptimalControl_s.jl index 20d93855..a42fdb91 100644 --- a/test/test_OptimalControl_s.jl +++ b/test/test_OptimalControl_s.jl @@ -1,6 +1,6 @@ # test_OptimalControl_optimality function test_OptimalControl_s() - kwargs_madnlp = Dict( + options_madnlp = Dict( :print_level => MadNLP.ERROR, :tol => TOL, #:mu_strategy => MU_STRATEGY, @@ -12,7 +12,7 @@ function test_OptimalControl_s() for f in LIST_OF_PROBLEMS @testset "$(f)" verbose=VERBOSE begin - N = metadata(f)[:grid_size] + grid_size = metadata(f)[:grid_size] # do we keep or remove the problem from the list keep_problem = true @@ -22,16 +22,16 @@ function test_OptimalControl_s() DEBUG && println("│") # Set up the model - docp = OptimalControlProblems.eval(Symbol(f, :_s))(OptimalControlBackend(), :madnlp, :exa; N=N) + docp = OptimalControlProblems.eval(Symbol(f, :_s))(OptimalControlBackend(), :madnlp, :exa; grid_size=grid_size) nlp = nlp_model(docp) # Solve the model DEBUG && println("├─ Solve") DEBUG && println("│") print(" First solve: "); - @time sol = madnlp(nlp; kwargs...) + @time sol = madnlp(nlp; options_madnlp...) print(" Second solve: "); - @time sol = madnlp(nlp; kwargs...) + @time sol = madnlp(nlp; options_madnlp...) DEBUG && println("│") # Infos diff --git a/test/test_kwargs.jl b/test/test_kwargs.jl index 26a0c69b..f415cce2 100644 --- a/test/test_kwargs.jl +++ b/test/test_kwargs.jl @@ -1,5 +1,5 @@ function test_kwargs() - N = 2 + grid_size = 2 scheme = :euler solver_backend = :madnlp optimiser = Ipopt.Optimizer @@ -13,7 +13,7 @@ function test_kwargs() OptimalControlBackend(), solver_backend; grid_size=grid_size, disc_method=scheme ) @test docp isa CTDirect.DOCP - @test docp.time.steps == N + @test docp.time.steps == grid_size @test docp.discretization isa CTDirect.Euler # OptimalControl_s model @@ -21,7 +21,7 @@ function test_kwargs() OptimalControlBackend(), :madnlp, :exa; grid_size=grid_size, disc_method=scheme ) @test docp isa CTDirect.DOCP - @test docp.time.steps == N + @test docp.time.steps == grid_size @test docp.discretization isa CTDirect.Euler # JuMP model diff --git a/test/test_quick.jl b/test/test_quick.jl index bb06abb6..16d63e70 100644 --- a/test/test_quick.jl +++ b/test/test_quick.jl @@ -29,14 +29,14 @@ function test_quick() max_r_err = -Inf # relative error max for f in LIST_OF_PROBLEMS - N = metadata(f)[:grid_size] + grid_size = metadata(f)[:grid_size] @testset "$(string(f)) (objective)" verbose=VERBOSE begin DEBUG && println("\n", "┌─ ", string(f)) DEBUG && println("│") ############### JuMP ############### - nlp = OptimalControlProblems.eval(f)(JuMPBackend(); N=N) + nlp = OptimalControlProblems.eval(f)(JuMPBackend(); grid_size=grid_size) set_optimizer(nlp, Ipopt.Optimizer) set_silent(nlp) set_optimizer_attribute(nlp, "tol", TOL) @@ -49,14 +49,14 @@ function test_quick() o_jp = objective_value(nlp) ########## OptimalControl ########## - docp = OptimalControlProblems.eval(f)(OptimalControlBackend(); N=N) + docp = OptimalControlProblems.eval(f)(OptimalControlBackend(); grid_size=grid_size) nlp = nlp_model(docp) nlp_sol = NLPModelsIpopt.ipopt(nlp; kwargs_ipopt...) sol = build_ocp_solution(docp, nlp_sol) o_oc = objective(sol) ########## OptimalControl_s ########## - docp = OptimalControlProblems.eval(Symbol(f, :_s))(OptimalControlBackend(), :madnlp, :exa; N=N) + docp = OptimalControlProblems.eval(Symbol(f, :_s))(OptimalControlBackend(), :madnlp, :exa; grid_size=grid_size) nlp = nlp_model(docp) nlp_sol = madnlp(nlp; kwargs_madnlp...) sol = build_ocp_solution(docp, nlp_sol) diff --git a/test/utils.jl b/test/utils.jl index 56908f06..c2cc4ea7 100644 --- a/test/utils.jl +++ b/test/utils.jl @@ -214,7 +214,7 @@ function comparison(; max_iter, test_name) # we loop over the problems for f in LIST_OF_PROBLEMS - N = metadata(f)[:grid_size] # get default number of steps + grid_size = metadata(f)[:grid_size] # get default number of steps x_vars = metadata(f)[:state_name] p_vars = metadata(f)[:costate_name] u_vars = metadata(f)[:control_name] @@ -225,7 +225,7 @@ function comparison(; max_iter, test_name) DEBUG && println("│") ############### JuMP ############### - nlp_jp = OptimalControlProblems.eval(f)(JuMPBackend(); N=N) + nlp_jp = OptimalControlProblems.eval(f)(JuMPBackend(); grid_size=grid_size) set_optimizer(nlp_jp, Ipopt.Optimizer) set_silent(nlp_jp) set_optimizer_attribute(nlp_jp, "tol", options_ipopt[:tol]) @@ -247,7 +247,7 @@ function comparison(; max_iter, test_name) nb_con_jp = num_constraints(nlp_jp; count_variable_in_set_constraints=false) ########## OptimalControl ########## - docp = OptimalControlProblems.eval(f)(OptimalControlBackend(); N=N) + docp = OptimalControlProblems.eval(f)(OptimalControlBackend(); grid_size=grid_size) nlp_oc = nlp_model(docp) nlp_sol = NLPModelsIpopt.ipopt(nlp_oc; options_ipopt...) sol_oc = build_ocp_solution(docp, nlp_sol) @@ -263,7 +263,7 @@ function comparison(; max_iter, test_name) ########## OptimalControl_s ########## model_backend = :exa # :adnlp - docp = OptimalControlProblems.eval(Symbol(f, :_s))(OptimalControlBackend(), :madnlp, model_backend; N=N) + docp = OptimalControlProblems.eval(Symbol(f, :_s))(OptimalControlBackend(), :madnlp, model_backend; grid_size=grid_size) nlp_os = nlp_model(docp) nlp_sol = madnlp(nlp_os; options_madnlp...) sol_os = build_ocp_solution(docp, nlp_sol) From 7c212bf7af051dbc05bc1b099f014bb4fb0543c0 Mon Sep 17 00:00:00 2001 From: Olivier Cots Date: Mon, 15 Sep 2025 17:04:18 +0200 Subject: [PATCH 4/4] review doc --- docs/make.jl | 7 +- docs/problems.jl | 52 ++- docs/src/dev-add.md | 95 +++++- docs/src/dev-api.md | 33 +- docs/src/problems-introduction.md | 34 +- docs/src/tutorial-get.md | 43 ++- ext/JuMPModels/beam.jl | 6 +- ext/JuMPModels/bioreactor.jl | 2 +- ext/JuMPModels/cart_pendulum.jl | 2 +- ext/JuMPModels/chain.jl | 2 +- ext/JuMPModels/dielectrophoretic_particle.jl | 16 +- ext/JuMPModels/double_oscillator.jl | 2 +- ext/JuMPModels/ducted_fan.jl | 2 +- ext/JuMPModels/electric_vehicle.jl | 2 +- ext/JuMPModels/glider.jl | 2 +- ext/JuMPModels/insurance.jl | 2 +- ext/JuMPModels/jackson.jl | 2 +- ext/JuMPModels/moonlander.jl | 2 +- ext/JuMPModels/robbins.jl | 2 +- ext/JuMPModels/robot.jl | 2 +- ext/JuMPModels/rocket.jl | 2 +- ext/JuMPModels/space_shuttle.jl | 2 +- ext/JuMPModels/steering.jl | 2 +- ext/JuMPModels/vanderpol.jl | 2 +- ext/MetaData/beam.jl | 2 +- ext/MetaData/bioreactor.jl | 2 +- ext/MetaData/chain.jl | 2 +- ext/MetaData/dielectrophoretic_particle.jl | 8 +- ext/MetaData/double_oscillator.jl | 2 +- ext/MetaData/ducted_fan.jl | 2 +- ext/MetaData/electric_vehicle.jl | 2 +- ext/MetaData/glider.jl | 2 +- ext/MetaData/insurance.jl | 2 +- ext/MetaData/jackson.jl | 2 +- ext/MetaData/moonlander.jl | 2 +- ext/MetaData/robbins.jl | 2 +- ext/MetaData/robot.jl | 2 +- ext/MetaData/rocket.jl | 2 +- ext/MetaData/space_shuttle.jl | 2 +- ext/MetaData/steering.jl | 2 +- ext/MetaData/vanderpol.jl | 2 +- ext/OptimalControlModels/beam.jl | 2 +- ext/OptimalControlModels/bioreactor.jl | 2 +- ext/OptimalControlModels/cart_pendulum.jl | 2 +- ext/OptimalControlModels/chain.jl | 2 +- .../dielectrophoretic_particle.jl | 12 +- ext/OptimalControlModels/double_oscillator.jl | 2 +- ext/OptimalControlModels/ducted_fan.jl | 2 +- ext/OptimalControlModels/electric_vehicle.jl | 2 +- ext/OptimalControlModels/glider.jl | 2 +- ext/OptimalControlModels/insurance.jl | 2 +- ext/OptimalControlModels/jackson.jl | 2 +- ext/OptimalControlModels/moonlander.jl | 2 +- ext/OptimalControlModels/robbins.jl | 2 +- ext/OptimalControlModels/robot.jl | 2 +- ext/OptimalControlModels/rocket.jl | 2 +- ext/OptimalControlModels/space_shuttle.jl | 2 +- ext/OptimalControlModels/steering.jl | 2 +- ext/OptimalControlModels/vanderpol.jl | 2 +- ext/OptimalControlModels_s/beam_s.jl | 2 +- ext/OptimalControlModels_s/chain_s.jl | 2 +- .../dielectrophoretic_particle_s.jl | 12 +- .../double_oscillator_s.jl | 2 +- .../electric_vehicle_s.jl | 2 +- ext/OptimalControlModels_s/glider_s.jl | 2 +- ext/OptimalControlModels_s/insurance_s.jl | 2 +- ext/OptimalControlModels_s/jackson_s.jl | 2 +- ext/OptimalControlModels_s/robbins_s.jl | 2 +- ext/OptimalControlModels_s/robot_s.jl | 2 +- ext/OptimalControlModels_s/rocket_s.jl | 2 +- ext/OptimalControlModels_s/space_shuttle_s.jl | 2 +- ext/OptimalControlModels_s/steering_s.jl | 2 +- ext/OptimalControlModels_s/vanderpol_s.jl | 2 +- src/OptimalControlProblems.jl | 306 ++++++++++-------- test/figures/init/beam.pdf | Bin 278752 -> 278752 bytes test/figures/init/chain.pdf | Bin 365199 -> 365199 bytes test/figures/init/double_oscillator.pdf | Bin 427645 -> 427645 bytes test/figures/init/ducted_fan.pdf | Bin 472008 -> 472008 bytes test/figures/init/electric_vehicle.pdf | Bin 272779 -> 272779 bytes test/figures/init/glider.pdf | Bin 469209 -> 469209 bytes test/figures/init/insurance.pdf | Bin 887315 -> 887315 bytes test/figures/init/jackson.pdf | Bin 320878 -> 320878 bytes test/figures/init/robbins.pdf | Bin 339147 -> 339147 bytes test/figures/init/robot.pdf | Bin 575413 -> 575413 bytes test/figures/init/rocket.pdf | Bin 361374 -> 361374 bytes test/figures/init/space_shuttle.pdf | Bin 724362 -> 724362 bytes test/figures/init/steering.pdf | Bin 465332 -> 465332 bytes test/figures/init/vanderpol.pdf | Bin 250429 -> 250429 bytes test/figures/solution/beam.pdf | Bin 273215 -> 273215 bytes test/figures/solution/chain.pdf | Bin 385371 -> 385371 bytes test/figures/solution/double_oscillator.pdf | Bin 452932 -> 452928 bytes test/figures/solution/ducted_fan.pdf | Bin 494296 -> 472054 bytes test/figures/solution/electric_vehicle.pdf | Bin 260790 -> 260790 bytes test/figures/solution/glider.pdf | Bin 476032 -> 477322 bytes test/figures/solution/insurance.pdf | Bin 964151 -> 963699 bytes test/figures/solution/jackson.pdf | Bin 326888 -> 326905 bytes test/figures/solution/robbins.pdf | Bin 356020 -> 356018 bytes test/figures/solution/robot.pdf | Bin 597649 -> 508774 bytes test/figures/solution/rocket.pdf | Bin 364065 -> 364053 bytes test/figures/solution/space_shuttle.pdf | Bin 749202 -> 751088 bytes test/figures/solution/steering.pdf | Bin 588556 -> 577869 bytes test/figures/solution/vanderpol.pdf | Bin 250886 -> 250886 bytes 102 files changed, 419 insertions(+), 329 deletions(-) diff --git a/docs/make.jl b/docs/make.jl index e6e803be..3a03401d 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -91,7 +91,7 @@ repo_url = "github.com/control-toolbox/OptimalControlProblems.jl" # ============================== # --- Generate Problems Documentation --- # ============================== -draft = true # If true, code blocks in markdown are not executed +draft = false # If true, code blocks in markdown are not executed exclude_from_draft=Symbol[ # :beam # example: exclude beam from draft docs ] @@ -135,7 +135,10 @@ with_problems_browser() do browser_file # generates the problems browser and rem "Get a problem" => "tutorial-get.md", "Solve a problem" => "tutorial-solve.md", ], - "Developers" => ["Add a problem" => "dev-add.md", "API" => "dev-api.md"], + "Developers" => [ + "Add a problem" => "dev-add.md", + "API" => "dev-api.md", + ], ], plugins=[links], ) diff --git a/docs/problems.jl b/docs/problems.jl index 4d5d1204..00e089dd 100644 --- a/docs/problems.jl +++ b/docs/problems.jl @@ -5,9 +5,9 @@ function draft_meta(draft::Union{Bool,Nothing}) if isnothing(draft) return "" elseif draft - return """```@meta\nDraft = true\n```""" + return """```@meta\nDraft = true\n```\n""" else - return """```@meta\nDraft = false\n```""" + return """```@meta\nDraft = false\n```\n""" end end @@ -24,7 +24,7 @@ end # ----------------------------------- function generate_documentation(PROBLEM::String, DESCRIPTION::String; draft::Union{Bool,Nothing}) - TITLE = uppercasefirst(replace(PROBLEM, "_" => " ")) + TITLE = "[" * uppercasefirst(replace(PROBLEM, "_" => " ")) * "](@id description-$PROBLEM)" DRAFT = draft_meta(draft) LEFT_MARGIN = get_left_margin(Symbol(PROBLEM)) @@ -90,6 +90,8 @@ function generate_documentation(PROBLEM::String, DESCRIPTION::String; draft::Uni metadata(:$PROBLEM)[:control_name] ``` + $VARIABLE_COMPONENTS + The default values of the parameters are: ```@example main @@ -103,8 +105,6 @@ function generate_documentation(PROBLEM::String, DESCRIPTION::String; draft::Uni end # hide ``` - $VARIABLE_COMPONENTS - ## Initial guess Before solving the problem, it is often useful to inspect the initial guess (sometimes called the first iterate). This guess is obtained by running the NLP solver with `max_iter = 0`, which evaluates the problem formulation without performing any optimisation steps. @@ -217,14 +217,12 @@ function generate_documentation(PROBLEM::String, DESCRIPTION::String; draft::Uni Before solving, we can inspect the discretisation details of the problem. The table below reports the number of grid points, decision variables, and constraints associated with the chosen formulation. ```@example main - push!(data_pb, - ( - Problem=:$PROBLEM, - Grid_Size=metadata(:$PROBLEM)[:grid_size], - Variables=get_nvar(nlp_model($PROBLEM(OptimalControlBackend()))), - Constraints=get_ncon(nlp_model($PROBLEM(OptimalControlBackend()))), - ) - ) + push!(data_pb,( + Problem=:$PROBLEM, + Grid_Size=metadata(:$PROBLEM)[:grid_size], + Variables=get_nvar(nlp_model($PROBLEM(OptimalControlBackend()))), + Constraints=get_ncon(nlp_model($PROBLEM(OptimalControlBackend()))), + )) data_pb # hide ``` @@ -274,24 +272,20 @@ function generate_documentation(PROBLEM::String, DESCRIPTION::String; draft::Uni ```@example main # from OptimalControl model - push!(data_re, - ( - Model=:OptimalControl, - Flag=nlp_oc_sol.status, - Iterations=nlp_oc_sol.iter, - Objective=nlp_oc_sol.objective, - ) - ) + push!(data_re,( + Model=:OptimalControl, + Flag=nlp_oc_sol.status, + Iterations=nlp_oc_sol.iter, + Objective=nlp_oc_sol.objective, + )) # from JuMP model - push!(data_re, - ( - Model=:JuMP, - Flag=termination_status(nlp_jp), - Iterations=barrier_iterations(nlp_jp), - Objective=objective_value(nlp_jp), - ) - ) + push!(data_re,( + Model=:JuMP, + Flag=termination_status(nlp_jp), + Iterations=barrier_iterations(nlp_jp), + Objective=objective_value(nlp_jp), + )) data_re # hide ``` diff --git a/docs/src/dev-add.md b/docs/src/dev-add.md index cf0bbf53..22603760 100644 --- a/docs/src/dev-add.md +++ b/docs/src/dev-add.md @@ -6,12 +6,20 @@ To add a new problem to **OptimalControlProblems**, you must follow these steps: ```julia new_problem_meta = OrderedDict( - :grid_size => 100, # Number of steps # Whether we minimise (true) or maximise (false) + :grid_size => 100, # Number of steps :state_name => ["x₁", "x₂"], # Names of the state components :costate_name => ["∂x₁", "∂x₂"], # Names of the dynamics constraints (for the costate) :control_name => ["u"], # Names of the control components :variable_name => ["v"], # Names of the optimisation variables - :parameters => (tf = 1, ), # Final time information + :time_grid_name => Dict( + :initial_time => "t0", # Name of the initial time + :final_time => "tf", # Name of the final time + :grid_size => "N", # Name of the grid size + ), + :parameters => ( + t0 = 0, # Value of the initial time + tf = 1, # Value of the final time + ), ) ``` @@ -21,6 +29,10 @@ new_problem_meta = OrderedDict( **2.** Define the **OptimalControl** model of the problem in a file named `new_problem.jl` in the `ext/OptimalControlModels` directory, following the template: +!!! tip + + Get inspiration from the already existing problems in [OptimalControlProblems.jl/ext/OptimalControlModels](https://github.com/control-toolbox/OptimalControlProblems.jl/tree/main/ext/OptimalControlModels). Especially if the final time is free. + ```julia """ Documentation of the method @@ -32,27 +44,29 @@ function OptimalControlProblems.new_problem( kwargs..., ) - # if tf is fixed - tf = final_time_data(:new_problem) + # parameters + params = parameters_data(:beam, parameters) + t0 = params[:t0] + tf = params[:tf] # model @def ocp begin - # Define the problem here - # ... + t ∈ [t0, tf], time + ... end # initial guess for the problem init = () # discretise the optimal control problem - docp = direct_transcription( - ocp, - description...; + docp = direct_transcription( + ocp, + description...; lagrange_to_mayer=false, - init=init, - grid_size=grid_size, - disc_method=:trapeze, - kwargs... + init=init, + grid_size=grid_size, + disc_method=:trapeze, + kwargs..., ) return docp @@ -60,7 +74,24 @@ function OptimalControlProblems.new_problem( end ``` -**3.** Define the **JuMP** model of the problem in a file named `new_problem.jl` in the `ext/JuMPModels` directory, following the template: +**3.** Define the scalarised **OptimalControl** model of the problem in a file named `new_problem_s.jl` in the `ext/OptimalControlModels_s` directory. This version is similar to the previous case but, as an example, replace the dynamics: + +```julia +ẋ(t) == [x₂(t), u(t)] +``` + +by + +```julia +∂(x₁)(t) == x₂(t) +∂(x₂)(t) == u(t) +``` + +!!! warning + + The dynamics and the nonlinear constraints must be in scalar form. See the section [Dynamics (coordinatewise)](@ref OptimalControl manual-abstract-dynamics-coord) and the following section for more details. + +**4.** Define the **JuMP** model of the problem in a file named `new_problem.jl` in the `ext/JuMPModels` directory, following the template: ```julia """ @@ -70,12 +101,26 @@ function OptimalControlProblems.new_problem( ::JuMPBackend, args...; grid_size::Int=grid_size_data(:new_problem), kwargs... ) - # if tf is fixed - tf = final_time_data(:new_problem) + # parameters + params = parameters_data(:beam, parameters) + t0 = params[:t0] + tf = params[:tf] # model model = JuMP.Model(args...; kwargs...) + # ------------------------------------------------ + # expressions to get grid time infos + @expressions( + model, + begin + t0, t0 # (required if the initial time is fixed) + tf, tf # (required if the final time is fixed) + N, grid_size # (required) + end + ) + # ------------------------------------------------ + # define the problem # @variables, @constraints, @objective... @@ -84,4 +129,20 @@ function OptimalControlProblems.new_problem( end ``` -**4.** Describe the problem in a file named `new_problem.jl` in the `ext/Descriptions` directory. Please get inspiration from the already existing descriptions in [OptimalControlProblems.jl/ext/Descriptions](https://github.com/control-toolbox/OptimalControlProblems.jl/tree/main/ext/Descriptions). +!!! warning + + The names `t0`, `tf` and `N` in `@expressions` command are the same as in the metadata: + + ```julia + :time_grid_name => Dict( + :initial_time => "t0", + :final_time => "tf", + :grid_size => "N", + ), + ``` + +!!! tip + + Get inspiration from the already existing problems in [OptimalControlProblems.jl/ext/JuMPModels](https://github.com/control-toolbox/OptimalControlProblems.jl/tree/main/ext/JuMPModels). Especially if the final time is free. + +**5.** Describe the problem in a file named `new_problem.jl` in the `ext/Descriptions` directory. Get inspiration from the already existing descriptions in [OptimalControlProblems.jl/ext/Descriptions](https://github.com/control-toolbox/OptimalControlProblems.jl/tree/main/ext/Descriptions). diff --git a/docs/src/dev-api.md b/docs/src/dev-api.md index 40c387c4..78fcc095 100644 --- a/docs/src/dev-api.md +++ b/docs/src/dev-api.md @@ -1,41 +1,12 @@ # API -## OptimalControlProblems - -```@index -Pages = ["dev-api.md"] -Modules = [OptimalControlProblems, CTModels, ExaModels] -Order = [:module, :constant, :type, :function, :macro] -``` - -```@autodocs -Modules = [OptimalControlProblems] -Order = [:module, :constant, :type, :function, :macro] -Pages = ["OptimalControlProblems.jl"] -``` - -## OptimalControlModels - -```@index -Pages = ["dev-api.md"] -Modules = [OptimalControlModels] -Order = [:module, :constant, :type, :function, :macro] -``` - -```@autodocs -Modules = [OptimalControlModels] -Order = [:module, :constant, :type, :function, :macro] -``` - -## JuMPModels - ```@index Pages = ["dev-api.md"] -Modules = [JuMPModels, CTModels, ExaModels] +Modules = [OptimalControlProblems, CTModels, ExaModels, OptimalControlModels, JuMPModels] Order = [:module, :constant, :type, :function, :macro] ``` ```@autodocs -Modules = [JuMPModels] +Modules = [OptimalControlProblems, OptimalControlModels, JuMPModels] Order = [:module, :constant, :type, :function, :macro] ``` \ No newline at end of file diff --git a/docs/src/problems-introduction.md b/docs/src/problems-introduction.md index 4964af93..36efbf86 100644 --- a/docs/src/problems-introduction.md +++ b/docs/src/problems-introduction.md @@ -179,29 +179,25 @@ We detail below the characteristics of the optimal control problems and their as end # - push!(data_ocp, - ( - Problem=problem, - State=state_dimension(ocp), - Control=control_dimension(ocp), - Variable=variable_dimension(ocp), - Cost=cost, - FinalTime=final_time, - Constraints=constraints, - ) - ) + push!(data_ocp,( + Problem=problem, + State=state_dimension(ocp), + Control=control_dimension(ocp), + Variable=variable_dimension(ocp), + Cost=cost, + FinalTime=final_time, + Constraints=constraints, + )) # N = metadata(problem)[:grid_size] # get default number of steps - push!(data_nlp, - ( - Problem=problem, - Steps=N, - Variables=get_nvar(nlp), - Constraints=get_ncon(nlp), - ) - ) + push!(data_nlp,( + Problem=problem, + Steps=N, + Variables=get_nvar(nlp), + Constraints=get_ncon(nlp), + )) end ``` diff --git a/docs/src/tutorial-get.md b/docs/src/tutorial-get.md index 0ab06ea6..6a2d57a9 100644 --- a/docs/src/tutorial-get.md +++ b/docs/src/tutorial-get.md @@ -31,17 +31,33 @@ The `nlp` model represents the nonlinear programming problem (NLP) obtained afte You also have access to the DOCP model, which corresponds to the discretised optimal control problem. Roughly speaking, the DOCP model is the union of the NLP and OCP models. For more details, see this [tutorial](@extref Tutorials Discretization-and-NLP-problem) or the documentation of [`CTDirect.DOCP`](@extref). To get the OCP model: - ```julia + ```@example main_oc ocp = ocp_model(docp) + nothing # hide ``` -!!! note +You can pass any `description` and `kwargs` of [`CTDirect.direct_transcription`](@extref) to the `beam` problem or any other. - You can pass any `description` and `kwargs` of [`CTDirect.direct_transcription`](@extref) to the `beam` problem or any other. +```@example main_oc +docp = beam(OptimalControlBackend(), :madnlp; grid_size=100, disc_method=:euler) +nothing # hide +``` - ```julia - docp = beam(OptimalControlBackend(), :madnlp; grid_size=100, disc_method=:euler) - ``` +You can also replace any default parameter value: + +```@example main_oc +docp = beam(OptimalControlBackend(); parameters=(tf=2, )) +nothing # hide +``` + +To get the list of `:beam` parameters and the default values, make: + +```@example main_oc +metadata(:beam)[:parameters] +nothing # hide +``` + +To have a description of the parameters, either check the Beam [page](@ref description-beam) or the [code](https://github.com/control-toolbox/OptimalControlProblems.jl/blob/main/ext/OptimalControlModels/beam.jl). ### Number of variables, constraints, and nonzeros @@ -117,13 +133,14 @@ Then, to obtain the JuMP model of the beam problem, run: nlp = beam(JuMPBackend()) ``` -!!! note - For details on how to interact with the JuMP model, see the [JuMP documentation](https://jump.dev/JuMP.jl). In particular, you can pass any arguments and keyword arguments of [`JuMP.Model`](@extref) to the `beam` problem or any other. +For details on how to interact with the JuMP model, see the [JuMP documentation](https://jump.dev/JuMP.jl). In particular, you can pass any arguments and keyword arguments of [`JuMP.Model`](@extref) to the `beam` problem or any other. - ```julia - using Ipopt - nlp = beam(JuMPBackend(), Ipopt.Optimizer; add_bridges=true) - ``` +```julia +using Ipopt +nlp = beam(JuMPBackend(), Ipopt.Optimizer; add_bridges=true) +``` !!! note - You can also transform the JuMP model into a [`NLPModelsJuMP.MathOptNLPModel`](@extref) and then use all the API of [NLPModels.jl](https://github.com/JuliaSmoothOptimizers/NLPModels.jl). See this [tutorial](https://jso.dev/NLPModelsJuMP.jl/dev/tutorial) for more details. + + - As with `OptimalControlBackend`, you can replace any default parameter value. + - You can transform the JuMP model into a [`NLPModelsJuMP.MathOptNLPModel`](@extref) and then use all the API of [NLPModels.jl](https://github.com/JuliaSmoothOptimizers/NLPModels.jl). See this [tutorial](https://jso.dev/NLPModelsJuMP.jl/dev/tutorial) for more details. \ No newline at end of file diff --git a/ext/JuMPModels/beam.jl b/ext/JuMPModels/beam.jl index 8e710d34..657744a2 100644 --- a/ext/JuMPModels/beam.jl +++ b/ext/JuMPModels/beam.jl @@ -8,7 +8,7 @@ The problem is formulated as in the BOCOP repository. # Arguments - `::JuMPBackend`: Placeholder type to specify the JuMP backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation steps for the time grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation steps for the time grid. # Returns @@ -53,8 +53,8 @@ function OptimalControlProblems.beam( @expressions( model, begin - t0, t0 # (required if the initial time is fixed) - tf, tf # (required if the final time is fixed) + t0, t0 # (required if the initial time is fixed) + tf, tf # (required if the final time is fixed) N, grid_size # (required) end ) diff --git a/ext/JuMPModels/bioreactor.jl b/ext/JuMPModels/bioreactor.jl index c01060f4..0254f094 100644 --- a/ext/JuMPModels/bioreactor.jl +++ b/ext/JuMPModels/bioreactor.jl @@ -11,7 +11,7 @@ The objective is to minimise a cost function derived from the system dynamics. # Arguments - `::JuMPBackend`: Specifies the backend for building the JuMP model. -- `N::Int=500`: (Keyword) Number of discretisation steps in the time grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation steps in the time grid. # Returns diff --git a/ext/JuMPModels/cart_pendulum.jl b/ext/JuMPModels/cart_pendulum.jl index 5e6e8b3c..8cdadd57 100644 --- a/ext/JuMPModels/cart_pendulum.jl +++ b/ext/JuMPModels/cart_pendulum.jl @@ -8,7 +8,7 @@ The system dynamics, constraints, and objective are discretised over `N` steps. # Arguments - `::JuMPBackend`: Specifies the backend for building the JuMP model. -- `N::Int=500`: (Keyword) Number of discretisation steps in the time grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation steps in the time grid. # Returns diff --git a/ext/JuMPModels/chain.jl b/ext/JuMPModels/chain.jl index cfae83c3..afc41031 100644 --- a/ext/JuMPModels/chain.jl +++ b/ext/JuMPModels/chain.jl @@ -8,7 +8,7 @@ The formulation follows a standard optimal control approach with discretised dyn # Arguments - `::JuMPBackend`: Specifies the backend for building the JuMP model. -- `N::Int=500`: (Keyword) Number of discretisation steps in the time grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation steps in the time grid. # Returns diff --git a/ext/JuMPModels/dielectrophoretic_particle.jl b/ext/JuMPModels/dielectrophoretic_particle.jl index 1ffc82fe..20facc2d 100644 --- a/ext/JuMPModels/dielectrophoretic_particle.jl +++ b/ext/JuMPModels/dielectrophoretic_particle.jl @@ -8,7 +8,7 @@ The system dynamics are discretised over `N` steps, with the final time optimise # Arguments - `::JuMPBackend`: Specifies the backend for building the JuMP model. -- `N::Int=500`: (Keyword) Number of discretisation steps in the time grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation steps in the time grid. # Returns @@ -37,14 +37,14 @@ function OptimalControlProblems.dielectrophoretic_particle( # parameters params = parameters_data(:dielectrophoretic_particle, parameters) t0 = params[:t0] - x0 = params[:x0] - xf = params[:xf] + x_t0 = params[:x_t0] + y_t0 = params[:y_t0] + x_tf = params[:x_tf] α = params[:α] c = params[:c] u_l = params[:u_l] u_u = params[:u_u] tf_l = params[:tf_l] - y_t0 = params[:y_t0] # model model = JuMP.Model(args...; kwargs...) @@ -66,8 +66,8 @@ function OptimalControlProblems.dielectrophoretic_particle( begin x[0:N], (start = 1) y[0:N], (start = 1) - u_l ≤ u[0:N] ≤ u_u, (start = 0.1) - tf_l ≤ tf, (start = 5) + u_l ≤ u[0:N] ≤ u_u, (start = 0.1) + tf_l ≤ tf, (start = 5) end ) @@ -75,9 +75,9 @@ function OptimalControlProblems.dielectrophoretic_particle( @constraints( model, begin - x[0] == x0 - x[N] == xf + x[0] == x_t0 y[0] == y_t0 + x[N] == x_tf end ) diff --git a/ext/JuMPModels/double_oscillator.jl b/ext/JuMPModels/double_oscillator.jl index d0810408..f4941463 100644 --- a/ext/JuMPModels/double_oscillator.jl +++ b/ext/JuMPModels/double_oscillator.jl @@ -8,7 +8,7 @@ The system dynamics are discretised over `N` steps, with collocation constraints # Arguments - `::JuMPBackend`: Specifies the backend for building the JuMP model. -- `N::Int=500`: (Keyword) Number of discretisation steps in the time grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation steps in the time grid. # Returns diff --git a/ext/JuMPModels/ducted_fan.jl b/ext/JuMPModels/ducted_fan.jl index f5933b4c..514cc980 100644 --- a/ext/JuMPModels/ducted_fan.jl +++ b/ext/JuMPModels/ducted_fan.jl @@ -8,7 +8,7 @@ The system is discretised over `N` steps, with collocation constraints enforcing # Arguments - `::JuMPBackend`: Specifies the backend for building the JuMP model. -- `N::Int=250`: (Keyword) Number of discretisation steps in the time grid. +- `grid_size::Int=250`: (Keyword) Number of discretisation steps in the time grid. # Returns diff --git a/ext/JuMPModels/electric_vehicle.jl b/ext/JuMPModels/electric_vehicle.jl index 583be176..660c9028 100644 --- a/ext/JuMPModels/electric_vehicle.jl +++ b/ext/JuMPModels/electric_vehicle.jl @@ -8,7 +8,7 @@ The system dynamics are discretised over `N` steps, and collocation constraints # Arguments - `::JuMPBackend`: Specifies the backend for building the JuMP model. -- `N::Int=500`: (Keyword) Number of discretisation steps in the time grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation steps in the time grid. # Returns diff --git a/ext/JuMPModels/glider.jl b/ext/JuMPModels/glider.jl index c4089bc5..0864a5b4 100644 --- a/ext/JuMPModels/glider.jl +++ b/ext/JuMPModels/glider.jl @@ -8,7 +8,7 @@ The system dynamics are discretised over `N` steps, and collocation constraints # Arguments - `::JuMPBackend`: Specifies the backend for building the JuMP model. -- `N::Int=500`: (Keyword) Number of discretisation steps in the time grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation steps in the time grid. # Returns diff --git a/ext/JuMPModels/insurance.jl b/ext/JuMPModels/insurance.jl index a21f5b26..1c75cf11 100644 --- a/ext/JuMPModels/insurance.jl +++ b/ext/JuMPModels/insurance.jl @@ -8,7 +8,7 @@ The system is discretised using `N` steps, and collocation constraints enforce t # Arguments - `::JuMPBackend`: Specifies the backend for building the JuMP model. -- `N::Int=500`: (Keyword) Number of discretisation steps in the time grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation steps in the time grid. # Returns diff --git a/ext/JuMPModels/jackson.jl b/ext/JuMPModels/jackson.jl index f839f7bd..e6e3b1d0 100644 --- a/ext/JuMPModels/jackson.jl +++ b/ext/JuMPModels/jackson.jl @@ -9,7 +9,7 @@ The dynamics are discretised using `N` steps with trapezoidal collocation. # Arguments - `::JuMPBackend`: Specifies the backend for building the JuMP model. -- `N::Int=500`: (Keyword) Number of discretisation steps in the time grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation steps in the time grid. # Returns diff --git a/ext/JuMPModels/moonlander.jl b/ext/JuMPModels/moonlander.jl index b7106c80..5e0e3bf9 100644 --- a/ext/JuMPModels/moonlander.jl +++ b/ext/JuMPModels/moonlander.jl @@ -9,7 +9,7 @@ The dynamics include translational acceleration, rotation, and thrust allocation # Arguments - `::JuMPBackend`: Specifies the backend for building the JuMP model. -- `N::Int=500`: (Keyword) Number of discretisation steps in the time grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation steps in the time grid. # Returns diff --git a/ext/JuMPModels/robbins.jl b/ext/JuMPModels/robbins.jl index fc4aa2fc..ef78ad6f 100644 --- a/ext/JuMPModels/robbins.jl +++ b/ext/JuMPModels/robbins.jl @@ -8,7 +8,7 @@ The objective is to minimise a cost functional that combines linear and quadrati # Arguments - `::JuMPBackend`: Specifies the backend for building the JuMP model. -- `N::Int=500`: (Keyword) Number of discretisation steps for the time grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation steps for the time grid. # Returns diff --git a/ext/JuMPModels/robot.jl b/ext/JuMPModels/robot.jl index 56424688..3491b46f 100644 --- a/ext/JuMPModels/robot.jl +++ b/ext/JuMPModels/robot.jl @@ -8,7 +8,7 @@ The objective is to minimise the final time required for the robot arm to move b # Arguments - `::JuMPBackend`: Specifies the backend for building the JuMP model. -- `N::Int=250`: (Keyword) Number of discretisation steps for the time horizon. +- `grid_size::Int=250`: (Keyword) Number of discretisation steps for the time horizon. # Returns diff --git a/ext/JuMPModels/rocket.jl b/ext/JuMPModels/rocket.jl index a1d6ad8d..90df85c7 100644 --- a/ext/JuMPModels/rocket.jl +++ b/ext/JuMPModels/rocket.jl @@ -8,7 +8,7 @@ The objective is to maximise the final altitude of the rocket while satisfying b # Arguments - `::JuMPBackend`: Specifies the backend for building the JuMP model. -- `N::Int=500`: (Keyword) Number of discretisation steps for the time horizon. +- `grid_size::Int=500`: (Keyword) Number of discretisation steps for the time horizon. # Returns diff --git a/ext/JuMPModels/space_shuttle.jl b/ext/JuMPModels/space_shuttle.jl index 40915f46..6cbb79ab 100644 --- a/ext/JuMPModels/space_shuttle.jl +++ b/ext/JuMPModels/space_shuttle.jl @@ -9,7 +9,7 @@ Note: no heating limit path constraint is included in this formulation. # Arguments - `::JuMPBackend`: Specifies the backend for building the JuMP model. -- `N::Int=500`: (Keyword) Number of discretisation steps for the time horizon. +- `grid_size::Int=500`: (Keyword) Number of discretisation steps for the time horizon. # Returns diff --git a/ext/JuMPModels/steering.jl b/ext/JuMPModels/steering.jl index ba3612e3..9edd8cfd 100644 --- a/ext/JuMPModels/steering.jl +++ b/ext/JuMPModels/steering.jl @@ -8,7 +8,7 @@ The objective is to minimise the final time required for the particle to reach a # Arguments - `::JuMPBackend`: Specifies the backend for building the JuMP model. -- `N::Int=500`: (Keyword) Number of discretisation steps for the time horizon. +- `grid_size::Int=500`: (Keyword) Number of discretisation steps for the time horizon. # Returns diff --git a/ext/JuMPModels/vanderpol.jl b/ext/JuMPModels/vanderpol.jl index aef5cef8..cbb1dc22 100644 --- a/ext/JuMPModels/vanderpol.jl +++ b/ext/JuMPModels/vanderpol.jl @@ -7,7 +7,7 @@ The model represents the dynamics of the Van der Pol oscillator with control inp # Arguments - `::JuMPBackend`: Specifies the backend for building the JuMP model. -- `N::Int=500`: (Keyword) Number of discretisation steps for the time horizon. +- `grid_size::Int=500`: (Keyword) Number of discretisation steps for the time horizon. # Returns diff --git a/ext/MetaData/beam.jl b/ext/MetaData/beam.jl index 6d1b897e..4e4f5124 100644 --- a/ext/MetaData/beam.jl +++ b/ext/MetaData/beam.jl @@ -7,7 +7,7 @@ beam_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :grid_size => "N" + :grid_size => "N", ), :parameters => ( t0 = 0, diff --git a/ext/MetaData/bioreactor.jl b/ext/MetaData/bioreactor.jl index 22779317..5ae34d83 100644 --- a/ext/MetaData/bioreactor.jl +++ b/ext/MetaData/bioreactor.jl @@ -7,7 +7,7 @@ bioreactor_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :grid_size => "N" + :grid_size => "N", ), :parameters => ( t0 = 0, diff --git a/ext/MetaData/chain.jl b/ext/MetaData/chain.jl index fd4499e6..d0cb0494 100644 --- a/ext/MetaData/chain.jl +++ b/ext/MetaData/chain.jl @@ -7,7 +7,7 @@ chain_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :grid_size => "N" + :grid_size => "N", ), :parameters => ( t0 = 0, diff --git a/ext/MetaData/dielectrophoretic_particle.jl b/ext/MetaData/dielectrophoretic_particle.jl index 99221339..569da5e4 100644 --- a/ext/MetaData/dielectrophoretic_particle.jl +++ b/ext/MetaData/dielectrophoretic_particle.jl @@ -7,17 +7,17 @@ dielectrophoretic_particle_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :grid_size => "N" + :grid_size => "N", ), :parameters => ( t0 = 0, - x0 = 1, - xf = 2, + x_t0 = 1, + y_t0 = 0, + x_tf = 2, α = -0.75, c = 1, u_l = -1, u_u = 1, tf_l = 0, - y_t0 = 0, ), ) diff --git a/ext/MetaData/double_oscillator.jl b/ext/MetaData/double_oscillator.jl index 69d15c1e..09ce2e35 100644 --- a/ext/MetaData/double_oscillator.jl +++ b/ext/MetaData/double_oscillator.jl @@ -7,7 +7,7 @@ double_oscillator_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :grid_size => "N" + :grid_size => "N", ), :parameters => ( t0 = 0, diff --git a/ext/MetaData/ducted_fan.jl b/ext/MetaData/ducted_fan.jl index 0aa58793..e862df11 100644 --- a/ext/MetaData/ducted_fan.jl +++ b/ext/MetaData/ducted_fan.jl @@ -7,7 +7,7 @@ ducted_fan_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :grid_size => "N" + :grid_size => "N", ), :parameters => ( t0 = 0, diff --git a/ext/MetaData/electric_vehicle.jl b/ext/MetaData/electric_vehicle.jl index 17a43b26..db884ade 100644 --- a/ext/MetaData/electric_vehicle.jl +++ b/ext/MetaData/electric_vehicle.jl @@ -7,7 +7,7 @@ electric_vehicle_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :grid_size => "N" + :grid_size => "N", ), :parameters => ( t0 = 0, diff --git a/ext/MetaData/glider.jl b/ext/MetaData/glider.jl index 88fff2ec..9e09d1a6 100644 --- a/ext/MetaData/glider.jl +++ b/ext/MetaData/glider.jl @@ -7,7 +7,7 @@ glider_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :grid_size => "N" + :grid_size => "N", ), :parameters => ( t0 = 0, diff --git a/ext/MetaData/insurance.jl b/ext/MetaData/insurance.jl index dfe2c913..80bc29df 100644 --- a/ext/MetaData/insurance.jl +++ b/ext/MetaData/insurance.jl @@ -7,7 +7,7 @@ insurance_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :grid_size => "N" + :grid_size => "N", ), :parameters => ( t0 = 0, diff --git a/ext/MetaData/jackson.jl b/ext/MetaData/jackson.jl index ff17d666..7c2d4a46 100644 --- a/ext/MetaData/jackson.jl +++ b/ext/MetaData/jackson.jl @@ -7,7 +7,7 @@ jackson_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :grid_size => "N" + :grid_size => "N", ), :parameters => ( t0 = 0, diff --git a/ext/MetaData/moonlander.jl b/ext/MetaData/moonlander.jl index f1c6aa46..670012c0 100644 --- a/ext/MetaData/moonlander.jl +++ b/ext/MetaData/moonlander.jl @@ -7,7 +7,7 @@ moonlander_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :grid_size => "N" + :grid_size => "N", ), :parameters => ( t0 = 0, diff --git a/ext/MetaData/robbins.jl b/ext/MetaData/robbins.jl index a3880152..91bcfd41 100644 --- a/ext/MetaData/robbins.jl +++ b/ext/MetaData/robbins.jl @@ -7,7 +7,7 @@ robbins_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :grid_size => "N" + :grid_size => "N", ), :parameters => ( t0 = 0, diff --git a/ext/MetaData/robot.jl b/ext/MetaData/robot.jl index 35c79549..32cf2933 100644 --- a/ext/MetaData/robot.jl +++ b/ext/MetaData/robot.jl @@ -7,7 +7,7 @@ robot_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :grid_size => "N" + :grid_size => "N", ), :parameters => ( t0 = 0, diff --git a/ext/MetaData/rocket.jl b/ext/MetaData/rocket.jl index 487fb2a5..2884dcd6 100644 --- a/ext/MetaData/rocket.jl +++ b/ext/MetaData/rocket.jl @@ -7,7 +7,7 @@ rocket_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :grid_size => "N" + :grid_size => "N", ), :parameters => ( t0 = 0, diff --git a/ext/MetaData/space_shuttle.jl b/ext/MetaData/space_shuttle.jl index cf91fa2f..4d26ac68 100644 --- a/ext/MetaData/space_shuttle.jl +++ b/ext/MetaData/space_shuttle.jl @@ -7,7 +7,7 @@ space_shuttle_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :grid_size => "N" + :grid_size => "N", ), :parameters => ( t0 = 0, diff --git a/ext/MetaData/steering.jl b/ext/MetaData/steering.jl index dd472c30..2a09d42c 100644 --- a/ext/MetaData/steering.jl +++ b/ext/MetaData/steering.jl @@ -7,7 +7,7 @@ steering_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :grid_size => "N" + :grid_size => "N", ), :parameters => ( t0 = 0, diff --git a/ext/MetaData/vanderpol.jl b/ext/MetaData/vanderpol.jl index 34623fb9..96082090 100644 --- a/ext/MetaData/vanderpol.jl +++ b/ext/MetaData/vanderpol.jl @@ -7,7 +7,7 @@ vanderpol_meta = OrderedDict( :time_grid_name => Dict( :initial_time => "t0", :final_time => "tf", - :grid_size => "N" + :grid_size => "N", ), :parameters => ( t0 = 0, diff --git a/ext/OptimalControlModels/beam.jl b/ext/OptimalControlModels/beam.jl index 79863cbb..77f0d132 100644 --- a/ext/OptimalControlModels/beam.jl +++ b/ext/OptimalControlModels/beam.jl @@ -8,7 +8,7 @@ It then performs direct transcription to generate a discrete optimal control pro # Arguments - `::OptimalControlBackend`: Placeholder type to specify the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels/bioreactor.jl b/ext/OptimalControlModels/bioreactor.jl index 128b631c..3721228b 100644 --- a/ext/OptimalControlModels/bioreactor.jl +++ b/ext/OptimalControlModels/bioreactor.jl @@ -8,7 +8,7 @@ It performs direct transcription to create a discretised optimal control problem # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels/cart_pendulum.jl b/ext/OptimalControlModels/cart_pendulum.jl index 68bab9d1..3e018882 100644 --- a/ext/OptimalControlModels/cart_pendulum.jl +++ b/ext/OptimalControlModels/cart_pendulum.jl @@ -8,7 +8,7 @@ It performs direct transcription to produce a discretised optimal control proble # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels/chain.jl b/ext/OptimalControlModels/chain.jl index ee9e613d..cf19f21e 100644 --- a/ext/OptimalControlModels/chain.jl +++ b/ext/OptimalControlModels/chain.jl @@ -8,7 +8,7 @@ It performs direct transcription to produce a discretised optimal control proble # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels/dielectrophoretic_particle.jl b/ext/OptimalControlModels/dielectrophoretic_particle.jl index e152cb41..324b1092 100644 --- a/ext/OptimalControlModels/dielectrophoretic_particle.jl +++ b/ext/OptimalControlModels/dielectrophoretic_particle.jl @@ -8,7 +8,7 @@ It performs direct transcription to produce a discretised optimal control proble # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns @@ -39,14 +39,14 @@ function OptimalControlProblems.dielectrophoretic_particle( # parameters params = parameters_data(:dielectrophoretic_particle, parameters) t0 = params[:t0] - x0 = params[:x0] - xf = params[:xf] + x_t0 = params[:x_t0] + y_t0 = params[:y_t0] + x_tf = params[:x_tf] α = params[:α] c = params[:c] u_l = params[:u_l] u_u = params[:u_u] tf_l = params[:tf_l] - y_t0 = params[:y_t0] ocp = @def begin tf ∈ R, variable @@ -54,9 +54,9 @@ function OptimalControlProblems.dielectrophoretic_particle( q = (x, y) ∈ R², state u ∈ R, control - x(t0) == x0, (x_t0) + x(t0) == x_t0, (x_t0) y(t0) == y_t0, (y_t0) - x(tf) == xf, (x_tf) + x(tf) == x_tf, (x_tf) tf ≥ tf_l, (tf_c) u_l ≤ u(t) ≤ u_u, (u_c) diff --git a/ext/OptimalControlModels/double_oscillator.jl b/ext/OptimalControlModels/double_oscillator.jl index f76728af..82b87bb7 100644 --- a/ext/OptimalControlModels/double_oscillator.jl +++ b/ext/OptimalControlModels/double_oscillator.jl @@ -8,7 +8,7 @@ It uses direct transcription to produce a discretised optimal control problem (D # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels/ducted_fan.jl b/ext/OptimalControlModels/ducted_fan.jl index a2460044..f6101bd6 100644 --- a/ext/OptimalControlModels/ducted_fan.jl +++ b/ext/OptimalControlModels/ducted_fan.jl @@ -8,7 +8,7 @@ It returns both a discretised direct optimal control problem (DOCP) and the corr # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=250`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=250`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels/electric_vehicle.jl b/ext/OptimalControlModels/electric_vehicle.jl index b331cb13..e294293b 100644 --- a/ext/OptimalControlModels/electric_vehicle.jl +++ b/ext/OptimalControlModels/electric_vehicle.jl @@ -8,7 +8,7 @@ It returns both a discretised direct optimal control problem (DOCP) and the corr # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels/glider.jl b/ext/OptimalControlModels/glider.jl index dac8b797..5919573d 100644 --- a/ext/OptimalControlModels/glider.jl +++ b/ext/OptimalControlModels/glider.jl @@ -8,7 +8,7 @@ It returns both a discretised direct optimal control problem (DOCP) and the corr # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels/insurance.jl b/ext/OptimalControlModels/insurance.jl index e2ee4de0..36fcb604 100644 --- a/ext/OptimalControlModels/insurance.jl +++ b/ext/OptimalControlModels/insurance.jl @@ -8,7 +8,7 @@ It returns both a discretised direct optimal control problem (DOCP) and the corr # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels/jackson.jl b/ext/OptimalControlModels/jackson.jl index 6117f157..c1f72194 100644 --- a/ext/OptimalControlModels/jackson.jl +++ b/ext/OptimalControlModels/jackson.jl @@ -8,7 +8,7 @@ It returns both a discretised direct optimal control problem (DOCP) and the corr # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels/moonlander.jl b/ext/OptimalControlModels/moonlander.jl index 97ba43cf..44c5aecf 100644 --- a/ext/OptimalControlModels/moonlander.jl +++ b/ext/OptimalControlModels/moonlander.jl @@ -8,7 +8,7 @@ It returns both a discretised direct optimal control problem (DOCP) and the corr # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels/robbins.jl b/ext/OptimalControlModels/robbins.jl index 14a201a5..b80d93c0 100644 --- a/ext/OptimalControlModels/robbins.jl +++ b/ext/OptimalControlModels/robbins.jl @@ -9,7 +9,7 @@ Reference: [Robbins Problem on BOCOP](https://github.com/control-toolbox/bocop/t # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels/robot.jl b/ext/OptimalControlModels/robot.jl index ad5527f6..660457d0 100644 --- a/ext/OptimalControlModels/robot.jl +++ b/ext/OptimalControlModels/robot.jl @@ -8,7 +8,7 @@ Reference: Robot arm problem on BOCOP [here](https://github.com/control-toolbox/ # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=250`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=250`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels/rocket.jl b/ext/OptimalControlModels/rocket.jl index 7654b566..839b33d6 100644 --- a/ext/OptimalControlModels/rocket.jl +++ b/ext/OptimalControlModels/rocket.jl @@ -8,7 +8,7 @@ Reference: Goddard Rocket Problem [here](https://github.com/control-toolbox/boco # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels/space_shuttle.jl b/ext/OptimalControlModels/space_shuttle.jl index 79d39497..c18e66e0 100644 --- a/ext/OptimalControlModels/space_shuttle.jl +++ b/ext/OptimalControlModels/space_shuttle.jl @@ -9,7 +9,7 @@ Note: No heating limit path constraint is included. # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels/steering.jl b/ext/OptimalControlModels/steering.jl index 9cd31f4d..c7e51f1d 100644 --- a/ext/OptimalControlModels/steering.jl +++ b/ext/OptimalControlModels/steering.jl @@ -8,7 +8,7 @@ The state vector has four components, and the control is a single scalar input. # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels/vanderpol.jl b/ext/OptimalControlModels/vanderpol.jl index 2678d52d..36ff2156 100644 --- a/ext/OptimalControlModels/vanderpol.jl +++ b/ext/OptimalControlModels/vanderpol.jl @@ -8,7 +8,7 @@ The problem formulation can be found [here](https://github.com/control-toolbox/b # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels_s/beam_s.jl b/ext/OptimalControlModels_s/beam_s.jl index a8544781..167880b9 100644 --- a/ext/OptimalControlModels_s/beam_s.jl +++ b/ext/OptimalControlModels_s/beam_s.jl @@ -8,7 +8,7 @@ It then performs direct transcription to generate a discrete optimal control pro # Arguments - `::OptimalControlBackend`: Placeholder type to specify the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels_s/chain_s.jl b/ext/OptimalControlModels_s/chain_s.jl index f9f2c332..e450af2e 100644 --- a/ext/OptimalControlModels_s/chain_s.jl +++ b/ext/OptimalControlModels_s/chain_s.jl @@ -8,7 +8,7 @@ It performs direct transcription to produce a discretised optimal control proble # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels_s/dielectrophoretic_particle_s.jl b/ext/OptimalControlModels_s/dielectrophoretic_particle_s.jl index 80988bdd..b6a4bde0 100644 --- a/ext/OptimalControlModels_s/dielectrophoretic_particle_s.jl +++ b/ext/OptimalControlModels_s/dielectrophoretic_particle_s.jl @@ -8,7 +8,7 @@ It performs direct transcription to produce a discretised optimal control proble # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns @@ -39,14 +39,14 @@ function OptimalControlProblems.dielectrophoretic_particle_s( # parameters params = parameters_data(:dielectrophoretic_particle, parameters) t0 = params[:t0] - x0 = params[:x0] - xf = params[:xf] + x_t0 = params[:x_t0] + y_t0 = params[:y_t0] + x_tf = params[:x_tf] α = params[:α] c = params[:c] u_l = params[:u_l] u_u = params[:u_u] tf_l = params[:tf_l] - y_t0 = params[:y_t0] ocp = @def begin tf ∈ R, variable @@ -54,9 +54,9 @@ function OptimalControlProblems.dielectrophoretic_particle_s( q = (x, y) ∈ R², state u ∈ R, control - x(t0) == x0, (x_t0) + x(t0) == x_t0, (x_t0) y(t0) == y_t0, (y_t0) - x(tf) == xf, (x_tf) + x(tf) == x_tf, (x_tf) tf ≥ tf_l, (tf_c) u_l ≤ u(t) ≤ u_u, (u_c) diff --git a/ext/OptimalControlModels_s/double_oscillator_s.jl b/ext/OptimalControlModels_s/double_oscillator_s.jl index 0adbb3c3..0ab8631f 100644 --- a/ext/OptimalControlModels_s/double_oscillator_s.jl +++ b/ext/OptimalControlModels_s/double_oscillator_s.jl @@ -8,7 +8,7 @@ It uses direct transcription to produce a discretised optimal control problem (D # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels_s/electric_vehicle_s.jl b/ext/OptimalControlModels_s/electric_vehicle_s.jl index 385ed044..d1cf2c40 100644 --- a/ext/OptimalControlModels_s/electric_vehicle_s.jl +++ b/ext/OptimalControlModels_s/electric_vehicle_s.jl @@ -8,7 +8,7 @@ It returns both a discretised direct optimal control problem (DOCP) and the corr # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels_s/glider_s.jl b/ext/OptimalControlModels_s/glider_s.jl index 5e9d5227..f2f66249 100644 --- a/ext/OptimalControlModels_s/glider_s.jl +++ b/ext/OptimalControlModels_s/glider_s.jl @@ -8,7 +8,7 @@ It returns both a discretised direct optimal control problem (DOCP) and the corr # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels_s/insurance_s.jl b/ext/OptimalControlModels_s/insurance_s.jl index 63e5996f..5506fd62 100644 --- a/ext/OptimalControlModels_s/insurance_s.jl +++ b/ext/OptimalControlModels_s/insurance_s.jl @@ -8,7 +8,7 @@ It returns both a discretised direct optimal control problem (DOCP) and the corr # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels_s/jackson_s.jl b/ext/OptimalControlModels_s/jackson_s.jl index 5d0e37fa..bad8c194 100644 --- a/ext/OptimalControlModels_s/jackson_s.jl +++ b/ext/OptimalControlModels_s/jackson_s.jl @@ -8,7 +8,7 @@ It returns both a discretised direct optimal control problem (DOCP) and the corr # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels_s/robbins_s.jl b/ext/OptimalControlModels_s/robbins_s.jl index cce363d2..eb5da84f 100644 --- a/ext/OptimalControlModels_s/robbins_s.jl +++ b/ext/OptimalControlModels_s/robbins_s.jl @@ -9,7 +9,7 @@ Reference: [Robbins Problem on BOCOP](https://github.com/control-toolbox/bocop/t # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels_s/robot_s.jl b/ext/OptimalControlModels_s/robot_s.jl index f75af2b9..3c78c193 100644 --- a/ext/OptimalControlModels_s/robot_s.jl +++ b/ext/OptimalControlModels_s/robot_s.jl @@ -8,7 +8,7 @@ Reference: Robot arm problem on BOCOP [here](https://github.com/control-toolbox/ # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=250`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=250`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels_s/rocket_s.jl b/ext/OptimalControlModels_s/rocket_s.jl index 4e023a9d..7e51b271 100644 --- a/ext/OptimalControlModels_s/rocket_s.jl +++ b/ext/OptimalControlModels_s/rocket_s.jl @@ -8,7 +8,7 @@ Reference: Goddard Rocket Problem [here](https://github.com/control-toolbox/boco # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels_s/space_shuttle_s.jl b/ext/OptimalControlModels_s/space_shuttle_s.jl index 240eca6b..95a035ca 100644 --- a/ext/OptimalControlModels_s/space_shuttle_s.jl +++ b/ext/OptimalControlModels_s/space_shuttle_s.jl @@ -9,7 +9,7 @@ Note: No heating limit path constraint is included. # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels_s/steering_s.jl b/ext/OptimalControlModels_s/steering_s.jl index f987202f..c9578db4 100644 --- a/ext/OptimalControlModels_s/steering_s.jl +++ b/ext/OptimalControlModels_s/steering_s.jl @@ -8,7 +8,7 @@ The state vector has four components, and the control is a single scalar input. # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/ext/OptimalControlModels_s/vanderpol_s.jl b/ext/OptimalControlModels_s/vanderpol_s.jl index 7aead2cb..d27f0934 100644 --- a/ext/OptimalControlModels_s/vanderpol_s.jl +++ b/ext/OptimalControlModels_s/vanderpol_s.jl @@ -8,7 +8,7 @@ The problem formulation can be found [here](https://github.com/control-toolbox/b # Arguments - `::OptimalControlBackend`: Placeholder type specifying the OptimalControl backend or solver interface. -- `N::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. +- `grid_size::Int=500`: (Keyword) Number of discretisation points for the direct transcription grid. # Returns diff --git a/src/OptimalControlProblems.jl b/src/OptimalControlProblems.jl index 365e6c21..0fb4bbd8 100644 --- a/src/OptimalControlProblems.jl +++ b/src/OptimalControlProblems.jl @@ -32,21 +32,21 @@ export nlp_model, ocp_model, build_ocp_solution """ $(TYPEDEF) -Abstract type for all optimal control problem model back-ends. +Abstract type for all optimal control problem model backends. """ abstract type AbstractModelBackend end """ $(TYPEDEF) -Back-end for modelling optimal control problems using the JuMP optimisation framework. +Backend for modelling optimal control problems using the JuMP optimisation framework. """ struct JuMPBackend <: AbstractModelBackend end """ $(TYPEDEF) -Back-end for modelling optimal control problems using the OptimalControl.jl package. +Backend for modelling optimal control problems using the OptimalControl.jl package. """ struct OptimalControlBackend <: AbstractModelBackend end @@ -66,22 +66,7 @@ for file in files doc = """ $(TYPEDSIGNATURES) - Defines the optimal control problem `$(string(problem))` for a given back-end. - - # Arguments - - - `model_backend::T`: The modelling back-end, subtype of `AbstractModelBackend`. - - `N::Int=0`: Number of discretisation steps (optional). - - # Returns - - - Throws an `ExtensionError` if the required back-end is not available. - - # Example - - ```julia-repl - julia> $(string(problem))(JuMPBackend(); N=20) - ERROR: ExtensionError(:JuMP) + This method throws an `ExtensionError` and is called if the required backend is not available. ``` """ @@ -99,22 +84,7 @@ for file in files doc_s = """ $(TYPEDSIGNATURES) - Defines the optimal control problem `$(string(problem_s))` for a given back-end. - - # Arguments - - - `model_backend::T`: The modelling back-end, subtype of `AbstractModelBackend`. - - `N::Int=0`: Number of discretisation steps (optional). - - # Returns - - - Throws an `ExtensionError` if the required back-end is not available. - - # Example - - ```julia-repl - julia> $(string(problem_s))(JuMPBackend(); N=20) - ERROR: ExtensionError(:JuMP) + This method throws an `ExtensionError` and is called if the required backend is not available. ``` """ @@ -170,7 +140,6 @@ for i in 1:number_of_problems end end - """ $(TYPEDSIGNATURES) @@ -191,21 +160,53 @@ Return a dictionary containing the metadata of `problem`. To get specific data, the following keys are valid: -- `name::String`: the problem name. -- `N::Int`: the default number of steps. -- `minimise::Bool`: indicates whether the objective function is minimised (`true`) or maximised (`false`). -- `state_name::Vector{String}`: names of the state components. -- `costate_name::Vector{String}`: names of the differential constraints to obtain the costate (dual variables associated with the differential constraints). -- `control_name::Vector{String}`: names of the control components. -- `variable_name::Union{Vector{String},Nothing}`: names of the optimisation variables, or `nothing` if no such variable exists. -- `final_time::Tuple{Symbol, Union{Float64, Int}}`: of the form `(type, value_or_index)`, where: - - `type` is either `:fixed` or `:free`. - - `value_or_index` is the index in `variable` if the final time is free, or its value if it is fixed. +- `grid_size::Int`: the default number of steps. For example: +```julia +:grid_size => 500, +``` +- `state_name::Vector{String}`: names of the state components. For example: +```julia +:state_name => ["x₁", "x₂"], +``` +- `costate_name::Vector{String}`: names of the differential constraints to obtain the costate (dual variables associated with the differential constraints). For example: +```julia +:costate_name => ["∂x₁", "∂x₂"], +``` +- `control_name::Vector{String}`: names of the control components. For example: +```julia +:control_name => ["u"], +``` +- `variable_name::Union{Vector{String},Nothing}`: names of the optimisation variables, or `nothing` if no such variable exists. For example: +```julia +:variable_name => nothing, +:variable_name => ["tf"], +``` +- `time_grid_name::Dict`: names of the initial time, the final time and the grid size parameter. For example: +```julia +:time_grid_name => Dict( + :initial_time => "t0", + :final_time => "tf", + :grid_size => "N", +), +``` +- `parameters::Union{Nothing,NamedTuple}`: the list of parameters. For example: +```julia +:parameters => ( + t0 = 0, + tf = 1, + x₁_l = 0, + x₁_u = 0.1, + x₁_t0 = 0, + x₂_t0 = 1, + x₁_tf = 0, + x₂_tf = -1, +), +``` # Example ```julia-repl -julia> data = metadata(:my_problem) +julia> data = metadata(:beam) julia> data[:control_name] "u" ``` @@ -256,213 +257,260 @@ end """ $(TYPEDSIGNATURES) -Retrieve the discretised time grid from a JuMP model. +This method throws an `ExtensionError` and is called if the JuMP backend is not available. To get the JuMP backend, make: -# Arguments +```julia +using JuMP +``` +""" +function time_grid(::Symbol, model) + throw(CTBase.ExtensionError(:JuMP)) +end -- `::Symbol`: Problem name. -- `model`: JuMP model object. +""" +$(TYPEDSIGNATURES) -# Returns +This method throws an `ExtensionError` and is called if the JuMP backend is not available. To get the JuMP backend, make: -- Throws `ExtensionError(:JuMP)` since JuMP support must be extended. +```julia +using JuMP +``` +""" +function state(::Symbol, model) + throw(CTBase.ExtensionError(:JuMP)) +end -# Example +""" +$(TYPEDSIGNATURES) -```julia-repl -julia> time_grid(:problem1, model) -ERROR: ExtensionError(:JuMP) +This method throws an `ExtensionError` and is called if the JuMP backend is not available. To get the JuMP backend, make: + +```julia +using JuMP ``` """ -function time_grid(::Symbol, model) +function costate(::Symbol, model) throw(CTBase.ExtensionError(:JuMP)) end """ $(TYPEDSIGNATURES) -Retrieve the state trajectory from a JuMP model. +This method throws an `ExtensionError` and is called if the JuMP backend is not available. To get the JuMP backend, make: -# Arguments +```julia +using JuMP +``` +""" +function control(::Symbol, model) + throw(CTBase.ExtensionError(:JuMP)) +end + +""" +$(TYPEDSIGNATURES) -- `::Symbol`: Problem name. -- `model`: JuMP model object. +This method throws an `ExtensionError` and is called if the JuMP backend is not available. To get the JuMP backend, make: -# Returns +```julia +using JuMP +``` +""" +function variable(::Symbol, model) + throw(CTBase.ExtensionError(:JuMP)) +end -- Throws `ExtensionError(:JuMP)` since JuMP support must be extended. +""" +$(TYPEDSIGNATURES) -# Example +This method throws an `ExtensionError` and is called if the JuMP backend is not available. To get the JuMP backend, make: -```julia-repl -julia> state(:problem1, model) -ERROR: ExtensionError(:JuMP) +```julia +using JuMP ``` """ -function state(::Symbol, model) +function objective(::Symbol, model) throw(CTBase.ExtensionError(:JuMP)) end """ $(TYPEDSIGNATURES) -Retrieve the costate (adjoint variables) from a JuMP model. +This method throws an `ExtensionError` and is called if the JuMP backend is not available. To get the JuMP backend, make: + +```julia +using JuMP +``` +""" +function iterations(::Symbol, model) + throw(CTBase.ExtensionError(:JuMP)) +end + +""" +$(TYPEDSIGNATURES) + +Return the number of discretisation steps, from the metadata, for a given optimal control problem. # Arguments -- `::Symbol`: Problem name. -- `model`: JuMP model object. +- `problem::Symbol`: The name of the problem. # Returns -- Throws `ExtensionError(:JuMP)` since JuMP support must be extended. +- `Int`: The number of discretisation steps (`N`) of the specified problem. # Example ```julia-repl -julia> costate(:problem1, model) -ERROR: ExtensionError(:JuMP) +julia> grid_size_data(:beam) +500 ``` """ -function costate(::Symbol, model) - throw(CTBase.ExtensionError(:JuMP)) +function grid_size_data(problem::Symbol) + return metadata(problem)[:grid_size] end """ $(TYPEDSIGNATURES) -Retrieve the control trajectory from a JuMP model. +Merge two `Nothing` values. # Arguments -- `::Symbol`: Problem name. -- `model`: JuMP model object. +- `::Nothing`: first argument. +- `::Nothing`: second argument. # Returns -- Throws `ExtensionError(:JuMP)` since JuMP support must be extended. +- `nothing::Nothing`: always returns `nothing`. # Example ```julia-repl -julia> control(:problem1, model) -ERROR: ExtensionError(:JuMP) +julia> merge(nothing, nothing) +nothing ``` """ -function control(::Symbol, model) - throw(CTBase.ExtensionError(:JuMP)) -end +merge(::Nothing, ::Nothing) = nothing """ $(TYPEDSIGNATURES) -Retrieve optimisation variables from a JuMP model. +Merge a `NamedTuple` with `nothing`. # Arguments -- `::Symbol`: Problem name. -- `model`: JuMP model object. +- `A::NamedTuple`: a named tuple to keep. +- `::Nothing`: placeholder, ignored. # Returns -- Throws `ExtensionError(:JuMP)` since JuMP support must be extended. +- `::NamedTuple`: returns `A` unchanged. # Example ```julia-repl -julia> variable(:problem1, model) -ERROR: ExtensionError(:JuMP) +julia> merge((a=1,), nothing) +(a = 1,) ``` """ -function variable(::Symbol, model) - throw(CTBase.ExtensionError(:JuMP)) -end +merge(A::NamedTuple, ::Nothing) = A """ $(TYPEDSIGNATURES) -Retrieve objective value from a JuMP model. +Throw an error when attempting to merge `nothing` with a `NamedTuple`. # Arguments -- `::Symbol`: Problem name. -- `model`: JuMP model object. +- `::Nothing`: indicates there is no data to merge. +- `::NamedTuple`: the data that cannot be merged. # Returns -- Throws `ExtensionError(:JuMP)` since JuMP support must be extended. +- This function always throws `CTBase.UnauthorizedCall`. # Example ```julia-repl -julia> objective(:problem1, model) -ERROR: ExtensionError(:JuMP) +julia> merge(nothing, (a=1,)) +ERROR: CTBase.UnauthorizedCall("There is nothing to merge.") ``` """ -function objective(::Symbol, model) - throw(CTBase.ExtensionError(:JuMP)) -end +merge(::Nothing, ::NamedTuple) = throw(CTBase.UnauthorizedCall("There is nothing to merge.")) """ $(TYPEDSIGNATURES) -Retrieve the number of iterations from a JuMP model. +Merge two `NamedTuple`s, with the second one overriding keys from the first when duplicated. # Arguments -- `::Symbol`: Problem name. -- `model`: JuMP model object. +- `A::NamedTuple`: first set of key–value pairs. +- `B::NamedTuple`: second set of key–value pairs, takes precedence if keys overlap. # Returns -- Throws `ExtensionError(:JuMP)` since JuMP support must be extended. +- `::NamedTuple`: merged named tuple containing keys from both `A` and `B`. # Example ```julia-repl -julia> iterations(:problem1, model) -ERROR: ExtensionError(:JuMP) +julia> merge((a=1, b=2), (b=3, c=4)) +(a = 1, b = 3, c = 4) ``` """ -function iterations(::Symbol, model) - throw(CTBase.ExtensionError(:JuMP)) +function merge(A::NamedTuple, B::NamedTuple) + f(;kwargs...) = kwargs + return NamedTuple(f(; A..., B...)) end """ $(TYPEDSIGNATURES) -Return the number of discretisation steps, from the metadata, for a given optimal control problem. +Return the parameter set associated with a given problem. # Arguments -- `problem::Symbol`: The name of the problem, used as a key in the global `metadata` dictionary. +- `problem::Symbol`: the name of the problem whose parameters are requested. # Returns -- `Int`: The number of discretisation steps (`N`) of the specified problem. +- `::Union{Nothing,NamedTuple}`: the parameters of the problem, or `nothing` if none exist. # Example ```julia-repl -julia> grid_size_data(:beam) -500 +julia> parameters_data(:beam) +(t0 = 0, tf = 1, ...) ``` """ -function grid_size_data(problem::Symbol) - return metadata(problem)[:grid_size] -end - -# -merge(::Nothing, ::Nothing) = nothing -merge(A::NamedTuple, ::Nothing) = A -merge(::Nothing, ::NamedTuple) = throw(CTBase.UnauthorizedCall("There is nothing to merge.")) -function merge(A::NamedTuple, B::NamedTuple) - f(;kwargs...) = kwargs - return NamedTuple(f(; A..., B...)) -end function parameters_data(problem::Symbol) return metadata(problem)[:parameters] end + +""" +$(TYPEDSIGNATURES) + +Return the parameter set associated with a given problem, optionally merged with user-supplied parameters. + +# Arguments + +- `problem::Symbol`: the name of the problem. +- `parameters::Union{Nothing,NamedTuple}`: user-supplied parameters to override or extend the defaults. + If `nothing`, returns the default parameters unchanged. + +# Returns + +- `::Union{Nothing,NamedTuple}`: the merged parameters. + Throws `CTBase.UnauthorizedCall` if attempting to merge with a problem that has no parameters. + +# Example + +```julia-repl +julia> parameters_data(:beam, (tf = 2,)) +(t0 = 0, tf = 2, ...) +``` +""" function parameters_data(problem::Symbol, parameters::Union{Nothing, NamedTuple}) try return merge(parameters_data(problem), parameters) diff --git a/test/figures/init/beam.pdf b/test/figures/init/beam.pdf index 1c801f4c96965420a8377547d40f011f1ac5ee69..4e3e6351f37e09849173c6e58a1a6ee493258766 100644 GIT binary patch delta 29 kcmaFRDEOdJaDoeqv5BE^qerU;W2*;Ks|WK|50)7Y0Gv<>mjD0& delta 29 kcmaFRDEOdJaDoeqp{0>|qerU;W2*;Ks|WK|50)7Y0G!sAjo(>4I*p9_Bg delta 35 qcmey{BlWjOYJv-kp{0pMqerU;W2*;Ks|Rzd2TQ95>sAjo(>4I+&i_@% delta 32 ocmdmgOcQ0N!QAS>vekoC_#pu8tP9it diff --git a/test/figures/solution/double_oscillator.pdf b/test/figures/solution/double_oscillator.pdf index 16217ed1e294a6c88371e53551d87f4e3dc6abca..c36b923f344b5b5c006d248515ff94b884e6dbce 100644 GIT binary patch delta 23101 zcmeI4Ymgnqb;oOF(F$)I(8_Tz7}#CFc?dI_$DO%zC4nT1haS8fNN}0hK#T|o0l_X5 z%tIFwY!PBoArqxlp}_cqT|8_sEcQ~e0=SAw*@O_lRe2DMlY9!q3C<@#yz={>?!Jqi zN-AIMPxs5-`pO6mN(yCV&K7ymWOeSQk4yU9%zHL=#~w2^f5+6sp}tj7ms#D6S{1J*SI-}N%)Vbp zs_x%b?oO)to%ww!U_~YHc=d2HT_U`wima+;2X&q0W%v1dB}0F+z9dNo-AsRV(st+e zHzj5Fowu)ZYadM~=YO?r(wQE^46-(#9kgXO=*{k!D)Kg~>VW63TXpn=8kI#>6z^(O z46>$)jUGLIMY_C}3iPc9h%ECgue<$gGY0?lbwmE%vo2p&+hABCHh5{>nac+nvnaD( z%j2S#RYkXD{dvm@5Ju7u#_A2az3absl8sT+S>LQvWlcT1ozC$=nH8-)=w-DghSZ;W zpf2vVN79`~S$LW4!cKD9xb|LF#4zWhYfoR*6{y5Bf4XkJ!XUo-ZaKYXHT zUi7mzxEallKIwbjI%PlWNiT1mw@=a-$DOP(zJ9VF!%QC={Kv^*4DZ-D#u=yB7-gMR zfh3Ia=qWG3h`TqQIj32fM~l2yW_e-e&9lCq+k@`VO{dfL;!PJMb@$|^nPnIrOXX6S z24&T~zG?09%BaxzdGxBRYP-#wXOen;+vcw(be}%ehVs04*HGo6q`c^EJXJ$Id+G%_ zzAt-OArrF*pf_G0J&<_b^HYtK_?^?%mZn6}W`#ZWtwu0P89nG{{kr@9Y5$%S^N*c= z%rB*N-mSlB154~*zVZS#e)Oy5@<#M%+ANpA0)b_>`N9p$jWvB799YxT-Ip%Bhb5ET zy#a#Kr$5L_(YGkFJn!z@de-}zT+dlGjd?oH>Z;p!_pYSqzIf3tEc?_wdzKe!GU#We z(KyeFx_k6@&&Iafr^=ijMtOeo?uC2zm~thgFN{wGE24Y);;jh$(S18iR0+v)QxVeT z-M&k9nC2xGsBJ=Z)+@R zy`sd;D;_G3wo#g}{%|y_nqixI15JPjb=zJ3nYp9IiV`;wPVDhOE-wd2li!+((ARDI)*Mpv-Qv?T-`d*!*Kpsvs33)tYhl%*3bM-Es?EUuH{5^QzM^Yr*{#iNY zNBd;`{4aMIJ*p-rP$EZbFz=?Xy@#-~eX44jtkHy7$2U?RZ$iqE}&V!X!2 zYfMXJyvBZ3YwYH6t1F&c_}U}Mug$nq4xL!0NbXy*tiQOKYf9<_w|?#9A@289PafrN_^0FqcgKs# zdw+58u11Y};B!k3TX^Qh?hce_)Vb4?y*;s&-+bY z-pktlY)z?9l7M=66$S-&sYZcVzY?0*M(!VwL3AcTB);r0uN#70MNe)lTfxF|KsH%*cYl&PPZRd{^4~z)boX0ndhASXzV5S~pfztry;j>?p}ci>r733*?u9fx zBB|Z}G(Aq5_#JAH(@dmWcz5GOdR$;G=Mi<=P|TZfKQqJb>525%q+ZxRk=~kkmDtKq zrUy}bmPD0sKqV<&rQi;)(!VY-m5!V=mDWspmHbXN$hmsbRC1)GEZ1#sC4OVZpJ7XK$n{BZ6z^@PX8w11I8|NM=miS2rtfP-n zU$*@0I&oQ$%%;M&^#gX0vyDf*E%Ko_86E($wgJV?Y+)VQl1lXFm(#3fn_jq^GwYjVusxBhJRY%+XsfNRFp3 z!2)&`gCau=g!)Z<%?_M_MxFh^k}M$65k(6G9Mr-w>dPEQrkCU}rO}Kv!5vc<&t5e3 z(Wxt^+!sHQTz#@kPGFH8?1U;{jszmEWFBGLFiYK^#OiOyRYN;`3U-%3i|)}6AS}2@ zEd`@RY6Y}tSpPQq-}hZ)hnF0v@Bh$u#Eu}@Hwxnp z1C_M82rP@#!nmB`EKNWW4V?qE?U`rxaXn6LvR#BDt>n=aVMgD+i@Z ze0cGviID@?Jowx%5HM##vVhicK#LaeZ=<7p-$ggtIpxU77Jma01qMT%g^ga5>BNZ0 z0Y)T;M-D_3Ef8>2%l8EZrR|h$G$lW9diAhrjESrTq8(W|U?I|P!zm{N;4dPWn9=mJTFE&eD>L8qmh&m)<^;Y352sG4Muyf_cKTwR8=XG9YoxzF*oCZpCL~-DVy;`wvR60twDUJp< zB&AVg$c#C%C0!~WQVlY+$Kf zMPeyliFUz*0ma$Hx54|NZ{$Xl?1|;;E9o7GMGOvJ5br?fyGSfB@gfo{qBwBGUai#S5OIFARZ{BjEKdOr(Bl>}5%R*)Q+6BQW| z3-eK8Mq-g>6mUkw0&^!4i4{>CIAX6>>>G&{B*!V)#a@`;BC*`#PZ$%>wh^-wH>HkY zm=y6q=|$MCEyRsRhwLMa+wGo2?colCvP;u@$_`e>Pven%3(ulz95BS|5p@|*LH2*( zvU~8OLpS@GWOCu$52QyfwNvbZofnrD4U4$&|i>C9Yd&ETK!*7ulmd*7|C+^X4hX6So!*^867W@3XP>E<6{LWVF?z$ReI zcaPZv3gdZU(y)|f^Jg~o_g0NAfxJAsY!&9lNbT{kZEfg5lOK`@n?EMq$Y0w}szBQA3#8-0S5`o%cgulKYFkhILxm+*=|U z0>Pf(U{Ocm#Sg$18C!yVsO63dO@-Nvp(*?LG}t?zy(KfHs2D1wt3h8& zM^y$pLXSDwv8uz^z}{ADQ+eTM+*+CgV}G@`7^kYlvk^SNLSTQ3KA<4cgm8?>AK0-D zr9W}h1oD6^rUNT3s}ML~G08+kR+|A>Yy%@#@0pqeGOia0k7Xe|MH*z0@T4STCE)P1903Tf#_kJ;VMhi1Cz$o z-Uro+;}DO-HVVcH>xPzfF>ETgJ-F`WRoPIiKz;Y2L*`P3( z^wQ{B-(0H1stH;6;Qf#XgusTIYd>Qm1fS&y2aO2`2qc#Vg{%e;wzQ^i4#-c!o|IrK zBSR!D6#$qJxz<})0e}gS`JvYKsbR^2w+#*1$24ZaGc`59QfLTPjYgGiaiC;@iLAJTyYhlzM#k*s8avtI0I-bluRre#Au zx13gj@s+SQDGOSp)IGeJ7%WnPEw_}cXOWV8?@6ciEqNHaoIL}LwZJta0-7SBunG_r z1Qr)q&?-Q{EN{J6onsioc#N;~zRlf>8`G6@{xK0(&7vpuy@vGE@Gjd#x#Oj=8c~O8 z0kcS&E(r|RmAjl~+!g$>erk8W|9RR!{LfA4E9=b#I9J({g2J;}&PHJ{U*aGVUn*NN zgeN6fXO`f8>yF%l?AD#IC0#jf_QP;Wb?Diz-A>+8vP+0jT8}*unXXNTS^GhFp>C{T zn+FX^_GUHX5u<6Iyti_w)ab$L)*o$^&=|&lNCLLqR6iS9QCm_UDWjpDcN19k6PS_) z1^pK-!gxoRU?zdYD6Oijd$D~BoyQ&^Gh6=bPOATh`f2s30M=w(EwYEl&s_CyEU{+8oOE6YmC zD3w`?1vVg98I4%s^9NOwj;g^vI8imJ%p%xWl~jUtWT4>W2edFL?3b$l(nrD0TbL?J zyczPq$9o!zVrVAEx300J;EU*vHU{zVVjPnz+ zD5(5^q17J_4yX~7Fl+$IC>8Z26i+g+Wi-~5b)br}goYd=Emc!UXg;`sEuqC4fhtN> zmNKF#2o@>Hn4Tk4O=U}spcHEw@<6O4CHtl1zs(Rv4jTK{1(YEnWYFIt@lwgX9(-h^!lusCd`xm+S_ zwLi<<=H2rHpcYIqA3=h73Ovm3HH zuA+=mMx&UqWm##(gF>4h-c)iTs%Mx0< zsgh7{rqcFBw|lJf#%Vf*38{s)ae<_?BzOLn^bN^ldfHFWK(SBo>C>ajRhw2)hf}= z_XK;KENlU&QZir=a8bB>oAgLs1wYA`+};VkM5tMeRzO!IGdNRgOJVi|6BdN)+#S|W zS6Wo5l$aTnHEDY>VWNz%rP7K_1{G`8XxnqApTlUTJPC~ir^gn3D-sxqLfFE8MZ%Kd zSjuhd?xY))!lUP4fyTXkPC9h=wCOT;>&Mb{r1z&khDmJ7#9U}=gPXgEu?#2dmjjrX zENsA9-*zUC5G@FWK9^YYPStBOyw5+FqVGc*Q!8-9u!B25kV6WCLrlUf|}*DIz4Z_ ze9#jM7!h2!DBO>j#r61onu1gut3fTiWcga0t%zfWRb| z2rC4#NUf0QDVAz&W4*#nod6%SmU}(~D+E~X=n*-Q=8$H#k?jf?T|-uQTrxI8}I8z1kDkN3vMdv?|~KHj5z8XxbCkN3vM zd*kE1@$ugHcyD~XH$L7QAMgEKkN4IcIlxz+vP3+bT?&+JUIYZq2LpKhL6*m&r~ zO?wv3zir}&GYj`UJMotxvyO;hxon6kyg#T;Xh2Q?d#epYu}wbarVG`>O&to>5P-7{u@8}lE?r6 delta 80075 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 diff --git a/test/figures/solution/ducted_fan.pdf b/test/figures/solution/ducted_fan.pdf index 3808873cb0244d4fdfb8a374577d0ba1251aee4e..ca2f69283d30cb6d0b475255707ec3373d7a6bfa 100644 GIT binary patch literal 472054 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 P`w#!&KmOPM^zQ!w0;MIX diff --git a/test/figures/solution/electric_vehicle.pdf b/test/figures/solution/electric_vehicle.pdf index 4930f38612d861bea7e001057a16de468a342f04..63ac32a982cff633eb8ea93308659f279965cca0 100644 GIT binary patch delta 30 mcmdn?m4Dk;{s|5ohNgz5#-@g5jUKHYjIAC_TRoWbegOclj|#Q` delta 30 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 diff --git a/test/figures/solution/insurance.pdf b/test/figures/solution/insurance.pdf index 5adeddeeecab87fa559fbb3f68347174cbca0fea..b4804ec55b885bdbcc31bd09f6ba6e19d919d867 100644 GIT binary patch delta 40445 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 delta 40701 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 I{Oa=DYldX0AOHXW delta 1650 zcmZ`(J!lj`6lV9<{2X`*NvTOzNeWMS%IsLaPaHl;8v}N zY0h~R@tvtNzR%*_JN{~|!9eR!N(oAa%Vi}%#|ZHu!nC})4 z>cTY8JgN0EpB+vXWErAX6bioPrP>A1V@Y^KEISx!&E?{BUKwGu_?XpC8)YygKD|j-eF8=H*bS zVzw5&{?38j5BBG?{dwYz6 z;VhboE1H!xM1q5kt+(t>6FIJOb2*GYan`dtw5e^SoE1ekS<%hszt*fD(lEh+qb}zM zgqlOrvhi`KBt+H^c1uYCGKr}qZYae6l=4c@EL^1vfcX>6Al4!FBb5UUO(be#1(Ize)GyP5yv@o+UQ83Umwlo8h=7z?mlMgcc uPM(miviW7I2P1ar<_YQT6Ve%hm{4GyP5yGB-0ZQ83UmF)=X&QWi!g#*-b> q3pc+=^gv%H{aPbtxHknEs$`_^*LJinsyOPR9 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

%ak?n0 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

*^-(dv*TSaP)Cw814fWgkeO+JUb9Io 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 diff --git a/test/figures/solution/rocket.pdf b/test/figures/solution/rocket.pdf index a281b44727b6cad887a3b37b11525eb5db567882..e90fdc9b0e8434b50846fea0a27db87f61c8858a 100644 GIT binary patch delta 74467 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 delta 75424 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 F{{V!%m!$vz diff --git a/test/figures/solution/space_shuttle.pdf b/test/figures/solution/space_shuttle.pdf index b379dc45183ef90248c1d27abdfa9941e2797b59..c114590fcfb67881e9ea3acac8092add87e208cd 100644 GIT binary patch delta 20026 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 v>OVY`U}{SH1WRyH)6aG delta 122652 zcmeFa{jcrYRo1RI<3;+pGwuOS#>v%U7(Yp=a`LNMT_by9F4=8W3F?yx$p;6{B-YpzH`oJ&N0UvbIdWvUgy{T&X@jMzx1Vl{wrR#y}P`;-0im? zdFyizU$Vcwx;%XJJrDonpM2HLVZVQVd$Hf|FZs{yZh!Tm%TN2pkG|sr|MG+1ZvXsyp1Iub zE_QbTE-&tG2iRW~*zN|nz6r3s*xn3qvje!iySQ96ZVv%&FD_f->SDVMaC5P1jjM~x z>i~y~<8D=v_wxGU>dIcPF66!3UtHY{aDAILd^ikH-rdFZYEs_Ii^HWg_7~gBG}&I< zYzL5cdv|fuPWQ*ocYAwrI|!1c4FF?~MD`c*Zg1A~_7^vi$o6otyPg`ik;s;@w~y=c zZfRPnUSC{BBHOErn~sdCk;ry;ytpgP_3-X4E*Ef}mDpZhTvce-!@Iq>F7Ne4cn^1X z7q{*8aKRc0Y&(#HyobBnHL`=ehr62#WS7|;4;OouBFHS~;Uc_;J3pk#LEgh1bQS#J z;+B;Nz$8+Gw(=sGt|qc#zK6U0#Vqg5#T6@YxVu_Iy&2l$)x}j6?PhpU#Rc535{J9p z#i3)p8Q$IEWsT(BMcx^R8b_1MH4r8)@8!jH$9_A!NL7|2Z4N9&+U&Ymw-@ETjFPt3 z&iC?S+mYQ}Y|(%;*|r9%?@9oa=I+cpt9ci#waM&>yV4%RTcM$p&iC?yogH4*)s

  • 2|Q-Ep7dv$Se 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

    ^LChR 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 b`u4~3o2O@g+pFvP;`8hF*=OH;|LyH>>UGS? diff --git a/test/figures/solution/vanderpol.pdf b/test/figures/solution/vanderpol.pdf index e6eae06d835fa2c6b99028f1116bcfff8bf85fc1..29d774b9f93e623de3dd3cf68b090fe6fd3abd0c 100644 GIT binary patch delta 30 lcmZo$!QZxme}V&tp{b#%v6+EMqerU;W2*<#RuATVmjRTr3F80& delta 30 lcmZo$!QZxme}V&tfu*6Lp^=GEqerU;W2*<#RuATVmjRSx3Eltz