Benchmarks

CUTEst benchmark

With a JSO-compliant solver, such as DCI, 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 DCI, we use the package CUTEst.jl, which implements CUTEstModel an instance of AbstractNLPModel.

using SolverBenchmark

Let us select equality-constrained 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,
  only_equ_con = 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
44

We compare here DCISolver 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 DCISolver on a subset of CUTEst problems.

using DCISolver, 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,
  ),
  :dcildl => nlp -> dci(
    nlp,
    nlp.meta.x0,
    linear_solver = :ldlfact,
    max_time = max_time,
    max_iter = typemax(Int64),
    max_eval = typemax(Int64),
    atol = tol,
    ctol = tol,
    rtol = tol,
  ),
)

stats = bmark_solvers(solvers, cutest_problems)
Dict{Symbol, DataFrames.DataFrame} with 2 entries:
  :dcildl => 44×40 DataFrame…
  :ipopt  => 44×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_dcildl_$(string(length(pnames))).jld2" stats

The result of the benchmark can be explored via tables,

pretty_stats(stats[:dcildl])
┌────────┬──────────┬────────┬────────┬────────┬─────────────┬───────────┬──────────────┬─────────┬───────────┬─────────────┬───────────┬────────────┬────────────┬────────────────┬────────────────┬────────────┬─────────────┬───────────┬───────────────┬───────────────┬─────────────┬─────────────────┬─────────────────┬──────────────┬──────────────────┬──────────────────┬────────────┬─────────────┬─────────────┬──────────────┬────────────────┬────────────────────┬──────────────────────┬───────────────────────┬─────────────────────┬──────────────────────┬──────────────────────┬───────────┬────────────┐
│     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 │ lagrangian │
├────────┼──────────┼────────┼────────┼────────┼─────────────┼───────────┼──────────────┼─────────┼───────────┼─────────────┼───────────┼────────────┼────────────┼────────────────┼────────────────┼────────────┼─────────────┼───────────┼───────────────┼───────────────┼─────────────┼─────────────────┼─────────────────┼──────────────┼──────────────────┼──────────────────┼────────────┼─────────────┼─────────────┼──────────────┼────────────────┼────────────────────┼──────────────────────┼───────────────────────┼─────────────────────┼──────────────────────┼──────────────────────┼───────────┼────────────┤
│      1 │     MSS1 │     90 │     73 │      0 │ first_order │ -1.60e+01 │     1.30e+01 │     988 │  4.13e-04 │    2.23e-10 │      1079 │       1079 │       1486 │              0 │              0 │          0 │           0 │       988 │             0 │             0 │      572693 │               0 │               0 │       572697 │                0 │                0 │        988 │           5 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │  -1.60e+01 │
│      2 │     HS79 │      5 │      3 │      0 │ first_order │  7.88e-02 │     5.46e-04 │       8 │  1.55e-08 │    1.38e-06 │        12 │         12 │         13 │              0 │              0 │          0 │           0 │         8 │             0 │             0 │          64 │               0 │               0 │           64 │                0 │                0 │          8 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   7.88e-02 │
│      3 │      HS7 │      2 │      1 │      0 │ first_order │ -1.73e+00 │     4.31e-04 │       4 │  1.46e-06 │    3.29e-10 │        10 │         10 │         16 │              0 │              0 │          0 │           0 │         4 │             0 │             0 │          38 │               0 │               0 │           33 │                0 │                0 │          4 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │  -1.74e+00 │
│      4 │     HS48 │      5 │      2 │      0 │ first_order │  1.09e-15 │     1.44e-04 │       2 │  8.64e-08 │    3.75e-08 │         3 │          3 │          3 │              0 │              0 │          0 │           0 │         2 │             0 │             0 │           8 │               0 │               0 │            8 │                0 │                0 │          2 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   1.05e-15 │
│      5 │      BT9 │      4 │      2 │      0 │ first_order │ -1.00e+00 │     5.52e-04 │       5 │  1.27e-06 │    8.33e-06 │        12 │         12 │         20 │              0 │              0 │          0 │           0 │         5 │             0 │             0 │          78 │               0 │               0 │           78 │                0 │                0 │          5 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │  -1.00e+00 │
│      6 │     HS42 │      4 │      2 │      0 │ first_order │  1.39e+01 │     2.58e-04 │       2 │  1.99e-15 │    5.17e-09 │         5 │          5 │          5 │              0 │              0 │          0 │           0 │         2 │             0 │             0 │          18 │               0 │               0 │           18 │                0 │                0 │          2 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   1.29e+01 │
│      7 │     HS27 │      3 │      1 │      0 │ first_order │  4.00e-02 │     4.96e-04 │       9 │  8.92e-05 │    4.91e-07 │        17 │         15 │         18 │              0 │              0 │          0 │           0 │         9 │             0 │             0 │          42 │               0 │               0 │           38 │                0 │                0 │          9 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   4.00e-02 │
│      8 │ DIXCHLNG │     10 │      5 │      0 │ first_order │  2.47e+03 │     1.36e-03 │      12 │  1.29e-01 │    2.75e-08 │        16 │         16 │         22 │              0 │              0 │          0 │           0 │        12 │             0 │             0 │         137 │               0 │               0 │          137 │                0 │                0 │         12 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   2.47e+03 │
│      9 │     BT11 │      5 │      3 │      0 │ first_order │  8.25e-01 │     7.26e-04 │      13 │  7.75e-09 │    8.31e-09 │        21 │         20 │         22 │              0 │              0 │          0 │           0 │        13 │             0 │             0 │         106 │               0 │               0 │          106 │                0 │                0 │         13 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   8.25e-01 │
│     10 │  MARATOS │      2 │      1 │      0 │ first_order │ -1.00e+00 │     2.42e-04 │       1 │  1.14e-16 │    1.68e-09 │         5 │          5 │          5 │              0 │              0 │          0 │           0 │         1 │             0 │             0 │          16 │               0 │               0 │           15 │                0 │                0 │          1 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │  -1.00e+00 │
│     11 │      BT6 │      5 │      2 │      0 │ first_order │  2.77e-01 │     6.46e-04 │      10 │  2.59e-06 │    6.53e-07 │        16 │         16 │         16 │              0 │              0 │          0 │           0 │        10 │             0 │             0 │          63 │               0 │               0 │           63 │                0 │                0 │         10 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   2.77e-01 │
│     12 │ ORTHREGB │     27 │      6 │      0 │ first_order │  7.65e-05 │     8.00e+01 │ 1031395 │  1.00e-05 │    5.76e-06 │   1033329 │    1033329 │    1037398 │              0 │              0 │          0 │           0 │   1031395 │             0 │             0 │     6213426 │               0 │               0 │      6213428 │                0 │                0 │    1031395 │           5 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   7.65e-05 │
│     13 │      HS6 │      2 │      1 │      0 │ first_order │  2.92e-17 │     5.81e-04 │      11 │  4.83e-09 │    7.61e-08 │        19 │         19 │         25 │              0 │              0 │          0 │           0 │        11 │             0 │             0 │          54 │               0 │               0 │           50 │                0 │                0 │         11 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   6.20e-17 │
│     14 │     HS28 │      3 │      1 │      0 │ first_order │  3.80e-15 │     1.28e-04 │       2 │  6.10e-08 │    5.51e-09 │         3 │          3 │          3 │              0 │              0 │          0 │           0 │         2 │             0 │             0 │           6 │               0 │               0 │            6 │                0 │                0 │          2 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   3.57e-15 │
│     15 │     HS40 │      4 │      3 │      0 │ first_order │ -2.50e-01 │     3.42e-04 │       3 │  1.24e-10 │    2.07e-08 │         7 │          7 │          7 │              0 │              0 │          0 │           0 │         3 │             0 │             0 │          40 │               0 │               0 │           40 │                0 │                0 │          3 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │  -2.50e-01 │
│     16 │      BT8 │      5 │      2 │      0 │ first_order │  1.00e+00 │     3.86e-04 │       1 │  1.49e-08 │    5.39e-06 │         9 │          9 │         11 │              0 │              0 │          0 │           0 │         1 │             0 │             0 │          54 │               0 │               0 │           54 │                0 │                0 │          1 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   1.00e+00 │
│     17 │      BT1 │      2 │      1 │      0 │ first_order │ -1.00e+00 │     3.78e-04 │       3 │  2.85e-14 │    2.85e-10 │        10 │         10 │         12 │              0 │              0 │          0 │           0 │         3 │             0 │             0 │          32 │               0 │               0 │           28 │                0 │                0 │          3 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │  -1.00e+00 │
│     18 │ BYRDSPHR │      3 │      2 │      0 │ first_order │ -4.68e+00 │     2.89e-04 │       2 │  4.56e-15 │    7.48e-06 │         4 │          4 │          9 │              0 │              0 │          0 │           0 │         2 │             0 │             0 │          26 │               0 │               0 │           25 │                0 │                0 │          2 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │  -4.68e+00 │
│     19 │     HS50 │      5 │      3 │      0 │ first_order │  6.38e-09 │     3.20e-04 │       8 │  1.65e-04 │    3.43e-14 │         9 │          9 │          9 │              0 │              0 │          0 │           0 │         8 │             0 │             0 │          36 │               0 │               0 │           36 │                0 │                0 │          8 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   6.38e-09 │
│     20 │     BT10 │      2 │      2 │      0 │ first_order │ -1.00e+00 │     2.57e-04 │       0 │  1.05e-14 │    4.40e-09 │         7 │          7 │          7 │              0 │              0 │          0 │           0 │         0 │             0 │             0 │          39 │               0 │               0 │           39 │                0 │                0 │          0 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │  -1.50e+00 │
│     21 │     HS26 │      3 │      1 │      0 │ first_order │  4.83e-07 │     1.18e-03 │      25 │  1.02e-04 │    8.68e-06 │        36 │         36 │         70 │              0 │              0 │          0 │           0 │        25 │             0 │             0 │          94 │               0 │               0 │           91 │                0 │                0 │         25 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   4.83e-07 │
│     22 │      BT7 │      5 │      3 │      0 │ first_order │  3.06e+02 │     5.74e-04 │      10 │  1.41e-09 │    1.06e-09 │        14 │         13 │         19 │              0 │              0 │          0 │           0 │        10 │             0 │             0 │          76 │               0 │               0 │           76 │                0 │                0 │         10 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   3.07e+02 │
│     23 │      HS9 │      2 │      1 │      0 │ first_order │ -5.00e-01 │     3.40e-04 │       7 │  6.76e-10 │    3.33e-12 │        10 │          9 │         13 │              0 │              0 │          0 │           0 │         7 │             0 │             0 │          20 │               0 │               0 │           19 │                0 │                0 │          7 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │  -5.00e-01 │
│     24 │ HS100LNP │      7 │      2 │      0 │ first_order │  6.81e+02 │     5.18e-04 │       8 │  1.04e-06 │    4.14e-07 │        17 │         12 │         17 │              0 │              0 │          0 │           0 │         8 │             0 │             0 │          45 │               0 │               0 │           45 │                0 │                0 │          8 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   6.81e+02 │
│     25 │  GENHS28 │     10 │      8 │      0 │ first_order │  9.27e-01 │     3.81e-04 │       3 │  1.21e-14 │    5.57e-14 │         6 │          6 │          7 │              0 │              0 │          0 │           0 │         3 │             0 │             0 │          63 │               0 │               0 │           63 │                0 │                0 │          3 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   9.27e-01 │
│     26 │      BT5 │      3 │      2 │      0 │ first_order │  9.62e+02 │     3.57e-04 │       3 │  1.11e-09 │    4.13e-08 │         7 │          7 │          9 │              0 │              0 │          0 │           0 │         3 │             0 │             0 │          36 │               0 │               0 │           36 │                0 │                0 │          3 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   9.62e+02 │
│     27 │     HS61 │      3 │      2 │      0 │ first_order │ -1.44e+02 │     4.73e-04 │       6 │  8.42e-08 │    1.56e-06 │        10 │         10 │         18 │              0 │              0 │          0 │           0 │         6 │             0 │             0 │          56 │               0 │               0 │           56 │                0 │                0 │          6 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │  -1.44e+02 │
│     28 │     HS77 │      5 │      2 │      0 │ first_order │  2.42e-01 │     5.59e-04 │       8 │  5.56e-05 │    5.84e-06 │        15 │         14 │         15 │              0 │              0 │          0 │           0 │         8 │             0 │             0 │          57 │               0 │               0 │           57 │                0 │                0 │          8 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   2.42e-01 │
│     29 │     HS39 │      4 │      2 │      0 │ first_order │ -1.00e+00 │     5.55e-04 │       5 │  1.27e-06 │    8.33e-06 │        12 │         12 │         20 │              0 │              0 │          0 │           0 │         5 │             0 │             0 │          78 │               0 │               0 │           78 │                0 │                0 │          5 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │  -1.00e+00 │
│     30 │  MWRIGHT │      5 │      3 │      0 │ first_order │  2.50e+01 │     5.24e-04 │       9 │  5.69e-06 │    5.54e-07 │        13 │         13 │         14 │              0 │              0 │          0 │           0 │         9 │             0 │             0 │          68 │               0 │               0 │           68 │                0 │                0 │          9 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   2.50e+01 │
│     31 │      BT4 │      3 │      2 │      0 │ first_order │ -4.55e+01 │     4.05e-04 │       6 │  9.49e-07 │    8.60e-12 │        10 │         10 │         12 │              0 │              0 │          0 │           0 │         6 │             0 │             0 │          44 │               0 │               0 │           44 │                0 │                0 │          6 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │  -4.55e+01 │
│     32 │      BT2 │      3 │      1 │      0 │ first_order │  3.26e-02 │     1.13e-03 │      27 │  6.49e-07 │    7.28e-12 │        45 │         36 │         54 │              0 │              0 │          0 │           0 │        27 │             0 │             0 │         106 │               0 │               0 │           99 │                0 │                0 │         27 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   3.26e-02 │
│     33 │     HS46 │      5 │      2 │      0 │ first_order │  7.84e-07 │     5.99e-04 │       9 │  4.47e-05 │    1.44e-08 │        15 │         15 │         15 │              0 │              0 │          0 │           0 │         9 │             0 │             0 │          60 │               0 │               0 │           60 │                0 │                0 │          9 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   7.82e-07 │
│     34 │     HS49 │      5 │      2 │      0 │ first_order │  7.74e-05 │     3.36e-04 │      10 │  1.30e-03 │    1.34e-06 │        11 │         11 │         11 │              0 │              0 │          0 │           0 │        10 │             0 │             0 │          33 │               0 │               0 │           33 │                0 │                0 │         10 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   7.74e-05 │
│     35 │     HS78 │      5 │      3 │      0 │ first_order │ -2.92e+00 │     3.62e-04 │       3 │  7.73e-09 │    1.95e-06 │         7 │          7 │          7 │              0 │              0 │          0 │           0 │         3 │             0 │             0 │          40 │               0 │               0 │           40 │                0 │                0 │          3 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │  -2.92e+00 │
│     36 │ S316-322 │      2 │      1 │      0 │ first_order │  3.34e+02 │     4.10e-04 │       1 │  5.02e-15 │    2.22e-16 │         9 │          9 │         10 │              0 │              0 │          0 │           0 │         1 │             0 │             0 │          33 │               0 │               0 │           32 │                0 │                0 │          1 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │  -1.96e+03 │
│     37 │      FLT │      2 │      2 │      0 │ first_order │  5.55e-17 │     3.98e-04 │       1 │  1.49e-08 │    9.49e-06 │         9 │          9 │         11 │              0 │              0 │          0 │           0 │         1 │             0 │             0 │          27 │               0 │               0 │           27 │                0 │                0 │          1 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   5.55e-17 │
│     38 │     HS51 │      5 │      3 │      0 │ first_order │  1.95e-16 │     1.38e-04 │       2 │  2.80e-08 │    1.78e-09 │         3 │          3 │          3 │              0 │              0 │          0 │           0 │         2 │             0 │             0 │           9 │               0 │               0 │            9 │                0 │                0 │          2 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   1.95e-16 │
│     39 │     HS56 │      7 │      4 │      0 │ first_order │ -3.46e+00 │     6.93e-04 │       9 │  6.13e-08 │    2.19e-06 │        13 │         13 │         26 │              0 │              0 │          0 │           0 │         9 │             0 │             0 │          85 │               0 │               0 │           86 │                0 │                0 │          9 │           5 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │  -3.46e+00 │
│     40 │     BT12 │      5 │      3 │      0 │ first_order │  6.19e+00 │     5.16e-04 │       5 │  2.91e-06 │    1.26e-12 │        10 │         10 │         15 │              0 │              0 │          0 │           0 │         5 │             0 │             0 │          79 │               0 │               0 │           80 │                0 │                0 │          5 │           3 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   6.19e+00 │
│     41 │ HS111LNP │     10 │      3 │      0 │ first_order │ -4.78e+01 │     6.42e-03 │      46 │  1.44e-05 │    5.40e-11 │        72 │         72 │        154 │              0 │              0 │          0 │           0 │        46 │             0 │             0 │         392 │               0 │               0 │          392 │                0 │                0 │         46 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │  -4.78e+01 │
│     42 │     HS52 │      5 │      3 │      0 │ first_order │  5.33e+00 │     5.61e-04 │       8 │  5.45e-09 │    1.16e-07 │        15 │         15 │         15 │              0 │              0 │          0 │           0 │         8 │             0 │             0 │          79 │               0 │               0 │           79 │                0 │                0 │          8 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   5.33e+00 │
│     43 │     HS47 │      5 │      3 │      0 │ first_order │ -2.67e-02 │     1.69e-03 │      39 │  1.35e-04 │    1.82e-10 │        53 │         48 │         65 │              0 │              0 │          0 │           0 │        39 │             0 │             0 │         226 │               0 │               0 │          226 │                0 │                0 │         39 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │  -2.67e-02 │
│     44 │      BT3 │      5 │      3 │      0 │ first_order │  4.09e+00 │     5.14e-04 │       3 │  2.54e-07 │    2.38e-07 │         5 │          5 │         21 │              0 │              0 │          0 │           0 │         3 │             0 │             0 │          60 │               0 │               0 │           61 │                0 │                0 │          3 │           0 │           0 │            0 │              0 │                  0 │                    0 │                     0 │                   0 │                    0 │                    0 │           │   4.09e+00 │
└────────┴──────────┴────────┴────────┴────────┴─────────────┴───────────┴──────────────┴─────────┴───────────┴─────────────┴───────────┴────────────┴────────────┴────────────────┴────────────────┴────────────┴─────────────┴───────────┴───────────────┴───────────────┴─────────────┴─────────────────┴─────────────────┴──────────────┴──────────────────┴──────────────────┴────────────┴─────────────┴─────────────┴──────────────┴────────────────┴────────────────────┴──────────────────────┴───────────────────────┴─────────────────────┴──────────────────────┴──────────────────────┴───────────┴────────────┘

