diff --git a/perf/opf/Project.toml b/perf/opf/Project.toml new file mode 100644 index 0000000000..8e01cb5d12 --- /dev/null +++ b/perf/opf/Project.toml @@ -0,0 +1,11 @@ +[deps] +BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" +Ipopt = "b6b21f68-93f8-5de0-b562-5493be1d77c9" +JuMP = "4076af6c-e467-56ae-b986-b466b2749572" +MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" +PGLib = "07a8691f-3d11-4330-951b-3c50f98338be" +PowerModels = "c36e90e8-916a-50a6-bd94-075b64ef4655" + +[compat] +PGLib = "0.2" +PowerModels = "0.21" diff --git a/perf/opf/opf.jl b/perf/opf/opf.jl new file mode 100644 index 0000000000..a666118a7e --- /dev/null +++ b/perf/opf/opf.jl @@ -0,0 +1,34 @@ +import Ipopt +import JuMP +import MathOptInterface as MOI +import PGLib +import PowerModels + +model = JuMP.direct_model(Ipopt.Optimizer()) +pm = PowerModels.instantiate_model( + PGLib.pglib("pglib_opf_case10000_goc"), + PowerModels.ACPPowerModel, + PowerModels.build_opf; + jump_model = model, +); + +ipopt = JuMP.backend(model) +x = MOI.get(ipopt, MOI.ListOfVariableIndices()) +m, n = length(ipopt.nlp_model.constraints), length(x) + +evaluator = MOI.Nonlinear.Evaluator( + ipopt.nlp_model, + MOI.Nonlinear.SparseReverseMode(), + x, +) +MOI.initialize(evaluator, [:Grad, :Jac, :Hess]) + +H_struct = MOI.hessian_lagrangian_structure(evaluator) +H = zeros(length(H_struct)) +μ = rand(m) +σ = 0.0 +v = rand(n) +@time MOI.eval_hessian_lagrangian(evaluator, H, v, σ, μ) + +using BenchmarkTools +@benchmark MOI.eval_hessian_lagrangian($evaluator, $H, $v, $σ, $μ) seconds = 100