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, SolverBenchmark
using OptimizationProblems.PureJuMP

We select the problems from PureJuMP submodule of OptimizationProblems converted in NLPModels using NLPModelsJuMP.

problems = (MathOptNLPModel(OptimizationProblems.PureJuMP.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 instead of OptimizationProblems.PureJuMP as follows:

using ADNLPModels
using OptimizationProblems.ADNLPProblems
ad_problems = (OptimizationProblems.ADNLPProblems.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 => 105×40 DataFrame…
  :lbfgs => 105×40 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 │  1.18e-06 │      10 │     10 │      0 │      9 │  6.17e-01 │ first_order │
│     38 │      arglina │    100 │  5.00e+01 │  7.40e-15 │       6 │      6 │      0 │      5 │  9.49e-02 │ first_order │
│     39 │      arglinb │    100 │  2.49e+01 │  3.20e-03 │  469383 │ 469209 │      0 │ 469200 │  3.00e+01 │    max_time │
│     40 │      arglinc │    100 │  5.12e+01 │  3.85e-03 │  264556 │ 264489 │      0 │ 264167 │  2.02e+01 │    not_desc │
│     41 │      argtrig │    100 │ -9.90e+03 │  7.50e-06 │      38 │     26 │      0 │     25 │  3.44e-03 │ first_order │
│     42 │      arwhead │    100 │  0.00e+00 │  1.04e-06 │       6 │      6 │      0 │      5 │  3.71e-04 │ first_order │
│     45 │      bdqrtic │    100 │  1.89e+02 │  4.99e-06 │      13 │     13 │      0 │     12 │  3.97e-03 │ first_order │
│     50 │       biggs6 │      6 │ -3.91e+19 │  5.08e+19 │       8 │      8 │      0 │      7 │  1.52e-04 │   unbounded │
│     55 │      brownal │    100 │ -5.16e-08 │  9.17e-07 │       3 │      3 │      0 │      2 │  1.73e-03 │ first_order │
│     58 │    broyden3d │    100 │  2.13e-13 │  3.57e-06 │       7 │      7 │      0 │      6 │  9.35e-04 │ first_order │
│     59 │     broydn7d │    100 │  3.95e+01 │  8.10e-06 │      63 │     22 │      0 │     21 │  3.59e-02 │ first_order │
│     60 │       brybnd │    100 │  3.08e-13 │  4.90e-06 │       9 │      9 │      0 │      8 │  2.93e-03 │ first_order │
│     65 │     chainwoo │    100 │  1.11e+02 │  9.98e-06 │     137 │     62 │      0 │     65 │  9.29e-02 │ first_order │
│     67 │ chnrosnb_mod │    100 │  5.03e-13 │  9.34e-06 │     187 │     95 │      0 │     96 │  4.59e-02 │ first_order │
│     72 │     clplatea │    100 │ -9.15e-03 │  7.56e-06 │       6 │      6 │      0 │      5 │  4.05e-03 │ first_order │
│     73 │     clplateb │    100 │ -6.20e-03 │  9.70e-06 │       4 │      4 │      0 │      3 │  3.49e-03 │ first_order │
│     74 │     clplatec │    100 │ -5.11e-03 │  8.28e-06 │       5 │      5 │      0 │      4 │  1.10e-02 │ first_order │
│     76 │       cosine │    100 │ -9.90e+01 │  9.12e-06 │      10 │     10 │      0 │      9 │  4.88e-04 │ first_order │
│     77 │     cragglvy │    100 │  3.23e+01 │  7.75e-06 │      16 │     16 │      0 │     15 │  7.07e-03 │ first_order │
│     78 │    cragglvy2 │    100 │  2.52e+01 │  6.43e-06 │      18 │     18 │      0 │     17 │  8.65e-03 │ first_order │
│     79 │        curly │    100 │ -1.00e+04 │  8.29e-06 │      18 │     15 │      0 │     14 │  2.20e-01 │ first_order │
│     80 │      curly10 │    100 │ -1.00e+04 │  8.29e-06 │      18 │     15 │      0 │     14 │  2.18e-01 │ first_order │
│     81 │      curly20 │    100 │ -1.00e+04 │  9.23e-06 │      18 │     14 │      0 │     13 │  5.61e-01 │ first_order │
│     82 │      curly30 │    100 │ -1.00e+04 │  8.43e-06 │      28 │     14 │      0 │     13 │  1.07e+00 │ first_order │
│     84 │     dixmaane │     99 │  1.00e+00 │  8.12e-06 │      39 │     16 │      0 │     15 │  4.52e-03 │ first_order │
│     85 │     dixmaanf │     99 │  1.00e+00 │  9.59e-06 │      11 │     11 │      0 │     10 │  2.92e-03 │ first_order │
│     86 │     dixmaang │     99 │  1.00e+00 │  9.88e-06 │      43 │     15 │      0 │     16 │  4.65e-03 │ first_order │
│     87 │     dixmaanh │     99 │  1.00e+00 │  7.74e-06 │      37 │     15 │      0 │     16 │  4.20e-03 │ first_order │
│     88 │     dixmaani │     99 │  1.00e+00 │  8.68e-06 │      15 │     13 │      0 │     12 │  1.16e-02 │ first_order │
│     89 │     dixmaanj │     99 │  1.00e+00 │  9.47e-06 │      39 │     17 │      0 │     18 │  1.42e-02 │ first_order │
│     90 │     dixmaank │     99 │  1.00e+00 │  1.00e-05 │      38 │     16 │      0 │     16 │  1.10e-02 │    not_desc │
│     91 │     dixmaanl │     99 │  1.00e+00 │  9.94e-06 │      56 │     18 │      0 │     19 │  1.29e-02 │ first_order │
│     92 │     dixmaanm │     99 │  1.00e+00 │  8.95e-06 │      10 │     10 │      0 │      9 │  9.51e-03 │ first_order │
│     93 │     dixmaann │     99 │  1.00e+00 │  9.79e-06 │      43 │     20 │      0 │     21 │  2.04e-02 │ first_order │
│     94 │     dixmaano │     99 │  1.00e+00 │  6.61e-06 │      39 │     17 │      0 │     18 │  1.55e-02 │ first_order │
│     95 │     dixmaanp │     99 │  1.00e+00 │  8.90e-06 │      39 │     17 │      0 │     18 │  1.48e-02 │ first_order │
│     96 │     dixon3dq │    100 │  3.83e-10 │  9.84e-06 │      10 │     10 │      0 │      9 │  1.70e-04 │ first_order │
│     97 │      dqdrtic │    100 │  1.37e-14 │  9.42e-07 │       6 │      6 │      0 │      5 │  4.20e-05 │ first_order │
│     98 │       dqrtic │    100 │  8.30e-08 │  6.24e-06 │      25 │     25 │      0 │     24 │  8.45e-04 │ first_order │
│    100 │      edensch │    100 │  6.03e+02 │  4.70e-06 │       9 │      9 │      0 │      8 │  1.22e-03 │ first_order │
│    101 │          eg2 │    100 │ -9.89e+01 │  1.42e-09 │       4 │      4 │      0 │      3 │  1.50e-04 │ first_order │
│    103 │      engval1 │    100 │  1.09e+02 │  4.98e-06 │      10 │     10 │      0 │      9 │  8.97e-04 │ first_order │
│    104 │         enso │      9 │  3.94e+02 │  9.19e-06 │      39 │     17 │      0 │     18 │  1.24e-02 │ first_order │
│    105 │ errinros_mod │    100 │  3.88e+01 │  8.68e-06 │     121 │     78 │      0 │     79 │  2.18e-02 │ first_order │
│    106 │     extrosnb │    100 │  1.99e-06 │  9.61e-06 │     924 │    251 │      0 │    250 │  5.49e-02 │ first_order │
│    107 │     fletcbv2 │    100 │ -5.14e-01 │  8.49e-06 │       5 │      5 │      0 │      4 │  2.65e-03 │ first_order │
│    108 │ fletcbv3_mod │    100 │ -2.04e+00 │  3.49e-06 │     173 │     60 │      0 │     61 │  1.60e-02 │ first_order │
│    109 │     fletchcr │    100 │  6.61e-12 │  8.26e-06 │      99 │     77 │      0 │     78 │  1.28e-02 │ first_order │
│    110 │     fminsrf2 │    100 │  1.00e+02 │  7.59e-06 │     190 │     45 │      0 │     46 │  1.70e-02 │ first_order │
│    111 │     freuroth │    100 │  5.94e+03 │  2.30e-06 │      48 │     16 │      0 │     17 │  4.13e-03 │ first_order │
│    112 │       gauss1 │      8 │  6.58e+02 │  9.67e-06 │      12 │     12 │      0 │     11 │  1.17e-02 │ first_order │
│    113 │       gauss2 │      8 │  6.24e+02 │  7.74e-06 │      14 │     14 │      0 │     13 │  1.40e-02 │ first_order │
│    114 │       gauss3 │      8 │  6.22e+02 │  3.26e-05 │     349 │    607 │      0 │    310 │  1.83e-02 │    not_desc │
│    116 │     genhumps │    100 │  1.73e-14 │  8.32e-08 │   10333 │   3453 │      0 │   3464 │  9.53e-01 │ first_order │
│    117 │      genrose │    100 │  1.00e+00 │  6.62e-06 │     159 │     60 │      0 │     61 │  1.37e-02 │ first_order │
│    118 │ genrose_nash │    100 │  1.00e+00 │  4.93e-06 │     195 │     66 │      0 │     67 │  1.52e-02 │ first_order │
│    120 │        hahn1 │      7 │  7.66e-01 │  3.65e-06 │     234 │    118 │      0 │    127 │  9.37e-02 │ first_order │
│    285 │    indef_mod │    100 │ -9.97e+03 │  8.93e-06 │     239 │    213 │      0 │    214 │  2.40e-02 │ first_order │
│    286 │     integreq │    100 │  4.47e-13 │  9.84e-07 │       4 │      4 │      0 │      3 │  1.52e-02 │ first_order │
│    288 │       kirby2 │      5 │  1.95e+00 │  1.16e-05 │     344 │    622 │      0 │    324 │  5.73e-03 │    not_desc │
│    290 │     lanczos1 │      6 │  1.05e-06 │  6.96e-06 │     118 │     37 │      0 │     38 │  2.66e-03 │ first_order │
│    291 │     lanczos2 │      6 │  9.83e-07 │  9.41e-06 │     121 │     35 │      0 │     36 │  2.59e-03 │ first_order │
│    292 │     lanczos3 │      6 │  1.16e-06 │  7.97e-06 │     120 │     38 │      0 │     39 │  2.72e-03 │ first_order │
│    293 │      liarwhd │    100 │  1.41e-13 │  7.82e-06 │      11 │     11 │      0 │     10 │  1.16e-03 │ first_order │
│    301 │        mgh17 │      5 │  5.52e-02 │  1.56e-06 │      31 │      8 │      0 │      9 │  2.80e-04 │ first_order │
│    306 │       morebv │    100 │  1.85e-06 │  8.80e-06 │      14 │     14 │      0 │     13 │  5.57e-02 │ first_order │
│    308 │        ncb20 │    100 │  1.64e+02 │  8.43e-06 │     128 │     27 │      0 │     26 │  8.37e-02 │ first_order │
│    309 │       ncb20b │    100 │  1.97e+02 │  8.00e-06 │      38 │     15 │      0 │     16 │  1.81e-01 │ first_order │
│    311 │     noncvxu2 │    100 │  2.34e+02 │  9.72e-06 │     138 │     36 │      0 │     37 │  3.07e-02 │ first_order │
│    312 │     noncvxun │    100 │  2.35e+02 │  6.97e-06 │     131 │     35 │      0 │     36 │  1.83e-02 │ first_order │
│    313 │       nondia │    100 │  1.05e-13 │  1.28e-07 │      12 │      9 │      0 │      8 │  3.40e-04 │ first_order │
│    314 │     nondquar │    100 │  3.51e-06 │  9.63e-06 │      62 │     28 │      0 │     27 │  7.03e-03 │ first_order │
│    315 │     osborne1 │      5 │  2.82e-05 │  9.44e-06 │     171 │     53 │      0 │     55 │  4.07e-03 │ first_order │
│    316 │     osborne2 │     11 │  2.01e-02 │  5.36e-06 │      26 │     19 │      0 │     18 │  1.06e-02 │ first_order │
│    317 │     palmer1c │      8 │  4.88e-02 │  6.40e-06 │      15 │     10 │      0 │      9 │  6.60e-05 │ first_order │
│    318 │     palmer1d │      7 │  3.26e-01 │  2.24e-08 │       7 │      7 │      0 │      6 │  4.60e-05 │ first_order │
│    319 │     palmer2c │      8 │  7.21e-03 │  4.85e-06 │       7 │      7 │      0 │      6 │  5.20e-05 │ first_order │
│    320 │     palmer3c │      8 │  9.77e-03 │  7.91e-06 │       7 │      7 │      0 │      6 │  5.08e-05 │ first_order │
│    321 │     palmer4c │      8 │  2.85e-02 │  1.10e-08 │      11 │     11 │      0 │     10 │  6.10e-05 │ first_order │
│    322 │     palmer5c │      6 │  1.06e+00 │  9.22e-07 │       7 │      7 │      0 │      6 │  5.39e-05 │ first_order │
│    324 │     palmer6c │      8 │  8.19e-03 │  4.90e-09 │       9 │      9 │      0 │      8 │  5.70e-05 │ first_order │
│    325 │     palmer7c │      8 │  3.01e-01 │  4.89e-06 │      16 │     15 │      0 │     14 │  7.80e-05 │ first_order │
│    326 │     palmer8c │      8 │  7.99e-02 │  7.53e-06 │      11 │     11 │      0 │     10 │  6.20e-05 │ first_order │
│    327 │     penalty1 │    100 │  4.51e-04 │  9.69e-06 │      54 │     32 │      0 │     31 │  1.68e-03 │ first_order │
│    328 │     penalty2 │    100 │  9.71e+04 │  8.67e-06 │      19 │     19 │      0 │     18 │  6.38e-03 │ first_order │
│    329 │     penalty3 │    100 │  4.30e+07 │  6.81e+12 │ 1081914 │  98392 │      0 │  98400 │  3.00e+01 │    max_time │
│    335 │     powellsg │    100 │  6.13e-08 │  8.57e-06 │      18 │     18 │      0 │     17 │  1.52e-03 │ first_order │
│    336 │        power │    100 │  1.50e-08 │  7.99e-06 │      24 │     24 │      0 │     23 │  1.48e-03 │ first_order │
│    337 │       quartc │    100 │  8.30e-08 │  6.24e-06 │      25 │     25 │      0 │     24 │  8.30e-04 │ first_order │
│    343 │      sbrybnd │    100 │  1.34e+00 │  9.27e-06 │    1765 │   1721 │      0 │   1724 │  2.88e+01 │ first_order │
│    344 │     schmvett │    100 │ -2.94e+02 │  8.24e-06 │      14 │     12 │      0 │     11 │  3.69e-03 │ first_order │
│    345 │      scosine │    100 │ -9.90e+01 │  9.19e-06 │     391 │    298 │      0 │    307 │  7.71e-01 │ first_order │
│    346 │      sinquad │    100 │  6.11e-07 │  8.40e-06 │      65 │     33 │      0 │     34 │  4.43e-03 │ first_order │
│    347 │     sparsine │    100 │  2.11e-12 │  8.42e-06 │      81 │     33 │      0 │     34 │  3.45e-02 │ first_order │
│    348 │     sparsqur │    100 │  1.77e-08 │  6.42e-06 │      17 │     17 │      0 │     16 │  3.01e-03 │ first_order │
│    349 │     spmsrtls │    100 │  8.17e-11 │  9.01e-06 │      13 │     13 │      0 │     12 │  3.32e-03 │ first_order │
│    350 │     srosenbr │    100 │  3.06e-15 │  2.47e-06 │      60 │     26 │      0 │     27 │  1.68e-03 │ first_order │
│    360 │      thurber │      7 │  2.82e+03 │  6.94e-06 │      59 │     42 │      0 │     41 │  4.19e-03 │ first_order │
│    361 │     tointgss │    100 │  9.71e+00 │  8.20e-06 │      35 │     13 │      0 │     14 │  2.64e-03 │ first_order │
│    362 │     tquartic │    100 │  4.90e-12 │  3.14e-07 │      15 │     13 │      0 │     12 │  6.87e-04 │ first_order │
│    367 │       tridia │    100 │  1.36e-13 │  8.96e-06 │       8 │      8 │      0 │      7 │  1.39e-04 │ first_order │
│    368 │       vardim │    100 │  3.73e-09 │  0.00e+00 │      26 │     26 │      0 │     25 │  1.99e-02 │ first_order │
│    369 │     vibrbeam │      8 │  7.82e-02 │  3.74e-06 │      33 │     32 │      0 │     31 │  2.82e-03 │ first_order │
│    370 │       watson │     31 │ -5.94e+64 │  6.31e+65 │       2 │      2 │      0 │      1 │  5.75e-03 │   unbounded │
│    371 │        woods │    100 │  3.92e-17 │  2.81e-07 │      82 │     40 │      0 │     41 │  7.38e-03 │ first_order │
└────────┴──────────────┴────────┴───────────┴───────────┴─────────┴────────┴────────┴────────┴───────────┴─────────────┘
┌────────┬──────────────┬────────┬───────────┬───────────┬───────────┬─────────┬────────┬─────────┬───────────┬─────────────┐
│     id │         name │      n │      f(x) │   ‖∇f(x)‖ │       # f │    # ∇f │  # ∇²f │    iter │         t │      status │
├────────┼──────────────┼────────┼───────────┼───────────┼───────────┼─────────┼────────┼─────────┼───────────┼─────────────┤
│     25 │         NZF1 │     91 │  2.09e+04 │  9.54e-06 │       266 │     260 │      0 │     240 │  5.40e-03 │ first_order │
│     38 │      arglina │    100 │  5.00e+01 │  2.92e-14 │         2 │       2 │      0 │       1 │  9.70e-05 │ first_order │
│     39 │      arglinb │    100 │  2.48e+01 │  3.99e-04 │   2435167 │  325545 │      0 │  162776 │  3.00e+01 │    max_time │
│     40 │      arglinc │    100 │  5.11e+01 │  6.35e-04 │   1926897 │  642321 │      0 │  321161 │  3.00e+01 │    max_time │
│     41 │      argtrig │    100 │ -9.90e+03 │  7.54e-06 │       116 │     114 │      0 │     103 │  3.69e-03 │ first_order │
│     42 │      arwhead │    100 │  0.00e+00 │  4.34e-06 │        20 │      14 │      0 │      12 │  2.84e-04 │ first_order │
│     45 │      bdqrtic │    100 │  1.89e+02 │  9.69e-06 │       114 │     102 │      0 │      89 │  3.11e-03 │ first_order │
│     50 │       biggs6 │      6 │      -Inf │       Inf │         8 │       8 │      0 │       2 │  4.70e-05 │   unbounded │
│     55 │      brownal │    100 │ -1.97e-08 │  1.58e-06 │        17 │       8 │      0 │       6 │  2.42e-03 │ first_order │
│     58 │    broyden3d │    100 │  3.56e-01 │  8.29e-06 │        53 │      51 │      0 │      44 │  9.25e-04 │ first_order │
│     59 │     broydn7d │    100 │  3.60e+01 │  8.88e-06 │       373 │     371 │      0 │     357 │  1.92e-02 │ first_order │
│     60 │       brybnd │    100 │  1.54e+00 │  5.36e-06 │        25 │      21 │      0 │      19 │  9.16e-04 │ first_order │
│     65 │     chainwoo │    100 │  1.00e+00 │  9.22e-06 │       816 │     802 │      0 │     749 │  2.52e-02 │ first_order │
│     67 │ chnrosnb_mod │    100 │  2.51e-11 │  9.29e-06 │       689 │     683 │      0 │     649 │  1.21e-02 │ first_order │
│     72 │     clplatea │    100 │ -9.15e-03 │  9.75e-06 │        74 │      74 │      0 │      70 │  2.65e-03 │ first_order │
│     73 │     clplateb │    100 │ -6.20e-03 │  5.93e-06 │        58 │      58 │      0 │      57 │  2.05e-03 │ first_order │
│     74 │     clplatec │    100 │ -5.11e-03 │  8.28e-06 │       461 │     456 │      0 │     436 │  1.46e-02 │ first_order │
│     76 │       cosine │    100 │ -9.90e+01 │  1.00e-06 │        15 │      15 │      0 │      11 │  2.30e-04 │ first_order │
│     77 │     cragglvy │    100 │  3.23e+01 │  9.36e-06 │        93 │      84 │      0 │      81 │  3.83e-03 │ first_order │
│     78 │    cragglvy2 │    100 │  2.52e+01 │  8.92e-06 │       121 │     112 │      0 │     105 │  4.86e-03 │ first_order │
│     79 │        curly │    100 │ -1.00e+04 │  9.36e-06 │      1275 │    1266 │      0 │    1226 │  2.87e-01 │ first_order │
│     80 │      curly10 │    100 │ -1.00e+04 │  9.36e-06 │      1275 │    1266 │      0 │    1226 │  2.93e-01 │ first_order │
│     81 │      curly20 │    100 │ -1.00e+04 │  9.96e-06 │      1311 │    1305 │      0 │    1238 │  9.03e-01 │ first_order │
│     82 │      curly30 │    100 │ -1.00e+04 │  9.57e-06 │      1573 │    1566 │      0 │    1475 │  2.11e+00 │ first_order │
│     84 │     dixmaane │     99 │  1.00e+00 │  7.83e-06 │        62 │      61 │      0 │      58 │  1.35e-03 │ first_order │
│     85 │     dixmaanf │     99 │  1.00e+00 │  6.94e-06 │        57 │      55 │      0 │      49 │  1.40e-03 │ first_order │
│     86 │     dixmaang │     99 │  1.00e+00 │  9.82e-06 │        59 │      56 │      0 │      53 │  1.39e-03 │ first_order │
│     87 │     dixmaanh │     99 │  1.00e+00 │  7.37e-06 │        66 │      63 │      0 │      59 │  1.54e-03 │ first_order │
│     88 │     dixmaani │     99 │  1.00e+00 │  8.73e-06 │       240 │     239 │      0 │     232 │  5.27e-03 │ first_order │
│     89 │     dixmaanj │     99 │  1.00e+00 │  9.19e-06 │       261 │     259 │      0 │     250 │  6.36e-03 │ first_order │
│     90 │     dixmaank │     99 │  1.00e+00 │  9.28e-06 │       209 │     207 │      0 │     197 │  5.06e-03 │ first_order │
│     91 │     dixmaanl │     99 │  1.00e+00 │  7.52e-06 │       181 │     178 │      0 │     172 │  4.34e-03 │ first_order │
│     92 │     dixmaanm │     99 │  1.00e+00 │  9.42e-06 │       365 │     364 │      0 │     353 │  8.10e-03 │ first_order │
│     93 │     dixmaann │     99 │  1.00e+00 │  9.67e-06 │       324 │     323 │      0 │     313 │  7.82e-03 │ first_order │
│     94 │     dixmaano │     99 │  1.00e+00 │  9.69e-06 │       225 │     223 │      0 │     217 │  5.49e-03 │ first_order │
│     95 │     dixmaanp │     99 │  1.00e+00 │  7.83e-06 │       307 │     304 │      0 │     295 │  7.43e-03 │ first_order │
│     96 │     dixon3dq │    100 │  1.79e-08 │  8.88e-06 │       468 │     468 │      0 │     457 │  2.03e-03 │ first_order │
│     97 │      dqdrtic │    100 │  6.55e-16 │  5.54e-07 │        22 │      16 │      0 │      13 │  5.70e-05 │ first_order │
│     98 │       dqrtic │    100 │  8.25e-08 │  6.42e-06 │        44 │      34 │      0 │      32 │  3.49e-04 │ first_order │
│    100 │      edensch │    100 │  6.03e+02 │  1.39e-06 │        27 │      25 │      0 │      21 │  5.84e-04 │ first_order │
│    101 │          eg2 │    100 │ -9.89e+01 │  1.01e-10 │        10 │       6 │      0 │       4 │  1.28e-04 │ first_order │
│    103 │      engval1 │    100 │  1.09e+02 │  4.65e-06 │        30 │      26 │      0 │      21 │  4.86e-04 │ first_order │
│    104 │         enso │      9 │  3.94e+02 │  5.33e-06 │        43 │      39 │      0 │      35 │  4.30e-03 │ first_order │
│    105 │ errinros_mod │    100 │  3.88e+01 │  7.62e-06 │       538 │     498 │      0 │     369 │  7.51e-03 │ first_order │
│    106 │     extrosnb │    100 │  1.03e-13 │  8.20e-06 │        42 │      36 │      0 │      33 │  4.16e-04 │ first_order │
│    107 │     fletcbv2 │    100 │ -5.14e-01 │  9.20e-06 │       197 │     197 │      0 │     188 │  3.38e-03 │ first_order │
│    108 │ fletcbv3_mod │    100 │ -2.03e+00 │  5.27e-06 │        38 │      34 │      0 │      28 │  1.15e-03 │ first_order │
│    109 │     fletchcr │    100 │  1.59e-12 │  9.03e-06 │       493 │     488 │      0 │     471 │  6.54e-03 │ first_order │
│    110 │     fminsrf2 │    100 │  1.00e+02 │  5.88e-06 │       156 │     155 │      0 │     149 │  3.92e-03 │ first_order │
│    111 │     freuroth │    100 │  5.98e+03 │  6.06e-06 │        36 │      30 │      0 │      27 │  1.20e-03 │ first_order │
│    112 │       gauss1 │      8 │  6.58e+02 │  2.29e-04 │    238372 │  237848 │      0 │  157895 │  3.00e+01 │    max_time │
│    113 │       gauss2 │      8 │  6.24e+02 │  1.20e-04 │    237452 │  236876 │      0 │  124365 │  3.00e+01 │    max_time │
│    114 │       gauss3 │      8 │  6.22e+02 │  2.91e-04 │    238642 │  237164 │      0 │  125362 │  3.00e+01 │    max_time │
│    116 │     genhumps │    100 │  1.81e-10 │  8.09e-06 │      1004 │     929 │      0 │     779 │  3.80e-02 │ first_order │
│    117 │      genrose │    100 │  1.00e+00 │  9.14e-06 │       278 │     274 │      0 │     254 │  4.32e-03 │ first_order │
│    118 │ genrose_nash │    100 │  1.00e+00 │  7.45e-06 │       324 │     309 │      0 │     279 │  5.07e-03 │ first_order │
│    120 │        hahn1 │      7 │  2.78e+04 │  2.07e-10 │         2 │       2 │      0 │       1 │  1.14e-04 │ first_order │
│    285 │    indef_mod │    100 │ -9.80e+03 │  6.65e-06 │       131 │     127 │      0 │     107 │  3.61e-03 │ first_order │
│    286 │     integreq │    100 │  3.70e-11 │  8.83e-06 │         6 │       6 │      0 │       5 │  4.96e-03 │ first_order │
│    288 │       kirby2 │      5 │  1.95e+00 │  1.40e-03 │   1074030 │ 1073458 │      0 │  545253 │  3.00e+01 │    max_time │
│    290 │     lanczos1 │      6 │  2.15e-06 │  8.10e-06 │       110 │     105 │      0 │      86 │  1.04e-03 │ first_order │
│    291 │     lanczos2 │      6 │  2.16e-06 │  9.31e-06 │        98 │      88 │      0 │      71 │  9.46e-04 │ first_order │
│    292 │     lanczos3 │      6 │  2.17e-06 │  1.61e-06 │       144 │     126 │      0 │     110 │  1.33e-03 │ first_order │
│    293 │      liarwhd │    100 │  4.65e-16 │  8.77e-07 │        33 │      23 │      0 │      19 │  6.11e-04 │ first_order │
│    301 │        mgh17 │      5 │  5.52e-02 │  7.40e-07 │        38 │      30 │      0 │      22 │  2.85e-04 │ first_order │
│    306 │       morebv │    100 │  6.02e-07 │  9.27e-06 │      6321 │    6320 │      0 │    6151 │  1.60e-01 │ first_order │
│    308 │        ncb20 │    100 │  1.67e+02 │  9.09e-06 │      1131 │    1117 │      0 │    1029 │  1.45e-01 │ first_order │
│    309 │       ncb20b │    100 │  1.97e+02 │  9.75e-06 │      2719 │    2710 │      0 │    2504 │  4.04e-01 │ first_order │
│    311 │     noncvxu2 │    100 │  2.32e+02 │  9.20e-06 │       570 │     568 │      0 │     554 │  1.85e-02 │ first_order │
│    312 │     noncvxun │    100 │  2.32e+02 │  7.46e-06 │       302 │     300 │      0 │     289 │  9.76e-03 │ first_order │
│    313 │       nondia │    100 │  1.04e-14 │  1.90e-06 │        35 │      25 │      0 │      20 │  3.09e-04 │ first_order │
│    314 │     nondquar │    100 │  2.65e-06 │  7.91e-06 │      1739 │    1671 │      0 │    1508 │  1.64e-02 │ first_order │
│    315 │     osborne1 │      5 │  2.34e-02 │  9.71e-02 │   3173886 │ 3169250 │      0 │ 2850518 │  3.00e+01 │    max_time │
│    316 │     osborne2 │     11 │  2.01e-02 │  3.27e-06 │       184 │     181 │      0 │     163 │  7.52e-03 │ first_order │
│    317 │     palmer1c │      8 │  2.58e+00 │  3.61e-01 │ 104842614 │ 8074791 │      0 │ 4041310 │  3.00e+01 │    max_time │
│    318 │     palmer1d │      7 │  3.33e-01 │  2.01e-01 │ 111527295 │ 8589449 │      0 │ 4298844 │  3.00e+01 │    max_time │
│    319 │     palmer2c │      8 │  7.02e-02 │  1.29e-02 │ 104605703 │ 8053353 │      0 │ 4029287 │  3.00e+01 │    max_time │
│    320 │     palmer3c │      8 │  7.82e-02 │  7.03e-03 │ 102605862 │ 7896456 │      0 │ 3949680 │  3.00e+01 │    max_time │
│    321 │     palmer4c │      8 │  1.77e-01 │  1.94e-02 │ 104743406 │ 8061508 │      0 │ 4032464 │  3.00e+01 │    max_time │
│    322 │     palmer5c │      6 │  1.06e+00 │  4.58e-06 │        17 │      16 │      0 │      14 │  4.70e-05 │ first_order │
│    324 │     palmer6c │      8 │  4.80e-02 │  2.23e-03 │ 101674208 │ 8477534 │      0 │ 4240602 │  3.00e+01 │    max_time │
│    325 │     palmer7c │      8 │  8.04e-01 │  1.07e-01 │ 103538996 │ 7977342 │      0 │ 3993522 │  3.00e+01 │    max_time │
│    326 │     palmer8c │      8 │  2.94e-01 │  2.54e-02 │ 102520440 │ 8208321 │      0 │ 4106844 │  3.00e+01 │    max_time │
│    327 │     penalty1 │    100 │  4.51e-04 │  9.13e-06 │       143 │     126 │      0 │     100 │  1.57e-03 │ first_order │
│    328 │     penalty2 │    100 │  9.71e+04 │  6.47e-06 │        86 │      73 │      0 │      68 │  3.28e-03 │ first_order │
│    329 │     penalty3 │    100 │  1.00e+00 │  2.01e+00 │    778905 │   62384 │      0 │   31216 │  3.00e+01 │    max_time │
│    335 │     powellsg │    100 │  2.64e-09 │  4.85e-06 │        66 │      55 │      0 │      47 │  7.53e-04 │ first_order │
│    336 │        power │    100 │  1.59e-08 │  8.09e-06 │        61 │      47 │      0 │      45 │  3.36e-04 │ first_order │
│    337 │       quartc │    100 │  8.25e-08 │  6.42e-06 │        44 │      34 │      0 │      32 │  3.54e-04 │ first_order │
│    343 │      sbrybnd │    100 │  7.64e+00 │  2.12e-03 │    579028 │  579009 │      0 │  552616 │  3.00e+01 │    max_time │
│    344 │     schmvett │    100 │ -2.94e+02 │  4.59e-06 │        23 │      23 │      0 │      20 │  1.03e-03 │ first_order │
│    345 │      scosine │    100 │ -1.99e+01 │  5.17e+16 │    635144 │   90745 │      0 │   30254 │  3.00e+01 │    max_time │
│    346 │      sinquad │    100 │  1.95e-10 │  9.44e-06 │        83 │      77 │      0 │      68 │  1.82e-03 │ first_order │
│    347 │     sparsine │    100 │  3.84e-12 │  9.54e-06 │       463 │     449 │      0 │     424 │  3.01e-02 │ first_order │
│    348 │     sparsqur │    100 │  2.35e-08 │  8.11e-06 │        30 │      25 │      0 │      23 │  8.24e-04 │ first_order │
│    349 │     spmsrtls │    100 │  5.65e-11 │  7.86e-06 │        71 │      71 │      0 │      66 │  1.57e-03 │ first_order │
│    350 │     srosenbr │    100 │  2.86e-16 │  7.89e-07 │        52 │      45 │      0 │      39 │  5.22e-04 │ first_order │
│    360 │      thurber │      7 │  2.82e+03 │  8.02e-05 │   2770372 │ 2770010 │      0 │ 2476639 │  3.00e+01 │    max_time │
│    361 │     tointgss │    100 │  9.71e+00 │  9.77e-06 │        18 │      18 │      0 │      14 │  5.93e-04 │ first_order │
│    362 │     tquartic │    100 │  3.71e-20 │  7.91e-09 │        26 │      24 │      0 │      18 │  3.07e-04 │ first_order │
│    367 │       tridia │    100 │  1.56e-12 │  9.72e-06 │       201 │     197 │      0 │     188 │  8.77e-04 │ first_order │
│    368 │       vardim │    100 │ -5.22e-08 │  1.42e-09 │        68 │      44 │      0 │      39 │  1.02e-02 │ first_order │
│    369 │     vibrbeam │      8 │  5.28e+00 │  1.28e-03 │   2760014 │ 2755236 │      0 │ 1763570 │  3.00e+01 │    max_time │
│    370 │       watson │     31 │      -Inf │ 9.11e+304 │         7 │       7 │      0 │       1 │  3.36e-03 │   unbounded │
│    371 │        woods │    100 │  9.04e-14 │  5.09e-06 │        85 │      76 │      0 │      61 │  1.44e-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)
Example block output

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)