Skip to content

Instantly share code, notes, and snippets.

@abelsiqueira
Created October 15, 2019 19:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save abelsiqueira/e9ba411a4479ed531da1e8e8bc4a957b to your computer and use it in GitHub Desktop.
Save abelsiqueira/e9ba411a4479ed531da1e8e8bc4a957b to your computer and use it in GitHub Desktop.
using CUTEst, JSOFilter, NLPModelsIpopt, Plots, SolverBenchmark, SolverTools
pyplot()
function runcutest()
#ps = CUTEst.select(max_var=300, min_con=1, max_con=300, only_free_var=true, only_equ_con=true, objtype=2:6)
#ps = CUTEst.select(max_var=300, min_con=1, max_con=300, only_free_var=true, objtype=2:6)
ps = CUTEst.select(max_var=300, min_con=1, max_con=300, objtype=2:6)
#ps = CUTEst.select(max_var=2, min_con=1, max_con=2, objtype=2:6)
problems = (CUTEstModel(p) for p in ps)
problems = setdiff(problems, ["GMNCASE1"])
solvers = Dict(:filter => (nlp; kwargs...) -> filtersqp(nlp, max_time=60.0, max_eval=100_000, kwargs...),
:ipopt => (nlp; kwargs...) -> ipopt(nlp, print_level=0, max_cpu_time=60.0, kwargs...))
# Precompiling
for (name, solver) in solvers
nlp = CUTEstModel("HS7")
solver(nlp)
finalize(nlp)
end
stats = bmark_solvers(solvers, problems)
for (name, df) in stats
open("$name.md", "w") do io
markdown_table(io, df, cols = [:name, :nvar, :ncon, :status, :objective, :elapsed_time, :neval_obj, :dual_feas, :primal_feas])
end
open("$name.tex", "w") do io
latex_table(io, df, cols = [:name, :nvar, :ncon, :status, :objective, :elapsed_time, :neval_obj, :dual_feas, :primal_feas])
end
end
df = join(stats, [:status, :neval_obj, :dual_feas, :primal_feas],
invariant_cols = [:name],
hdr_override = Dict(:neval_obj => "#f", :dual_feas => "dual", :primal_feas => "prim"))
open("joined.md", "w") do io
markdown_table(io, df)
end
open("joined.tex", "w") do io
latex_table(io, df)
end
return stats
end
function profile(stats)
costs = [df -> (df.status .!= :first_order) * Inf + df.elapsed_time;
df -> (df.status .!= :first_order) * Inf + df.neval_obj]
costnames = ["Elapsed time", "Number of objective evaluations"]
profile_solvers(stats, costs, costnames, width=600, height=600)
png("profiles")
end
stats = runcutest()
profile(stats)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment