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.