Run a benchmark with OptimizationProblems.jl
In this more advanced tutorial, we use the problems from OptimizationProblems
to run a benchmark for unconstrained problems. The tutorial will use:
- JSOSolvers: This package provides optimization solvers in pure Julia for unconstrained and bound-constrained optimization.
- NLPModelsJuMP: This package convert JuMP model in
NLPModel
format. - SolverBenchmark: This package provides general tools for benchmarking solvers.
using JSOSolvers, NLPModels, NLPModelsJuMP, OptimizationProblems, OptimizationProblems.PureJuMP, SolverBenchmark
We select the problems from PureJuMP
submodule of OptimizationProblems
converted in NLPModels using NLPModelsJuMP.
problems = (MathOptNLPModel(eval(Meta.parse(problem))(), name=problem) for problem ∈ OptimizationProblems.meta[!, :name])
Base.Generator{Vector{String}, Main.var"#1#2"}(Main.var"#1#2"(), ["AMPGO02", "AMPGO03", "AMPGO04", "AMPGO05", "AMPGO06", "AMPGO07", "AMPGO08", "AMPGO09", "AMPGO10", "AMPGO11" … "triangle", "triangle_deer", "triangle_pacman", "triangle_turtle", "tridia", "vardim", "vibrbeam", "watson", "woods", "zangwil3"])
The same can be achieved using OptimizationProblems.ADNLPProblems
as follows:
using ADNLPModels
ad_problems = (eval(Meta.parse(problem))() for problem ∈ OptimizationProblems.meta[!, :name])
Base.Generator{Vector{String}, Main.var"#3#4"}(Main.var"#3#4"(), ["AMPGO02", "AMPGO03", "AMPGO04", "AMPGO05", "AMPGO06", "AMPGO07", "AMPGO08", "AMPGO09", "AMPGO10", "AMPGO11" … "triangle", "triangle_deer", "triangle_pacman", "triangle_turtle", "tridia", "vardim", "vibrbeam", "watson", "woods", "zangwil3"])
We also define a dictionary of solvers that will be used for our benchmark. We consider here JSOSolvers.lbfgs
and JSOSolvers.trunk
.
solvers = Dict(
:lbfgs => model -> lbfgs(model, mem=5, atol=1e-5, rtol=0.0),
:trunk => model -> trunk(model, atol=1e-5, rtol=0.0),
)
Dict{Symbol, Function} with 2 entries:
:trunk => #6
:lbfgs => #5
The function SolverBenchmark.bmak_solvers
will run all the problems on the specified solvers and store the results in a DataFrame
. At this stage, we discard the problems that have constraints or bounds using !unconstrained(prob)
, and those that are too large or too small with get_nvar(prob) > 100 || get_nvar(prob) < 5
.
stats = bmark_solvers(
solvers, problems,
skipif=prob -> (!unconstrained(prob) || get_nvar(prob) > 100 || get_nvar(prob) < 5),
)
Dict{Symbol, DataFrames.DataFrame} with 2 entries:
:trunk => 93×39 DataFrame…
:lbfgs => 93×39 DataFrame…
We can explore the results solver by solver in stats[:lbfgs]
and stats[:trunk]
, or get a profile wall using SolverBenchmark.profile_solvers
.
cols = [:id, :name, :nvar, :objective, :dual_feas, :neval_obj, :neval_grad, :neval_hess, :iter, :elapsed_time, :status]
header = Dict(
:nvar => "n",
:objective => "f(x)",
:dual_feas => "‖∇f(x)‖",
:neval_obj => "# f",
:neval_grad => "# ∇f",
:neval_hess => "# ∇²f",
:elapsed_time => "t",
)
for solver ∈ keys(solvers)
pretty_stats(stats[solver][!, cols], hdr_override=header)
end
┌────────┬──────────────┬────────┬────────────┬───────────┬────────┬────────┬────────┬────────┬───────────┬─────────────┐
│ id │ name │ n │ f(x) │ ‖∇f(x)‖ │ # f │ # ∇f │ # ∇²f │ iter │ t │ status │
├────────┼──────────────┼────────┼────────────┼───────────┼────────┼────────┼────────┼────────┼───────────┼─────────────┤
│ 25 │ NZF1 │ 91 │ 2.09e+04 │ 4.16e-07 │ 9 │ 9 │ 0 │ 8 │ 2.21e+00 │ first_order │
│ 38 │ arglina │ 100 │ 5.00e+01 │ 3.46e-15 │ 6 │ 6 │ 0 │ 5 │ 5.84e-03 │ first_order │
│ 39 │ arglinb │ 100 │ 2.48e+01 │ 2.05e-04 │ 302 │ 601 │ 0 │ 300 │ 4.61e-03 │ not_desc │
│ 40 │ arglinc │ 100 │ 5.11e+01 │ 1.81e-03 │ 310 │ 607 │ 0 │ 303 │ 4.50e-03 │ not_desc │
│ 41 │ argtrig │ 100 │ -9.90e+03 │ 7.50e-06 │ 38 │ 26 │ 0 │ 25 │ 4.68e-03 │ first_order │
│ 42 │ arwhead │ 100 │ 0.00e+00 │ 1.04e-06 │ 6 │ 6 │ 0 │ 5 │ 5.33e-04 │ first_order │
│ 45 │ bdqrtic │ 100 │ 1.89e+02 │ 5.17e-06 │ 13 │ 13 │ 0 │ 12 │ 6.98e-03 │ first_order │
│ 48 │ biggs6 │ 6 │ -1.12e+174 │ 1.46e+174 │ 14 │ 14 │ 0 │ 12 │ 3.62e-04 │ not_desc │
│ 51 │ brownal │ 100 │ 1.90e-09 │ 9.17e-07 │ 3 │ 3 │ 0 │ 2 │ 1.23e-03 │ first_order │
│ 54 │ broyden3d │ 100 │ 2.13e-13 │ 3.57e-06 │ 7 │ 7 │ 0 │ 6 │ 1.26e-03 │ first_order │
│ 55 │ broydn7d │ 100 │ 3.95e+01 │ 8.92e-06 │ 63 │ 22 │ 0 │ 21 │ 5.04e-02 │ first_order │
│ 56 │ brybnd │ 100 │ 3.08e-13 │ 4.90e-06 │ 9 │ 9 │ 0 │ 8 │ 2.79e-03 │ first_order │
│ 60 │ chainwoo │ 100 │ 1.00e+00 │ 8.12e-06 │ 270 │ 103 │ 0 │ 106 │ 2.16e-01 │ first_order │
│ 62 │ chnrosnb_mod │ 100 │ 3.26e-13 │ 3.36e-06 │ 176 │ 97 │ 0 │ 98 │ 8.48e-02 │ first_order │
│ 65 │ clplatea │ 100 │ -9.15e-03 │ 7.56e-06 │ 6 │ 6 │ 0 │ 5 │ 4.05e-03 │ first_order │
│ 66 │ clplateb │ 100 │ -6.20e-03 │ 9.70e-06 │ 4 │ 4 │ 0 │ 3 │ 3.46e-03 │ first_order │
│ 67 │ clplatec │ 100 │ -5.11e-03 │ 8.28e-06 │ 5 │ 5 │ 0 │ 4 │ 1.05e-02 │ first_order │
│ 69 │ cosine │ 100 │ -9.90e+01 │ 9.12e-06 │ 10 │ 10 │ 0 │ 9 │ 6.76e-04 │ first_order │
│ 70 │ cragglvy │ 100 │ 3.23e+01 │ 7.75e-06 │ 16 │ 16 │ 0 │ 15 │ 8.79e-03 │ first_order │
│ 71 │ curly │ 100 │ -1.00e+04 │ 8.20e-06 │ 18 │ 15 │ 0 │ 14 │ 2.37e-02 │ first_order │
│ 72 │ curly10 │ 100 │ -1.00e+04 │ 8.20e-06 │ 18 │ 15 │ 0 │ 14 │ 2.38e-02 │ first_order │
│ 73 │ curly20 │ 100 │ -1.00e+04 │ 9.49e-06 │ 18 │ 14 │ 0 │ 13 │ 2.44e-02 │ first_order │
│ 74 │ curly30 │ 100 │ -1.00e+04 │ 8.59e-06 │ 29 │ 15 │ 0 │ 14 │ 2.70e-02 │ first_order │
│ 75 │ dixmaane │ 99 │ 1.00e+00 │ 8.12e-06 │ 39 │ 16 │ 0 │ 15 │ 8.64e-03 │ first_order │
│ 76 │ dixmaanf │ 99 │ 1.00e+00 │ 9.59e-06 │ 11 │ 11 │ 0 │ 10 │ 4.84e-03 │ first_order │
│ 77 │ dixmaang │ 99 │ 1.00e+00 │ 9.88e-06 │ 43 │ 15 │ 0 │ 16 │ 7.96e-03 │ first_order │
│ 78 │ dixmaanh │ 99 │ 1.00e+00 │ 7.74e-06 │ 37 │ 15 │ 0 │ 16 │ 6.94e-03 │ first_order │
│ 79 │ dixmaani │ 99 │ 1.00e+00 │ 7.71e-06 │ 15 │ 13 │ 0 │ 12 │ 2.48e-02 │ first_order │
│ 80 │ dixmaanj │ 99 │ 1.00e+00 │ 9.84e-06 │ 39 │ 17 │ 0 │ 18 │ 2.63e-02 │ first_order │
│ 81 │ dixmaank │ 99 │ 1.00e+00 │ 9.95e-06 │ 37 │ 15 │ 0 │ 16 │ 2.22e-02 │ first_order │
│ 82 │ dixmaanl │ 99 │ 1.00e+00 │ 9.80e-06 │ 56 │ 18 │ 0 │ 19 │ 2.42e-02 │ first_order │
│ 83 │ dixmaanm │ 99 │ 1.00e+00 │ 8.67e-06 │ 10 │ 10 │ 0 │ 9 │ 2.10e-02 │ first_order │
│ 84 │ dixmaann │ 99 │ 1.00e+00 │ 9.08e-06 │ 43 │ 20 │ 0 │ 21 │ 4.18e-02 │ first_order │
│ 85 │ dixmaano │ 99 │ 1.00e+00 │ 9.31e-06 │ 39 │ 17 │ 0 │ 18 │ 3.10e-02 │ first_order │
│ 86 │ dixmaanp │ 99 │ 1.00e+00 │ 9.25e-06 │ 38 │ 16 │ 0 │ 17 │ 2.63e-02 │ first_order │
│ 87 │ dixon3dq │ 100 │ 3.83e-10 │ 9.84e-06 │ 10 │ 10 │ 0 │ 9 │ 2.25e-03 │ first_order │
│ 88 │ dqdrtic │ 100 │ 1.37e-14 │ 9.42e-07 │ 6 │ 6 │ 0 │ 5 │ 5.08e-04 │ first_order │
│ 89 │ dqrtic │ 100 │ 8.30e-08 │ 6.24e-06 │ 25 │ 25 │ 0 │ 24 │ 1.13e-03 │ first_order │
│ 90 │ edensch │ 100 │ 6.03e+02 │ 4.70e-06 │ 9 │ 9 │ 0 │ 8 │ 1.53e-03 │ first_order │
│ 91 │ eg2 │ 100 │ -9.89e+01 │ 1.42e-09 │ 4 │ 4 │ 0 │ 3 │ 1.92e-04 │ first_order │
│ 93 │ engval1 │ 100 │ 1.09e+02 │ 4.98e-06 │ 10 │ 10 │ 0 │ 9 │ 1.36e-03 │ first_order │
│ 94 │ errinros_mod │ 100 │ 3.88e+01 │ 7.77e-06 │ 114 │ 76 │ 0 │ 77 │ 4.75e-02 │ first_order │
│ 95 │ extrosnb │ 100 │ 1.98e-06 │ 9.53e-06 │ 929 │ 251 │ 0 │ 250 │ 7.13e-02 │ first_order │
│ 96 │ fletcbv2 │ 100 │ -5.14e-01 │ 8.49e-06 │ 5 │ 5 │ 0 │ 4 │ 3.10e-03 │ first_order │
│ 97 │ fletcbv3_mod │ 100 │ -2.04e+00 │ 5.94e-06 │ 141 │ 55 │ 0 │ 56 │ 1.48e-02 │ first_order │
│ 98 │ fletchcr │ 100 │ 6.61e-12 │ 8.44e-06 │ 99 │ 77 │ 0 │ 78 │ 1.55e-02 │ first_order │
│ 99 │ fminsrf2 │ 100 │ 1.00e+02 │ 7.59e-06 │ 190 │ 45 │ 0 │ 46 │ 1.99e-02 │ first_order │
│ 100 │ freuroth │ 100 │ 5.94e+03 │ 2.30e-06 │ 48 │ 16 │ 0 │ 17 │ 5.18e-03 │ first_order │
│ 102 │ genhumps │ 100 │ 1.48e-13 │ 2.44e-07 │ 9382 │ 2882 │ 0 │ 2895 │ 1.18e+00 │ first_order │
│ 103 │ genrose │ 100 │ 1.00e+00 │ 6.62e-06 │ 159 │ 60 │ 0 │ 61 │ 1.66e-02 │ first_order │
│ 104 │ genrose_nash │ 100 │ 1.00e+00 │ 4.93e-06 │ 195 │ 66 │ 0 │ 67 │ 1.91e-02 │ first_order │
│ 217 │ indef_mod │ 100 │ -9.89e+03 │ 3.16e-07 │ 809 │ 263 │ 0 │ 266 │ 4.91e-02 │ first_order │
│ 218 │ integreq │ 100 │ 4.47e-13 │ 9.84e-07 │ 4 │ 4 │ 0 │ 3 │ 3.46e-02 │ first_order │
│ 221 │ liarwhd │ 100 │ 1.42e-13 │ 7.82e-06 │ 11 │ 11 │ 0 │ 10 │ 1.37e-03 │ first_order │
│ 227 │ morebv │ 100 │ 1.07e-06 │ 9.45e-06 │ 16 │ 16 │ 0 │ 15 │ 1.16e-01 │ first_order │
│ 229 │ ncb20 │ 100 │ 1.63e+02 │ 6.60e-06 │ 155 │ 39 │ 0 │ 40 │ 1.32e-01 │ first_order │
│ 230 │ ncb20b │ 100 │ 1.97e+02 │ 9.00e-06 │ 39 │ 15 │ 0 │ 16 │ 2.10e-01 │ first_order │
│ 231 │ noncvxu2 │ 100 │ 2.34e+02 │ 9.74e-06 │ 141 │ 37 │ 0 │ 38 │ 1.91e-02 │ first_order │
│ 232 │ noncvxun │ 100 │ 2.35e+02 │ 9.23e-06 │ 182 │ 49 │ 0 │ 52 │ 1.53e-02 │ first_order │
│ 233 │ nondia │ 100 │ 1.05e-13 │ 1.28e-07 │ 12 │ 9 │ 0 │ 8 │ 3.82e-04 │ first_order │
│ 234 │ nondquar │ 100 │ 2.70e-06 │ 7.82e-06 │ 94 │ 31 │ 0 │ 30 │ 1.28e-02 │ first_order │
│ 235 │ osborne1 │ 5 │ 2.82e-05 │ 9.44e-06 │ 171 │ 53 │ 0 │ 55 │ 6.73e-03 │ first_order │
│ 236 │ osborne2 │ 11 │ 2.01e-02 │ 5.34e-06 │ 26 │ 19 │ 0 │ 18 │ 1.69e-02 │ first_order │
│ 237 │ palmer1c │ 8 │ 4.88e-02 │ 1.57e-08 │ 8 │ 8 │ 0 │ 7 │ 5.86e-03 │ first_order │
│ 238 │ palmer1d │ 7 │ 3.26e-01 │ 6.82e-09 │ 7 │ 7 │ 0 │ 6 │ 3.44e-03 │ first_order │
│ 239 │ palmer2c │ 8 │ 7.21e-03 │ 9.99e-06 │ 7 │ 7 │ 0 │ 6 │ 3.42e-03 │ first_order │
│ 240 │ palmer3c │ 8 │ 9.77e-03 │ 6.61e-06 │ 7 │ 7 │ 0 │ 6 │ 3.27e-03 │ first_order │
│ 241 │ palmer4c │ 8 │ 2.85e-02 │ 6.92e-08 │ 9 │ 9 │ 0 │ 8 │ 4.40e-03 │ first_order │
│ 242 │ palmer5c │ 6 │ 1.06e+00 │ 9.22e-07 │ 7 │ 7 │ 0 │ 6 │ 1.94e-04 │ first_order │
│ 244 │ palmer6c │ 8 │ 8.19e-03 │ 8.76e-08 │ 9 │ 9 │ 0 │ 8 │ 2.57e-03 │ first_order │
│ 245 │ palmer7c │ 8 │ 3.01e-01 │ 1.50e-08 │ 13 │ 13 │ 0 │ 12 │ 3.82e-03 │ first_order │
│ 246 │ palmer8c │ 8 │ 7.99e-02 │ 6.40e-06 │ 12 │ 12 │ 0 │ 11 │ 2.99e-03 │ first_order │
│ 247 │ penalty1 │ 100 │ 4.51e-04 │ 9.69e-06 │ 54 │ 32 │ 0 │ 31 │ 2.45e-03 │ first_order │
│ 248 │ penalty2 │ 100 │ 9.71e+04 │ 8.67e-06 │ 19 │ 19 │ 0 │ 18 │ 1.08e-02 │ first_order │
│ 249 │ penalty3 │ 100 │ 6.38e+05 │ 3.06e+05 │ 14426 │ 12833 │ 0 │ 12844 │ 3.00e+01 │ max_time │
│ 255 │ powellsg │ 100 │ 6.13e-08 │ 8.57e-06 │ 18 │ 18 │ 0 │ 17 │ 1.59e-03 │ first_order │
│ 256 │ power │ 100 │ 1.50e-08 │ 7.99e-06 │ 24 │ 24 │ 0 │ 23 │ 3.11e-03 │ first_order │
│ 257 │ quartc │ 100 │ 8.30e-08 │ 6.24e-06 │ 25 │ 25 │ 0 │ 24 │ 1.12e-03 │ first_order │
│ 260 │ sbrybnd │ 100 │ 1.34e+00 │ 1.03e-02 │ 1184 │ 1140 │ 0 │ 1143 │ 3.00e+01 │ max_time │
│ 261 │ schmvett │ 100 │ -2.94e+02 │ 8.24e-06 │ 14 │ 12 │ 0 │ 11 │ 4.07e-03 │ first_order │
│ 262 │ scosine │ 100 │ -9.90e+01 │ 9.07e-06 │ 358 │ 240 │ 0 │ 251 │ 1.19e+00 │ first_order │
│ 263 │ sinquad │ 100 │ 6.16e-07 │ 8.07e-06 │ 65 │ 33 │ 0 │ 34 │ 5.05e-03 │ first_order │
│ 264 │ sparsine │ 100 │ 4.64e-12 │ 9.66e-06 │ 87 │ 34 │ 0 │ 35 │ 5.45e-02 │ first_order │
│ 265 │ sparsqur │ 100 │ 1.77e-08 │ 6.42e-06 │ 17 │ 17 │ 0 │ 16 │ 4.44e-03 │ first_order │
│ 266 │ spmsrtls │ 100 │ 8.17e-11 │ 9.01e-06 │ 13 │ 13 │ 0 │ 12 │ 6.49e-03 │ first_order │
│ 267 │ srosenbr │ 100 │ 3.08e-15 │ 2.47e-06 │ 60 │ 26 │ 0 │ 27 │ 1.74e-03 │ first_order │
│ 277 │ tointgss │ 100 │ 9.71e+00 │ 8.20e-06 │ 35 │ 13 │ 0 │ 14 │ 3.59e-03 │ first_order │
│ 278 │ tquartic │ 100 │ 4.90e-12 │ 3.14e-07 │ 15 │ 13 │ 0 │ 12 │ 9.47e-04 │ first_order │
│ 283 │ tridia │ 100 │ 1.41e-13 │ 9.26e-06 │ 8 │ 8 │ 0 │ 7 │ 5.23e-03 │ first_order │
│ 284 │ vardim │ 100 │ 2.36e-25 │ 5.65e-10 │ 26 │ 26 │ 0 │ 25 │ 1.93e-03 │ first_order │
│ 285 │ vibrbeam │ 8 │ 7.82e-02 │ 3.63e-06 │ 33 │ 32 │ 0 │ 31 │ 4.54e-03 │ first_order │
│ 286 │ watson │ 31 │ Inf │ Inf │ 0 │ 0 │ 0 │ 0 │ Inf │ exception │
│ 287 │ woods │ 100 │ 1.01e-15 │ 2.82e-07 │ 83 │ 40 │ 0 │ 41 │ 5.86e-03 │ first_order │
└────────┴──────────────┴────────┴────────────┴───────────┴────────┴────────┴────────┴────────┴───────────┴─────────────┘
┌────────┬──────────────┬────────┬───────────┬───────────┬─────────┬─────────┬────────┬─────────┬───────────┬─────────────┐
│ id │ name │ n │ f(x) │ ‖∇f(x)‖ │ # f │ # ∇f │ # ∇²f │ iter │ t │ status │
├────────┼──────────────┼────────┼───────────┼───────────┼─────────┼─────────┼────────┼─────────┼───────────┼─────────────┤
│ 25 │ NZF1 │ 91 │ 2.09e+04 │ 8.56e-06 │ 293 │ 287 │ 0 │ 270 │ 6.37e-03 │ first_order │
│ 38 │ arglina │ 100 │ 5.00e+01 │ 7.84e-15 │ 2 │ 2 │ 0 │ 1 │ 4.99e-04 │ first_order │
│ 39 │ arglinb │ 100 │ 2.48e+01 │ 1.28e-04 │ 41407 │ 41383 │ 0 │ 12037 │ 3.00e+01 │ max_time │
│ 40 │ arglinc │ 100 │ 5.11e+01 │ 2.32e-04 │ 41728 │ 41704 │ 0 │ 11111 │ 3.00e+01 │ max_time │
│ 41 │ argtrig │ 100 │ -9.90e+03 │ 7.54e-06 │ 116 │ 114 │ 0 │ 103 │ 5.02e-03 │ first_order │
│ 42 │ arwhead │ 100 │ 0.00e+00 │ 4.34e-06 │ 20 │ 14 │ 0 │ 12 │ 4.57e-04 │ first_order │
│ 45 │ bdqrtic │ 100 │ 1.89e+02 │ 4.97e-06 │ 115 │ 103 │ 0 │ 90 │ 6.29e-03 │ first_order │
│ 48 │ biggs6 │ 6 │ NaN │ NaN │ 3762728 │ 289448 │ 0 │ 144722 │ 3.00e+01 │ max_time │
│ 51 │ brownal │ 100 │ 2.23e-09 │ 1.58e-06 │ 17 │ 8 │ 0 │ 6 │ 1.80e-03 │ first_order │
│ 54 │ broyden3d │ 100 │ 3.56e-01 │ 8.29e-06 │ 53 │ 51 │ 0 │ 44 │ 1.27e-03 │ first_order │
│ 55 │ broydn7d │ 100 │ 3.60e+01 │ 9.82e-06 │ 402 │ 400 │ 0 │ 385 │ 2.77e-02 │ first_order │
│ 56 │ brybnd │ 100 │ 1.54e+00 │ 5.36e-06 │ 25 │ 21 │ 0 │ 19 │ 1.50e-03 │ first_order │
│ 60 │ chainwoo │ 100 │ 1.00e+00 │ 9.00e-06 │ 951 │ 936 │ 0 │ 874 │ 3.22e-02 │ first_order │
│ 62 │ chnrosnb_mod │ 100 │ 1.69e-12 │ 8.70e-06 │ 728 │ 722 │ 0 │ 678 │ 2.80e-02 │ first_order │
│ 65 │ clplatea │ 100 │ -9.15e-03 │ 9.75e-06 │ 74 │ 74 │ 0 │ 70 │ 2.97e-03 │ first_order │
│ 66 │ clplateb │ 100 │ -6.20e-03 │ 5.93e-06 │ 58 │ 58 │ 0 │ 57 │ 2.20e-03 │ first_order │
│ 67 │ clplatec │ 100 │ -5.11e-03 │ 9.24e-06 │ 542 │ 537 │ 0 │ 513 │ 1.84e-02 │ first_order │
│ 69 │ cosine │ 100 │ -9.90e+01 │ 1.00e-06 │ 15 │ 15 │ 0 │ 11 │ 3.28e-04 │ first_order │
│ 70 │ cragglvy │ 100 │ 3.23e+01 │ 9.36e-06 │ 93 │ 84 │ 0 │ 81 │ 4.95e-03 │ first_order │
│ 71 │ curly │ 100 │ -1.00e+04 │ 9.34e-06 │ 1149 │ 1140 │ 0 │ 1105 │ 4.19e-02 │ first_order │
│ 72 │ curly10 │ 100 │ -1.00e+04 │ 9.34e-06 │ 1149 │ 1140 │ 0 │ 1105 │ 4.22e-02 │ first_order │
│ 73 │ curly20 │ 100 │ -1.00e+04 │ 9.22e-06 │ 1335 │ 1332 │ 0 │ 1256 │ 6.12e-02 │ first_order │
│ 74 │ curly30 │ 100 │ -1.00e+04 │ 9.75e-06 │ 1495 │ 1491 │ 0 │ 1408 │ 8.10e-02 │ first_order │
│ 75 │ dixmaane │ 99 │ 1.00e+00 │ 7.83e-06 │ 62 │ 61 │ 0 │ 58 │ 2.54e-03 │ first_order │
│ 76 │ dixmaanf │ 99 │ 1.00e+00 │ 6.94e-06 │ 57 │ 55 │ 0 │ 49 │ 2.35e-03 │ first_order │
│ 77 │ dixmaang │ 99 │ 1.00e+00 │ 9.82e-06 │ 59 │ 56 │ 0 │ 53 │ 2.37e-03 │ first_order │
│ 78 │ dixmaanh │ 99 │ 1.00e+00 │ 7.37e-06 │ 66 │ 63 │ 0 │ 59 │ 2.60e-03 │ first_order │
│ 79 │ dixmaani │ 99 │ 1.00e+00 │ 9.64e-06 │ 244 │ 243 │ 0 │ 234 │ 1.15e-02 │ first_order │
│ 80 │ dixmaanj │ 99 │ 1.00e+00 │ 8.14e-06 │ 259 │ 257 │ 0 │ 249 │ 1.20e-02 │ first_order │
│ 81 │ dixmaank │ 99 │ 1.00e+00 │ 9.84e-06 │ 215 │ 213 │ 0 │ 203 │ 1.01e-02 │ first_order │
│ 82 │ dixmaanl │ 99 │ 1.00e+00 │ 9.11e-06 │ 184 │ 181 │ 0 │ 173 │ 8.52e-03 │ first_order │
│ 83 │ dixmaanm │ 99 │ 1.00e+00 │ 8.98e-06 │ 364 │ 363 │ 0 │ 352 │ 1.91e-02 │ first_order │
│ 84 │ dixmaann │ 99 │ 1.00e+00 │ 9.25e-06 │ 313 │ 312 │ 0 │ 302 │ 1.60e-02 │ first_order │
│ 85 │ dixmaano │ 99 │ 1.00e+00 │ 8.10e-06 │ 251 │ 249 │ 0 │ 242 │ 1.27e-02 │ first_order │
│ 86 │ dixmaanp │ 99 │ 1.00e+00 │ 9.42e-06 │ 306 │ 303 │ 0 │ 295 │ 1.55e-02 │ first_order │
│ 87 │ dixon3dq │ 100 │ 6.97e-09 │ 9.50e-06 │ 519 │ 519 │ 0 │ 501 │ 4.84e-03 │ first_order │
│ 88 │ dqdrtic │ 100 │ 6.55e-16 │ 5.54e-07 │ 22 │ 16 │ 0 │ 13 │ 5.00e-04 │ first_order │
│ 89 │ dqrtic │ 100 │ 8.25e-08 │ 6.42e-06 │ 44 │ 34 │ 0 │ 32 │ 4.19e-04 │ first_order │
│ 90 │ edensch │ 100 │ 6.03e+02 │ 1.39e-06 │ 27 │ 25 │ 0 │ 21 │ 7.32e-04 │ first_order │
│ 91 │ eg2 │ 100 │ -9.89e+01 │ 1.01e-10 │ 10 │ 6 │ 0 │ 4 │ 3.52e-04 │ first_order │
│ 93 │ engval1 │ 100 │ 1.09e+02 │ 4.65e-06 │ 30 │ 26 │ 0 │ 21 │ 7.35e-04 │ first_order │
│ 94 │ errinros_mod │ 100 │ 3.88e+01 │ 7.85e-06 │ 568 │ 523 │ 0 │ 407 │ 2.07e-02 │ first_order │
│ 95 │ extrosnb │ 100 │ 1.03e-13 │ 8.20e-06 │ 42 │ 36 │ 0 │ 33 │ 6.27e-04 │ first_order │
│ 96 │ fletcbv2 │ 100 │ -5.14e-01 │ 8.92e-06 │ 217 │ 217 │ 0 │ 206 │ 4.65e-03 │ first_order │
│ 97 │ fletcbv3_mod │ 100 │ -2.03e+00 │ 8.77e-06 │ 41 │ 36 │ 0 │ 28 │ 2.21e-03 │ first_order │
│ 98 │ fletchcr │ 100 │ 8.01e-12 │ 9.88e-06 │ 435 │ 430 │ 0 │ 404 │ 7.28e-03 │ first_order │
│ 99 │ fminsrf2 │ 100 │ 1.00e+02 │ 7.09e-06 │ 156 │ 155 │ 0 │ 148 │ 5.10e-03 │ first_order │
│ 100 │ freuroth │ 100 │ 5.98e+03 │ 6.06e-06 │ 36 │ 30 │ 0 │ 27 │ 1.51e-03 │ first_order │
│ 102 │ genhumps │ 100 │ 1.75e-10 │ 8.35e-06 │ 1468 │ 1318 │ 0 │ 1116 │ 7.80e-02 │ first_order │
│ 103 │ genrose │ 100 │ 1.00e+00 │ 7.10e-06 │ 282 │ 275 │ 0 │ 254 │ 5.56e-03 │ first_order │
│ 104 │ genrose_nash │ 100 │ 1.00e+00 │ 6.64e-06 │ 318 │ 305 │ 0 │ 275 │ 6.57e-03 │ first_order │
│ 217 │ indef_mod │ 100 │ -9.84e+03 │ 3.16e-06 │ 213 │ 197 │ 0 │ 151 │ 6.54e-03 │ first_order │
│ 218 │ integreq │ 100 │ 3.70e-11 │ 8.83e-06 │ 6 │ 6 │ 0 │ 5 │ 1.02e-02 │ first_order │
│ 221 │ liarwhd │ 100 │ 4.99e-16 │ 8.77e-07 │ 33 │ 23 │ 0 │ 19 │ 7.30e-04 │ first_order │
│ 227 │ morebv │ 100 │ 5.35e-07 │ 9.80e-06 │ 5359 │ 5358 │ 0 │ 5204 │ 1.88e-01 │ first_order │
│ 229 │ ncb20 │ 100 │ 1.67e+02 │ 9.57e-06 │ 1399 │ 1386 │ 0 │ 1280 │ 2.05e-01 │ first_order │
│ 230 │ ncb20b │ 100 │ 1.97e+02 │ 9.11e-06 │ 3047 │ 3038 │ 0 │ 2789 │ 6.11e-01 │ first_order │
│ 231 │ noncvxu2 │ 100 │ 2.32e+02 │ 8.24e-06 │ 554 │ 552 │ 0 │ 540 │ 1.54e-02 │ first_order │
│ 232 │ noncvxun │ 100 │ 2.32e+02 │ 9.39e-06 │ 339 │ 337 │ 0 │ 325 │ 9.23e-03 │ first_order │
│ 233 │ nondia │ 100 │ 1.03e-14 │ 1.90e-06 │ 35 │ 25 │ 0 │ 20 │ 4.45e-04 │ first_order │
│ 234 │ nondquar │ 100 │ 2.19e-06 │ 8.93e-06 │ 1843 │ 1758 │ 0 │ 1602 │ 2.21e-02 │ first_order │
│ 235 │ osborne1 │ 5 │ 2.34e-02 │ 1.42e-01 │ 2125907 │ 169807 │ 0 │ 86945 │ 3.00e+01 │ max_time │
│ 236 │ osborne2 │ 11 │ 2.01e-02 │ 8.69e-06 │ 201 │ 200 │ 0 │ 181 │ 1.46e-02 │ first_order │
│ 237 │ palmer1c │ 8 │ 4.88e-02 │ 9.52e-05 │ 391471 │ 375331 │ 0 │ 249862 │ 3.00e+01 │ max_time │
│ 238 │ palmer1d │ 7 │ 3.26e-01 │ 1.20e-05 │ 468757 │ 463270 │ 0 │ 304564 │ 3.00e+01 │ max_time │
│ 239 │ palmer2c │ 8 │ 7.21e-03 │ 1.78e-04 │ 598011 │ 563827 │ 0 │ 381029 │ 3.00e+01 │ max_time │
│ 240 │ palmer3c │ 8 │ 9.77e-03 │ 1.54e-05 │ 595512 │ 579102 │ 0 │ 493436 │ 3.00e+01 │ max_time │
│ 241 │ palmer4c │ 8 │ 2.85e-02 │ 9.97e-06 │ 114426 │ 99948 │ 0 │ 73896 │ 5.72e+00 │ first_order │
│ 242 │ palmer5c │ 6 │ 1.06e+00 │ 4.58e-06 │ 17 │ 16 │ 0 │ 14 │ 8.92e-05 │ first_order │
│ 244 │ palmer6c │ 8 │ 8.19e-03 │ 9.64e-06 │ 62872 │ 51340 │ 0 │ 41763 │ 1.78e+00 │ first_order │
│ 245 │ palmer7c │ 8 │ 3.01e-01 │ 1.00e-05 │ 129010 │ 104386 │ 0 │ 88554 │ 3.65e+00 │ first_order │
│ 246 │ palmer8c │ 8 │ 7.99e-02 │ 9.93e-06 │ 51271 │ 42259 │ 0 │ 34893 │ 1.34e+00 │ first_order │
│ 247 │ penalty1 │ 100 │ 4.51e-04 │ 5.98e-06 │ 148 │ 128 │ 0 │ 105 │ 2.30e-03 │ first_order │
│ 248 │ penalty2 │ 100 │ 9.71e+04 │ 6.47e-06 │ 86 │ 73 │ 0 │ 68 │ 6.00e-03 │ first_order │
│ 249 │ penalty3 │ 100 │ 1.00e+00 │ 9.79e-06 │ 138 │ 123 │ 0 │ 106 │ 9.28e-03 │ first_order │
│ 255 │ powellsg │ 100 │ 2.65e-09 │ 8.19e-06 │ 64 │ 53 │ 0 │ 45 │ 7.70e-04 │ first_order │
│ 256 │ power │ 100 │ 1.59e-08 │ 8.09e-06 │ 61 │ 47 │ 0 │ 45 │ 5.65e-04 │ first_order │
│ 257 │ quartc │ 100 │ 8.25e-08 │ 6.42e-06 │ 44 │ 34 │ 0 │ 32 │ 4.19e-04 │ first_order │
│ 260 │ sbrybnd │ 100 │ 1.54e+00 │ 1.00e-05 │ 10533 │ 10513 │ 0 │ 10148 │ 8.46e-01 │ first_order │
│ 261 │ schmvett │ 100 │ -2.94e+02 │ 4.59e-06 │ 23 │ 23 │ 0 │ 20 │ 1.30e-03 │ first_order │
│ 262 │ scosine │ 100 │ -2.68e+01 │ 9.60e+20 │ 407785 │ 74154 │ 0 │ 37072 │ 3.00e+01 │ max_time │
│ 263 │ sinquad │ 100 │ 7.38e-10 │ 8.97e-06 │ 80 │ 73 │ 0 │ 63 │ 2.17e-03 │ first_order │
│ 264 │ sparsine │ 100 │ 2.03e-12 │ 8.15e-06 │ 491 │ 477 │ 0 │ 443 │ 3.93e-02 │ first_order │
│ 265 │ sparsqur │ 100 │ 2.35e-08 │ 8.11e-06 │ 30 │ 25 │ 0 │ 23 │ 1.10e-03 │ first_order │
│ 266 │ spmsrtls │ 100 │ 5.65e-11 │ 7.86e-06 │ 71 │ 71 │ 0 │ 66 │ 2.80e-03 │ first_order │
│ 267 │ srosenbr │ 100 │ 7.23e-16 │ 5.95e-07 │ 52 │ 45 │ 0 │ 39 │ 6.96e-04 │ first_order │
│ 277 │ tointgss │ 100 │ 9.71e+00 │ 9.77e-06 │ 18 │ 18 │ 0 │ 14 │ 8.63e-04 │ first_order │
│ 278 │ tquartic │ 100 │ 3.16e-18 │ 7.91e-09 │ 26 │ 24 │ 0 │ 18 │ 3.99e-04 │ first_order │
│ 283 │ tridia │ 100 │ 1.55e-12 │ 9.67e-06 │ 201 │ 197 │ 0 │ 188 │ 4.42e-03 │ first_order │
│ 284 │ vardim │ 100 │ 1.90e-23 │ 3.91e-11 │ 68 │ 44 │ 0 │ 39 │ 1.21e-03 │ first_order │
│ 285 │ vibrbeam │ 8 │ 4.83e+00 │ 5.78e-03 │ 1749070 │ 1743882 │ 0 │ 1235505 │ 3.00e+01 │ max_time │
│ 286 │ watson │ 31 │ NaN │ NaN │ 51638 │ 3974 │ 0 │ 1987 │ 3.00e+01 │ max_time │
│ 287 │ woods │ 100 │ 2.12e-16 │ 2.19e-07 │ 84 │ 75 │ 0 │ 59 │ 1.50e-03 │ first_order │
└────────┴──────────────┴────────┴───────────┴───────────┴─────────┴─────────┴────────┴─────────┴───────────┴─────────────┘
first_order(df) = df.status .== :first_order
unbounded(df) = df.status .== :unbounded
solved(df) = first_order(df) .| unbounded(df)
costnames = ["time", "obj + grad + hess"]
costs = [
df -> .!solved(df) .* Inf .+ df.elapsed_time,
df -> .!solved(df) .* Inf .+ df.neval_obj .+ df.neval_grad .+ df.neval_hess,
]
using Plots
gr()
profile_solvers(stats, costs, costnames)
It is also possible to select problems when initializing the problem list by filtering OptimizationProblems.meta
:
meta = OptimizationProblems.meta
problem_list = meta[(meta.ncon .== 0) .& .!meta.has_bounds .& (5 .<= meta.nvar .<= 100), :name]
problems = (MathOptNLPModel(eval(Meta.parse(problem))(), name=problem) for problem ∈ problem_list)