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)