diff --git a/ext/MetaData/references/balanced_field.toml b/ext/MetaData/references/balanced_field.toml index ff504d9c..5b638a26 100644 --- a/ext/MetaData/references/balanced_field.toml +++ b/ext/MetaData/references/balanced_field.toml @@ -6,10 +6,10 @@ agreement = true grid_size = 200 parameters = "(t0 = 0.0, m = 79015.8, g = 9.80665, ρ = 1.225, S = 124.7, CD0 = 0.03, AR = 9.45, e = 0.801, CL0 = 0.5, CL_max = 2.0, h_w = 1.0, span = 35.7, α_max = 0.1745, T = 120102.0, r_t0 = 600.0, v_t0 = 70.0, h_t0 = 0.0, γ_t0 = 0.0, h_tf = 10.668, γ_tf = 0.0873, v_min = 0.0, v_max = 100.0, α_min = -0.1745, α_max_ctrl = 0.2618)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" spread = 2.4538248057585183e-9 -value = 771.0114003040649 +value = 771.0114003220631 [[trapeze.results]] configuration = "solver=ipopt" @@ -24,7 +24,7 @@ value = 771.0114003040649 [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" modeling = "JuMP" - objective = 771.0114003040651 + objective = 771.011400304065 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" @@ -34,7 +34,7 @@ value = 771.0114003040649 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" modeling = "JuMP" - objective = 771.0114004838803 + objective = 771.0114004838804 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" @@ -54,7 +54,7 @@ value = 771.0114003040649 [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" modeling = "OptimalControl" - objective = 771.0114003040649 + objective = 771.0114003040652 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" @@ -159,5 +159,46 @@ value = 771.0114003040649 [[trapeze.solutions]] configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "JuMP solver=ipopt mu_strategy=monotone", "JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=exa solver=madnlp", "OptimalControl modeler=exa solver=madnlp barrier=loqo", "OptimalControl modeler=exa solver=madnlp mu_init=0.001", "OptimalControl modeler=exa solver=madnlp mu_init=1.0e-5", "OptimalControlScalarized modeler=exa solver=madnlp"] - objective = 771.0114003040649 + objective = 771.0114003220631 solves = 29 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "modeler=exa solver=madnlp mu_init=1.0e-5" + cpu = "AMD EPYC 7763 64-Core Processor" + iterations = 54 + julia = "1.13.3" + modeler = "exa" + modeling = "OptimalControl" + objective = 771.0114003220631 + os = "Linux" + platform = "cron-OptimalControl-robustness-1.13-ubuntu-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "madnlp" + status = "SOLVE_SUCCEEDED" + time = 0.13735 + violation = 1.0347278589506459e-13 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + mu_init = 1.0e-5 + print_level = "ERROR" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/ext/MetaData/references/beam.toml b/ext/MetaData/references/beam.toml index 7c400333..6117c329 100644 --- a/ext/MetaData/references/beam.toml +++ b/ext/MetaData/references/beam.toml @@ -6,10 +6,10 @@ agreement = true grid_size = 500 parameters = "(t0 = 0, tf = 1, x₁_l = 0, x₁_u = 0.1, x₁_t0 = 0, x₂_t0 = 1, x₁_tf = 0, x₂_tf = -1)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" -spread = 6.880267386757687e-8 -value = 8.88928162026725 +spread = 6.880267366774556e-8 +value = 8.889281808581256 [[trapeze.results]] configuration = "solver=ipopt" @@ -24,7 +24,7 @@ value = 8.88928162026725 [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" modeling = "JuMP" - objective = 8.889281808507887 + objective = 8.88928181017181 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" @@ -34,7 +34,7 @@ value = 8.88928162026725 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" modeling = "JuMP" - objective = 8.889282231873594 + objective = 8.889282231873592 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" @@ -44,7 +44,7 @@ value = 8.88928162026725 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" modeling = "JuMP" - objective = 8.88928184856984 + objective = 8.889281848569889 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" @@ -54,7 +54,7 @@ value = 8.88928162026725 [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" modeling = "OptimalControl" - objective = 8.889281808581273 + objective = 8.88928181130797 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" @@ -99,7 +99,7 @@ value = 8.88928162026725 [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControl" - objective = 8.889281793484152 + objective = 8.889281850493827 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" @@ -144,12 +144,12 @@ value = 8.88928162026725 [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControlScalarized" - objective = 8.889281793484152 + objective = 8.889281850493827 platform = "cron-OptimalControlScalarized-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControlScalarized" - objective = 8.889281793484152 + objective = 8.889281850493827 platform = "cron-OptimalControlScalarized-1.13-windows-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" @@ -159,5 +159,48 @@ value = 8.88928162026725 [[trapeze.solutions]] configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "JuMP solver=ipopt mu_strategy=monotone", "JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=exa solver=madnlp", "OptimalControl modeler=exa solver=madnlp barrier=loqo", "OptimalControl modeler=exa solver=madnlp mu_init=0.001", "OptimalControl modeler=exa solver=madnlp mu_init=1.0e-5", "OptimalControlScalarized modeler=exa solver=madnlp"] - objective = 8.88928162026725 + objective = 8.889281808581256 solves = 29 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "modeler=adnlp solver=ipopt mu_init=0.001" + cpu = "Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz" + iterations = 18 + julia = "1.13.3" + modeler = "adnlp" + modeling = "OptimalControl" + objective = 8.889281808581256 + os = "NT" + platform = "cron-OptimalControl-robustness-1.13-windows-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "ipopt" + status = "first_order" + time = 0.119083 + violation = 1.1102230246251565e-16 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + mu_init = 0.001 + mu_strategy = "adaptive" + print_level = 0 + sb = "yes" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/ext/MetaData/references/bioreactor.toml b/ext/MetaData/references/bioreactor.toml index 36d854d3..fec85304 100644 --- a/ext/MetaData/references/bioreactor.toml +++ b/ext/MetaData/references/bioreactor.toml @@ -6,9 +6,9 @@ agreement = false grid_size = 600 parameters = "(t0 = 0, tf = 200, β = 1, c = 2, γ = 1, halfperiod = 5, Ks = 0.05, μ2m = 0.1, μbar = 1, r = 0.005, y_l = 0, s_l = 0, b_l = 0.001, u_l = 0, u_u = 1, 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)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" -spread = 0.000327811483965837 +spread = 0.00032781148396556224 value = -12.929690242620518 [[trapeze.results]] @@ -24,7 +24,7 @@ value = -12.929690242620518 [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" modeling = "JuMP" - objective = -12.925452054145852 + objective = -12.925452054100038 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" @@ -34,7 +34,7 @@ value = -12.929690242620518 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" modeling = "JuMP" - objective = -12.925451741674866 + objective = -12.92545174167487 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" @@ -44,7 +44,7 @@ value = -12.929690242620518 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" modeling = "JuMP" - objective = -12.929690242620518 + objective = -12.929690242620516 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" @@ -54,7 +54,7 @@ value = -12.929690242620518 [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" modeling = "OptimalControl" - objective = -12.925452054391549 + objective = -12.925452054463422 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" @@ -99,7 +99,7 @@ value = -12.929690242620518 [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControl" - objective = -12.925451741674909 + objective = -12.925451741674895 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" @@ -146,19 +146,227 @@ value = -12.929690242620518 configurations = ["JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001"] objective = -12.929690242620518 solves = 4 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001" + cpu = "Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz" + iterations = 160 + julia = "1.13.3" + modeler = "adnlp" + modeling = "OptimalControl" + objective = -12.929690242620518 + os = "NT" + platform = "cron-OptimalControl-robustness-1.13-windows-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "ipopt" + status = "first_order" + time = 3.55974 + violation = 4.803542869919646e-9 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + mu_init = 0.001 + mu_strategy = "monotone" + print_level = 0 + sb = "yes" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" [[trapeze.solutions]] configurations = ["OptimalControl modeler=exa solver=madnlp mu_init=0.001"] objective = -12.929428880081039 solves = 2 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "modeler=exa solver=madnlp mu_init=0.001" + cpu = "Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz" + iterations = 165 + julia = "1.13.3" + modeler = "exa" + modeling = "OptimalControl" + objective = -12.929428880081039 + os = "NT" + platform = "cron-OptimalControl-robustness-1.13-windows-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "madnlp" + status = "SOLVE_SUCCEEDED" + time = 19.4614 + violation = 2.6848551368252593e-9 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + mu_init = 0.001 + print_level = "ERROR" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" [[trapeze.solutions]] configurations = ["OptimalControl modeler=exa solver=madnlp mu_init=1.0e-5"] objective = -12.926202787514399 solves = 2 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "modeler=exa solver=madnlp mu_init=1.0e-5" + cpu = "Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz" + iterations = 151 + julia = "1.13.3" + modeler = "exa" + modeling = "OptimalControl" + objective = -12.926202787514399 + os = "NT" + platform = "cron-OptimalControl-robustness-1.13-windows-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "madnlp" + status = "SOLVE_SUCCEEDED" + time = 0.767264 + violation = 4.057096091372725e-9 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + mu_init = 1.0e-5 + print_level = "ERROR" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" [[trapeze.solutions]] configurations = ["OptimalControl modeler=exa solver=madnlp barrier=loqo"] - objective = -12.925967426083526 + objective = -12.925946306409168 solves = 2 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "modeler=exa solver=madnlp barrier=loqo" + cpu = "AMD EPYC 7763 64-Core Processor" + iterations = 129 + julia = "1.13.3" + modeler = "exa" + modeling = "OptimalControl" + objective = -12.925946306409168 + os = "Linux" + platform = "cron-OptimalControl-robustness-1.13-ubuntu-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "madnlp" + status = "SOLVE_SUCCEEDED" + time = 1.25292 + violation = 2.71956068775836e-12 + + [trapeze.solutions.reference.options] + barrier = "loqo" + max_iter = 1000 + max_wall_time = 500.0 + print_level = "ERROR" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" [[trapeze.solutions]] configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "JuMP solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=exa solver=madnlp"] - objective = -12.925452054463422 + objective = -12.925452054150872 solves = 16 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "636fa809ae3e6c4367343be85d25d63fe119b5bd" + configuration = "modeler=adnlp solver=ipopt" + cpu = "AMD EPYC 7763 64-Core Processor" + iterations = 188 + julia = "1.13.3" + modeler = "adnlp" + modeling = "OptimalControl" + objective = -12.925452054150872 + os = "NT" + platform = "cron-OptimalControl-1.13-windows-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573" + solver = "ipopt" + status = "first_order" + time = 3.52422 + violation = 1.1220885332008379e-13 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + mu_strategy = "adaptive" + print_level = 0 + sb = "yes" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/ext/MetaData/references/brachistochrone.toml b/ext/MetaData/references/brachistochrone.toml index 0a69f506..295eb702 100644 --- a/ext/MetaData/references/brachistochrone.toml +++ b/ext/MetaData/references/brachistochrone.toml @@ -6,10 +6,10 @@ agreement = false grid_size = 500 parameters = "(g = 9.80665, t0 = 0.0, x0 = 0.0, y0 = 10.0, v0 = 0.0, xf = 10.0, yf = 5.0, u_min = -3.141592653589793, u_max = π)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" spread = 0.02249897337664817 -value = 1.802932006652922 +value = 1.802932061276909 [[trapeze.results]] configuration = "solver=ipopt" @@ -34,7 +34,7 @@ value = 1.802932006652922 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" modeling = "JuMP" - objective = 1.8029321585265314 + objective = 1.8029321585265317 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" @@ -44,7 +44,7 @@ value = 1.802932006652922 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" modeling = "JuMP" - objective = 1.8029320612769097 + objective = 1.802932061276909 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" @@ -54,7 +54,7 @@ value = 1.802932006652922 [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" modeling = "OptimalControl" - objective = 1.8029320066529235 + objective = 1.802932006652922 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" @@ -149,9 +149,93 @@ value = 1.802932006652922 [[trapeze.solutions]] configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "JuMP solver=ipopt mu_strategy=monotone", "JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=exa solver=madnlp", "OptimalControl modeler=exa solver=madnlp mu_init=0.001", "OptimalControlScalarized modeler=exa solver=madnlp"] - objective = 1.802932006652922 + objective = 1.802932061276909 solves = 25 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001" + cpu = "AMD EPYC 7763 64-Core Processor" + iterations = 22 + julia = "1.13.3" + modeler = "adnlp" + modeling = "OptimalControl" + objective = 1.802932061276909 + os = "Linux" + platform = "cron-OptimalControl-robustness-1.13-ubuntu-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "ipopt" + status = "first_order" + time = 0.25709 + violation = 1.9225225855734607e-9 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + mu_init = 0.001 + mu_strategy = "monotone" + print_level = 0 + sb = "yes" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" [[trapeze.solutions]] configurations = ["OptimalControl modeler=exa solver=madnlp barrier=loqo"] objective = 1.843496125847761 solves = 2 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "modeler=exa solver=madnlp barrier=loqo" + cpu = "AMD EPYC 7763 64-Core Processor" + iterations = 100 + julia = "1.13.3" + modeler = "exa" + modeling = "OptimalControl" + objective = 1.843496125847761 + os = "Linux" + platform = "cron-OptimalControl-robustness-1.13-ubuntu-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "madnlp" + status = "SOLVE_SUCCEEDED" + time = 5.03583 + violation = 3.827424155389281e-9 + + [trapeze.solutions.reference.options] + barrier = "loqo" + max_iter = 1000 + max_wall_time = 500.0 + print_level = "ERROR" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/ext/MetaData/references/bryson_denham.toml b/ext/MetaData/references/bryson_denham.toml index 7ba434f9..b0c5e118 100644 --- a/ext/MetaData/references/bryson_denham.toml +++ b/ext/MetaData/references/bryson_denham.toml @@ -6,10 +6,10 @@ agreement = true grid_size = 500 parameters = "(t0 = 0.0, tf = 1.0, x1_t0 = 0.0, x2_t0 = 1.0, x1_tf = 0.0, x2_tf = -1.0, x1_max = 0.1111111111111111)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" spread = 1.4294925612195244e-7 -value = 4.000142925683664 +value = 4.000142996431947 [[trapeze.results]] configuration = "solver=ipopt" @@ -24,7 +24,7 @@ value = 4.000142925683664 [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" modeling = "JuMP" - objective = 4.000143422061431 + objective = 4.000143422061432 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" @@ -34,7 +34,7 @@ value = 4.000142925683664 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" modeling = "JuMP" - objective = 4.000143022023738 + objective = 4.00014302202381 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" @@ -44,7 +44,7 @@ value = 4.000142925683664 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" modeling = "JuMP" - objective = 4.000142996431951 + objective = 4.000142996431947 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" @@ -54,7 +54,7 @@ value = 4.000142925683664 [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" modeling = "OptimalControl" - objective = 4.000143422061428 + objective = 4.000143422061419 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" @@ -99,7 +99,7 @@ value = 4.000142925683664 [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControl" - objective = 4.000143486269368 + objective = 4.00014349750112 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" @@ -144,12 +144,12 @@ value = 4.000142925683664 [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControlScalarized" - objective = 4.000143486269368 + objective = 4.00014349750112 platform = "cron-OptimalControlScalarized-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControlScalarized" - objective = 4.000143486269368 + objective = 4.00014349750112 platform = "cron-OptimalControlScalarized-1.13-windows-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" @@ -159,5 +159,48 @@ value = 4.000142925683664 [[trapeze.solutions]] configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "JuMP solver=ipopt mu_strategy=monotone", "JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=exa solver=madnlp", "OptimalControl modeler=exa solver=madnlp barrier=loqo", "OptimalControl modeler=exa solver=madnlp mu_init=0.001", "OptimalControl modeler=exa solver=madnlp mu_init=1.0e-5", "OptimalControlScalarized modeler=exa solver=madnlp"] - objective = 4.000142925683664 + objective = 4.000142996431947 solves = 29 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001" + cpu = "AMD EPYC 7763 64-Core Processor" + iterations = 21 + julia = "1.13.3" + modeler = "adnlp" + modeling = "OptimalControl" + objective = 4.000142996431947 + os = "Linux" + platform = "cron-OptimalControl-robustness-1.13-ubuntu-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "ipopt" + status = "first_order" + time = 0.103698 + violation = 1.1102230246251565e-16 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + mu_init = 0.001 + mu_strategy = "monotone" + print_level = 0 + sb = "yes" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/ext/MetaData/references/cart_pendulum.toml b/ext/MetaData/references/cart_pendulum.toml index 129094ad..c156ab4e 100644 --- a/ext/MetaData/references/cart_pendulum.toml +++ b/ext/MetaData/references/cart_pendulum.toml @@ -6,10 +6,10 @@ agreement = true grid_size = 500 parameters = "(t0 = 0, g = 9.81, L = 1, m = 1, mcart = 0.5, Fex_l = -5, Fex_u = 5, x_l = -1, x_u = 1, v_l = -2, v_u = 2, tf_l = 0.1, x_t0 = 0, θ_t0 = 0, ω_t0 = 0, θ_tf = π, ω_tf = 0)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" spread = 1.586433868301789e-6 -value = 1.7439655750225398 +value = 1.7439657987471582 [[trapeze.results]] configuration = "solver=ipopt" @@ -24,7 +24,7 @@ value = 1.7439655750225398 [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" modeling = "JuMP" - objective = 1.7439655750325942 + objective = 1.7439655787788408 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" @@ -34,7 +34,7 @@ value = 1.7439655750225398 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" modeling = "JuMP" - objective = 1.7439660133245751 + objective = 1.7439667940820989 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" @@ -44,7 +44,7 @@ value = 1.7439655750225398 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" modeling = "JuMP" - objective = 1.7439660141712428 + objective = 1.7439660142008846 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" @@ -54,7 +54,7 @@ value = 1.7439655750225398 [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" modeling = "OptimalControl" - objective = 1.7439656616964376 + objective = 1.7439655750225398 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" @@ -99,7 +99,7 @@ value = 1.7439655750225398 [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControl" - objective = 1.7439667949771815 + objective = 1.7439667967740533 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" @@ -144,5 +144,46 @@ value = 1.7439655750225398 [[trapeze.solutions]] configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "JuMP solver=ipopt mu_strategy=monotone", "JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=exa solver=madnlp", "OptimalControl modeler=exa solver=madnlp barrier=loqo", "OptimalControl modeler=exa solver=madnlp mu_init=0.001", "OptimalControl modeler=exa solver=madnlp mu_init=1.0e-5"] - objective = 1.7439655750225398 + objective = 1.7439657987471582 solves = 26 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "modeler=exa solver=madnlp barrier=loqo" + cpu = "AMD EPYC 7763 64-Core Processor" + iterations = 652 + julia = "1.13.3" + modeler = "exa" + modeling = "OptimalControl" + objective = 1.7439657987471582 + os = "Linux" + platform = "cron-OptimalControl-robustness-1.13-ubuntu-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "madnlp" + status = "SOLVE_SUCCEEDED" + time = 4.65478 + violation = 3.077650634342177e-11 + + [trapeze.solutions.reference.options] + barrier = "loqo" + max_iter = 1000 + max_wall_time = 500.0 + print_level = "ERROR" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/ext/MetaData/references/chain.toml b/ext/MetaData/references/chain.toml index 7d1dfd4a..8ff96b1b 100644 --- a/ext/MetaData/references/chain.toml +++ b/ext/MetaData/references/chain.toml @@ -6,10 +6,10 @@ agreement = true grid_size = 500 parameters = "(t0 = 0, tf = 1, L = 4, a = 1, b = 3, x₂_t0 = 0, x₃_t0 = 0)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" spread = 5.178113741056605e-13 -value = 5.0685777900242135 +value = 5.068577790026832 [[trapeze.results]] configuration = "solver=ipopt" @@ -24,7 +24,7 @@ value = 5.0685777900242135 [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" modeling = "JuMP" - objective = 5.0685777900268345 + objective = 5.068577790026836 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" @@ -34,7 +34,7 @@ value = 5.0685777900242135 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" modeling = "JuMP" - objective = 5.0685777900268345 + objective = 5.068577790026836 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" @@ -44,7 +44,7 @@ value = 5.0685777900242135 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" modeling = "JuMP" - objective = 5.0685777900268345 + objective = 5.068577790026836 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" @@ -54,7 +54,7 @@ value = 5.0685777900242135 [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" modeling = "OptimalControl" - objective = 5.068577790026838 + objective = 5.0685777900268345 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" @@ -159,5 +159,48 @@ value = 5.0685777900242135 [[trapeze.solutions]] configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "JuMP solver=ipopt mu_strategy=monotone", "JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=exa solver=madnlp", "OptimalControl modeler=exa solver=madnlp barrier=loqo", "OptimalControl modeler=exa solver=madnlp mu_init=0.001", "OptimalControl modeler=exa solver=madnlp mu_init=1.0e-5", "OptimalControlScalarized modeler=exa solver=madnlp"] - objective = 5.0685777900242135 + objective = 5.068577790026832 solves = 29 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "modeler=adnlp solver=ipopt mu_init=0.001" + cpu = "Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz" + iterations = 14 + julia = "1.13.3" + modeler = "adnlp" + modeling = "OptimalControl" + objective = 5.068577790026832 + os = "NT" + platform = "cron-OptimalControl-robustness-1.13-windows-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "ipopt" + status = "first_order" + time = 0.202702 + violation = 1.8990808925423153e-11 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + mu_init = 0.001 + mu_strategy = "adaptive" + print_level = 0 + sb = "yes" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/ext/MetaData/references/dielectrophoretic_particle.toml b/ext/MetaData/references/dielectrophoretic_particle.toml index 72c7f211..74b74894 100644 --- a/ext/MetaData/references/dielectrophoretic_particle.toml +++ b/ext/MetaData/references/dielectrophoretic_particle.toml @@ -6,10 +6,10 @@ agreement = true grid_size = 500 parameters = "(t0 = 0, x_t0 = 1, y_t0 = 0, x_tf = 2, α = -0.75, c = 1, u_l = -1, u_u = 1, tf_l = 0.1)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" -spread = 1.221909871988508e-7 -value = 7.811323680996133 +spread = 1.2219098753996266e-7 +value = 7.811324025977027 [[trapeze.results]] configuration = "solver=ipopt" @@ -24,7 +24,7 @@ value = 7.811323680996133 [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" modeling = "JuMP" - objective = 7.811323680996134 + objective = 7.811323680996133 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" @@ -34,7 +34,7 @@ value = 7.811323680996133 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" modeling = "JuMP" - objective = 7.811324635469484 + objective = 7.811324635469488 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" @@ -159,5 +159,48 @@ value = 7.811323680996133 [[trapeze.solutions]] configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "JuMP solver=ipopt mu_strategy=monotone", "JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=exa solver=madnlp", "OptimalControl modeler=exa solver=madnlp barrier=loqo", "OptimalControl modeler=exa solver=madnlp mu_init=0.001", "OptimalControl modeler=exa solver=madnlp mu_init=1.0e-5", "OptimalControlScalarized modeler=exa solver=madnlp"] - objective = 7.811323680996133 + objective = 7.811324025977027 solves = 29 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001" + cpu = "AMD EPYC 7763 64-Core Processor" + iterations = 14 + julia = "1.13.3" + modeler = "adnlp" + modeling = "OptimalControl" + objective = 7.811324025977027 + os = "Linux" + platform = "cron-OptimalControl-robustness-1.13-ubuntu-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "ipopt" + status = "first_order" + time = 0.133316 + violation = 3.994393704687127e-11 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + mu_init = 0.001 + mu_strategy = "monotone" + print_level = 0 + sb = "yes" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/ext/MetaData/references/double_oscillator.toml b/ext/MetaData/references/double_oscillator.toml index a660967f..3239c183 100644 --- a/ext/MetaData/references/double_oscillator.toml +++ b/ext/MetaData/references/double_oscillator.toml @@ -6,10 +6,10 @@ agreement = true grid_size = 500 parameters = "(t0 = 0, tf = 6.283185307179586, m1 = 100, m2 = 2, c = 0.5, k1 = 100, k2 = 3, u_l = -1, u_u = 1, x₁_t0 = 0, x₂_t0 = 0)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" spread = 6.248912408876316e-12 -value = 0.0009109230332461941 +value = 0.0009109230332461957 [[trapeze.results]] configuration = "solver=ipopt" @@ -24,7 +24,7 @@ value = 0.0009109230332461941 [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" modeling = "JuMP" - objective = 0.0009109230332518861 + objective = 0.0009109230332518862 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" @@ -34,7 +34,7 @@ value = 0.0009109230332461941 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" modeling = "JuMP" - objective = 0.0009109230332461992 + objective = 0.0009109230332461991 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" @@ -54,7 +54,7 @@ value = 0.0009109230332461941 [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" modeling = "OptimalControl" - objective = 0.0009109230332518864 + objective = 0.0009109230332518861 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" @@ -159,5 +159,46 @@ value = 0.0009109230332461941 [[trapeze.solutions]] configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "JuMP solver=ipopt mu_strategy=monotone", "JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=exa solver=madnlp", "OptimalControl modeler=exa solver=madnlp barrier=loqo", "OptimalControl modeler=exa solver=madnlp mu_init=0.001", "OptimalControl modeler=exa solver=madnlp mu_init=1.0e-5", "OptimalControlScalarized modeler=exa solver=madnlp"] - objective = 0.0009109230332461941 + objective = 0.0009109230332461957 solves = 29 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "modeler=exa solver=madnlp mu_init=1.0e-5" + cpu = "Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz" + iterations = 5 + julia = "1.13.3" + modeler = "exa" + modeling = "OptimalControl" + objective = 0.0009109230332461957 + os = "NT" + platform = "cron-OptimalControl-robustness-1.13-windows-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "madnlp" + status = "SOLVE_SUCCEEDED" + time = 0.028062 + violation = 5.6107462426124854e-18 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + mu_init = 1.0e-5 + print_level = "ERROR" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/ext/MetaData/references/ducted_fan.toml b/ext/MetaData/references/ducted_fan.toml index 8526ccdc..1d1d06f4 100644 --- a/ext/MetaData/references/ducted_fan.toml +++ b/ext/MetaData/references/ducted_fan.toml @@ -6,10 +6,10 @@ agreement = true grid_size = 250 parameters = "(t0 = 0, r = 0.2, J = 0.05, m = 2.2, mg = 4, μ = 1000, α_l = -0.5235987755982988, α_u = 0.5235987755982988, u₁_l = -5, u₁_u = 5, u₂_l = 0, u₂_u = 17, tf_l = 0.1, 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)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" -spread = 7.661904466495749e-8 -value = 1831.8277178167814 +spread = 7.661888603456097e-8 +value = 1831.8278581674542 [[trapeze.results]] configuration = "solver=ipopt" @@ -24,7 +24,7 @@ value = 1831.8277178167814 [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" modeling = "JuMP" - objective = 1831.8277178168435 + objective = 1831.8278488713581 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" @@ -34,7 +34,7 @@ value = 1831.8277178167814 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" modeling = "JuMP" - objective = 1831.8278581696711 + objective = 1831.8278581693805 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" @@ -44,7 +44,7 @@ value = 1831.8277178167814 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" modeling = "JuMP" - objective = 1831.8277212767207 + objective = 1831.8277212767446 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" @@ -54,7 +54,7 @@ value = 1831.8277178167814 [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" modeling = "OptimalControl" - objective = 1831.8277178168887 + objective = 1831.8278488312462 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" @@ -99,7 +99,7 @@ value = 1831.8277178167814 [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControl" - objective = 1831.8278581674542 + objective = 1831.827858167453 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" @@ -144,12 +144,12 @@ value = 1831.8277178167814 [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControlScalarized" - objective = 1831.8278581674542 + objective = 1831.827858167453 platform = "cron-OptimalControlScalarized-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControlScalarized" - objective = 1831.8278581674542 + objective = 1831.827858167453 platform = "cron-OptimalControlScalarized-1.13-windows-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" @@ -159,5 +159,45 @@ value = 1831.8277178167814 [[trapeze.solutions]] configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "JuMP solver=ipopt mu_strategy=monotone", "JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=exa solver=madnlp", "OptimalControl modeler=exa solver=madnlp barrier=loqo", "OptimalControl modeler=exa solver=madnlp mu_init=0.001", "OptimalControl modeler=exa solver=madnlp mu_init=1.0e-5", "OptimalControlScalarized modeler=exa solver=madnlp"] - objective = 1831.8277178167814 + objective = 1831.8278581674542 solves = 29 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "636fa809ae3e6c4367343be85d25d63fe119b5bd" + configuration = "modeler=exa solver=madnlp" + cpu = "AMD EPYC 7763 64-Core Processor" + iterations = 67 + julia = "1.13.3" + modeler = "exa" + modeling = "OptimalControl" + objective = 1831.8278581674542 + os = "NT" + platform = "cron-OptimalControl-1.13-windows-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573" + solver = "madnlp" + status = "SOLVE_SUCCEEDED" + time = 0.367174 + violation = 3.0912772341906702e-15 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + print_level = "ERROR" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/ext/MetaData/references/electric_vehicle.toml b/ext/MetaData/references/electric_vehicle.toml index 08173ef4..62b612b9 100644 --- a/ext/MetaData/references/electric_vehicle.toml +++ b/ext/MetaData/references/electric_vehicle.toml @@ -6,7 +6,7 @@ agreement = true grid_size = 500 parameters = "(t0 = 0, tf = 1, b1 = 1.0, b2 = 1.0, h0 = 0.1, h1 = 1, h2 = 0.001, α0 = 3, α1 = 0.4, α2 = -1, α3 = 0.1, x_t0 = 0, v_t0 = 0, x_tf = 10, v_tf = 0)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" spread = 9.253370009051573e-16 value = 1228.599284481313 @@ -54,7 +54,7 @@ value = 1228.599284481313 [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" modeling = "OptimalControl" - objective = 1228.599284481313 + objective = 1228.5992844813134 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" @@ -161,3 +161,46 @@ value = 1228.599284481313 configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "JuMP solver=ipopt mu_strategy=monotone", "JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=exa solver=madnlp", "OptimalControl modeler=exa solver=madnlp barrier=loqo", "OptimalControl modeler=exa solver=madnlp mu_init=0.001", "OptimalControl modeler=exa solver=madnlp mu_init=1.0e-5", "OptimalControlScalarized modeler=exa solver=madnlp"] objective = 1228.599284481313 solves = 29 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "modeler=adnlp solver=ipopt mu_init=0.001" + cpu = "AMD EPYC 7763 64-Core Processor" + iterations = 4 + julia = "1.13.3" + modeler = "adnlp" + modeling = "OptimalControl" + objective = 1228.599284481313 + os = "Linux" + platform = "cron-OptimalControl-robustness-1.13-ubuntu-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "ipopt" + status = "first_order" + time = 0.119365 + violation = 1.7763568394002505e-15 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + mu_init = 0.001 + mu_strategy = "adaptive" + print_level = 0 + sb = "yes" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/ext/MetaData/references/glider.toml b/ext/MetaData/references/glider.toml index 7492dd77..791dc9f5 100644 --- a/ext/MetaData/references/glider.toml +++ b/ext/MetaData/references/glider.toml @@ -6,55 +6,55 @@ agreement = true grid_size = 500 parameters = "(t0 = 0, 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_t0 = 100, m = 100, g = 9.81, c0 = 0.034, c1 = 0.069662, S = 14, ρ = 1.13, cL_min = 0, cL_max = 1.4, tf_l = 0, x_l = 0, vx_l = 0)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" -spread = 1.0147162903589398e-10 -value = -1247.9784300226472 +spread = 1.0235125970780203e-10 +value = -1247.9784300208023 [[trapeze.results]] configuration = "solver=ipopt" modeling = "JuMP" - objective = -1247.9784300215604 + objective = -1247.978430023745 platform = "cron-JuMP-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt" modeling = "JuMP" - objective = -1247.9784300216338 + objective = -1247.9784300226427 platform = "cron-JuMP-1.13-windows-latest" [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" modeling = "JuMP" - objective = -1247.9784300211415 + objective = -1247.978430023745 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" modeling = "JuMP" - objective = -1247.9784300216338 + objective = -1247.9784300226427 platform = "cron-JuMP-robustness-1.13-windows-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" modeling = "JuMP" - objective = -1247.9784298962754 + objective = -1247.978429896315 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" modeling = "JuMP" - objective = -1247.9784298960192 + objective = -1247.97842989603 platform = "cron-JuMP-robustness-1.13-windows-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" modeling = "JuMP" - objective = -1247.978429979796 + objective = -1247.9784299798018 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" modeling = "JuMP" - objective = -1247.9784299798075 + objective = -1247.978429979803 platform = "cron-JuMP-robustness-1.13-windows-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" modeling = "OptimalControl" - objective = -1247.9784300208023 + objective = -1247.9784300209178 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" @@ -99,7 +99,7 @@ value = -1247.9784300226472 [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControl" - objective = -1247.9784298963027 + objective = -1247.9784298962459 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" @@ -144,12 +144,12 @@ value = -1247.9784300226472 [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControlScalarized" - objective = -1247.9784298963027 + objective = -1247.9784298962459 platform = "cron-OptimalControlScalarized-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControlScalarized" - objective = -1247.9784298962022 + objective = -1247.9784298962459 platform = "cron-OptimalControlScalarized-1.13-windows-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" @@ -159,5 +159,48 @@ value = -1247.9784300226472 [[trapeze.solutions]] configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "JuMP solver=ipopt mu_strategy=monotone", "JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=exa solver=madnlp", "OptimalControl modeler=exa solver=madnlp barrier=loqo", "OptimalControl modeler=exa solver=madnlp mu_init=0.001", "OptimalControl modeler=exa solver=madnlp mu_init=1.0e-5", "OptimalControlScalarized modeler=exa solver=madnlp"] - objective = -1247.9784300226472 + objective = -1247.9784300208023 solves = 29 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "modeler=adnlp solver=ipopt mu_init=0.001" + cpu = "AMD EPYC 7763 64-Core Processor" + iterations = 38 + julia = "1.13.3" + modeler = "adnlp" + modeling = "OptimalControl" + objective = -1247.9784300208023 + os = "Linux" + platform = "cron-OptimalControl-robustness-1.13-ubuntu-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "ipopt" + status = "first_order" + time = 26.2624 + violation = 4.547473508864641e-13 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + mu_init = 0.001 + mu_strategy = "adaptive" + print_level = 0 + sb = "yes" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/ext/MetaData/references/insurance.toml b/ext/MetaData/references/insurance.toml index 936969df..7176952e 100644 --- a/ext/MetaData/references/insurance.toml +++ b/ext/MetaData/references/insurance.toml @@ -6,10 +6,10 @@ agreement = true grid_size = 500 parameters = "(t0 = 0, tf = 10, γ = 0.2, λ = 0.25, h0 = 1.5, w = 1, s = 10, 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)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" spread = 3.437310685571518e-6 -value = -2.0592143337375415 +value = -2.059213403165573 [[trapeze.results]] configuration = "solver=ipopt" @@ -24,7 +24,7 @@ value = -2.0592143337375415 [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" modeling = "JuMP" - objective = -2.0592143322188674 + objective = -2.0592143337375415 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" @@ -34,7 +34,7 @@ value = -2.0592143337375415 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" modeling = "JuMP" - objective = -2.059213403165573 + objective = -2.0592134031655718 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" @@ -44,7 +44,7 @@ value = -2.0592143337375415 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" modeling = "JuMP" - objective = -2.059213992882103 + objective = -2.0592072555781122 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" @@ -54,7 +54,7 @@ value = -2.0592143337375415 [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" modeling = "OptimalControl" - objective = -2.059214333311406 + objective = -2.0592143333119894 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" @@ -154,5 +154,41 @@ value = -2.0592143337375415 [[trapeze.solutions]] configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "JuMP solver=ipopt mu_strategy=monotone", "JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=exa solver=madnlp", "OptimalControl modeler=exa solver=madnlp barrier=loqo", "OptimalControl modeler=exa solver=madnlp mu_init=0.001", "OptimalControl modeler=exa solver=madnlp mu_init=1.0e-5", "OptimalControlScalarized modeler=exa solver=madnlp"] - objective = -2.0592143337375415 + objective = -2.059213403165573 solves = 28 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "solver=ipopt mu_strategy=monotone" + cpu = "AMD EPYC 9V45 96-Core Processor" + iterations = 145 + julia = "1.13.3" + modeler = "" + modeling = "JuMP" + objective = -2.059213403165573 + os = "NT" + platform = "cron-JuMP-robustness-1.13-windows-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "ipopt" + status = "LOCALLY_SOLVED" + time = 1.172 + violation = 3.9968028886505635e-15 + + [trapeze.solutions.reference.options] + linear_solver = "mumps" + max_iter = 1000 + max_wall_time = 500.0 + mu_strategy = "monotone" + sb = "yes" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + CTBase = "0.30.13" + CTModels = "0.19.8" + Ipopt = "1.16.0" + Ipopt_jll = "300.1400.1902+0" + JuMP = "1.32.1" + MUMPS_seq_jll = "500.900.100+0" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/ext/MetaData/references/jackson.toml b/ext/MetaData/references/jackson.toml index 6b8f9b2e..00f2bd6f 100644 --- a/ext/MetaData/references/jackson.toml +++ b/ext/MetaData/references/jackson.toml @@ -6,10 +6,10 @@ agreement = true grid_size = 500 parameters = "(t0 = 0, tf = 4, 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)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" -spread = 1.4915580303995847e-6 -value = -0.19182194736955152 +spread = 1.4915579296923815e-6 +value = -0.19182194736953223 [[trapeze.results]] configuration = "solver=ipopt" @@ -24,7 +24,7 @@ value = -0.19182194736955152 [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" modeling = "JuMP" - objective = -0.19182194736955152 + objective = -0.19182194736952496 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" @@ -34,7 +34,7 @@ value = -0.19182194736955152 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" modeling = "JuMP" - objective = -0.19182166125598551 + objective = -0.19182166125598554 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" @@ -54,7 +54,7 @@ value = -0.19182194736955152 [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" modeling = "OptimalControl" - objective = -0.19182194736953223 + objective = -0.19182194736952915 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" @@ -99,7 +99,7 @@ value = -0.19182194736955152 [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControl" - objective = -0.1918216612568282 + objective = -0.1918216612568496 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" @@ -144,12 +144,12 @@ value = -0.19182194736955152 [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControlScalarized" - objective = -0.1918216612568282 + objective = -0.1918216612568496 platform = "cron-OptimalControlScalarized-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControlScalarized" - objective = -0.1918216612568282 + objective = -0.1918216612568496 platform = "cron-OptimalControlScalarized-1.13-windows-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" @@ -159,5 +159,47 @@ value = -0.19182194736955152 [[trapeze.solutions]] configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "JuMP solver=ipopt mu_strategy=monotone", "JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=exa solver=madnlp", "OptimalControl modeler=exa solver=madnlp barrier=loqo", "OptimalControl modeler=exa solver=madnlp mu_init=0.001", "OptimalControl modeler=exa solver=madnlp mu_init=1.0e-5", "OptimalControlScalarized modeler=exa solver=madnlp"] - objective = -0.19182194736955152 + objective = -0.19182194736953223 solves = 29 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "636fa809ae3e6c4367343be85d25d63fe119b5bd" + configuration = "modeler=adnlp solver=ipopt" + cpu = "AMD EPYC 7763 64-Core Processor" + iterations = 58 + julia = "1.13.3" + modeler = "adnlp" + modeling = "OptimalControl" + objective = -0.19182194736953223 + os = "NT" + platform = "cron-OptimalControl-1.13-windows-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573" + solver = "ipopt" + status = "first_order" + time = 0.487541 + violation = 1.4210410625992154e-11 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + mu_strategy = "adaptive" + print_level = 0 + sb = "yes" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/ext/MetaData/references/moonlander.toml b/ext/MetaData/references/moonlander.toml index c81705be..b9c7db2e 100644 --- a/ext/MetaData/references/moonlander.toml +++ b/ext/MetaData/references/moonlander.toml @@ -6,10 +6,10 @@ agreement = false grid_size = 500 parameters = "(t0 = 0, m = 1, g = 9.81, I = 0.1, D = 1, max_thrust = 19.62, 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)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" spread = 3.505103019045729e-5 -value = 0.9618100531194832 +value = 0.9618109334441546 [[trapeze.results]] configuration = "solver=ipopt" @@ -24,7 +24,7 @@ value = 0.9618100531194832 [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" modeling = "JuMP" - objective = 0.9618100531341298 + objective = 0.9618100542096398 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" @@ -34,17 +34,12 @@ value = 0.9618100531194832 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" modeling = "JuMP" - objective = 0.961810933422959 - platform = "cron-JuMP-robustness-1.13-ubuntu-latest" - [[trapeze.results]] - configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" - modeling = "JuMP" objective = 0.9618109334441546 platform = "cron-JuMP-robustness-1.13-windows-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" modeling = "OptimalControl" - objective = 0.9618100664989868 + objective = 0.9618100531194832 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" @@ -84,7 +79,7 @@ value = 0.9618100531194832 [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControl" - objective = 0.9618109334084259 + objective = 0.9618109334084258 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" @@ -129,9 +124,88 @@ value = 0.9618100531194832 [[trapeze.solutions]] configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=exa solver=madnlp", "OptimalControl modeler=exa solver=madnlp barrier=loqo", "OptimalControl modeler=exa solver=madnlp mu_init=0.001", "OptimalControl modeler=exa solver=madnlp mu_init=1.0e-5"] - objective = 0.9618100531194832 - solves = 22 + objective = 0.9618109334441546 + solves = 21 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" + cpu = "AMD EPYC 9V45 96-Core Processor" + iterations = 66 + julia = "1.13.3" + modeler = "" + modeling = "JuMP" + objective = 0.9618109334441546 + os = "NT" + platform = "cron-JuMP-robustness-1.13-windows-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "ipopt" + status = "LOCALLY_SOLVED" + time = 1.6081 + violation = 3.552713678800501e-15 + + [trapeze.solutions.reference.options] + linear_solver = "mumps" + max_iter = 1000 + max_wall_time = 500.0 + mu_init = 0.001 + mu_strategy = "monotone" + sb = "yes" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + CTBase = "0.30.13" + CTModels = "0.19.8" + Ipopt = "1.16.0" + Ipopt_jll = "300.1400.1902+0" + JuMP = "1.32.1" + MUMPS_seq_jll = "500.900.100+0" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" [[trapeze.solutions]] configurations = ["OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone"] objective = 0.9618437655526926 solves = 1 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "modeler=adnlp solver=ipopt mu_strategy=monotone" + cpu = "AMD EPYC 7763 64-Core Processor" + iterations = 158 + julia = "1.13.3" + modeler = "adnlp" + modeling = "OptimalControl" + objective = 0.9618437655526926 + os = "Linux" + platform = "cron-OptimalControl-robustness-1.13-ubuntu-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "ipopt" + status = "acceptable" + time = 22.5685 + violation = 2.4940405296547397e-9 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + mu_strategy = "monotone" + print_level = 0 + sb = "yes" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/ext/MetaData/references/mountain_car.toml b/ext/MetaData/references/mountain_car.toml index 7d524bd3..e75813a1 100644 --- a/ext/MetaData/references/mountain_car.toml +++ b/ext/MetaData/references/mountain_car.toml @@ -6,10 +6,10 @@ agreement = false grid_size = 200 parameters = "(t0 = 0.0, tf_start = 110.0, tf_min = 0.1, pos_t0 = -0.5, vel_t0 = 0.0, pos_tf = 0.5, vel_tf_min = 0.0, pos_min = -1.2, pos_max = 0.5, vel_min = -0.07, vel_max = 0.07, u_min = -1.0, u_max = 1.0, a = 0.001, b = 0.0025, c = 3.0)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" spread = 0.00016189972119547122 -value = 102.38099470172985 +value = 102.3809949692475 [[trapeze.results]] configuration = "solver=ipopt" @@ -24,7 +24,7 @@ value = 102.38099470172985 [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" modeling = "JuMP" - objective = 102.39757015622571 + objective = 102.39757015622777 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" @@ -34,7 +34,7 @@ value = 102.38099470172985 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" modeling = "JuMP" - objective = 102.3809951930234 + objective = 102.38099519302341 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" @@ -44,7 +44,7 @@ value = 102.38099470172985 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" modeling = "JuMP" - objective = 102.3809948643563 + objective = 102.38099486435627 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" @@ -54,7 +54,7 @@ value = 102.38099470172985 [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" modeling = "OptimalControl" - objective = 102.39757015622693 + objective = 102.39757015622659 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" @@ -99,7 +99,7 @@ value = 102.38099470172985 [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControl" - objective = 102.38099519301883 + objective = 102.38099519301736 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" @@ -144,12 +144,12 @@ value = 102.38099470172985 [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControlScalarized" - objective = 102.38099519301883 + objective = 102.38099519301736 platform = "cron-OptimalControlScalarized-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControlScalarized" - objective = 102.38099519301883 + objective = 102.38099519301736 platform = "cron-OptimalControlScalarized-1.13-windows-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" @@ -159,9 +159,91 @@ value = 102.38099470172985 [[trapeze.solutions]] configurations = ["JuMP solver=ipopt mu_strategy=monotone", "JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=exa solver=madnlp", "OptimalControl modeler=exa solver=madnlp barrier=loqo", "OptimalControl modeler=exa solver=madnlp mu_init=0.001", "OptimalControlScalarized modeler=exa solver=madnlp"] - objective = 102.38099470172985 + objective = 102.3809949692475 solves = 18 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "modeler=exa solver=madnlp barrier=loqo" + cpu = "Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz" + iterations = 39 + julia = "1.13.3" + modeler = "exa" + modeling = "OptimalControl" + objective = 102.3809949692475 + os = "NT" + platform = "cron-OptimalControl-robustness-1.13-windows-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "madnlp" + status = "SOLVE_SUCCEEDED" + time = 0.632883 + violation = 2.09576279941448e-16 + + [trapeze.solutions.reference.options] + barrier = "loqo" + max_iter = 1000 + max_wall_time = 500.0 + print_level = "ERROR" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" [[trapeze.solutions]] configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=exa solver=madnlp mu_init=1.0e-5"] objective = 102.39756996372448 solves = 11 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "modeler=exa solver=madnlp mu_init=1.0e-5" + cpu = "AMD EPYC 7763 64-Core Processor" + iterations = 84 + julia = "1.13.3" + modeler = "exa" + modeling = "OptimalControl" + objective = 102.39756996372448 + os = "Linux" + platform = "cron-OptimalControl-robustness-1.13-ubuntu-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "madnlp" + status = "SOLVE_SUCCEEDED" + time = 0.0801998 + violation = 5.48172618408671e-16 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + mu_init = 1.0e-5 + print_level = "ERROR" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/ext/MetaData/references/robbins.toml b/ext/MetaData/references/robbins.toml index 628cc8bc..1fd67136 100644 --- a/ext/MetaData/references/robbins.toml +++ b/ext/MetaData/references/robbins.toml @@ -6,10 +6,10 @@ agreement = true grid_size = 500 parameters = "(t0 = 0, tf = 10, α = 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)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" spread = 8.340606134238261e-8 -value = 19.46663273582843 +value = 19.46663292374462 [[trapeze.results]] configuration = "solver=ipopt" @@ -34,7 +34,7 @@ value = 19.46663273582843 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" modeling = "JuMP" - objective = 19.46663332841832 + objective = 19.466633328418318 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" @@ -54,7 +54,7 @@ value = 19.46663273582843 [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" modeling = "OptimalControl" - objective = 19.46663316312533 + objective = 19.466633163125316 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" @@ -99,7 +99,7 @@ value = 19.46663273582843 [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControl" - objective = 19.466633278128064 + objective = 19.466633278184744 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" @@ -144,12 +144,12 @@ value = 19.46663273582843 [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControlScalarized" - objective = 19.466633278128064 + objective = 19.466633278184744 platform = "cron-OptimalControlScalarized-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControlScalarized" - objective = 19.466633278128064 + objective = 19.466633278184744 platform = "cron-OptimalControlScalarized-1.13-windows-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" @@ -159,5 +159,48 @@ value = 19.46663273582843 [[trapeze.solutions]] configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "JuMP solver=ipopt mu_strategy=monotone", "JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=exa solver=madnlp", "OptimalControl modeler=exa solver=madnlp barrier=loqo", "OptimalControl modeler=exa solver=madnlp mu_init=0.001", "OptimalControl modeler=exa solver=madnlp mu_init=1.0e-5", "OptimalControlScalarized modeler=exa solver=madnlp"] - objective = 19.46663273582843 + objective = 19.46663292374462 solves = 29 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001" + cpu = "AMD EPYC 7763 64-Core Processor" + iterations = 21 + julia = "1.13.3" + modeler = "adnlp" + modeling = "OptimalControl" + objective = 19.46663292374462 + os = "Linux" + platform = "cron-OptimalControl-robustness-1.13-ubuntu-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "ipopt" + status = "first_order" + time = 0.130021 + violation = 4.440892098500626e-16 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + mu_init = 0.001 + mu_strategy = "monotone" + print_level = 0 + sb = "yes" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/ext/MetaData/references/robot.toml b/ext/MetaData/references/robot.toml index b9159381..ebc9e599 100644 --- a/ext/MetaData/references/robot.toml +++ b/ext/MetaData/references/robot.toml @@ -6,10 +6,10 @@ agreement = true grid_size = 250 parameters = "(t0 = 0, L = 5, uρ_l = -1, uρ_u = 1, uθ_l = -1, uθ_u = 1, uϕ_l = -1, uϕ_u = 1, ρ_t0 = 4.5, θ_t0 = 0, ϕ_t0 = 0.7853981633974483, dρ_t0 = 0, dθ_t0 = 0, dϕ_t0 = 0, ρ_tf = 4.5, θ_tf = 2.0943951023931953, ϕ_tf = 0.7853981633974483, dρ_tf = 0, dθ_tf = 0, dϕ_tf = 0, ρ_l = 0, θ_l = -3.141592653589793, θ_u = π, ϕ_l = 0, ϕ_u = π, tf_l = 0.1)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" spread = 1.9739063663666287e-7 -value = 9.141125184999305 +value = 9.141126989371825 [[trapeze.results]] configuration = "solver=ipopt" @@ -34,7 +34,7 @@ value = 9.141125184999305 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" modeling = "JuMP" - objective = 9.141126989371822 + objective = 9.141126989371823 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" @@ -159,5 +159,45 @@ value = 9.141125184999305 [[trapeze.solutions]] configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "JuMP solver=ipopt mu_strategy=monotone", "JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=exa solver=madnlp", "OptimalControl modeler=exa solver=madnlp barrier=loqo", "OptimalControl modeler=exa solver=madnlp mu_init=0.001", "OptimalControl modeler=exa solver=madnlp mu_init=1.0e-5", "OptimalControlScalarized modeler=exa solver=madnlp"] - objective = 9.141125184999305 + objective = 9.141126989371825 solves = 29 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "636fa809ae3e6c4367343be85d25d63fe119b5bd" + configuration = "modeler=exa solver=madnlp" + cpu = "AMD EPYC 9V74 80-Core Processor" + iterations = 19 + julia = "1.13.3" + modeler = "exa" + modeling = "OptimalControl" + objective = 9.141126989371825 + os = "Linux" + platform = "cron-OptimalControl-1.13-ubuntu-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573" + solver = "madnlp" + status = "SOLVE_SUCCEEDED" + time = 0.0655938 + violation = 8.595554823465079e-16 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + print_level = "ERROR" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/ext/MetaData/references/rocket.toml b/ext/MetaData/references/rocket.toml index f12bef2c..417a4684 100644 --- a/ext/MetaData/references/rocket.toml +++ b/ext/MetaData/references/rocket.toml @@ -6,10 +6,10 @@ agreement = true grid_size = 500 parameters = "(t0 = 0, 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)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" spread = 1.7106896882633451e-6 -value = -1.0128367166830146 +value = -1.0128349840336874 [[trapeze.results]] configuration = "solver=ipopt" @@ -44,7 +44,7 @@ value = -1.0128367166830146 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" modeling = "JuMP" - objective = -1.012836092453478 + objective = -1.0128360924534778 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" @@ -54,7 +54,7 @@ value = -1.0128367166830146 [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" modeling = "OptimalControl" - objective = -1.0128367166830134 + objective = -1.0128367166830141 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" @@ -159,5 +159,45 @@ value = -1.0128367166830146 [[trapeze.solutions]] configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "JuMP solver=ipopt mu_strategy=monotone", "JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=exa solver=madnlp", "OptimalControl modeler=exa solver=madnlp barrier=loqo", "OptimalControl modeler=exa solver=madnlp mu_init=0.001", "OptimalControl modeler=exa solver=madnlp mu_init=1.0e-5", "OptimalControlScalarized modeler=exa solver=madnlp"] - objective = -1.0128367166830146 + objective = -1.0128349840336874 solves = 29 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "636fa809ae3e6c4367343be85d25d63fe119b5bd" + configuration = "modeler=exa solver=madnlp" + cpu = "AMD EPYC 7763 64-Core Processor" + iterations = 23 + julia = "1.13.3" + modeler = "exa" + modeling = "OptimalControl" + objective = -1.0128349840336874 + os = "NT" + platform = "cron-OptimalControl-1.13-windows-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573" + solver = "madnlp" + status = "SOLVE_SUCCEEDED" + time = 0.220189 + violation = 2.4907888794035993e-11 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + print_level = "ERROR" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/ext/MetaData/references/space_shuttle.toml b/ext/MetaData/references/space_shuttle.toml index 15598138..69a95156 100644 --- a/ext/MetaData/references/space_shuttle.toml +++ b/ext/MetaData/references/space_shuttle.toml @@ -6,55 +6,55 @@ agreement = true grid_size = 500 parameters = "(t0 = 0, w = 203000.0, g₀ = 32.174, ρ₀ = 0.002378, hᵣ = 23800, Rₑ = 20902900, μ = 1.4076539e16, S = 2690, a₀ = -0.20704, a₁ = 0.029244, b₀ = 0.07854, b₁ = -0.0061592, b₂ = 0.000621408, tf_l = 1500.0, tf_u = 2500.0, h_t0 = 2.6, ϕ_t0 = 0.0, θ_t0 = 0.0, v_t0 = 2.56, γ_t0 = -0.017453292519943295, ψ_t0 = 1.5707963267948966, α_t0 = 0.0, α_s = 0.0, β_s = 0.0, h_tf = 0.8, v_tf = 0.25, γ_tf = -0.08726646259971647, h_l = 0, ϕ_l = -6.283185307179586, ϕ_u = 6.283185307179586, θ_l = -1.5533430342749532, θ_u = 1.5533430342749532, v_l = 0.0001, γ_l = -1.5533430342749532, γ_u = 1.5533430342749532, ψ_l = -6.283185307179586, ψ_u = 6.283185307179586, α_l = -1.5707963267948966, α_u = 1.5707963267948966, β_l = -1.5533430342749532, β_u = 0.017453292519943295)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" spread = 6.232111392599022e-10 -value = -0.5958750134583887 +value = -0.5958750133508789 [[trapeze.results]] configuration = "solver=ipopt" modeling = "JuMP" - objective = -0.5958750133605147 + objective = -0.5958750133627942 platform = "cron-JuMP-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt" modeling = "JuMP" - objective = -0.5958750133605122 + objective = -0.5958750133627957 platform = "cron-JuMP-1.13-windows-latest" [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" modeling = "JuMP" - objective = -0.5958750133605153 + objective = -0.5958750133627942 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" modeling = "JuMP" - objective = -0.5958750133605122 + objective = -0.5958750133627957 platform = "cron-JuMP-robustness-1.13-windows-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" modeling = "JuMP" - objective = -0.5958750133130643 + objective = -0.5958750133150453 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" modeling = "JuMP" - objective = -0.5958750133130637 + objective = -0.5958750133150452 platform = "cron-JuMP-robustness-1.13-windows-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" modeling = "JuMP" - objective = -0.5958750133508761 + objective = -0.5958750133508767 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" modeling = "JuMP" - objective = -0.5958750133508751 + objective = -0.595875013350878 platform = "cron-JuMP-robustness-1.13-windows-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" modeling = "OptimalControl" - objective = -0.5958750133627926 + objective = -0.5958750133627936 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" @@ -99,7 +99,7 @@ value = -0.5958750134583887 [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControl" - objective = -0.5958750133150457 + objective = -0.595875013315046 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" @@ -144,12 +144,12 @@ value = -0.5958750134583887 [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControlScalarized" - objective = -0.5958750133150457 + objective = -0.595875013315046 platform = "cron-OptimalControlScalarized-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControlScalarized" - objective = -0.5958750133150457 + objective = -0.595875013315046 platform = "cron-OptimalControlScalarized-1.13-windows-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" @@ -159,5 +159,48 @@ value = -0.5958750134583887 [[trapeze.solutions]] configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "JuMP solver=ipopt mu_strategy=monotone", "JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=exa solver=madnlp", "OptimalControl modeler=exa solver=madnlp barrier=loqo", "OptimalControl modeler=exa solver=madnlp mu_init=0.001", "OptimalControl modeler=exa solver=madnlp mu_init=1.0e-5", "OptimalControlScalarized modeler=exa solver=madnlp"] - objective = -0.5958750134583887 + objective = -0.5958750133508789 solves = 29 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "0f6b1ec2b60b46fcc5141592fd08794531e1f519" + configuration = "modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001" + cpu = "AMD EPYC 7763 64-Core Processor" + iterations = 106 + julia = "1.13.3" + modeler = "adnlp" + modeling = "OptimalControl" + objective = -0.5958750133508789 + os = "Linux" + platform = "cron-OptimalControl-robustness-1.13-ubuntu-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" + solver = "ipopt" + status = "first_order" + time = 5.34838 + violation = 3.1283448054253427e-11 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + mu_init = 0.001 + mu_strategy = "monotone" + print_level = 0 + sb = "yes" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/ext/MetaData/references/steering.toml b/ext/MetaData/references/steering.toml index a1b063e4..fbc040e8 100644 --- a/ext/MetaData/references/steering.toml +++ b/ext/MetaData/references/steering.toml @@ -6,10 +6,10 @@ agreement = true grid_size = 500 parameters = "(t0 = 0, a = 100, u_min = -1.5707963267948966, u_max = 1.5707963267948966, tf_l = 0, x₁_t0 = 0, x₂_t0 = 0, x₃_t0 = 0, x₄_t0 = 0, x₂_tf = 5, x₃_tf = 45, x₄_tf = 0)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" -spread = 2.3955468295548094e-10 -value = 0.554571860956095 +spread = 2.395548831501e-10 +value = 0.5545718610889453 [[trapeze.results]] configuration = "solver=ipopt" @@ -19,17 +19,17 @@ value = 0.554571860956095 [[trapeze.results]] configuration = "solver=ipopt" modeling = "JuMP" - objective = 0.5545718610889453 + objective = 0.5545718610889454 platform = "cron-JuMP-1.13-windows-latest" [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" modeling = "JuMP" - objective = 0.5545718610889453 + objective = 0.5545718610889452 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" modeling = "JuMP" - objective = 0.5545718610889453 + objective = 0.5545718610889454 platform = "cron-JuMP-robustness-1.13-windows-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" @@ -39,7 +39,7 @@ value = 0.554571860956095 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" modeling = "JuMP" - objective = 0.5545718610887032 + objective = 0.5545718610887033 platform = "cron-JuMP-robustness-1.13-windows-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" @@ -49,7 +49,7 @@ value = 0.554571860956095 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" modeling = "JuMP" - objective = 0.5545718609572946 + objective = 0.5545718609572947 platform = "cron-JuMP-robustness-1.13-windows-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" @@ -159,5 +159,47 @@ value = 0.554571860956095 [[trapeze.solutions]] configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "JuMP solver=ipopt mu_strategy=monotone", "JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=exa solver=madnlp", "OptimalControl modeler=exa solver=madnlp barrier=loqo", "OptimalControl modeler=exa solver=madnlp mu_init=0.001", "OptimalControl modeler=exa solver=madnlp mu_init=1.0e-5", "OptimalControlScalarized modeler=exa solver=madnlp"] - objective = 0.554571860956095 + objective = 0.5545718610889453 solves = 29 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "636fa809ae3e6c4367343be85d25d63fe119b5bd" + configuration = "modeler=adnlp solver=ipopt" + cpu = "AMD EPYC 7763 64-Core Processor" + iterations = 8 + julia = "1.13.3" + modeler = "adnlp" + modeling = "OptimalControl" + objective = 0.5545718610889453 + os = "NT" + platform = "cron-OptimalControl-1.13-windows-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573" + solver = "ipopt" + status = "first_order" + time = 0.227696 + violation = 1.6216486486975157e-11 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + mu_strategy = "adaptive" + print_level = 0 + sb = "yes" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/ext/MetaData/references/vanderpol.toml b/ext/MetaData/references/vanderpol.toml index c0189114..3a8e4bf5 100644 --- a/ext/MetaData/references/vanderpol.toml +++ b/ext/MetaData/references/vanderpol.toml @@ -6,10 +6,10 @@ agreement = true grid_size = 500 parameters = "(t0 = 0, tf = 2, ω = 1, ε = 1, x₁_t0 = 1, x₂_t0 = 0)" -run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288933404 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288939786 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288946781 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42288952545" +run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100" source = "computed" spread = 4.026341842688888e-15 -value = 1.0478115516287476 +value = 1.0478115516287507 [[trapeze.results]] configuration = "solver=ipopt" @@ -24,7 +24,7 @@ value = 1.0478115516287476 [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" modeling = "JuMP" - objective = 1.0478115516287516 + objective = 1.0478115516287514 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_init=0.001" @@ -34,7 +34,7 @@ value = 1.0478115516287476 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" modeling = "JuMP" - objective = 1.0478115516287516 + objective = 1.0478115516287514 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone" @@ -44,7 +44,7 @@ value = 1.0478115516287476 [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" modeling = "JuMP" - objective = 1.0478115516287516 + objective = 1.0478115516287514 platform = "cron-JuMP-robustness-1.13-ubuntu-latest" [[trapeze.results]] configuration = "solver=ipopt mu_strategy=monotone mu_init=0.001" @@ -54,7 +54,7 @@ value = 1.0478115516287476 [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" modeling = "OptimalControl" - objective = 1.0478115516287518 + objective = 1.0478115516287512 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=adnlp solver=ipopt" @@ -99,7 +99,7 @@ value = 1.0478115516287476 [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControl" - objective = 1.0478115516287503 + objective = 1.0478115516287476 platform = "cron-OptimalControl-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" @@ -144,12 +144,12 @@ value = 1.0478115516287476 [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControlScalarized" - objective = 1.0478115516287503 + objective = 1.0478115516287476 platform = "cron-OptimalControlScalarized-1.13-ubuntu-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" modeling = "OptimalControlScalarized" - objective = 1.0478115516287503 + objective = 1.0478115516287476 platform = "cron-OptimalControlScalarized-1.13-windows-latest" [[trapeze.results]] configuration = "modeler=exa solver=madnlp" @@ -159,5 +159,47 @@ value = 1.0478115516287476 [[trapeze.solutions]] configurations = ["JuMP solver=ipopt", "JuMP solver=ipopt mu_init=0.001", "JuMP solver=ipopt mu_strategy=monotone", "JuMP solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt", "OptimalControl modeler=adnlp solver=ipopt mu_init=0.001", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone", "OptimalControl modeler=adnlp solver=ipopt mu_strategy=monotone mu_init=0.001", "OptimalControl modeler=exa solver=madnlp", "OptimalControl modeler=exa solver=madnlp barrier=loqo", "OptimalControl modeler=exa solver=madnlp mu_init=0.001", "OptimalControl modeler=exa solver=madnlp mu_init=1.0e-5", "OptimalControlScalarized modeler=exa solver=madnlp"] - objective = 1.0478115516287476 + objective = 1.0478115516287507 solves = 29 + + [trapeze.solutions.reference] + arch = "x86_64" + commit = "636fa809ae3e6c4367343be85d25d63fe119b5bd" + configuration = "modeler=adnlp solver=ipopt" + cpu = "AMD EPYC 7763 64-Core Processor" + iterations = 3 + julia = "1.13.3" + modeler = "adnlp" + modeling = "OptimalControl" + objective = 1.0478115516287507 + os = "NT" + platform = "cron-OptimalControl-1.13-windows-latest" + run = "https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573" + solver = "ipopt" + status = "first_order" + time = 0.0753526 + violation = 1.0363609970198695e-10 + + [trapeze.solutions.reference.options] + max_iter = 1000 + max_wall_time = 500.0 + mu_strategy = "adaptive" + print_level = 0 + sb = "yes" + tol = 1.0e-8 + + [trapeze.solutions.reference.versions] + ADNLPModels = "0.8.15" + CTBase = "0.30.13" + CTDirect = "1.1.8-beta" + CTModels = "0.19.8" + CTSolvers = "0.5.8" + ExaModels = "0.12.2" + Ipopt_jll = "300.1400.1902+0" + MUMPS_seq_jll = "500.900.100+0" + MadNLP = "0.10.3" + NLPModels = "0.21.12" + NLPModelsIpopt = "0.11.3" + OptimalControl = "2.2.1-beta" + OptimalControlProblems = "0.5.0" + Test = "1.11.0" diff --git a/src/README.md b/src/README.md index 64e62572..a7755dac 100644 --- a/src/README.md +++ b/src/README.md @@ -13,7 +13,7 @@ In dependency order: a submodule uses only those above it (`MOD7`). | --- | --- | | `Modelings` | the backend types and the modeling table `MODELING_SPECS`, the single place where a modeling is declared | | `Metadata` | the list of the problems (the files of `ext/MetaData/`), the schema `METADATA_SCHEMA`, loading and checking the metadata, reading it (`problem_metadata`, `parameters_data`, `initial_guess_data`…), the analytic solutions used by the metadata files | -| `References` | the reference objectives and known solutions (`ext/MetaData/references/`), `reference_objective`, `solution_kind`, `reference_solution_data`, `SAME_SOLUTION` | +| `References` | the reference objectives and known solutions (`ext/MetaData/references/`), `reference_objective`, `solution_kind`, `reference_solution_data`, `SAME_SOLUTION`; the references as values (#409): `AbstractReference`, `NumericalReference` (a known solution and how it was obtained), `AnalyticReference`, `references`, `best_reference`, `analytic_reference`, `objective(ref)` | | `Catalogue` | one function per problem (`beam`…), whose methods the extensions define, `problems`, `status`, the fingerprint of the files that define a problem | | `Problems` | `Problem`, `features`, `solution`, and the accessors shared with OptimalControl (`state`, `objective`…) | diff --git a/src/References/References.jl b/src/References/References.jl index a72e4d17..ee5b721d 100644 --- a/src/References/References.jl +++ b/src/References/References.jl @@ -2,19 +2,27 @@ The references of the problems: the reference objectives and the known solutions of each problem, read from `ext/MetaData/references/.toml` (generated by `tools/references/update.jl`), and the analytic solutions of the continuous problems: -`reference_objective`, `solution_kind`, `reference_solution_data`, `SAME_SOLUTION`. +`reference_objective`, `solution_kind`, `reference_solution_data`, `SAME_SOLUTION`. Each +known solution says how it was obtained, as a `NumericalReference`; an analytic solution is +an `AnalyticReference` (#409): `references`, `best_reference`, `analytic_reference`, and +`objective(ref)`. Depends on `Metadata`, whose metadata it completes with the field `:reference_objective`. """ module References -using DocStringExtensions: TYPEDSIGNATURES +using CTBase: CTBase +using CTModels: CTModels +using DocStringExtensions: TYPEDEF, TYPEDFIELDS, TYPEDSIGNATURES using TOML: TOML using ..Metadata: Metadata +include(joinpath(@__DIR__, "types.jl")) include(joinpath(@__DIR__, "objectives.jl")) export reference_objective, reference_solution_data, solution_kind, SAME_SOLUTION +export AbstractReference, AnalyticReference, NumericalReference +export references, best_reference, analytic_reference end # module References diff --git a/src/References/objectives.jl b/src/References/objectives.jl index cc320a62..c39ef90c 100644 --- a/src/References/objectives.jl +++ b/src/References/objectives.jl @@ -45,7 +45,20 @@ function _references( ) return REFERENCE_FIELDS[key](table[string(key)]) end - push!(entries, Symbol(scheme) => NamedTuple{keys(REFERENCE_FIELDS)}(values)) + # the known solutions with how they were obtained (#409), best first; none for a + # file written before #409 + found = [ + _numerical_reference(problem, Symbol(scheme), Int(table["grid_size"]), s) for + s in table["solutions"] + ] + references = NumericalReference[r for r in found if !isnothing(r)] + length(references) == length(found) || empty!(references) + push!( + entries, + Symbol(scheme) => NamedTuple{(keys(REFERENCE_FIELDS)..., :references)}(( + values..., references + )), + ) end return NamedTuple(entries) end @@ -133,3 +146,63 @@ function solution_kind( any(s -> _relative_gap(objective, s) <= SAME_SOLUTION, solutions) && return :local return :new end + +""" +$(TYPEDSIGNATURES) + +The known solutions of `problem` discretized on `grid_size` steps with `scheme`, best first, +each with how it was obtained (#409); empty when the problem has no reference for this +discretization. The first one is the reference objective. + +# Example + +```julia-repl +julia> ref = first(OptimalControlProblems.references(:beam)) +julia> ref.solver, ref.options.tol, ref.status +``` +""" +function references( + problem::Symbol; + grid_size::Int=Metadata.grid_size_data(problem), + scheme::Symbol=:trapeze, +) + tables = get(Metadata.problem_metadata(problem), :reference_objective, nothing) + isnothing(tables) && return NumericalReference[] + entry = get(tables, scheme, nothing) + (isnothing(entry) || entry.grid_size != grid_size) && return NumericalReference[] + return entry.references +end + +""" +$(TYPEDSIGNATURES) + +The best known solution of `problem` discretized on `grid_size` steps with `scheme`, with +how it was obtained, or `nothing`: its objective is `reference_objective(problem)`. +""" +function best_reference( + problem::Symbol; + grid_size::Int=Metadata.grid_size_data(problem), + scheme::Symbol=:trapeze, +) + found = references(problem; grid_size, scheme) + return isempty(found) ? nothing : first(found) +end + +""" +$(TYPEDSIGNATURES) + +The analytic solution of the continuous `problem` for `parameters` (merged with the default +ones) as an [`AnalyticReference`](@ref), or `nothing` when none is known for them. +""" +function analytic_reference(problem::Symbol, parameters::Union{Nothing,NamedTuple}=nothing) + solution = reference_solution_data(problem, parameters) + isnothing(solution) && return nothing + return AnalyticReference( + problem, + Metadata.parameters_data(problem, parameters), + Float64(solution.objective), + solution.state, + solution.control, + solution.source, + ) +end diff --git a/src/References/types.jl b/src/References/types.jl new file mode 100644 index 00000000..9b5a49ed --- /dev/null +++ b/src/References/types.jl @@ -0,0 +1,180 @@ +# The references of a problem as values (#409): an analytic solution of the continuous +# problem, or a solve of the discretized problem with how it was obtained. Built from the +# metadata and from the generated reference files, never written by hand. + +""" +$(TYPEDEF) + +A reference solution of a problem: its objective, read with `objective(ref)`. + +Two kinds, with different data: [`AnalyticReference`](@ref), the solution of the continuous +problem, and [`NumericalReference`](@ref), a solve of the discretized problem. +""" +abstract type AbstractReference end + +""" +$(TYPEDSIGNATURES) + +The objective of the reference `ref`. Every subtype of `AbstractReference` implements it. +""" +function CTModels.Components.objective(ref::AbstractReference) + return throw( + CTBase.Exceptions.NotImplemented( + "objective is not implemented for $(typeof(ref))"; + required_method="objective(::$(typeof(ref)))", + suggestion="define it for every subtype of AbstractReference", + ), + ) +end + +""" +$(TYPEDEF) + +The analytic solution of the continuous problem `problem` for `parameters` (#379): `state` +and `control`, functions of the time, the `objective`, and the `source` it comes from. The +objective of a discretized problem differs from it by the discretization error. + +# Fields + +$(TYPEDFIELDS) +""" +struct AnalyticReference{S,U} <: AbstractReference + "Name of the problem." + problem::Symbol + "Parameters of the problem the solution is for." + parameters::Union{Nothing,NamedTuple} + "Objective of the continuous problem." + objective::Float64 + "State, a function of the time." + state::S + "Control, a function of the time." + control::U + "Where the solution comes from (a publication)." + source::String +end + +CTModels.Components.objective(ref::AnalyticReference) = ref.objective + +""" +$(TYPEDEF) + +A known solution of the problem `problem` discretized on `grid_size` steps with `scheme` +(#378), and how it was obtained (#409): one of the solves that reached it, chosen to +represent it (a strict convergence before an acceptable one, then the smallest constraint +violation), with its modeling, modeler, solver and every option of the solver, its exit +status, iterations, time and constraint violation, and the environment of its run. + +Generated by `tools/references/update.jl` from the convergence and robustness tests. The +trajectories are not kept: the configuration is enough to solve again. + +# Fields + +$(TYPEDFIELDS) +""" +struct NumericalReference <: AbstractReference + "Name of the problem." + problem::Symbol + "Discretization scheme, e.g. `:trapeze`." + scheme::Symbol + "Number of steps of the grid." + grid_size::Int + "Objective of the solve." + objective::Float64 + "Number of solves, every modeling, configuration and platform, that reached the solution." + solves::Int + "The configurations that reached it, `\" \"`." + configurations::Vector{String} + "Modeling of the solve, e.g. `:OptimalControl`." + modeling::Symbol + "Configuration of the solve, as the tests name it." + configuration::String + "Modeler of the solve (`:adnlp`, `:exa`), `nothing` for JuMP." + modeler::Union{Nothing,Symbol} + "Solver of the solve, e.g. `:ipopt`." + solver::Symbol + "Every option given to the solver, defaults included." + options::NamedTuple + "Exit status of the solver, e.g. `:first_order`, `:LOCALLY_SOLVED`, `:acceptable`." + status::Symbol + "Number of iterations." + iterations::Int + "Solve time in seconds, on `platform`." + time::Float64 + "Largest violation of the constraints, as the modeling measures it." + violation::Float64 + "Platform of the run, e.g. `cron-OptimalControl-1.13-ubuntu-latest`." + platform::String + "The run that solved it (a GitHub Actions run), or `local`." + run::String + "Commit of the package." + commit::String + "Julia version." + julia::VersionNumber + "Operating system, architecture and processor of the platform." + machine::NamedTuple{(:os, :arch, :cpu),Tuple{String,String,String}} + "Versions of the packages that modeled, discretized and solved it." + versions::NamedTuple +end + +CTModels.Components.objective(ref::NumericalReference) = ref.objective + +# A TOML table as a `NamedTuple` with sorted keys, so that two equal tables give equal values. +_namedtuple(table) = (; (Symbol(k) => table[k] for k in sort!(collect(keys(table))))...) + +# The `NumericalReference` of a known solution, from its table in a reference file, or +# `nothing` for a file written before #409. Such a file still loads, so that +# `tools/references/update.jl`, which loads the package, can write it again; the consistency +# tests fail on it. +function _numerical_reference(problem::Symbol, scheme::Symbol, grid_size::Int, solution) + haskey(solution, "reference") || return nothing + r = solution["reference"] + return NumericalReference( + problem, + scheme, + grid_size, + Float64(solution["objective"]), + Int(solution["solves"]), + String.(solution["configurations"]), + Symbol(r["modeling"]), + r["configuration"], + isempty(r["modeler"]) ? nothing : Symbol(r["modeler"]), + Symbol(r["solver"]), + _namedtuple(r["options"]), + Symbol(r["status"]), + Int(r["iterations"]), + Float64(r["time"]), + Float64(r["violation"]), + r["platform"], + r["run"], + r["commit"], + VersionNumber(r["julia"]), + (os=r["os"], arch=r["arch"], cpu=r["cpu"]), + _namedtuple(r["versions"]), + ) +end + +function Base.show(io::IO, ref::NumericalReference) + return print(io, "NumericalReference(:", ref.problem, ", ", ref.objective, ")") +end + +function Base.show(io::IO, ::MIME"text/plain", ref::NumericalReference) + println( + io, + "Known solution of ", + ref.problem, + ", ", + ref.scheme, + " on ", + ref.grid_size, + " steps", + ) + println(io, " objective: ", ref.objective, " (", ref.solves, " solves)") + modeler = isnothing(ref.modeler) ? "" : string(ref.modeler, " + ") + println(io, " solved by: ", ref.modeling, ", ", modeler, ref.solver, ", ", ref.status) + println(io, " iterations: ", ref.iterations, ", violation ", ref.violation) + return print(io, " run: ", ref.run, " (", ref.platform, ")") +end + +function Base.show(io::IO, ref::AnalyticReference) + return print(io, "AnalyticReference(:", ref.problem, ", ", ref.objective, ")") +end diff --git a/test/suite/core/test_consistency.jl b/test/suite/core/test_consistency.jl index a545b1af..d652851b 100644 --- a/test/suite/core/test_consistency.jl +++ b/test/suite/core/test_consistency.jl @@ -87,6 +87,10 @@ is reported, not failed (the comparison rule fails when it has no other referenc """ function test_reference_objectives() Test.@testset "reference objectives" verbose = VERBOSE begin + # generated by tools/references/update.jl, never written by hand: its header (#409) + for file in readdir(OCP.References.REFERENCES_PATH; join=true) + Test.@test startswith(read(file, String), "# Reference objectives of the problem") + end for problem in OCP.problems(; status=:all) data = OCP.problem_metadata(problem) references = get(data, :reference_objective, (;)) @@ -105,6 +109,11 @@ function test_reference_objectives() Test.@test all(s -> kind(s) === :local, entry.solutions[2:end]) far = maximum(abs, entry.solutions) * 10 + 1 Test.@test kind(far) === :new + # each known solution says how it was obtained (#409): a file written before + # has none, compute the references again (tools/references/update.jl) + Test.@test length(entry.references) == length(entry.solutions) + Test.@test [r.objective for r in entry.references] == entry.solutions + Test.@test all(r -> r.grid_size == entry.grid_size && r.scheme === scheme, entry.references) end valid = [name for (name, s) in pairs(OCP.status(problem)) if s === :valid] (isempty(valid) || !isnothing(OCP.reference_objective(problem))) && continue diff --git a/test/suite/core/test_references.jl b/test/suite/core/test_references.jl index bc02ef9a..e709296a 100644 --- a/test/suite/core/test_references.jl +++ b/test/suite/core/test_references.jl @@ -1,5 +1,6 @@ module TestReferences +using CTBase: CTBase using Test: Test using OptimalControlProblems: OptimalControlProblems @@ -7,34 +8,114 @@ const VERBOSE = isdefined(Main, :TestOptions) ? Main.TestOptions.VERBOSE : true const SHOWTIMING = isdefined(Main, :TestOptions) ? Main.TestOptions.SHOWTIMING : true const OCP = OptimalControlProblems -const TOOL = joinpath(pkgdir(OptimalControlProblems), "tools", "references", "references.jl") +const TOOL = joinpath( + pkgdir(OptimalControlProblems), "tools", "references", "references.jl" +) isdefined(@__MODULE__, :ReferenceObjectives) || include(TOOL) +# A reference type that does not implement the contract (TST3: at the top level). +struct FakeReference <: OptimalControlProblems.AbstractReference end + # Fake problems: the tool is tested on its own, apart from the collection. const DEFAULTS = Dict( :alpha => (grid_size=100, parameters="(a = 1,)"), :omega => (grid_size=50, parameters="nothing"), ) -const HEADER = "test\tproblem\tmodeling\tconfiguration\tgrid_size\tscheme\tresult\treason\tobjective\titerations\ttime\tgap" +const HEADER = "test\tproblem\tmodeling\tconfiguration\tgrid_size\tscheme\tresult\treason\tobjective\titerations\ttime\tgap\tmodeler\tsolver\toptions\tviolation" -row(test, problem, modeling, grid, result, objective) = join( - (test, problem, modeling, "c=1", grid, "trapeze", result, "R", objective, "3", "0.1", ""), "\t" +# A row of a results file; `reason` and `violation` choose the representative of a solution +# (#409): a strict convergence before an acceptable one, then the smallest violation. +function row( + test, problem, modeling, grid, result, objective; reason="R", violation="1.0e-9" ) + return join( + ( + test, + problem, + modeling, + "c=1", + grid, + "trapeze", + result, + reason, + objective, + "3", + "0.1", + "", + "adnlp", + "ipopt", + "{tol = 1.0e-8, mu_strategy = \"adaptive\"}", + violation, + ), + "\t", + ) +end + +# The environment of a run, written next to its results file by the tests (#412). +function environment(file; run="https://run/1") + return write( + replace(file, "-results.tsv" => "-environment.toml"), + """ + arch = "x86_64" + commit = "abc" + cpu = "CPU" + julia = "1.13.3" + os = "Linux" + run = "$(run)" + threads = 1 + + [packages] + Ipopt_jll = "300.1400.1902+0" + """, + ) +end function results_dir() dir = mktempdir() mkpath(joinpath(dir, "cron-ubuntu")) + file = joinpath(dir, "cron-ubuntu", "X-cron-results.tsv") + environment(file) write( - joinpath(dir, "cron-ubuntu", "X-cron-results.tsv"), + file, join( [ HEADER, - row("test_convergence c=1", "alpha", "A", "100", "converged", "2.0000000001"), - row("test_convergence c=1", "alpha", "B", "100", "converged", "2.0"), + # the smallest objective and violation, but acceptable: not the representative + row( + "test_convergence c=1", + "alpha", + "A", + "100", + "converged", + "1.99999999"; + reason="acceptable", + violation="1.0e-13", + ), + row( + "test_convergence c=1", + "alpha", + "B", + "100", + "converged", + "2.0"; + violation="1.0e-6", + ), + # strict, the smallest violation: the representative of the solution + row( + "test_convergence c=1", + "alpha", + "G", + "100", + "converged", + "2.0000000001"; + violation="1.0e-12", + ), row("test_convergence c=1", "alpha", "C", "100", "not_converged", "1.0"), # not converged row("test_convergence c=1", "alpha", "D", "10", "converged", "1.5"), # not the default grid row("test_smoke c=1", "alpha", "E", "100", "converged", "1.0"), # not a convergence test - row("test_robustness c=1 mu=1", "alpha", "F", "100", "converged", "2.00001"), # same solution + row( + "test_robustness c=1 mu=1", "alpha", "F", "100", "converged", "2.00001" + ), # same solution row("test_convergence c=1", "omega", "A", "50", "converged", "3.0"), row("test_convergence c=1", "omega", "B", "50", "converged", "3.3"), row("test_convergence c=1", "gamma", "A", "50", "converged", "1.0"), # unknown problem @@ -42,7 +123,14 @@ function results_dir() "\n", ) * "\n", ) - write(joinpath(dir, "local-results.tsv"), HEADER * "\n" * row("test_convergence c=1", "omega", "C", "50", "converged", "3.0") * "\n") + write( + joinpath(dir, "local-results.tsv"), + HEADER * + "\n" * + row("test_convergence c=1", "omega", "C", "50", "converged", "3.0") * + "\n", + ) + environment(joinpath(dir, "local-results.tsv"); run="local") return dir end @@ -50,19 +138,36 @@ function test_references() Test.@testset "reference objectives" verbose = VERBOSE showtiming = SHOWTIMING begin R = ReferenceObjectives rows = R.read_results([results_dir()]) - Test.@test length(rows) == 10 - Test.@test count(r -> r["platform"] == "cron-ubuntu", rows) == 9 + Test.@test length(rows) == 11 + Test.@test count(r -> r["platform"] == "cron-ubuntu", rows) == 10 Test.@test count(r -> r["platform"] == "local", rows) == 1 tables = R.references(rows, DEFAULTS; run="https://run") Test.@test sort!(collect(keys(tables))) == [:alpha, :omega] alpha = tables[:alpha]["trapeze"] - # the best converged objective at the default grid, from convergence and robustness tests - Test.@test alpha["value"] == 2.0 - Test.@test length(alpha["results"]) == 3 + # the objective of the representative of the best solution, at the default grid, from + # convergence and robustness tests (#409): strict, then the smallest violation + Test.@test alpha["value"] == 2.0000000001 + Test.@test length(alpha["results"]) == 4 # within SAME_SOLUTION (1e-5): one solution, the configurations agree Test.@test length(alpha["solutions"]) == 1 - Test.@test alpha["solutions"][1]["solves"] == 3 + Test.@test alpha["solutions"][1]["solves"] == 4 + reference = alpha["solutions"][1]["reference"] + Test.@test reference["modeling"] == "G" + Test.@test reference["objective"] == alpha["value"] + Test.@test reference["violation"] == 1e-12 + Test.@test reference["status"] == "R" + Test.@test reference["options"] == Dict("tol" => 1e-8, "mu_strategy" => "adaptive") + Test.@test (reference["modeler"], reference["solver"]) == ("adnlp", "ipopt") + Test.@test reference["run"] == "https://run/1" && reference["commit"] == "abc" + Test.@test reference["platform"] == "cron-ubuntu" + Test.@test reference["versions"] == Dict("Ipopt_jll" => "300.1400.1902+0") + # without a strict convergence, an acceptable solve represents its solution + acceptable = R.representative([ + merge(r, Dict("reason" => "acceptable")) for + r in rows if r["problem"] == "omega" + ]) + Test.@test acceptable["reason"] == "acceptable" Test.@test alpha["agreement"] Test.@test alpha["grid_size"] == 100 && alpha["parameters"] == "(a = 1,)" omega = tables[:omega]["trapeze"] @@ -80,23 +185,88 @@ function test_references() Test.@test basename.(files) == ["alpha.toml", "omega.toml"] Test.@test startswith(read(files[1], String), "# Reference objectives") read_back = OCP.References._references(:alpha, files[1]) - Test.@test read_back.trapeze.value == 2.0 + Test.@test read_back.trapeze.value == 2.0000000001 Test.@test read_back.trapeze.source === :computed Test.@test read_back.trapeze.run == "https://run" - Test.@test read_back.trapeze.solutions == [2.0] - Test.@test OCP.References._references(:omega, files[2]).trapeze.solutions == [3.0, 3.3] + Test.@test read_back.trapeze.solutions == [2.0000000001] + # the known solution with how it was obtained (#409) + ref = only(read_back.trapeze.references) + Test.@test ref isa OCP.NumericalReference + Test.@test (ref.problem, ref.scheme, ref.grid_size) == (:alpha, :trapeze, 100) + Test.@test OCP.objective(ref) == 2.0000000001 + Test.@test (ref.modeling, ref.modeler, ref.solver, ref.status) == + (:G, :adnlp, :ipopt, :R) + Test.@test ref.options == (mu_strategy="adaptive", tol=1e-8) + Test.@test ref.julia == v"1.13.3" && ref.machine.os == "Linux" + Test.@test ref.versions.Ipopt_jll == "300.1400.1902+0" + Test.@test ref.solves == 4 && ref.violation == 1e-12 + Test.@test OCP.References._references(:omega, files[2]).trapeze.solutions == + [3.0, 3.3] # a scheme not recomputed is kept R.write_references(dir, Dict(:alpha => Dict{String,Any}("midpoint" => alpha))) - Test.@test keys(OCP.References._references(:alpha, files[1])) ⊇ (:trapeze, :midpoint) + Test.@test keys(OCP.References._references(:alpha, files[1])) ⊇ + (:trapeze, :midpoint) # a file that misses a field is an error at load time broken = joinpath(dir, "broken.toml") write(broken, "[trapeze]\nvalue = 1.0\n") Test.@test_throws ErrorException OCP.References._references(:alpha, broken) Test.@test isnothing(OCP.References._references(:alpha, joinpath(dir, "none.toml"))) + + # a file written before #409 loads, without references, so that the tool can write + # it again; the consistency tests fail on it + old = joinpath(dir, "old.toml") + table = deepcopy(alpha) + foreach(s -> delete!(s, "reference"), table["solutions"]) + R.write_references(dir, Dict(:old => Dict{String,Any}("trapeze" => table))) + Test.@test isempty(OCP.References._references(:old, old).trapeze.references) + + # results recorded before #409, or without their environment, cannot say how a + # solution was obtained: an error + stale = mktempdir() + write( + joinpath(stale, "X-results.tsv"), join(split(HEADER, '\t')[1:12], '\t') * "\n" + ) + Test.@test_throws ErrorException R.read_results([stale]) + bare = mktempdir() + write(joinpath(bare, "X-results.tsv"), HEADER * "\n") + Test.@test_throws ErrorException R.read_results([bare]) + end +end + +# The references of the collection as values (#409): known solutions and analytic ones. +function test_reference_api() + Test.@testset "reference values" verbose = VERBOSE showtiming = SHOWTIMING begin + Test.@test_throws CTBase.Exceptions.NotImplemented OCP.objective(FakeReference()) + for problem in OCP.problems(; status=:all) + found = OCP.references(problem) + best = OCP.best_reference(problem) + if isempty(found) + Test.@test isnothing(best) + Test.@test isnothing(OCP.reference_objective(problem)) + else + Test.@test best === first(found) + Test.@test OCP.objective(best) == OCP.reference_objective(problem) + Test.@test issorted(OCP.objective.(found)) + Test.@test all(r -> r.problem === problem, found) + Test.@test all( + r -> OCP.solution_kind(problem, OCP.objective(r)) in (:best, :local), + found, + ) + end + # another discretization has no reference + Test.@test isempty(OCP.references(problem; grid_size=1)) + analytic = OCP.analytic_reference(problem) + data = OCP.reference_solution_data(problem) + Test.@test isnothing(analytic) == isnothing(data) + isnothing(analytic) && continue + Test.@test analytic isa OCP.AnalyticReference + Test.@test OCP.objective(analytic) == data.objective + Test.@test analytic.source == data.source + end end end end # module TestReferences -test_references() = TestReferences.test_references() +test_references() = (TestReferences.test_references(); TestReferences.test_reference_api()) diff --git a/tools/references/README.md b/tools/references/README.md index f48fe526..35be1a9e 100644 --- a/tools/references/README.md +++ b/tools/references/README.md @@ -11,13 +11,41 @@ discretization, or `nothing`. `OptimalControlProblems.solution_kind(p, objective scheme)` says which known solution an objective is: `:best`, `:local` or `:new`. The convergence and robustness reports (`test/README.md`) show both for each solve. +Each known solution also says **how it was obtained** (#409), as a value: +`OptimalControlProblems.references(p; grid_size, scheme)` returns them best first, as +`NumericalReference`s, and `OptimalControlProblems.best_reference(p)` the first one: + +```julia +ref = OptimalControlProblems.best_reference(:moonlander) +ref.modeling, ref.modeler, ref.solver # how it was modeled and solved +ref.options # every option of the solver, defaults included +ref.status, ref.iterations, ref.violation +ref.run, ref.commit, ref.versions # where, and with which packages +OptimalControlProblems.objective(ref) +``` + +An analytic solution of the continuous problem is an `AnalyticReference` +(`OptimalControlProblems.analytic_reference(p, parameters)`), with its state, control, +objective and source. Both are `AbstractReference`s. The trajectories of a numerical +solution are not kept: the configuration is enough to solve again, and the trajectories and +plots of the last runs belong to the results pipeline (#314). + ## What a reference is -- **Value:** the best objective among the solves that converged, over every modeling, - configuration and platform of the convergence and robustness tests, at the default grid. - Every problem of the collection is a minimization. +- **Value:** the objective of the best solution among the solves that converged, over every + modeling, configuration and platform of the convergence and robustness tests, at the + default grid. Every problem of the collection is a minimization. - **`solutions`:** the distinct solutions reached, best first, each with its objective, its - number of solves and the configurations that reached it. Two objectives within a relative + number of solves, the configurations that reached it, and its **`reference`**: the solve + chosen to represent it, whose objective is the solution's. The representative is a strict + convergence before an acceptable one (`acceptable`, `ALMOST_LOCALLY_SOLVED`, + `SOLVED_TO_ACCEPTABLE_LEVEL`), then the solve with the smallest constraint violation, then + the smallest objective. Its table holds the modeling, configuration, modeler, solver and + every option, the exit status, iterations, time and violation, the platform, and the + environment of its run (run, commit, Julia, machine, package versions), read from + `-environment.toml`. The violation is what each modeling measures (JuMP counts the + variable bounds, relaxed by Ipopt): comparing it across modelings favours the + OptimalControl ones when both are strict. Two objectives within a relative `OptimalControlProblems.SAME_SOLUTION` (1e-5) are the same solution. 1e-5 is above the accuracy of the solvers at `tol = 1e-8` (about 1e-6), and below the gap between the two known solutions of `mountain_car` (1.6e-4). @@ -26,11 +54,16 @@ convergence and robustness reports (`test/README.md`) show both for each solve. - **`grid_size`, `parameters`:** the default grid and parameters of the problem when the reference was computed. If either changes, the consistency tests fail. Compute the reference again. -- **`run`:** where the results come from (a cron run, or `local`). The package versions are - in the logs of that run. +- **`run`:** where the results come from (the cron runs, or `local`). Each solution says which + run solved its representative, and the versions of its packages. ## Computing the references +The results must say how each solve was configured (columns `modeler`, `solver`, `options`, +`violation` and the file `-environment.toml`, written by the tests since #412): +older results are refused. A reference file written before #409 still loads, without +`references`, so that this script can write it again; the consistency tests fail on it. + From the cron runs: the weekly convergence runs (one per environment: JuMP, OptimalControl, OptimalControlScalarized) **and** the latest monthly robustness run (`CronRobustness.yml`), on `main` or on a branch with `workflow_dispatch`. Give all of them together: each file is diff --git a/tools/references/references.jl b/tools/references/references.jl index 1f092307..6fe19454 100644 --- a/tools/references/references.jl +++ b/tools/references/references.jl @@ -8,6 +8,11 @@ # within a relative `OptimalControlProblems.SAME_SOLUTION` are the same solution. The # reference objective is the best (smallest: every problem of the collection is a # minimization); the configurations agree when they all reached one solution. +# +# Each solution says how it was obtained (#409): one of the solves that reached it, its +# representative, with its modeling, modeler, solver and every option, its status, iterations, +# time and constraint violation, and the environment of its run (`-environment.toml`: +# Julia, machine, commit, run, versions of the packages). Nothing is written by hand. module ReferenceObjectives using OptimalControlProblems: OptimalControlProblems @@ -18,11 +23,17 @@ const SAME_SOLUTION = OptimalControlProblems.SAME_SOLUTION """The tests whose results count: convergence (#360) and robustness (#378).""" const TESTS = ("test_convergence", "test_robustness") +# The columns that say how a solve was configured (#409), written by the tests since #412. +const SETTINGS_COLUMNS = ("modeler", "solver", "options", "violation") + """ read_results(dirs) -> Vector{Dict{String,String}} Rows of every `*-results.tsv` under `dirs`, read by column name, with the `platform`: the -first directory under the given one (the name of a CI artifact), or `local`. +first directory under the given one (the name of a CI artifact), or `local`; and +`environment`, the file `-environment.toml` written by the same run, read with +`environment`. A results file without the columns of #409 is an error: its solves cannot say +how they were obtained. """ function read_results(dirs) rows = Dict{String,String}[] @@ -33,17 +44,85 @@ function read_results(dirs) lines = readlines(joinpath(root, file)) isempty(lines) && continue header = split(lines[1], '\t') + missing_columns = setdiff(SETTINGS_COLUMNS, header) + isempty(missing_columns) || error( + "$(joinpath(root, file)) has no column $(join(missing_columns, ", ")): " * + "results recorded before #409, solve again", + ) + environment = joinpath(root, replace(file, "-results.tsv" => "-environment.toml")) + isfile(environment) || error("$(environment) is missing: its results cannot say how they were obtained") for line in lines[2:end] cells = split(line, '\t') length(cells) == length(header) || continue row = Dict{String,String}(String(h) => String(c) for (h, c) in zip(header, cells)) row["platform"] = platform + row["environment"] = environment push!(rows, row) end end return rows end +"""The environment of the run of `row` (`-environment.toml`), read once per file.""" +environment(row) = get!(() -> TOML.parsefile(row["environment"]), ENVIRONMENTS, row["environment"]) +const ENVIRONMENTS = Dict{String,Dict{String,Any}}() + +# Statuses of a solve that stopped at an acceptable point, not at the requested tolerance: +# still a solution (#409), ranked after a strict convergence when one represents a solution. +const ACCEPTABLE = ("acceptable", "ALMOST_LOCALLY_SOLVED", "SOLVED_TO_ACCEPTABLE_LEVEL") + +parse_violation(cell) = isempty(cell) ? Inf : (v = parse(Float64, cell); isnan(v) ? Inf : v) + +""" + representative(rows) -> Dict{String,String} + +The solve that represents a solution reached by `rows`: a strict convergence before an +acceptable one, then the smallest constraint violation, then the smallest objective; ties +are broken by modeling, configuration and platform, so that the choice does not depend on +the order of the files. +""" +function representative(rows) + key(r) = ( + r["reason"] in ACCEPTABLE, + parse_violation(r["violation"]), + parse(Float64, r["objective"]), + r["modeling"], + r["configuration"], + r["platform"], + ) + return first(sort(rows; by=key)) +end + +""" + reference(row) -> Dict{String,Any} + +How the solve `row` was obtained, as the table `reference` of a solution: everything the +results and the environment of its run say, so that it can be solved again. +""" +function reference(row) + env = environment(row) + return Dict{String,Any}( + "objective" => parse(Float64, row["objective"]), + "modeling" => row["modeling"], + "configuration" => row["configuration"], + "modeler" => row["modeler"], + "solver" => row["solver"], + "options" => TOML.parse("o = " * row["options"])["o"], + "status" => row["reason"], + "iterations" => parse(Int, row["iterations"]), + "time" => parse(Float64, row["time"]), + "violation" => parse_violation(row["violation"]), + "platform" => row["platform"], + "run" => env["run"], + "commit" => env["commit"], + "julia" => env["julia"], + "os" => env["os"], + "arch" => env["arch"], + "cpu" => env["cpu"], + "versions" => env["packages"], + ) +end + """Relative spread of `values` around the smallest one (absolute when it is zero).""" function spread(values) best = minimum(values) @@ -82,7 +161,9 @@ function references(rows, defaults; run::AbstractString) ) for r in sort(group; by=r -> (r["modeling"], r["configuration"], r["platform"])) ] get!(tables, problem, Dict{String,Any}())[scheme] = Dict{String,Any}( - "value" => minimum(objectives), + # the objective of the representative of the best solution: a solve that can be + # redone (#409), within `SAME_SOLUTION` of the smallest objective + "value" => first(found)["objective"], "grid_size" => defaults[problem].grid_size, "parameters" => defaults[problem].parameters, "source" => "computed", @@ -101,8 +182,8 @@ end The distinct solutions reached by the converged `rows`, best first: consecutive objectives (sorted) within a relative `SAME_SOLUTION` of the first one of a group are the same solution. -Each with its objective (the best of its group), its number of solves and the -configurations that reached it. +Each with the objective of its `representative`, its number of solves, the configurations +that reached it, and how its representative was obtained (`reference`, #409). """ function solutions(rows) objective(r) = parse(Float64, r["objective"]) @@ -116,13 +197,15 @@ function solutions(rows) push!(last(groups), r) end end - return [ - Dict{String,Any}( - "objective" => objective(first(g)), + return map(groups) do g + chosen = representative(g) + return Dict{String,Any}( + "objective" => objective(chosen), "solves" => length(g), "configurations" => sort!(unique(["$(r["modeling"]) $(r["configuration"])" for r in g])), - ) for g in groups - ] + "reference" => reference(chosen), + ) + end end const HEADER = """