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"#2#3"}(Main.var"#2#3"(), ["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"#5#6"}(Main.var"#5#6"(), ["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 => #11
  :lbfgs => #9

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 => 112×40 DataFrame…
  :lbfgs => 112×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 │  4.16e-07 │      9 │      9 │      0 │      8 │  1.47e+00 │ first_order │
│     38 │       arglina │    100 │  5.00e+01 │  7.71e-15 │      6 │      6 │      0 │      5 │  9.30e-02 │ first_order │
│     39 │       arglinb │    100 │  2.39e+01 │  8.84e-03 │ 634531 │ 634349 │      0 │ 634345 │  3.00e+01 │    max_time │
│     40 │       arglinc │    100 │  5.13e+01 │  3.31e-03 │ 265366 │ 265305 │      0 │ 264986 │  1.48e+01 │    not_desc │
│     41 │       argtrig │    100 │ -9.90e+03 │  7.50e-06 │     38 │     26 │      0 │     25 │  2.24e-03 │ first_order │
│     42 │       arwhead │    100 │  0.00e+00 │  1.04e-06 │      6 │      6 │      0 │      5 │  2.65e-04 │ first_order │
│     43 │        auglag │    100 │  1.08e+00 │  7.22e-06 │    100 │     46 │      0 │     49 │  4.80e-03 │ first_order │
│     46 │       bdqrtic │    100 │  1.89e+02 │  5.01e-06 │     13 │     13 │      0 │     12 │  3.72e-03 │ first_order │
│     51 │        biggs6 │      6 │ -3.91e+19 │  5.08e+19 │      8 │      8 │      0 │      7 │  1.18e-04 │   unbounded │
│     56 │       brownal │    100 │ -5.16e-08 │  9.17e-07 │      3 │      3 │      0 │      2 │  1.55e-03 │ first_order │
│     59 │     browngen1 │    100 │  8.23e+01 │  7.56e-06 │     38 │     32 │      0 │     31 │  1.30e-02 │ first_order │
│     60 │     browngen2 │    100 │  8.74e-18 │  8.20e-09 │      7 │      7 │      0 │      6 │  9.72e-04 │ first_order │
│     61 │     broyden3d │    100 │  2.13e-13 │  3.57e-06 │      7 │      7 │      0 │      6 │  7.28e-04 │ first_order │
│     62 │     broyden7d │    100 │  3.34e+01 │  6.71e-06 │     10 │     10 │      0 │      9 │  2.22e-03 │ first_order │
│     63 │      broydn7d │    100 │  3.95e+01 │  9.32e-06 │     63 │     22 │      0 │     21 │  3.13e-02 │ first_order │
│     64 │        brybnd │    100 │  3.08e-13 │  4.90e-06 │      9 │      9 │      0 │      8 │  1.15e-03 │ first_order │
│     69 │      chainwoo │    100 │  1.00e+00 │  9.44e-06 │    280 │    101 │      0 │    104 │  1.67e-01 │ first_order │
│     71 │  chnrosnb_mod │    100 │  4.12e-12 │  8.95e-06 │    179 │     96 │      0 │     97 │  3.60e-02 │ first_order │
│     76 │      clplatea │    100 │ -9.15e-03 │  7.56e-06 │      6 │      6 │      0 │      5 │  3.12e-03 │ first_order │
│     77 │      clplateb │    100 │ -6.20e-03 │  9.70e-06 │      4 │      4 │      0 │      3 │  2.75e-03 │ first_order │
│     78 │      clplatec │    100 │ -5.11e-03 │  8.28e-06 │      5 │      5 │      0 │      4 │  8.52e-03 │ first_order │
│     80 │        cosine │    100 │ -9.90e+01 │  9.12e-06 │     10 │     10 │      0 │      9 │  3.41e-04 │ first_order │
│     81 │      cragglvy │    100 │  3.23e+01 │  7.75e-06 │     16 │     16 │      0 │     15 │  5.69e-03 │ first_order │
│     82 │     cragglvy2 │    100 │  2.52e+01 │  6.43e-06 │     18 │     18 │      0 │     17 │  7.02e-03 │ first_order │
│     83 │         curly │    100 │ -1.00e+04 │  9.33e-06 │     18 │     15 │      0 │     14 │  1.74e-01 │ first_order │
│     84 │       curly10 │    100 │ -1.00e+04 │  9.33e-06 │     18 │     15 │      0 │     14 │  1.75e-01 │ first_order │
│     85 │       curly20 │    100 │ -1.00e+04 │  9.63e-06 │     18 │     14 │      0 │     13 │  4.55e-01 │ first_order │
│     86 │       curly30 │    100 │ -1.00e+04 │  9.34e-06 │     28 │     14 │      0 │     13 │  7.80e-01 │ first_order │
│     88 │      dixmaane │     99 │  1.00e+00 │  8.12e-06 │     39 │     16 │      0 │     15 │  3.51e-03 │ first_order │
│     89 │      dixmaanf │     99 │  1.00e+00 │  9.59e-06 │     11 │     11 │      0 │     10 │  2.37e-03 │ first_order │
│     90 │      dixmaang │     99 │  1.00e+00 │  9.88e-06 │     43 │     15 │      0 │     16 │  3.96e-03 │ first_order │
│     91 │      dixmaanh │     99 │  1.00e+00 │  7.74e-06 │     37 │     15 │      0 │     16 │  3.47e-03 │ first_order │
│     92 │      dixmaani │     99 │  1.00e+00 │  8.39e-06 │     15 │     13 │      0 │     12 │  8.85e-03 │ first_order │
│     93 │      dixmaanj │     99 │  1.00e+00 │  9.66e-06 │     39 │     17 │      0 │     18 │  1.14e-02 │ first_order │
│     94 │      dixmaank │     99 │  1.00e+00 │  9.58e-06 │     37 │     15 │      0 │     16 │  8.81e-03 │ first_order │
│     95 │      dixmaanl │     99 │  1.00e+00 │  9.90e-06 │     56 │     18 │      0 │     19 │  1.05e-02 │ first_order │
│     96 │      dixmaanm │     99 │  1.00e+00 │  9.55e-06 │     10 │     10 │      0 │      9 │  7.25e-03 │ first_order │
│     97 │      dixmaann │     99 │  1.00e+00 │  9.94e-06 │     43 │     20 │      0 │     21 │  1.64e-02 │ first_order │
│     98 │      dixmaano │     99 │  1.00e+00 │  9.25e-06 │     39 │     17 │      0 │     18 │  1.21e-02 │ first_order │
│     99 │      dixmaanp │     99 │  1.00e+00 │  9.94e-06 │     39 │     17 │      0 │     18 │  1.24e-02 │ first_order │
│    100 │      dixon3dq │    100 │  3.83e-10 │  9.84e-06 │     10 │     10 │      0 │      9 │  1.94e-04 │ first_order │
│    101 │       dqdrtic │    100 │  1.37e-14 │  9.42e-07 │      6 │      6 │      0 │      5 │  4.29e-05 │ first_order │
│    102 │        dqrtic │    100 │  8.30e-08 │  6.24e-06 │     25 │     25 │      0 │     24 │  6.48e-04 │ first_order │
│    104 │       edensch │    100 │  6.03e+02 │  4.70e-06 │      9 │      9 │      0 │      8 │  9.08e-04 │ first_order │
│    105 │           eg2 │    100 │ -9.89e+01 │  1.42e-09 │      4 │      4 │      0 │      3 │  9.89e-05 │ first_order │
│    107 │       engval1 │    100 │  1.09e+02 │  4.98e-06 │     10 │     10 │      0 │      9 │  6.40e-04 │ first_order │
│    108 │          enso │      9 │  3.94e+02 │  9.19e-06 │     39 │     17 │      0 │     18 │  8.55e-03 │ first_order │
│    109 │  errinros_mod │    100 │  3.88e+01 │  3.75e-06 │    119 │     77 │      0 │     78 │  2.09e-02 │ first_order │
│    110 │      extrosnb │    100 │  2.08e-06 │  9.86e-06 │    916 │    247 │      0 │    246 │  5.36e-02 │ first_order │
│    111 │      fletcbv2 │    100 │ -5.14e-01 │  8.49e-06 │      5 │      5 │      0 │      4 │  2.12e-03 │ first_order │
│    112 │  fletcbv3_mod │    100 │ -2.04e+00 │  1.84e-07 │    134 │     57 │      0 │     58 │  6.29e-03 │ first_order │
│    113 │      fletchcr │    100 │  6.62e-12 │  9.98e-06 │     99 │     77 │      0 │     78 │  1.07e-02 │ first_order │
│    114 │      fminsrf2 │    100 │  1.00e+02 │  7.59e-06 │    190 │     45 │      0 │     46 │  1.53e-02 │ first_order │
│    115 │      freuroth │    100 │  5.94e+03 │  2.30e-06 │     48 │     16 │      0 │     17 │  3.08e-03 │ first_order │
│    116 │        gauss1 │      8 │  6.58e+02 │  9.67e-06 │     12 │     12 │      0 │     11 │  9.57e-03 │ first_order │
│    117 │        gauss2 │      8 │  6.24e+02 │  7.74e-06 │     14 │     14 │      0 │     13 │  1.14e-02 │ first_order │
│    118 │        gauss3 │      8 │  6.22e+02 │  3.26e-05 │    335 │    613 │      0 │    313 │  1.48e-02 │    not_desc │
│    120 │   genbroydenb │    100 │  1.03e-10 │  8.57e-06 │     13 │     13 │      0 │     12 │  4.93e-03 │ first_order │
│    121 │ genbroydentri │    100 │  8.46e-12 │  2.50e-06 │     12 │     12 │      0 │     11 │  1.84e-03 │ first_order │
│    122 │      genhumps │    100 │  7.13e-11 │  4.82e-06 │   9850 │   3212 │      0 │   3223 │  6.49e-01 │ first_order │
│    123 │       genrose │    100 │  1.00e+00 │  6.62e-06 │    159 │     60 │      0 │     61 │  1.12e-02 │ first_order │
│    124 │  genrose_nash │    100 │  1.00e+00 │  4.93e-06 │    195 │     66 │      0 │     67 │  1.25e-02 │ first_order │
│    126 │         hahn1 │      7 │  7.66e-01 │  1.53e-05 │    467 │    663 │      0 │    385 │  5.21e-02 │    not_desc │
│    293 │     indef_mod │    100 │ -9.89e+03 │  3.16e-07 │    809 │    263 │      0 │    266 │  3.28e-02 │ first_order │
│    294 │      integreq │    100 │  4.47e-13 │  9.84e-07 │      4 │      4 │      0 │      3 │  1.38e-02 │ first_order │
│    296 │        kirby2 │      5 │  1.95e+00 │  1.47e-05 │    346 │    622 │      0 │    324 │  4.08e-03 │    not_desc │
│    298 │      lanczos1 │      6 │  1.05e-06 │  6.96e-06 │    118 │     37 │      0 │     38 │  1.95e-03 │ first_order │
│    299 │      lanczos2 │      6 │  1.05e-06 │  6.95e-06 │    118 │     37 │      0 │     38 │  1.91e-03 │ first_order │
│    300 │      lanczos3 │      6 │  1.16e-06 │  7.97e-06 │    120 │     38 │      0 │     39 │  1.98e-03 │ first_order │
│    301 │       liarwhd │    100 │  1.41e-13 │  7.82e-06 │     11 │     11 │      0 │     10 │  8.19e-04 │ first_order │
│    309 │         mgh17 │      5 │  5.52e-02 │  1.56e-06 │     31 │      8 │      0 │      9 │  2.40e-04 │ first_order │
│    314 │        morebv │    100 │  1.34e-06 │  9.55e-06 │     16 │     16 │      0 │     15 │  5.16e-02 │ first_order │
│    316 │      nazareth │    100 │  1.04e+03 │  8.10e-06 │     12 │     12 │      0 │     11 │  8.54e-03 │ first_order │
│    317 │         ncb20 │    100 │  1.64e+02 │  8.30e-06 │     85 │     22 │      0 │     21 │  5.38e-02 │ first_order │
│    318 │        ncb20b │    100 │  1.97e+02 │  9.65e-06 │     38 │     15 │      0 │     16 │  1.47e-01 │ first_order │
│    320 │      noncvxu2 │    100 │  2.34e+02 │  8.46e-06 │    138 │     36 │      0 │     37 │  2.06e-02 │ first_order │
│    321 │      noncvxun │    100 │  2.32e+02 │  9.01e-06 │    167 │     41 │      0 │     42 │  1.37e-02 │ first_order │
│    322 │        nondia │    100 │  1.05e-13 │  1.28e-07 │     12 │      9 │      0 │      8 │  3.04e-04 │ first_order │
│    323 │      nondquar │    100 │  4.65e-06 │  9.31e-06 │     88 │     41 │      0 │     42 │  6.07e-03 │ first_order │
│    324 │      osborne1 │      5 │  2.82e-05 │  9.44e-06 │    171 │     53 │      0 │     55 │  2.99e-03 │ first_order │
│    325 │      osborne2 │     11 │  2.01e-02 │  5.36e-06 │     26 │     19 │      0 │     18 │  8.58e-03 │ first_order │
│    326 │      palmer1c │      8 │  4.88e-02 │  2.09e-06 │      8 │      8 │      0 │      7 │  5.89e-05 │ first_order │
│    327 │      palmer1d │      7 │  3.26e-01 │  2.12e-08 │      7 │      7 │      0 │      6 │  3.98e-05 │ first_order │
│    328 │      palmer2c │      8 │  7.21e-03 │  2.03e-07 │      7 │      7 │      0 │      6 │  4.41e-05 │ first_order │
│    329 │      palmer3c │      8 │  9.77e-03 │  3.39e-06 │      9 │      8 │      0 │      7 │  6.20e-05 │ first_order │
│    330 │      palmer4c │      8 │  2.85e-02 │  9.73e-06 │     21 │     11 │      0 │     10 │  5.91e-05 │ first_order │
│    331 │      palmer5c │      6 │  1.06e+00 │  9.22e-07 │      7 │      7 │      0 │      6 │  3.70e-05 │ first_order │
│    333 │      palmer6c │      8 │  8.19e-03 │  3.07e-07 │      8 │      8 │      0 │      7 │  4.60e-05 │ first_order │
│    334 │      palmer7c │      8 │  3.01e-01 │  5.44e-06 │     13 │     13 │      0 │     12 │  6.20e-05 │ first_order │
│    335 │      palmer8c │      8 │  7.99e-02 │  1.56e-07 │     11 │     11 │      0 │     10 │  5.41e-05 │ first_order │
│    336 │      penalty1 │    100 │  4.51e-04 │  9.69e-06 │     54 │     32 │      0 │     31 │  1.56e-03 │ first_order │
│    337 │      penalty2 │    100 │  9.71e+04 │  8.67e-06 │     19 │     19 │      0 │     18 │  4.75e-03 │ first_order │
│    338 │      penalty3 │    100 │  4.89e+07 │  2.61e+11 │ 763978 │  76430 │      0 │  76438 │  3.00e+01 │    max_time │
│    344 │      powellsg │    100 │  6.13e-08 │  8.57e-06 │     18 │     18 │      0 │     17 │  1.22e-03 │ first_order │
│    345 │         power │    100 │  1.50e-08 │  7.99e-06 │     24 │     24 │      0 │     23 │  1.55e-03 │ first_order │
│    346 │        quartc │    100 │  8.30e-08 │  6.24e-06 │     25 │     25 │      0 │     24 │  6.48e-04 │ first_order │
│    352 │       sbrybnd │    100 │  1.34e+00 │  8.41e-06 │   1760 │   1716 │      0 │   1719 │  2.43e+01 │ first_order │
│    353 │      schmvett │    100 │ -2.94e+02 │  8.24e-06 │     14 │     12 │      0 │     11 │  2.53e-03 │ first_order │
│    354 │       scosine │    100 │ -9.90e+01 │  9.07e-06 │    358 │    240 │      0 │    251 │  4.19e-01 │ first_order │
│    355 │       sinquad │    100 │  6.16e-07 │  8.07e-06 │     65 │     33 │      0 │     34 │  2.86e-03 │ first_order │
│    356 │      sparsine │    100 │  4.64e-12 │  9.66e-06 │     87 │     34 │      0 │     35 │  3.12e-02 │ first_order │
│    357 │      sparsqur │    100 │  1.77e-08 │  6.42e-06 │     17 │     17 │      0 │     16 │  2.20e-03 │ first_order │
│    358 │      spmsrtls │    100 │  8.17e-11 │  9.01e-06 │     13 │     13 │      0 │     12 │  2.48e-03 │ first_order │
│    359 │      srosenbr │    100 │  3.06e-15 │  2.47e-06 │     60 │     26 │      0 │     27 │  1.21e-03 │ first_order │
│    369 │       thurber │      7 │  2.82e+03 │  8.96e-06 │     59 │     42 │      0 │     41 │  2.99e-03 │ first_order │
│    370 │      tointgss │    100 │  9.71e+00 │  8.20e-06 │     35 │     13 │      0 │     14 │  2.28e-03 │ first_order │
│    371 │      tquartic │    100 │  4.90e-12 │  3.14e-07 │     15 │     13 │      0 │     12 │  6.09e-04 │ first_order │
│    376 │        tridia │    100 │  1.47e-13 │  9.23e-06 │      8 │      8 │      0 │      7 │  1.68e-04 │ first_order │
│    377 │        vardim │    100 │  3.73e-09 │  1.30e-10 │     26 │     26 │      0 │     25 │  1.64e-02 │ first_order │
│    378 │      vibrbeam │      8 │  7.82e-02 │  4.22e-06 │     33 │     32 │      0 │     31 │  1.99e-03 │ first_order │
│    379 │        watson │     31 │ -5.94e+64 │  6.31e+65 │      2 │      2 │      0 │      1 │  4.66e-03 │   unbounded │
│    380 │         woods │    100 │  5.66e-14 │  1.39e-06 │     83 │     41 │      0 │     42 │  6.06e-03 │ first_order │
└────────┴───────────────┴────────┴───────────┴───────────┴────────┴────────┴────────┴────────┴───────────┴─────────────┘
┌────────┬───────────────┬────────┬───────────┬───────────┬───────────┬─────────┬────────┬─────────┬───────────┬─────────────┐
│     id │          name │      n │      f(x) │   ‖∇f(x)‖ │       # f │    # ∇f │  # ∇²f │    iter │         t │      status │
├────────┼───────────────┼────────┼───────────┼───────────┼───────────┼─────────┼────────┼─────────┼───────────┼─────────────┤
│     25 │          NZF1 │     91 │  2.09e+04 │  9.06e-06 │       235 │     229 │      0 │     214 │  2.29e-03 │ first_order │
│     38 │       arglina │    100 │  5.00e+01 │  2.92e-14 │         2 │       2 │      0 │       1 │  7.70e-05 │ first_order │
│     39 │       arglinb │    100 │  2.48e+01 │  3.99e-04 │   2102152 │  281143 │      0 │  140575 │  3.00e+01 │    max_time │
│     40 │       arglinc │    100 │  5.11e+01 │  8.32e-02 │   2154684 │  359594 │      0 │  179797 │  3.00e+01 │    max_time │
│     41 │       argtrig │    100 │ -9.90e+03 │  7.54e-06 │       116 │     114 │      0 │     103 │  2.17e-03 │ first_order │
│     42 │       arwhead │    100 │  0.00e+00 │  4.34e-06 │        20 │      14 │      0 │      12 │  2.83e-04 │ first_order │
│     43 │        auglag │    100 │  1.08e+00 │  7.14e-06 │       240 │     228 │      0 │     197 │  3.20e-03 │ first_order │
│     46 │       bdqrtic │    100 │  1.89e+02 │  4.21e-06 │       115 │     103 │      0 │      90 │  4.13e-03 │ first_order │
│     51 │        biggs6 │      6 │      -Inf │       Inf │         8 │       8 │      0 │       2 │  3.91e-05 │   unbounded │
│     56 │       brownal │    100 │ -1.96e-08 │  1.58e-06 │        17 │       8 │      0 │       6 │  2.38e-03 │ first_order │
│     59 │     browngen1 │    100 │  8.23e+01 │  9.83e-06 │       307 │     281 │      0 │     271 │  7.64e-03 │ first_order │
│     60 │     browngen2 │    100 │  1.28e-17 │  9.60e-09 │        12 │      11 │      0 │       9 │  5.42e-04 │ first_order │
│     61 │     broyden3d │    100 │  3.56e-01 │  8.29e-06 │        53 │      51 │      0 │      44 │  9.75e-04 │ first_order │
│     62 │     broyden7d │    100 │  3.17e+01 │  5.66e-06 │        45 │      42 │      0 │      38 │  2.15e-03 │ first_order │
│     63 │      broydn7d │    100 │  3.60e+01 │  9.76e-06 │       418 │     416 │      0 │     395 │  2.02e-02 │ first_order │
│     64 │        brybnd │    100 │  1.54e+00 │  5.36e-06 │        25 │      21 │      0 │      19 │  9.42e-04 │ first_order │
│     69 │      chainwoo │    100 │  1.00e+00 │  9.84e-06 │      1115 │    1100 │      0 │    1022 │  3.77e-02 │ first_order │
│     71 │  chnrosnb_mod │    100 │  1.35e-11 │  6.96e-06 │       678 │     671 │      0 │     627 │  1.26e-02 │ first_order │
│     76 │      clplatea │    100 │ -9.15e-03 │  9.75e-06 │        74 │      74 │      0 │      70 │  2.70e-03 │ first_order │
│     77 │      clplateb │    100 │ -6.20e-03 │  5.93e-06 │        58 │      58 │      0 │      57 │  2.14e-03 │ first_order │
│     78 │      clplatec │    100 │ -5.11e-03 │  9.58e-06 │       647 │     641 │      0 │     606 │  2.23e-02 │ first_order │
│     80 │        cosine │    100 │ -9.90e+01 │  1.00e-06 │        15 │      15 │      0 │      11 │  1.80e-04 │ first_order │
│     81 │      cragglvy │    100 │  3.23e+01 │  9.36e-06 │        93 │      84 │      0 │      81 │  3.53e-03 │ first_order │
│     82 │     cragglvy2 │    100 │  2.52e+01 │  8.92e-06 │       121 │     112 │      0 │     105 │  4.50e-03 │ first_order │
│     83 │         curly │    100 │ -1.00e+04 │  8.39e-06 │      1177 │    1168 │      0 │    1124 │  2.47e-01 │ first_order │
│     84 │       curly10 │    100 │ -1.00e+04 │  8.39e-06 │      1177 │    1168 │      0 │    1124 │  2.46e-01 │ first_order │
│     85 │       curly20 │    100 │ -1.00e+04 │  8.27e-06 │      1366 │    1362 │      0 │    1298 │  8.81e-01 │ first_order │
│     86 │       curly30 │    100 │ -1.00e+04 │  8.89e-06 │      1499 │    1495 │      0 │    1412 │  1.93e+00 │ first_order │
│     88 │      dixmaane │     99 │  1.00e+00 │  7.83e-06 │        62 │      61 │      0 │      58 │  1.37e-03 │ first_order │
│     89 │      dixmaanf │     99 │  1.00e+00 │  6.94e-06 │        57 │      55 │      0 │      49 │  1.47e-03 │ first_order │
│     90 │      dixmaang │     99 │  1.00e+00 │  9.82e-06 │        59 │      56 │      0 │      53 │  1.46e-03 │ first_order │
│     91 │      dixmaanh │     99 │  1.00e+00 │  7.37e-06 │        66 │      63 │      0 │      59 │  1.62e-03 │ first_order │
│     92 │      dixmaani │     99 │  1.00e+00 │  9.45e-06 │       243 │     242 │      0 │     233 │  5.39e-03 │ first_order │
│     93 │      dixmaanj │     99 │  1.00e+00 │  7.44e-06 │       263 │     261 │      0 │     252 │  6.69e-03 │ first_order │
│     94 │      dixmaank │     99 │  1.00e+00 │  9.60e-06 │       221 │     219 │      0 │     209 │  6.16e-03 │ first_order │
│     95 │      dixmaanl │     99 │  1.00e+00 │  8.90e-06 │       182 │     179 │      0 │     172 │  4.59e-03 │ first_order │
│     96 │      dixmaanm │     99 │  1.00e+00 │  9.49e-06 │       377 │     376 │      0 │     364 │  8.40e-03 │ first_order │
│     97 │      dixmaann │     99 │  1.00e+00 │  8.35e-06 │       318 │     317 │      0 │     305 │  8.17e-03 │ first_order │
│     98 │      dixmaano │     99 │  1.00e+00 │  9.39e-06 │       256 │     254 │      0 │     246 │  6.53e-03 │ first_order │
│     99 │      dixmaanp │     99 │  1.00e+00 │  9.85e-06 │       289 │     286 │      0 │     275 │  7.38e-03 │ first_order │
│    100 │      dixon3dq │    100 │  3.12e-08 │  9.85e-06 │       367 │     367 │      0 │     357 │  1.67e-03 │ first_order │
│    101 │       dqdrtic │    100 │  6.55e-16 │  5.54e-07 │        22 │      16 │      0 │      13 │  6.41e-05 │ first_order │
│    102 │        dqrtic │    100 │  8.25e-08 │  6.42e-06 │        44 │      34 │      0 │      32 │  4.73e-04 │ first_order │
│    104 │       edensch │    100 │  6.03e+02 │  1.39e-06 │        27 │      25 │      0 │      21 │  5.56e-04 │ first_order │
│    105 │           eg2 │    100 │ -9.89e+01 │  1.01e-10 │        10 │       6 │      0 │       4 │  2.42e-04 │ first_order │
│    107 │       engval1 │    100 │  1.09e+02 │  4.65e-06 │        30 │      26 │      0 │      21 │  4.49e-04 │ first_order │
│    108 │          enso │      9 │  3.94e+02 │  5.33e-06 │        43 │      39 │      0 │      35 │  3.09e-03 │ first_order │
│    109 │  errinros_mod │    100 │  3.88e+01 │  8.10e-06 │       580 │     556 │      0 │     435 │  9.90e-03 │ first_order │
│    110 │      extrosnb │    100 │  1.03e-13 │  8.20e-06 │        42 │      36 │      0 │      33 │  4.81e-04 │ first_order │
│    111 │      fletcbv2 │    100 │ -5.14e-01 │  9.42e-06 │       203 │     203 │      0 │     193 │  3.28e-03 │ first_order │
│    112 │  fletcbv3_mod │    100 │ -2.03e+00 │  4.13e-06 │        40 │      36 │      0 │      30 │  1.03e-03 │ first_order │
│    113 │      fletchcr │    100 │  2.34e-12 │  9.54e-06 │       503 │     498 │      0 │     474 │  7.03e-03 │ first_order │
│    114 │      fminsrf2 │    100 │  1.00e+02 │  6.58e-06 │       157 │     156 │      0 │     149 │  4.38e-03 │ first_order │
│    115 │      freuroth │    100 │  5.98e+03 │  6.06e-06 │        36 │      30 │      0 │      27 │  1.11e-03 │ first_order │
│    116 │        gauss1 │      8 │  6.58e+02 │  1.20e-04 │    266549 │  265978 │      0 │  172053 │  3.00e+01 │    max_time │
│    117 │        gauss2 │      8 │  6.24e+02 │  2.03e-04 │    266070 │  265370 │      0 │  171111 │  3.00e+01 │    max_time │
│    118 │        gauss3 │      8 │  6.22e+02 │  3.83e-04 │    265761 │  264283 │      0 │  160549 │  3.00e+01 │    max_time │
│    120 │   genbroydenb │    100 │  1.75e-10 │  8.51e-06 │        48 │      43 │      0 │      41 │  2.45e-03 │ first_order │
│    121 │ genbroydentri │    100 │  4.32e-05 │  7.54e-06 │       136 │     134 │      0 │     130 │  5.09e-03 │ first_order │
│    122 │      genhumps │    100 │  1.12e-11 │  2.11e-06 │      1117 │     981 │      0 │     820 │  3.29e-02 │ first_order │
│    123 │       genrose │    100 │  1.00e+00 │  7.88e-06 │       277 │     271 │      0 │     254 │  4.69e-03 │ first_order │
│    124 │  genrose_nash │    100 │  1.00e+00 │  6.51e-06 │       325 │     309 │      0 │     279 │  5.63e-03 │ first_order │
│    126 │         hahn1 │      7 │  2.78e+04 │  2.07e-10 │         2 │       2 │      0 │       1 │  1.13e-04 │ first_order │
│    293 │     indef_mod │    100 │ -9.84e+03 │  3.16e-06 │       213 │     197 │      0 │     151 │  4.36e-03 │ first_order │
│    294 │      integreq │    100 │  3.70e-11 │  8.83e-06 │         6 │       6 │      0 │       5 │  4.99e-03 │ first_order │
│    296 │        kirby2 │      5 │  1.95e+00 │  7.73e-05 │   1189794 │ 1189287 │      0 │  659005 │  3.00e+01 │    max_time │
│    298 │      lanczos1 │      6 │  2.15e-06 │  2.88e-06 │       120 │     108 │      0 │      90 │  9.36e-04 │ first_order │
│    299 │      lanczos2 │      6 │  2.15e-06 │  9.26e-06 │        94 │      86 │      0 │      70 │  7.31e-04 │ first_order │
│    300 │      lanczos3 │      6 │  2.17e-06 │  3.09e-06 │       109 │     103 │      0 │      91 │  8.43e-04 │ first_order │
│    301 │       liarwhd │    100 │  4.65e-16 │  8.77e-07 │        33 │      23 │      0 │      19 │  5.58e-04 │ first_order │
│    309 │         mgh17 │      5 │  5.52e-02 │  7.40e-07 │        38 │      30 │      0 │      22 │  1.50e-04 │ first_order │
│    314 │        morebv │    100 │  2.96e-07 │  8.07e-06 │      4971 │    4970 │      0 │    4831 │  1.05e-01 │ first_order │
│    316 │      nazareth │    100 │  1.06e+03 │  4.73e-06 │        92 │      83 │      0 │      75 │  7.11e-03 │ first_order │
│    317 │         ncb20 │    100 │  1.67e+02 │  7.48e-06 │      1198 │    1185 │      0 │    1095 │  1.51e-01 │ first_order │
│    318 │        ncb20b │    100 │  1.97e+02 │  8.19e-06 │      3038 │    3029 │      0 │    2785 │  4.83e-01 │ first_order │
│    320 │      noncvxu2 │    100 │  2.32e+02 │  8.19e-06 │       544 │     542 │      0 │     525 │  1.47e-02 │ first_order │
│    321 │      noncvxun │    100 │  2.32e+02 │  9.99e-06 │       312 │     310 │      0 │     297 │  8.37e-03 │ first_order │
│    322 │        nondia │    100 │  1.04e-14 │  1.90e-06 │        35 │      25 │      0 │      20 │  3.48e-04 │ first_order │
│    323 │      nondquar │    100 │  1.83e-06 │  9.75e-06 │      2085 │    2010 │      0 │    1821 │  1.82e-02 │ first_order │
│    324 │      osborne1 │      5 │  2.34e-02 │  1.42e-01 │   5393093 │  421129 │      0 │  212606 │  3.00e+01 │    max_time │
│    325 │      osborne2 │     11 │  2.01e-02 │  7.98e-06 │       221 │     219 │      0 │     198 │  8.07e-03 │ first_order │
│    326 │      palmer1c │      8 │  2.59e+00 │  2.15e-01 │  99377869 │ 7651818 │      0 │ 3828763 │  3.00e+01 │    max_time │
│    327 │      palmer1d │      7 │  3.48e-01 │  2.18e-02 │ 107754269 │ 8294246 │      0 │ 4149285 │  3.00e+01 │    max_time │
│    328 │      palmer2c │      8 │  7.00e-02 │  7.71e-03 │  99153690 │ 7635469 │      0 │ 3820941 │  3.00e+01 │    max_time │
│    329 │      palmer3c │      8 │  7.84e-02 │  1.09e-02 │  98886377 │ 7611869 │      0 │ 3807904 │  3.00e+01 │    max_time │
│    330 │      palmer4c │      8 │  1.78e-01 │  1.51e-02 │ 101072774 │ 7780108 │      0 │ 3892065 │  3.00e+01 │    max_time │
│    331 │      palmer5c │      6 │  1.06e+00 │  4.58e-06 │        17 │      16 │      0 │      14 │  4.79e-05 │ first_order │
│    333 │      palmer6c │      8 │  4.78e-02 │  4.12e-03 │ 100817958 │ 7757837 │      0 │ 3879904 │  3.00e+01 │    max_time │
│    334 │      palmer7c │      8 │  2.16e+00 │  1.09e-02 │  99432570 │ 7960651 │      0 │ 3982625 │  3.00e+01 │    max_time │
│    335 │      palmer8c │      8 │  2.93e-01 │  2.20e-03 │  99484410 │ 7657331 │      0 │ 3830457 │  3.00e+01 │    max_time │
│    336 │      penalty1 │    100 │  4.51e-04 │  5.59e-06 │       146 │     127 │      0 │     105 │  1.68e-03 │ first_order │
│    337 │      penalty2 │    100 │  9.71e+04 │  6.47e-06 │        86 │      73 │      0 │      68 │  2.61e-03 │ first_order │
│    338 │      penalty3 │    100 │  1.00e+00 │  1.10e+00 │    667086 │   53444 │      0 │   26746 │  3.00e+01 │    max_time │
│    344 │      powellsg │    100 │  1.07e-10 │  3.52e-06 │        67 │      57 │      0 │      50 │  8.14e-04 │ first_order │
│    345 │         power │    100 │  1.59e-08 │  8.09e-06 │        61 │      47 │      0 │      45 │  3.93e-04 │ first_order │
│    346 │        quartc │    100 │  8.25e-08 │  6.42e-06 │        44 │      34 │      0 │      32 │  4.89e-04 │ first_order │
│    352 │       sbrybnd │    100 │  7.62e+00 │  9.99e-06 │     13798 │   13779 │      0 │   13289 │  7.69e-01 │ first_order │
│    353 │      schmvett │    100 │ -2.94e+02 │  4.59e-06 │        23 │      23 │      0 │      20 │  8.57e-04 │ first_order │
│    354 │       scosine │    100 │ -2.68e+01 │  9.60e+20 │   2327021 │  423106 │      0 │  211548 │  3.00e+01 │    max_time │
│    355 │       sinquad │    100 │  2.92e-11 │  8.77e-06 │        91 │      85 │      0 │      75 │  1.58e-03 │ first_order │
│    356 │      sparsine │    100 │  2.03e-12 │  8.15e-06 │       491 │     477 │      0 │     443 │  1.77e-02 │ first_order │
│    357 │      sparsqur │    100 │  2.35e-08 │  8.11e-06 │        30 │      25 │      0 │      23 │  7.04e-04 │ first_order │
│    358 │      spmsrtls │    100 │  5.65e-11 │  7.86e-06 │        71 │      71 │      0 │      66 │  1.49e-03 │ first_order │
│    359 │      srosenbr │    100 │  6.02e-16 │  1.18e-06 │        56 │      47 │      0 │      40 │  6.17e-04 │ first_order │
│    369 │       thurber │      7 │  2.82e+03 │  1.37e-04 │   3291911 │ 3291442 │      0 │ 2171734 │  3.00e+01 │    max_time │
│    370 │      tointgss │    100 │  9.71e+00 │  9.77e-06 │        18 │      18 │      0 │      14 │  5.51e-04 │ first_order │
│    371 │      tquartic │    100 │  3.71e-20 │  7.91e-09 │        26 │      24 │      0 │      18 │  3.33e-04 │ first_order │
│    376 │        tridia │    100 │  1.56e-12 │  9.69e-06 │       201 │     197 │      0 │     188 │  9.15e-04 │ first_order │
│    377 │        vardim │    100 │ -4.10e-08 │  1.44e-09 │        68 │      44 │      0 │      39 │  9.43e-03 │ first_order │
│    378 │      vibrbeam │      8 │  5.28e+00 │  1.07e-03 │   3191797 │ 3188447 │      0 │ 2124957 │  3.00e+01 │    max_time │
│    379 │        watson │     31 │      -Inf │ 9.11e+304 │         7 │       7 │      0 │       1 │  3.38e-03 │   unbounded │
│    380 │         woods │    100 │  1.08e-13 │  3.66e-06 │        86 │      77 │      0 │      61 │  1.69e-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)