or it can also be used to make performance profiles.

using Plots
gr()

legend = Dict(
  :neval_obj => "number of f evals",
  :neval_cons => "number of c evals",
  :neval_grad => "number of ∇f evals",
  :neval_jac => "number of ∇c evals",
  :neval_jprod => "number of ∇c*v evals",
  :neval_jtprod  => "number of ∇cᵀ*v evals",
  :neval_hess  => "number of ∇²f evals",
  :elapsed_time => "elapsed time"
)
perf_title(col) = "Performance profile on CUTEst w.r.t. $(string(legend[col]))"

styles = [:solid,:dash,:dot,:dashdot] #[:auto, :solid, :dash, :dot, :dashdot, :dashdotdot]

function print_pp_column(col::Symbol, stats)

  ϵ = minimum(minimum(filter(x -> x > 0, df[!, col])) for df in values(stats))
  first_order(df) = df.status .== :first_order
  unbounded(df) = df.status .== :unbounded
  solved(df) = first_order(df) .| unbounded(df)
  cost(df) = (max.(df[!, col], ϵ) + .!solved(df) .* Inf)

  p = performance_profile(
    stats,
    cost,
    title=perf_title(col),
    legend=:bottomright,
    linestyles=styles
  )
end

print_pp_column(:elapsed_time, stats) # with respect to time
print_pp_column(:neval_jac, stats) # with respect to number of jacobian evaluations

CUTEst benchmark with Knitro

In this second part, we present the result of a similar benchmark with a maximum of 10000 variables and constraints (82 problems), and including the solver KNITRO (Byrd, R. H., Nocedal, J., & Waltz, R. A. (2006). K nitro: An integrated package for nonlinear optimization. In Large-scale nonlinear optimization (pp. 35-59). Springer, Boston, MA.) via NLPModelsKnitro.jl. The script is included in /benchmark/script10000_knitro.jl). We report here a performance profile with respect to the elapsed time to solve the problems and to the sum of evaluations of objective and constrain functions, see /benchmark/figures.jl) for the code generating the profile wall.