Benchmarks

CUTEst benchmark

With a JSO-compliant solver, such as Percival, we can run the solver on a set of problems, explore the results, and compare to other JSO-compliant solvers using specialized benchmark tools. We are following here the tutorial in SolverBenchmark.jl to run benchmarks on JSO-compliant solvers.

using CUTEst
┌ Info: using problem repository
└   ENV["MASTSIF"] = "/home/runner/.julia/artifacts/a7ea0d0aaf29a39ca0fe75588fc077cdd5b5ed54/optrove-sif-99c5b38e7d03"

To test the implementation of Percival, we use the package CUTEst.jl, which implements CUTEstModel an instance of AbstractNLPModel.

using SolverBenchmark

Let us select problems from CUTEst with a maximum of 100 variables or constraints. After removing problems with fixed variables, examples with a constant objective, and infeasibility residuals.

_pnames = CUTEst.select(
  max_var = 100,
  min_con = 1,
  max_con = 100,
  only_free_var = true,
  objtype = 3:6
)

#Remove all the problems ending by NE as Ipopt cannot handle them.
pnamesNE = _pnames[findall(x->occursin(r"NE\b", x), _pnames)]
pnames = setdiff(_pnames, pnamesNE)
cutest_problems = (CUTEstModel(p) for p in pnames)

length(cutest_problems) # number of problems
96

We compare here Percival with Ipopt (Wächter, A., & Biegler, L. T. (2006). On the implementation of an interior-point filter line-search algorithm for large-scale nonlinear programming. Mathematical programming, 106(1), 25-57.), via the NLPModelsIpopt.jl thin wrapper, with Percival on a subset of CUTEst problems.

using Percival, NLPModelsIpopt

To make stopping conditions comparable, we set Ipopt's parameters dual_inf_tol=Inf, constr_viol_tol=Inf and compl_inf_tol=Inf to disable additional stopping conditions related to those tolerances, acceptable_iter=0 to disable the search for an acceptable point.

#Same time limit for all the solvers
max_time = 1200. #20 minutes
tol = 1e-5

solvers = Dict(
  :ipopt => nlp -> ipopt(
    nlp,
    print_level = 0,
    dual_inf_tol = Inf,
    constr_viol_tol = Inf,
    compl_inf_tol = Inf,
    acceptable_iter = 0,
    max_cpu_time = max_time,
    x0 = nlp.meta.x0,
    tol = tol,
  ),
  :percival => nlp -> percival(
      nlp,
      max_time = max_time,
      max_iter = typemax(Int64),
      max_eval = typemax(Int64),
      atol = tol,
      rtol = tol,
      ctol = tol,
  ),
)

stats = bmark_solvers(solvers, cutest_problems)
Dict{Symbol, DataFrames.DataFrame} with 2 entries:
  :percival => 96×39 DataFrame…
  :ipopt    => 96×41 DataFrame…

The function bmark_solvers return a Dict of DataFrames with detailed information on the execution. This output can be saved in a data file.

using JLD2
@save "ipopt_percival_$(string(length(pnames))).jld2" stats

The result of the benchmark can be explored via tables,

pretty_stats(stats[:percival])
┌────────┬──────────┬────────┬────────┬────────┬─────────────┬───────────┬──────────────┬────────┬───────────┬─────────────┬───────────┬────────────┬────────────┬────────────────┬────────────────┬────────────┬─────────────┬───────────┬───────────────┬───────────────┬─────────────┬─────────────────┬─────────────────┬──────────────┬──────────────────┬──────────────────┬────────────┬─────────────┬─────────────┬──────────────┬────────────────┬────────────────────┬──────────────────────┬───────────────────────┬─────────────────────┬──────────────────────┬──────────────────────┬───────────┐
│     id │     name │   nvar │   ncon │   nequ │      status │ objective │ elapsed_time │   iter │ dual_feas │ primal_feas │ neval_obj │ neval_grad │ neval_cons │ neval_cons_lin │ neval_cons_nln │ neval_jcon │ neval_jgrad │ neval_jac │ neval_jac_lin │ neval_jac_nln │ neval_jprod │ neval_jprod_lin │ neval_jprod_nln │ neval_jtprod │ neval_jtprod_lin │ neval_jtprod_nln │ neval_hess │ neval_hprod │ neval_jhess │ neval_jhprod │ neval_residual │ neval_jac_residual │ neval_jprod_residual │ neval_jtprod_residual │ neval_hess_residual │ neval_jhess_residual │ neval_hprod_residual │ extrainfo │
├────────┼──────────┼────────┼────────┼────────┼─────────────┼───────────┼──────────────┼────────┼───────────┼─────────────┼───────────┼────────────┼────────────┼────────────────┼────────────────┼────────────┼─────────────┼───────────┼───────────────┼───────────────┼─────────────┼─────────────────┼─────────────────┼──────────────┼──────────────────┼──────────────────┼────────────┼─────────────┼─────────────┼──────────────┼────────────────┼────────────────────┼──────────────────────┼───────────────────────┼─────────────────────┼──────────────────────┼──────────────────────┼───────────┤
│      1 │   POLAK4 │      3 │      3 │      0 │ first_order │ -1.36e-16 │     2.40e+01 │  43593 │  1.69e-05 │    5.55e-15 │   1044154 │    1136201 │    1952635 │              0 │        1952635 │          0 │           0 │         0 │             0 │             0 │    12787673 │               0 │        12787673 │     13967467 │                0 │                0 │          0 │    12787673 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│      2 │  EXPFITA │      5 │     22 │      0 │ first_order │  1.14e-03 │     2.14e-03 │      5 │  2.91e-10 │    3.44e-11 │        12 │         22 │         12 │             12 │              0 │          0 │           0 │         0 │             0 │             0 │         370 │             740 │               0 │          397 │                0 │                0 │          0 │         370 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│      3 │     MSS1 │     90 │     73 │      0 │ first_order │ -1.60e+01 │     9.84e+02 │     12 │  4.05e-07 │    3.15e-06 │     17956 │      24272 │      19109 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │    41869490 │               0 │               0 │     41893774 │                0 │                0 │          0 │    41869490 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│      4 │     HS79 │      5 │      3 │      0 │ first_order │  7.88e-02 │     1.11e-03 │      6 │  5.61e-12 │    1.85e-09 │        38 │         42 │         47 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         410 │               0 │               0 │          458 │                0 │                0 │          0 │         410 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│      5 │     S268 │      5 │      5 │      0 │ first_order │  1.46e-11 │     5.59e-04 │      4 │  1.88e-07 │    1.92e-08 │        11 │         19 │         11 │             11 │              0 │          0 │           0 │         0 │             0 │             0 │         190 │             380 │               0 │          213 │                0 │                0 │          0 │         190 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│      6 │      HS7 │      2 │      1 │      0 │ first_order │ -1.73e+00 │     1.27e-03 │      6 │  6.13e-12 │    9.03e-10 │       110 │         84 │        149 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         784 │               0 │               0 │          874 │                0 │                0 │          0 │         784 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│      7 │     HS48 │      5 │      2 │      0 │ first_order │  0.00e+00 │     1.16e-04 │      6 │  9.92e-14 │    8.01e-15 │         7 │         19 │          7 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │          47 │               0 │               0 │           72 │                0 │                0 │          0 │          47 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│      8 │      BT9 │      4 │      2 │      0 │ first_order │ -1.00e+00 │     8.49e-04 │      6 │  2.08e-09 │    1.39e-06 │        61 │         66 │         95 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         561 │               0 │               0 │          633 │                0 │                0 │          0 │         561 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│      9 │ MIFFLIN1 │      3 │      2 │      0 │ first_order │ -1.00e+00 │     4.03e-04 │      5 │  1.47e-14 │    1.11e-07 │        25 │         32 │         29 │             29 │             29 │          0 │           0 │         0 │             0 │             0 │         223 │             446 │             223 │          260 │                0 │                0 │          0 │         223 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     10 │   HAIFAS │     13 │      9 │      0 │ first_order │ -4.50e-01 │     1.01e-03 │      5 │  3.85e-08 │    6.77e-09 │        25 │         29 │         31 │              0 │             31 │          0 │           0 │         0 │             0 │             0 │         241 │               0 │             241 │          275 │                0 │                0 │          0 │         241 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     11 │ GIGOMEZ1 │      3 │      3 │      0 │ first_order │ -3.00e+00 │     1.34e-03 │      6 │  3.97e-12 │    1.28e-09 │        76 │         65 │        101 │            101 │            101 │          0 │           0 │         0 │             0 │             0 │         774 │            1548 │             774 │          845 │                0 │                0 │          0 │         774 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     12 │ GIGOMEZ2 │      3 │      3 │      0 │ first_order │  1.95e+00 │     1.17e-03 │      5 │  1.30e-06 │    5.92e-06 │        48 │         48 │         58 │              0 │             58 │          0 │           0 │         0 │             0 │             0 │         490 │               0 │             490 │          543 │                0 │                0 │          0 │         490 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     13 │ DEMYMALO │      3 │      3 │      0 │ first_order │ -3.00e+00 │     7.15e-04 │      4 │  2.60e-11 │    8.68e-07 │        42 │         44 │         48 │             48 │             48 │          0 │           0 │         0 │             0 │             0 │         386 │             772 │             386 │          434 │                0 │                0 │          0 │         386 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     14 │     HS42 │      4 │      2 │      0 │ first_order │  1.39e+01 │     5.31e-04 │      5 │  2.30e-08 │    1.97e-07 │        26 │         36 │         39 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         327 │               0 │               0 │          368 │                0 │                0 │          0 │         327 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     15 │     HS27 │      3 │      1 │      0 │ first_order │  4.00e-02 │     6.58e-04 │      4 │  2.57e-09 │    1.33e-06 │        58 │         54 │         70 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         452 │               0 │               0 │          510 │                0 │                0 │          0 │         452 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     16 │ DIXCHLNG │     10 │      5 │      0 │ first_order │  1.04e-08 │     3.73e-03 │      9 │  1.73e-11 │    3.10e-06 │        34 │         45 │         42 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         561 │               0 │               0 │          615 │                0 │                0 │          0 │         561 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     17 │ CHACONN1 │      3 │      3 │      0 │ first_order │  1.95e+00 │     4.22e-04 │      4 │  1.28e-10 │    9.40e-06 │        17 │         25 │         17 │              0 │             17 │          0 │           0 │         0 │             0 │             0 │         173 │               0 │             173 │          202 │                0 │                0 │          0 │         173 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     18 │ KIWCRESC │      3 │      2 │      0 │ first_order │  1.98e-06 │     8.14e-04 │      4 │  2.04e-12 │    5.60e-06 │        52 │         51 │         62 │              0 │             62 │          0 │           0 │         0 │             0 │             0 │         474 │               0 │             474 │          529 │                0 │                0 │          0 │         474 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     19 │    HS100 │      7 │      4 │      0 │ first_order │  6.81e+02 │     1.68e-02 │      6 │  2.89e-06 │    5.29e-09 │       417 │        355 │        492 │              0 │            492 │          0 │           0 │         0 │             0 │             0 │        5826 │               0 │            5826 │         6187 │                0 │                0 │          0 │        5826 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     20 │  WOMFLET │      3 │      3 │      0 │ first_order │  6.05e+00 │     5.69e-04 │      5 │  6.47e-07 │    8.24e-06 │        29 │         36 │         32 │              0 │             32 │          0 │           0 │         0 │             0 │             0 │         297 │               0 │             297 │          338 │                0 │                0 │          0 │         297 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     21 │     BT11 │      5 │      3 │      0 │ first_order │  8.25e-01 │     9.77e-04 │      6 │  2.19e-13 │    2.47e-06 │        37 │         42 │         45 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         384 │               0 │               0 │          432 │                0 │                0 │          0 │         384 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     22 │   POLAK3 │     12 │     10 │      0 │ first_order │  5.93e+00 │     4.04e-01 │      6 │  2.97e-08 │    1.07e-07 │       494 │        442 │        559 │              0 │            559 │          0 │           0 │         0 │             0 │             0 │       14150 │               0 │           14150 │        14598 │                0 │                0 │          0 │       14150 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     23 │  MARATOS │      2 │      1 │      0 │ first_order │ -1.00e+00 │     1.45e-04 │      5 │  1.17e-11 │    1.52e-06 │        13 │         21 │         15 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │          85 │               0 │               0 │          111 │                0 │                0 │          0 │          85 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     24 │    HS113 │     10 │      8 │      0 │ first_order │  2.43e+01 │     2.10e-02 │      6 │  4.76e-07 │    1.30e-09 │       237 │        218 │        281 │            281 │            281 │          0 │           0 │         0 │             0 │             0 │        5970 │           11940 │            5970 │         6194 │                0 │                0 │          0 │        5970 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     25 │      BT6 │      5 │      2 │      0 │ first_order │  5.15e+00 │     3.78e-03 │      5 │  3.76e-08 │    8.10e-09 │       106 │         96 │        152 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │        1235 │               0 │               0 │         1336 │                0 │                0 │          0 │        1235 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     26 │ ORTHREGB │     27 │      6 │      0 │ first_order │  3.37e-20 │     1.50e-02 │      5 │  4.81e-07 │    1.69e-11 │        98 │         84 │        153 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │        1972 │               0 │               0 │         2061 │                0 │                0 │          0 │        1972 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     27 │      HS6 │      2 │      1 │      0 │ first_order │  4.04e-16 │     1.55e-03 │      3 │  3.44e-05 │    2.48e-06 │       170 │        100 │        246 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │        1200 │               0 │               0 │         1303 │                0 │                0 │          0 │        1200 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     28 │ GIGOMEZ3 │      3 │      3 │      0 │ first_order │  2.00e+00 │     1.13e-03 │      5 │  1.98e-13 │    5.29e-08 │        41 │         38 │         55 │              0 │             55 │          0 │           0 │         0 │             0 │             0 │         452 │               0 │             452 │          495 │                0 │                0 │          0 │         452 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     29 │     HS28 │      3 │      1 │      0 │ first_order │  6.41e-31 │     9.80e-05 │      6 │  7.50e-13 │    1.00e-13 │         7 │         19 │          7 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │          42 │               0 │               0 │           67 │                0 │                0 │          0 │          42 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     30 │ MINMAXBD │      5 │     20 │      0 │ first_order │  1.16e+02 │     1.24e-01 │      6 │  1.40e-05 │    8.75e-08 │       723 │        626 │        862 │              0 │            862 │          0 │           0 │         0 │             0 │             0 │       18467 │               0 │           18467 │        19099 │                0 │                0 │          0 │       18467 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     31 │     HS10 │      2 │      1 │      0 │ first_order │ -1.00e+00 │     5.65e-04 │      6 │  2.47e-14 │    5.91e-07 │        38 │         50 │         39 │              0 │             39 │          0 │           0 │         0 │             0 │             0 │         333 │               0 │             333 │          389 │                0 │                0 │          0 │         333 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     32 │     HS40 │      4 │      3 │      0 │ first_order │ -2.50e-01 │     3.23e-04 │      5 │  7.11e-08 │    8.29e-06 │        19 │         25 │         23 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         153 │               0 │               0 │          183 │                0 │                0 │          0 │         153 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     33 │      BT8 │      5 │      2 │      0 │ first_order │  1.00e+00 │     2.59e-04 │      5 │  2.71e-14 │    7.18e-08 │        19 │         28 │         21 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         142 │               0 │               0 │          175 │                0 │                0 │          0 │         142 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     34 │      BT1 │      2 │      1 │      0 │ first_order │ -1.00e+00 │     3.84e-04 │      5 │  3.10e-12 │    8.74e-09 │        37 │         37 │         48 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         245 │               0 │               0 │          287 │                0 │                0 │          0 │         245 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     35 │     HS43 │      4 │      3 │      0 │ first_order │ -4.40e+01 │     1.14e-03 │      6 │  3.25e-12 │    4.34e-08 │        38 │         45 │         44 │              0 │             44 │          0 │           0 │         0 │             0 │             0 │         431 │               0 │             431 │          482 │                0 │                0 │          0 │         431 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     36 │  MAKELA2 │      3 │      3 │      0 │ first_order │  7.20e+00 │     6.78e-04 │      6 │  5.38e-10 │    1.03e-09 │        27 │         39 │         28 │              0 │             28 │          0 │           0 │         0 │             0 │             0 │         369 │               0 │             369 │          414 │                0 │                0 │          0 │         369 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     37 │     HS14 │      2 │      2 │      0 │ first_order │  1.39e+00 │     2.77e-04 │      6 │  6.30e-13 │    1.00e-07 │        15 │         28 │         15 │             15 │             15 │          0 │           0 │         0 │             0 │             0 │         142 │             284 │             142 │          176 │                0 │                0 │          0 │         142 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     38 │  DIPIGRI │      7 │      4 │      0 │ first_order │  6.81e+02 │     2.57e-02 │      6 │  8.28e-07 │    3.07e-07 │       615 │        516 │        743 │              0 │            743 │          0 │           0 │         0 │             0 │             0 │        9026 │               0 │            9026 │         9548 │                0 │                0 │          0 │        9026 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     39 │ MIFFLIN2 │      3 │      2 │      0 │ first_order │ -1.00e+00 │     8.14e-04 │      5 │  3.33e-12 │    2.68e-06 │        55 │         65 │         56 │              0 │             56 │          0 │           0 │         0 │             0 │             0 │         468 │               0 │             468 │          538 │                0 │                0 │          0 │         468 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     40 │     HS91 │      5 │      1 │      0 │ first_order │  1.36e+00 │     2.58e+00 │     15 │  4.35e-12 │    2.44e-06 │       175 │        186 │        286 │              0 │            286 │          0 │           0 │         0 │             0 │             0 │        1990 │               0 │            1990 │         2191 │                0 │                0 │          0 │        1990 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     41 │ BYRDSPHR │      3 │      2 │      0 │ first_order │ -4.68e+00 │     4.74e-04 │      5 │  2.40e-10 │    1.31e-08 │        38 │         42 │         45 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         292 │               0 │               0 │          339 │                0 │                0 │          0 │         292 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     42 │     HS50 │      5 │      3 │      0 │ first_order │  6.39e-15 │     2.43e-04 │      6 │  6.25e-13 │    1.20e-07 │        11 │         23 │         11 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         103 │               0 │               0 │          132 │                0 │                0 │          0 │         103 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     43 │ CHACONN2 │      3 │      3 │      0 │ first_order │  2.00e+00 │     1.22e-03 │      5 │  1.33e-13 │    5.30e-08 │        45 │         40 │         61 │              0 │             61 │          0 │           0 │         0 │             0 │             0 │         507 │               0 │             507 │          552 │                0 │                0 │          0 │         507 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     44 │     BT10 │      2 │      2 │      0 │ first_order │ -1.00e+00 │     3.02e-04 │      6 │  2.75e-10 │    8.34e-07 │        26 │         35 │         29 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         205 │               0 │               0 │          246 │                0 │                0 │          0 │         205 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     45 │ HALDMADS │      6 │     42 │      0 │ first_order │  1.20e-04 │     2.36e-02 │      8 │  7.99e-11 │    8.98e-06 │        38 │         49 │         45 │              0 │             45 │          0 │           0 │         0 │             0 │             0 │        2285 │               0 │            2285 │         2342 │                0 │                0 │          0 │        2285 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     46 │ ROSENMMX │      5 │      4 │      0 │ first_order │ -4.40e+01 │     8.97e-03 │      6 │  1.42e-08 │    2.36e-10 │       289 │        242 │        372 │              0 │            372 │          0 │           0 │         0 │             0 │             0 │        3915 │               0 │            3915 │         4163 │                0 │                0 │          0 │        3915 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     47 │     HS26 │      3 │      1 │      0 │ first_order │  3.64e-11 │     7.67e-04 │      6 │  1.72e-07 │    1.62e-07 │        50 │         51 │         61 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         423 │               0 │               0 │          480 │                0 │                0 │          0 │         423 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     48 │   SPIRAL │      3 │      2 │      0 │ first_order │  9.41e-08 │     3.13e-03 │      4 │  1.58e-06 │    1.33e-07 │       132 │        108 │        164 │              0 │            164 │          0 │           0 │         0 │             0 │             0 │        1069 │               0 │            1069 │         1181 │                0 │                0 │          0 │        1069 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     49 │      BT7 │      5 │      3 │      0 │ first_order │  3.60e+02 │     7.67e-04 │      8 │  1.34e-10 │    1.84e-08 │        41 │         52 │         49 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         399 │               0 │               0 │          459 │                0 │                0 │          0 │         399 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     50 │      HS9 │      2 │      1 │      0 │ first_order │ -5.00e-01 │     7.89e-05 │      4 │  5.15e-06 │    3.01e-08 │         5 │         13 │          5 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │          30 │               0 │               0 │           47 │                0 │                0 │          0 │          30 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     51 │ HS100LNP │      7 │      2 │      0 │ first_order │  6.81e+02 │     1.13e-03 │      5 │  1.04e-05 │    3.29e-06 │        39 │         38 │         50 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         422 │               0 │               0 │          465 │                0 │                0 │          0 │         422 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     52 │  GENHS28 │     10 │      8 │      0 │ first_order │  9.27e-01 │     2.48e-04 │      6 │  1.14e-11 │    1.69e-08 │         6 │         18 │          6 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │          73 │               0 │               0 │           97 │                0 │                0 │          0 │          73 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     53 │      BT5 │      3 │      2 │      0 │ first_order │  9.62e+02 │     3.49e-04 │      5 │  1.13e-06 │    4.47e-06 │        25 │         30 │         32 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         200 │               0 │               0 │          235 │                0 │                0 │          0 │         200 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     54 │     HS61 │      3 │      2 │      0 │ first_order │ -1.44e+02 │     3.52e-04 │      4 │  4.87e-06 │    1.44e-07 │        29 │         34 │         32 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         227 │               0 │               0 │          265 │                0 │                0 │          0 │         227 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     55 │      CB2 │      3 │      3 │      0 │ first_order │  1.95e+00 │     1.87e-03 │      6 │  3.79e-09 │    9.97e-09 │        66 │         74 │         81 │              0 │             81 │          0 │           0 │         0 │             0 │             0 │         868 │               0 │             868 │          948 │                0 │                0 │          0 │         868 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     56 │     HS77 │      5 │      2 │      0 │ first_order │  5.53e+00 │     1.59e-03 │      6 │  8.49e-08 │    4.85e-08 │        66 │         65 │         80 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         687 │               0 │               0 │          758 │                0 │                0 │          0 │         687 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     57 │     HS39 │      4 │      2 │      0 │ first_order │ -1.00e+00 │     9.27e-04 │      6 │  2.08e-09 │    1.39e-06 │        61 │         66 │         95 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         561 │               0 │               0 │          633 │                0 │                0 │          0 │         561 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     58 │     HS88 │      2 │      1 │      0 │ first_order │  1.36e+00 │     3.06e-01 │     15 │  7.50e-12 │    2.44e-06 │        77 │        105 │         93 │              0 │             93 │          0 │           0 │         0 │             0 │             0 │         880 │               0 │             880 │         1000 │                0 │                0 │          0 │         880 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     59 │  MWRIGHT │      5 │      3 │      0 │ first_order │  2.50e+01 │     7.78e-04 │      5 │  1.43e-08 │    2.51e-07 │        30 │         36 │         48 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         388 │               0 │               0 │          429 │                0 │                0 │          0 │         388 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     60 │      BT4 │      3 │      2 │      0 │ first_order │ -4.55e+01 │     3.09e-04 │      6 │  2.34e-12 │    1.09e-06 │        21 │         32 │         23 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         175 │               0 │               0 │          213 │                0 │                0 │          0 │         175 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     61 │      BT2 │      3 │      1 │      0 │ first_order │  3.26e-02 │     3.13e-03 │      7 │  3.98e-08 │    3.59e-12 │       187 │        139 │        258 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │        1710 │               0 │               0 │         1856 │                0 │                0 │          0 │        1710 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     62 │  MAKELA3 │     21 │     20 │      0 │ first_order │  6.85e-09 │     3.24e-02 │      6 │  1.51e-08 │    1.32e-08 │       588 │        354 │        839 │              0 │            839 │          0 │           0 │         0 │             0 │             0 │        6148 │               0 │            6148 │         6508 │                0 │                0 │          0 │        6148 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     63 │     HS46 │      5 │      2 │      0 │ first_order │  1.13e-11 │     6.25e-04 │      6 │  7.54e-06 │    1.90e-06 │        25 │         32 │         30 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         248 │               0 │               0 │          286 │                0 │                0 │          0 │         248 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     64 │     HS49 │      5 │      2 │      0 │ first_order │  1.56e-09 │     3.54e-04 │      6 │  9.95e-07 │    1.82e-14 │        18 │         30 │         18 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         178 │               0 │               0 │          214 │                0 │                0 │          0 │         178 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     65 │   GOFFIN │     51 │     50 │      0 │ first_order │ -1.98e-07 │     1.61e-02 │      4 │  1.74e-09 │    1.40e-06 │        31 │         39 │         31 │             31 │              0 │          0 │           0 │         0 │             0 │             0 │         700 │            1400 │               0 │          743 │                0 │                0 │          0 │         700 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     66 │ HS100MOD │      7 │      4 │      0 │ first_order │  6.79e+02 │     3.45e-01 │      7 │  1.01e-05 │    6.79e-11 │      2251 │       1735 │       2875 │              0 │           2875 │          0 │           0 │         0 │             0 │             0 │      125338 │               0 │          125338 │       127080 │                0 │                0 │          0 │      125338 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     67 │   MADSEN │      3 │      6 │      0 │ first_order │  6.16e-01 │     1.68e-03 │      5 │  2.67e-06 │    1.34e-06 │        49 │         58 │         50 │              0 │             50 │          0 │           0 │         0 │             0 │             0 │         619 │               0 │             619 │          682 │                0 │                0 │          0 │         619 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     68 │   POLAK6 │      5 │      4 │      0 │ first_order │ -4.40e+01 │     8.80e-02 │      6 │  6.16e-09 │    2.18e-07 │      2093 │       1868 │       2331 │              0 │           2331 │          0 │           0 │         0 │             0 │             0 │       26871 │               0 │           26871 │        28745 │                0 │                0 │          0 │       26871 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     69 │     HS78 │      5 │      3 │      0 │ first_order │ -2.92e+00 │     3.31e-04 │      4 │  3.24e-09 │    9.98e-07 │        15 │         19 │         19 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         132 │               0 │               0 │          155 │                0 │                0 │          0 │         132 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     70 │     HS90 │      4 │      1 │      0 │ first_order │  1.36e+00 │     1.76e+00 │     15 │  6.47e-12 │    2.44e-06 │       169 │        186 │        273 │              0 │            273 │          0 │           0 │         0 │             0 │             0 │        1876 │               0 │            1876 │         2077 │                0 │                0 │          0 │        1876 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     71 │     HS11 │      2 │      1 │      0 │ first_order │ -8.50e+00 │     3.48e-04 │      6 │  1.47e-13 │    1.39e-08 │        22 │         35 │         22 │              0 │             22 │          0 │           0 │         0 │             0 │             0 │         210 │               0 │             210 │          251 │                0 │                0 │          0 │         210 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     72 │     HS29 │      3 │      1 │      0 │ first_order │ -2.26e+01 │     5.59e-04 │      5 │  2.88e-07 │    1.87e-06 │        36 │         42 │         40 │              0 │             40 │          0 │           0 │         0 │             0 │             0 │         297 │               0 │             297 │          344 │                0 │                0 │          0 │         297 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     73 │ S316-322 │      2 │      1 │      0 │ first_order │  3.34e+02 │     1.75e-04 │      7 │  8.54e-14 │    3.89e-07 │        16 │         31 │         16 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │          97 │               0 │               0 │          135 │                0 │                0 │          0 │          97 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     74 │      FLT │      2 │      2 │      0 │ first_order │ -3.10e-28 │     1.10e-04 │      3 │  1.10e-05 │    1.84e-12 │        10 │         16 │         10 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │          55 │               0 │               0 │           74 │                0 │                0 │          0 │          55 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     75 │   POLAK1 │      3 │      2 │      0 │ first_order │  2.72e+00 │     2.30e-03 │      5 │  1.32e-10 │    3.73e-07 │       133 │         87 │        189 │              0 │            189 │          0 │           0 │         0 │             0 │             0 │        1147 │               0 │            1147 │         1239 │                0 │                0 │          0 │        1147 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     76 │  MAKELA4 │     21 │     40 │      0 │ first_order │  4.81e-18 │     3.04e-04 │      4 │  6.66e-16 │    3.13e-17 │         8 │         16 │          8 │              8 │              0 │          0 │           0 │         0 │             0 │             0 │          79 │             158 │               0 │           99 │                0 │                0 │          0 │          79 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     77 │    SNAKE │      2 │      2 │      0 │ first_order │  3.65e-05 │     7.59e+02 │      7 │  2.26e-10 │    2.61e-09 │  60436818 │   32866121 │   88090558 │              0 │       88090558 │          0 │           0 │         0 │             0 │             0 │   404358502 │               0 │       404358502 │    437224630 │                0 │                0 │          0 │   404358502 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     78 │   POLAK2 │     11 │      2 │      0 │ first_order │  5.46e+01 │     4.65e-03 │      5 │  7.76e-09 │    1.41e-13 │       140 │        138 │        233 │              0 │            233 │          0 │           0 │         0 │             0 │             0 │        1387 │               0 │            1387 │         1530 │                0 │                0 │          0 │        1387 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     79 │     HS92 │      6 │      1 │      0 │ first_order │  1.36e+00 │     2.76e+00 │     15 │  6.71e-12 │    2.44e-06 │       132 │        146 │        201 │              0 │            201 │          0 │           0 │         0 │             0 │             0 │        1512 │               0 │            1512 │         1673 │                0 │                0 │          0 │        1512 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     80 │ MINMAXRB │      3 │      4 │      0 │ first_order │  4.23e-10 │     3.77e-03 │      5 │  1.69e-09 │    8.45e-10 │       182 │        178 │        199 │            199 │            199 │          0 │           0 │         0 │             0 │             0 │        2120 │            4240 │            2120 │         2303 │                0 │                0 │          0 │        2120 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     81 │  MAKELA1 │      3 │      2 │      0 │ first_order │ -1.41e+00 │     4.38e-04 │      5 │  8.90e-15 │    2.55e-07 │        28 │         33 │         34 │             34 │             34 │          0 │           0 │         0 │             0 │             0 │         241 │             482 │             241 │          279 │                0 │                0 │          0 │         241 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     82 │     HS51 │      5 │      3 │      0 │ first_order │  1.23e-11 │     1.43e-04 │      7 │  9.49e-13 │    2.13e-06 │         8 │         22 │          8 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │          56 │               0 │               0 │           85 │                0 │                0 │          0 │          56 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     83 │     HS56 │      7 │      4 │      0 │ first_order │ -3.46e+00 │     3.17e-04 │      5 │  8.28e-13 │    4.49e-07 │        14 │         23 │         16 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         115 │               0 │               0 │          143 │                0 │                0 │          0 │         115 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     84 │     BT12 │      5 │      3 │      0 │ first_order │  6.19e+00 │     8.42e-04 │      5 │  7.90e-10 │    9.13e-06 │        44 │         50 │         49 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         471 │               0 │               0 │          526 │                0 │                0 │          0 │         471 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     85 │ PENTAGON │      6 │     15 │      0 │ first_order │  1.37e-04 │     1.27e-03 │      4 │  2.77e-07 │    2.75e-08 │        26 │         27 │         33 │             33 │              0 │          0 │           0 │         0 │             0 │             0 │         339 │             678 │               0 │          370 │                0 │                0 │          0 │         339 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     86 │ HS111LNP │     10 │      3 │      0 │ first_order │ -4.78e+01 │     4.33e-03 │      5 │  7.53e-10 │    3.56e-06 │        24 │         34 │         25 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         347 │               0 │               0 │          386 │                0 │                0 │          0 │         347 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     87 │     HS52 │      5 │      3 │      0 │ first_order │  5.33e+00 │     1.26e-04 │      6 │  3.28e-12 │    3.17e-07 │         6 │         18 │          6 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │          52 │               0 │               0 │           76 │                0 │                0 │          0 │          52 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     88 │     HS89 │      3 │      1 │      0 │ first_order │  1.36e+00 │     5.79e-01 │     15 │  4.54e-12 │    2.44e-06 │       114 │        146 │        169 │              0 │            169 │          0 │           0 │         0 │             0 │             0 │        1099 │               0 │            1099 │         1260 │                0 │                0 │          0 │        1099 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     89 │ CONGIGMZ │      3 │      5 │      0 │ first_order │  2.00e+00 │     8.16e-04 │      5 │  5.11e-12 │    4.92e-08 │        32 │         36 │         38 │             38 │             38 │          0 │           0 │         0 │             0 │             0 │         418 │             836 │             418 │          459 │                0 │                0 │          0 │         418 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     90 │   POLAK5 │      3 │      2 │      0 │ first_order │  5.00e+01 │     3.82e-02 │      5 │  1.86e-09 │    9.17e-09 │      1643 │       1783 │       2423 │              0 │           2423 │          0 │           0 │         0 │             0 │             0 │       19886 │               0 │           19886 │        21674 │                0 │                0 │          0 │       19886 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     91 │     HS47 │      5 │      3 │      0 │ first_order │  1.39e-13 │     1.23e-03 │      5 │  1.05e-06 │    1.62e-07 │        39 │         45 │         44 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │         406 │               0 │               0 │          456 │                0 │                0 │          0 │         406 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     92 │      CB3 │      3 │      3 │      0 │ first_order │  2.00e+00 │     1.17e-03 │      5 │  9.03e-14 │    5.41e-08 │        45 │         40 │         61 │              0 │             61 │          0 │           0 │         0 │             0 │             0 │         504 │               0 │             504 │          549 │                0 │                0 │          0 │         504 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     93 │     HS12 │      2 │      1 │      0 │ first_order │ -3.00e+01 │     4.39e-04 │      5 │  1.10e-11 │    4.64e-08 │        32 │         37 │         38 │              0 │             38 │          0 │           0 │         0 │             0 │             0 │         256 │               0 │             256 │          298 │                0 │                0 │          0 │         256 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     94 │      BT3 │      5 │      3 │      0 │ first_order │  4.09e+00 │     1.32e-04 │      5 │  3.14e-08 │    5.55e-06 │         7 │         17 │          7 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │          51 │               0 │               0 │           73 │                0 │                0 │          0 │          51 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     95 │    HS268 │      5 │      5 │      0 │ first_order │  1.46e-11 │     5.64e-04 │      4 │  1.88e-07 │    1.92e-08 │        11 │         19 │         11 │             11 │              0 │          0 │           0 │         0 │             0 │             0 │         190 │             380 │               0 │          213 │                0 │                0 │          0 │         190 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
│     96 │     HS22 │      2 │      2 │      0 │ first_order │  1.00e+00 │     2.26e-04 │      5 │  3.08e-11 │    1.79e-06 │        12 │         22 │         12 │             12 │             12 │          0 │           0 │         0 │             0 │             0 │         112 │             224 │             112 │          139 │                0 │                0 │          0 │         112 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │
└────────┴──────────┴────────┴────────┴────────┴─────────────┴───────────┴──────────────┴────────┴───────────┴─────────────┴───────────┴────────────┴────────────┴────────────────┴────────────────┴────────────┴─────────────┴───────────┴───────────────┴───────────────┴─────────────┴─────────────────┴─────────────────┴──────────────┴──────────────────┴──────────────────┴────────────┴─────────────┴─────────────┴──────────────┴────────────────┴────────────────────┴──────────────────────┴───────────────────────┴─────────────────────┴──────────────────────┴──────────────────────┴───────────┘

or it can also be used to make performance profiles.

using Plots
gr()

solved(df) = (df.status .== :first_order)
costs = [
  df -> .!solved(df) * Inf + df.elapsed_time,
  df -> .!solved(df) * Inf + df.neval_obj + df.neval_cons,
]
costnames = ["Time", "Evalutions of obj + cons"]
p = profile_solvers(stats, costs, costnames)