Efficient Dual Problems in JuMP? Or: Avoiding Symbolic Overheads with Complex Objectives?

Hi @odow, thanks! So the 195 seconds are for the whole run, which involves solving the model (which computes trade flows, prices and welfare) many times until convergence on the transport network. To perform a single run I can

using OptimalTransportNetworks
# Model Parameters
param = init_parameters(labor_mobility = false, K = 10, gamma = 1, beta = 1, verbose = true,
                        N = 1, tol = 1e-5, cross_good_congestion = false, nu = 1) 

# Init network
param, graph = create_graph(param, 11, 11, type = "map") # create a map network of 11x11 nodes located in [0,10]x[0,10]
# note: by default, productivity and population are equalized everywhere

# Customize graph
param[:Zjn] = fill(0.1, param[:J], param[:N]) # set most places to low productivity
Ni = find_node(graph, 6, 6) # Find index of the central node at (6,6)
param[:Zjn][Ni, :] .= 1 # central node more productive

# Get model and speficy Ipopt output
param[:duality] = true # Change to see dual/primal models
model, _ = optimal_network(param, graph, verbose = true, return_model = true)

# Just the initial solve
using JuMP
optimize!(model)
# Doing this repeatedly strongly suggests that most time is spent in Ipopt

For the dual model I get:

This is Ipopt version 3.14.4, running with linear solver ma57.

Number of nonzeros in equality constraint Jacobian...:        0
Number of nonzeros in inequality constraint Jacobian.:        0
Number of nonzeros in Lagrangian Hessian.............:     7381

Total number of variables............................:      121
                     variables with only lower bounds:      121
                variables with lower and upper bounds:        0
                     variables with only upper bounds:        0
Total number of equality constraints.................:        0
Total number of inequality constraints...............:        0
        inequality constraints with only lower bounds:        0
   inequality constraints with lower and upper bounds:        0
        inequality constraints with only upper bounds:        0

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0  5.0295207e-01 0.00e+00 9.99e-01  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0
   1  5.2422604e-01 0.00e+00 9.31e-03  -1.0 9.86e-02    -  9.91e-01 1.00e+00f  1
   2  4.4131102e-01 0.00e+00 6.97e-03  -2.5 1.12e+00    -  1.00e+00 1.00e+00f  1
   3 -6.9396595e-02 0.00e+00 1.60e-02  -3.8 3.17e+00    -  1.00e+00 1.00e+00f  1
   4 -7.9029511e-02 0.00e+00 4.97e-02  -3.8 2.59e-01    -  1.00e+00 1.00e+00f  1
   5 -8.2938275e-02 0.00e+00 9.04e-03  -3.8 4.41e-02    -  1.00e+00 1.00e+00f  1
   6 -8.2796379e-02 0.00e+00 1.63e-03  -3.8 1.95e-02    -  1.00e+00 1.00e+00f  1
   7 -8.2763843e-02 0.00e+00 5.31e-05  -3.8 3.83e-03    -  1.00e+00 1.00e+00f  1
   8 -8.6539460e-02 0.00e+00 2.51e-04  -5.7 8.97e-02    -  1.00e+00 1.00e+00f  1
   9 -8.6557002e-02 0.00e+00 1.90e-06  -5.7 4.28e-03    -  1.00e+00 1.00e+00f  1
iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
  10 -8.6558622e-02 0.00e+00 2.38e-07  -8.6 1.73e-03    -  1.00e+00 1.00e+00f  1
  11 -8.6558622e-02 0.00e+00 1.30e-12  -8.6 3.93e-06    -  1.00e+00 1.00e+00f  1

Number of Iterations....: 11

                                   (scaled)                 (unscaled)
Objective...............:  -8.6558622239778449e-02   -8.6558622239778449e-02
Dual infeasibility......:   1.3013525949420977e-12    1.3013525949420977e-12
Constraint violation....:   0.0000000000000000e+00    0.0000000000000000e+00
Variable bound violation:   0.0000000000000000e+00    0.0000000000000000e+00
Complementarity.........:   2.5065925976051084e-09    2.5065925976051084e-09
Overall NLP error.......:   2.5065925976051084e-09    2.5065925976051084e-09


Number of objective function evaluations             = 12
Number of objective gradient evaluations             = 12
Number of equality constraint evaluations            = 0
Number of inequality constraint evaluations          = 0
Number of equality constraint Jacobian evaluations   = 0
Number of inequality constraint Jacobian evaluations = 0
Number of Lagrangian Hessian evaluations             = 11
Total seconds in IPOPT                               = 9.386

EXIT: Optimal Solution Found.

And for the primal version

This is Ipopt version 3.14.4, running with linear solver ma57.

Number of nonzeros in equality constraint Jacobian...:        0
Number of nonzeros in inequality constraint Jacobian.:    51183
Number of nonzeros in Lagrangian Hessian.............:    51062

Total number of variables............................:      662
                     variables with only lower bounds:      242
                variables with lower and upper bounds:        0
                     variables with only upper bounds:        0
Total number of equality constraints.................:        0
Total number of inequality constraints...............:      242
        inequality constraints with only lower bounds:        0
   inequality constraints with lower and upper bounds:        0
        inequality constraints with only upper bounds:      242

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0 -4.1322314e-02 7.49e-03 8.07e-01  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0
   1 -5.2189229e-02 6.69e-03 1.47e+00  -1.7 2.35e-02    -  1.00e+00 4.22e-01h  1
   2 -1.2066922e-01 2.24e-03 1.59e+00  -1.7 1.19e-02    -  1.00e+00 9.27e-01h  1
   3 -1.2688148e-01 2.14e-04 7.87e+00  -1.7 8.53e-03    -  1.00e+00 4.83e-01h  1
   4 -1.3898200e-01 0.00e+00 5.75e-01  -1.7 1.14e-03    -  1.00e+00 1.00e+00h  1
   5 -1.3907991e-01 0.00e+00 1.80e-02  -1.7 2.08e-04    -  1.00e+00 1.00e+00h  1
   6 -1.3907550e-01 0.00e+00 2.71e-03  -3.8 8.38e-07    -  1.00e+00 1.00e+00h  1
   7 -1.3823317e-01 0.00e+00 3.25e-06  -3.8 1.83e-05    -  1.00e+00 1.00e+00h  1
   8 -1.3741170e-01 0.00e+00 2.94e-05  -5.7 1.28e-05    -  1.00e+00 1.00e+00h  1
   9 -1.1489670e-01 0.00e+00 9.17e-04  -5.7 4.97e-04    -  1.00e+00 1.00e+00h  1
iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
  10 -1.1267338e-01 0.00e+00 6.76e-06  -5.7 6.42e-05    -  1.00e+00 1.00e+00h  1
  11 -1.0276234e-01 0.00e+00 5.31e-04  -8.6 3.97e-04    -  8.31e-01 1.00e+00h  1
  12 -9.2027305e-02 0.00e+00 1.43e-04  -8.6 8.50e-04    -  8.44e-01 1.00e+00h  1
  13 -8.7321303e-02 0.00e+00 2.34e-05  -8.6 6.04e-04    -  1.00e+00 1.00e+00h  1
  14 -8.6660709e-02 0.00e+00 4.18e-07  -8.6 1.05e-04    -  1.00e+00 1.00e+00h  1
  15 -8.6661544e-02 0.00e+00 4.99e-12  -8.6 2.20e-07    -  1.00e+00 1.00e+00h  1

Number of Iterations....: 15

                                   (scaled)                 (unscaled)
Objective...............:   5.0752466587507044e-04   -8.6661543930583784e-02
Dual infeasibility......:   4.9852007424451824e-12    8.5123979619650069e-10
Constraint violation....:   0.0000000000000000e+00    0.0000000000000000e+00
Variable bound violation:   0.0000000000000000e+00    0.0000000000000000e+00
Complementarity.........:   2.5059099014031048e-09    4.2789254514771992e-07
Overall NLP error.......:   2.5059099014031048e-09    4.2789254514771992e-07


Number of objective function evaluations             = 16
Number of objective gradient evaluations             = 16
Number of equality constraint evaluations            = 0
Number of inequality constraint evaluations          = 16
Number of equality constraint Jacobian evaluations   = 0
Number of inequality constraint Jacobian evaluations = 16
Number of Lagrangian Hessian evaluations             = 15
Total seconds in IPOPT                               = 0.279

EXIT: Optimal Solution Found.

I have also profiled the dual problem using

using JuMP, Profile
@profile optimize!(model)
Profile.print(combine = true, maxdepth = 1) #, C = true)

yielding

Overhead ╎ [+additional indent] Count File:Line; Function
=========================================================
     ╎1     @Base/array.jl:797; collect(itr::Base.Generator{Base.LogicalIndex{Int64, BitMatrix}, typeof(identity)})
     ╎ 1     @Base/array.jl:823; collect_to_with_first!
    2╎2     @Base/array.jl:2534; filter(f::Core.Compiler.var"#389#392"{Vector{Int64}}, a::Vector{Int64})
    1╎1     @Base/array.jl:1055; push!(a::Vector{Tuple{NonlinearExpr, Int64, NonlinearExpr}}, item::Tuple{NonlinearExpr, Int64, N...
    1╎1     @Base/bitarray.jl:405; falses(dims::Tuple{Int64})
    1╎2     @Base/broadcast.jl:860; materialize(bc::Base.Broadcast.Broadcasted{Base.Broadcast.DefaultArrayStyle{2}, Nothing, typeof(...
     ╎ 1     @Base/broadcast.jl:885; copy
     ╎3     @Base/broadcast.jl:868; materialize!(dest::SubArray{Float64, 1, Vector{Float64}, Tuple{Vector{Int64}}, false}, bc::Base....
     ╎ 3     @Base/broadcast.jl:871; materialize!
    1╎1     @Base/compiler/abstractinterpretation.jl:1751; abstract_call(interp::Core.Compiler.NativeInterpreter, arginfo::Core.Compiler.ArgInfo, sv::Core....
     ╎1     @Base/compiler/abstractinterpretation.jl:234; abstract_call_gf_by_type(interp::Core.Compiler.NativeInterpreter, f::Any, arginfo::Core.Compiler...
     ╎ 1     @Base/idset.jl:18; isempty
     ╎1     @Base/compiler/abstractinterpretation.jl:2416; typeinf_local(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)
     ╎ 1     @Base/idset.jl:18; isempty
    1╎1     @Base/compiler/inferencestate.jl:175; compute_trycatch(code::Vector{Any}, ip::Core.Compiler.BitSet)
    2╎2     @Base/compiler/optimize.jl:342; argextype(x::Any, src::Core.Compiler.IncrementalCompact, sptypes::Vector{Any}, slottypes::Vector...
    1╎1     @Base/compiler/optimize.jl:809; renumber_ir_elements!(body::Vector{Any}, ssachangemap::Vector{Int64}, labelchangemap::Vector{Int...
    1╎1     @Base/compiler/ssair/domtree.jl:252; SNCA!(domtree::Core.Compiler.DomTree, blocks::Vector{Core.Compiler.BasicBlock}, max_pre::Int64)
    1╎1     @Base/compiler/ssair/inlining.jl:948; call_sig(ir::Core.Compiler.IRCode, stmt::Expr)
     ╎1     @Base/compiler/ssair/inlining.jl:321; ir_inline_item!(compact::Core.Compiler.IncrementalCompact, idx::Int64, argexprs::Vector{Any}, li...
    1╎ 1     @Base/compiler/utilities.jl:363; coverage_enabled
    1╎1     @Base/compiler/ssair/inlining.jl:1107; process_simple!(ir::Core.Compiler.IRCode, idx::Int64, state::Core.Compiler.InliningState{Core.Co...
    1╎1     @Base/compiler/ssair/ir.jl:36; basic_blocks_starts(stmts::Vector{Any})
    1╎1     @Base/compiler/ssair/ir.jl:1149; finish_current_bb!(compact::Core.Compiler.IncrementalCompact, active_bb::Int64, old_result_idx::...
   20╎20    @Base/compiler/ssair/ir.jl:460; iterate(it::Core.Compiler.UseRefIterator, #unused#::Nothing)
    2╎2     @Base/compiler/ssair/ir.jl:1325; maybe_erase_unused!(extra_worklist::Vector{Int64}, compact::Core.Compiler.IncrementalCompact, id...
    3╎3     @Base/compiler/ssair/ir.jl:989; process_node!(compact::Core.Compiler.IncrementalCompact, result_idx::Int64, inst::Core.Compiler....
    1╎1     @Base/compiler/ssair/ir.jl:853; process_phinode_values(old_values::Vector{Any}, late_fixup::Vector{Int64}, processed_idx::Int64,...
    3╎3     @Base/compiler/ssair/ir.jl:903; renumber_ssa2!(stmt::Any, ssanums::Vector{Any}, used_ssas::Vector{Int64}, late_fixup::Vector{Int...
   10╎10    @Base/compiler/ssair/ir.jl:410; setindex!(x::Core.Compiler.UseRef, v::Any)
    1╎1     @Base/compiler/ssair/ir.jl:797; setindex!(compact::Core.Compiler.IncrementalCompact, v::Any, idx::Core.SSAValue)
    1╎1     @Base/compiler/ssair/ir.jl:498; ssamap(f::Core.Compiler.var"#359#360"{Vector{Core.SSAValue}, Bool}, stmt::Any)
    4╎4     @Base/compiler/ssair/passes.jl:3; is_known_call(x::Any, func::Any, ir::Core.Compiler.IncrementalCompact)
    1╎1     @Base/compiler/ssair/passes.jl:344; lift_leaves(compact::Core.Compiler.IncrementalCompact, result_t::Any, field::Int64, leaves::Vect...
    2╎2     @Base/compiler/tfuncs.jl:597; typeassert_tfunc(v::Any, t::Any)
    1╎1     @Base/compiler/typeinfer.jl:408; cycle_fix_limited(typ::Any, sv::Core.Compiler.InferenceState)
    1╎1     @Base/compiler/typeinfer.jl:593; visit_slot_load!(sl::Core.SlotNumber, vtypes::Vector{Core.Compiler.VarState}, sv::Core.Compiler....
    2╎2     @Base/compiler/typelattice.jl:359; widenconditional(typ::Any)
    2╎2     @Base/compiler/typelattice.jl:148; ⊑(a::Any, b::Any)
    1╎1     @Base/compiler/utilities.jl:193; specialize_method(method::Method, atype::Any, sparams::Core.SimpleVector; preexisting::Bool, com...
    2╎2     @Base/compiler/utilities.jl:43; anymap(f::Core.Compiler.var"#261#262", a::Vector{Any})
    3╎3     @Base/compiler/utilities.jl:270; find_ssavalue_uses(e::Expr, uses::Vector{Core.Compiler.BitSet}, line::Int64)
    2╎2     @Base/compiler/utilities.jl:235; singleton_type(ft::Any)
     ╎1     @Base/dict.jl:104; Dict{Symbol, Int64}(kv::Base.Generator{Base.Iterators.Enumerate{Vector{Symbol}}, MathOptInterfac...
    1╎ 1     @Base/dict.jl:381; setindex!(h::Dict{Symbol, Int64}, v0::Int64, key::Symbol)
    1╎1     @Base/dict.jl:175; rehash!(h::Dict{Tuple{Int64, Int64}, Nothing}, newsz::Int64)
    1╎1     @Base/expr.jl:37; copy(e::Expr)
    5╎5     @Base/expr.jl:40; copy_exprs(x::Any)
    1╎1     @Base/int.jl:87; +(x::Int64, y::Int64)
    7╎7     @Base/range.jl:321; steprange_last(start::Int64, step::Int64, stop::Int64)
    1╎1     @Base/reflection.jl:1128; may_invoke_generator(method::Method, atype::Any, sparams::Core.SimpleVector)
     ╎1     @Base/sort.jl:571; sort!(v::Vector{Int64}, lo::Int64, hi::Int64, a::Base.Sort.QuickSortAlg, o::Base.Order.ForwardOr...
     ╎ 1     @Base/sort.jl:504; sort!(v::Vector{Int64}, lo::Int64, hi::Int64, #unused#::Base.Sort.InsertionSortAlg, o::Base.Orde...
     ╎48773 @Base/task.jl:484; (::VSCodeServer.var"#64#65")()
     ╎ 48773 @VSCodeServer/src/eval.jl:34; macro expansion
     ╎1     @Base/tuple.jl:434; hash(t::Tuple{DataType, DataType}, h::UInt64)
     ╎ 1     @Base/tuple.jl:434; hash
    5╎5     @Ipopt/src/MOI_wrapper.jl:181; _replace_parameters(model::Ipopt.Optimizer, f::MathOptInterface.VariableIndex)
     ╎2     @Ipopt/src/MOI_wrapper.jl:183; _replace_parameters(model::Ipopt.Optimizer, f::MathOptInterface.VariableIndex)
     ╎ 2     @Base/dict.jl:497; getindex
    2╎2     @Ipopt/src/MOI_wrapper.jl:188; _replace_parameters(model::Ipopt.Optimizer, f::MathOptInterface.ScalarAffineFunction{Float64})
   15╎15    @Ipopt/src/MOI_wrapper.jl:205; _replace_parameters(model::Ipopt.Optimizer, f::MathOptInterface.ScalarNonlinearFunction)
     ╎3     @Ipopt/src/MOI_wrapper.jl:998; get(model::Ipopt.Optimizer, #unused#::MathOptInterface.TerminationStatus)
     ╎ 3     @Base/dict.jl:497; getindex
    1╎1     @Ipopt/src/MOI_wrapper.jl:1110; get(model::Ipopt.Optimizer, attr::MathOptInterface.VariablePrimal, vi::MathOptInterface.Variable...
     ╎1     @JuMP/src/Containers/macro.jl:539; (::OptimalTransportNetworks.var"#90#98"{Matrix{NonlinearExpr}, Vector{VariableRef}, Matrix{Varia...
     ╎ 1     @JuMP/src/macros/@constraint.jl:131; macro expansion
    2╎2     @JuMP/src/nlp_expr.jl:505; check_belongs_to_model(expr::NonlinearExpr, model::Model)
    2╎2     @JuMP/src/nlp_expr.jl:510; check_belongs_to_model(expr::NonlinearExpr, model::Model)
    1╎1     @JuMP/src/optimizer_interface.jl:723; _moi_get_result(::MathOptInterface.Utilities.CachingOptimizer{MathOptInterface.Bridges.LazyBridg...
     ╎1     @JuMP/src/variables.jl:1703; value(v::VariableRef; result::Int64)
    1╎ 1     @JuMP/src/optimizer_interface.jl:752; get(model::Model, attr::MathOptInterface.VariablePrimal, v::VariableRef)
    1╎1     @JuMP/src/variables.jl:338; check_belongs_to_model(v::VariableRef, model::Model)
    1╎1     @MathOptInterface/src/Bridges/bridge_optimizer.jl:1257; get(b::MathOptInterface.Bridges.LazyBridgeOptimizer{Ipopt.Optimizer}, attr::MathOptInterface.Var...
     ╎2     @MathOptInterface/src/Bridges/bridge_optimizer.jl:1265; get(b::MathOptInterface.Bridges.LazyBridgeOptimizer{Ipopt.Optimizer}, attr::MathOptInterface.Var...
    2╎ 2     @Ipopt/src/MOI_wrapper.jl:1110; get(model::Ipopt.Optimizer, attr::MathOptInterface.VariablePrimal, vi::MathOptInterface.Variabl...
     ╎1     @MathOptInterface/src/Nonlinear/ReverseAD/Coloring/Coloring.jl:453; hessian_color_preprocess(edgelist::Set{Tuple{Int64, Int64}}, num_total_var::Int64, seen_idx::Mat...
     ╎ 1     @Base/array.jl:1058; push!
     ╎1     @MathOptInterface/src/Nonlinear/ReverseAD/forward_over_reverse.jl:35; _eval_hessian(d::MathOptInterface.Nonlinear.ReverseAD.NLPEvaluator, f::MathOptInterface.Nonlinea...
    1╎ 1     @MathOptInterface/src/Nonlinear/ReverseAD/forward_over_reverse.jl:41; _eval_hessian_inner(d::MathOptInterface.Nonlinear.ReverseAD.NLPEvaluator, ex::MathOptInterface.N...
     ╎912   @MathOptInterface/src/Nonlinear/ReverseAD/forward_over_reverse.jl:319; _forward_eval_ϵ(d::MathOptInterface.Nonlinear.ReverseAD.NLPEvaluator, ex::MathOptInterface.Nonli...
     ╎ 912   @ForwardDiff/src/dual.jl:240; log
     ╎8     @MathOptInterface/src/Nonlinear/ReverseAD/forward_over_reverse.jl:342; _forward_eval_ϵ(d::MathOptInterface.Nonlinear.ReverseAD.NLPEvaluator, ex::MathOptInterface.Nonli...
    8╎ 8     @MathOptInterface/src/Nonlinear/ReverseAD/utils.jl:69; MathOptInterface.Nonlinear.ReverseAD._UnsafeVectorView(x::Vector{Float64}, N::Int64)
     ╎25    @MathOptInterface/src/Nonlinear/ReverseAD/forward_over_reverse.jl:346; _forward_eval_ϵ(d::MathOptInterface.Nonlinear.ReverseAD.NLPEvaluator, ex::MathOptInterface.Nonli...
   25╎ 25    @MathOptInterface/src/Nonlinear/ReverseAD/utils.jl:144; MathOptInterface.Nonlinear.ReverseAD._UnsafeLowerTriangularMatrixView(x::Vector{Float64}, N::Int64)
     ╎56    @MathOptInterface/src/Nonlinear/ReverseAD/forward_over_reverse.jl:350; _forward_eval_ϵ(d::MathOptInterface.Nonlinear.ReverseAD.NLPEvaluator, ex::MathOptInterface.Nonli...
   56╎ 56    @MathOptInterface/src/Nonlinear/operators.jl:755; eval_multivariate_hessian(registry::MathOptInterface.Nonlinear.OperatorRegistry, op::Symbol, H::...
     ╎78    @MathOptInterface/src/Nonlinear/ReverseAD/forward_over_reverse.jl:377; _forward_eval_ϵ(d::MathOptInterface.Nonlinear.ReverseAD.NLPEvaluator, ex::MathOptInterface.Nonli...
   78╎ 78    @MathOptInterface/src/Nonlinear/operators.jl:571; eval_univariate_hessian(registry::MathOptInterface.Nonlinear.OperatorRegistry, op::Symbol, x::Fl...
    2╎2     @MathOptInterface/src/Nonlinear/ReverseAD/forward_over_reverse.jl:130; _hessian_slice_inner(d::MathOptInterface.Nonlinear.ReverseAD.NLPEvaluator, ex::MathOptInterface....
     ╎3     @MathOptInterface/src/Nonlinear/ReverseAD/forward_over_reverse.jl:161; _hessian_slice_inner(d::MathOptInterface.Nonlinear.ReverseAD.NLPEvaluator, ex::MathOptInterface....
    3╎ 3     @MathOptInterface/src/Nonlinear/ReverseAD/forward_over_reverse.jl:391; _reverse_eval_ϵ(output_ϵ::MathOptInterface.Nonlinear.ReverseAD._UnsafeVectorView{ForwardDiff.Par...
     ╎7     @MathOptInterface/src/Nonlinear/ReverseAD/graph_tools.jl:312; _compute_hessian_sparsity(nodes::Vector{MathOptInterface.Nonlinear.Node}, adj::SparseArrays.Spar...
     ╎ 7     @Base/array.jl:1058; push!
     ╎9     @MathOptInterface/src/Nonlinear/ReverseAD/graph_tools.jl:313; _compute_hessian_sparsity(nodes::Vector{MathOptInterface.Nonlinear.Node}, adj::SparseArrays.Spar...
     ╎ 9     @Base/array.jl:1058; push!
     ╎2     @MathOptInterface/src/Nonlinear/ReverseAD/graph_tools.jl:24; _replace_moi_variables(nodes::Vector{MathOptInterface.Nonlinear.Node}, moi_index_to_consecutive_...
     ╎ 2     @Base/dict.jl:497; getindex
     ╎11    @MathOptInterface/src/Nonlinear/ReverseAD/reverse_mode.jl:178; _forward_eval(f::MathOptInterface.Nonlinear.ReverseAD._FunctionStorage, d::MathOptInterface.Nonl...
   11╎ 11    @NaNMath/src/NaNMath.jl:21; pow
     ╎320   @MathOptInterface/src/Nonlinear/ReverseAD/reverse_mode.jl:181; _forward_eval(f::MathOptInterface.Nonlinear.ReverseAD._FunctionStorage, d::MathOptInterface.Nonl...
  320╎ 320   @NaNMath/src/NaNMath.jl:9; log
     ╎76    @MathOptInterface/src/Nonlinear/ReverseAD/reverse_mode.jl:230; _forward_eval(f::MathOptInterface.Nonlinear.ReverseAD._FunctionStorage, d::MathOptInterface.Nonl...
   76╎ 76    @MathOptInterface/src/Nonlinear/operators.jl:517; eval_univariate_function(registry::MathOptInterface.Nonlinear.OperatorRegistry, op::Symbol, x::F...
     ╎99    @MathOptInterface/src/Nonlinear/ReverseAD/reverse_mode.jl:235; _forward_eval(f::MathOptInterface.Nonlinear.ReverseAD._FunctionStorage, d::MathOptInterface.Nonl...
   99╎ 99    @MathOptInterface/src/Nonlinear/operators.jl:544; eval_univariate_gradient(registry::MathOptInterface.Nonlinear.OperatorRegistry, op::Symbol, x::F...
     ╎1     @MathOptInterface/src/Nonlinear/ReverseAD/reverse_mode.jl:32; _reverse_mode(d::MathOptInterface.Nonlinear.ReverseAD.NLPEvaluator, x::Vector{Float64})
     ╎ 1     @Base/abstractarray.jl:2626; ==(A::Vector{Float64}, B::Vector{Float64})
   67╎67    @MathOptInterface/src/Nonlinear/operators.jl:607; eval_multivariate_function(registry::MathOptInterface.Nonlinear.OperatorRegistry, op::Symbol, x:...
   79╎79    @MathOptInterface/src/Nonlinear/operators.jl:658; eval_multivariate_gradient(registry::MathOptInterface.Nonlinear.OperatorRegistry, op::Symbol, g:...
  851╎851   @MathOptInterface/src/Nonlinear/operators.jl:755; eval_multivariate_hessian(registry::MathOptInterface.Nonlinear.OperatorRegistry, op::Symbol, H::...
  185╎185   @MathOptInterface/src/Nonlinear/operators.jl:517; eval_univariate_function(registry::MathOptInterface.Nonlinear.OperatorRegistry, op::Symbol, x::F...
     ╎62    @MathOptInterface/src/Nonlinear/operators.jl:522; eval_univariate_function(registry::MathOptInterface.Nonlinear.OperatorRegistry, op::Symbol, x::F...
   62╎ 62    @Base/dict.jl:496; getindex(h::Dict{Symbol, Int64}, key::Symbol)
  159╎159   @MathOptInterface/src/Nonlinear/operators.jl:544; eval_univariate_gradient(registry::MathOptInterface.Nonlinear.OperatorRegistry, op::Symbol, x::F...
     ╎95    @MathOptInterface/src/Nonlinear/operators.jl:549; eval_univariate_gradient(registry::MathOptInterface.Nonlinear.OperatorRegistry, op::Symbol, x::F...
   95╎ 95    @Base/dict.jl:496; getindex(h::Dict{Symbol, Int64}, key::Symbol)
  789╎789   @MathOptInterface/src/Nonlinear/operators.jl:571; eval_univariate_hessian(registry::MathOptInterface.Nonlinear.OperatorRegistry, op::Symbol, x::Fl...
     ╎41    @MathOptInterface/src/Nonlinear/operators.jl:576; eval_univariate_hessian(registry::MathOptInterface.Nonlinear.OperatorRegistry, op::Symbol, x::Fl...
   41╎ 41    @Base/dict.jl:496; getindex(h::Dict{Symbol, Int64}, key::Symbol)
    9╎9     @MathOptInterface/src/Nonlinear/parse.jl:59; _get_node_type(data::MathOptInterface.Nonlinear.Model, x::MathOptInterface.ScalarNonlinearFunction)
   16╎16    @MathOptInterface/src/Nonlinear/parse.jl:79; _parse_without_recursion_inner(stack::Vector{Tuple{Int64, Any}}, data::MathOptInterface.Nonlinea...
     ╎8     @MathOptInterface/src/Nonlinear/parse.jl:81; _parse_without_recursion_inner(stack::Vector{Tuple{Int64, Any}}, data::MathOptInterface.Nonlinea...
     ╎ 8     @Base/array.jl:1058; push!
     ╎13    @MathOptInterface/src/Nonlinear/parse.jl:86; _parse_without_recursion_inner(stack::Vector{Tuple{Int64, Any}}, data::MathOptInterface.Nonlinea...
     ╎ 13    @Base/array.jl:1058; push!
     ╎3     @MathOptInterface/src/Nonlinear/parse.jl:261; parse_expression(#unused#::MathOptInterface.Nonlinear.Model, expr::MathOptInterface.Nonlinear.Ex...
     ╎ 3     @Base/array.jl:1058; push!
     ╎4     @MathOptInterface/src/Nonlinear/parse.jl:364; parse_expression(#unused#::MathOptInterface.Nonlinear.Model, expr::MathOptInterface.Nonlinear.Ex...
     ╎ 4     @Base/array.jl:1058; push!
     ╎8     @MathOptInterface/src/Nonlinear/parse.jl:365; parse_expression(#unused#::MathOptInterface.Nonlinear.Model, expr::MathOptInterface.Nonlinear.Ex...
     ╎ 8     @Base/array.jl:1058; push!
    1╎1     @MathOptInterface/src/Nonlinear/parse.jl:366; parse_expression(#unused#::MathOptInterface.Nonlinear.Model, expr::MathOptInterface.Nonlinear.Ex...
     ╎1     @MathOptInterface/src/Nonlinear/parse.jl:375; parse_expression(#unused#::MathOptInterface.Nonlinear.Model, expr::MathOptInterface.Nonlinear.Ex...
     ╎ 1     @Base/array.jl:1058; push!
     ╎1     @MathOptInterface/src/Utilities/cachingoptimizer.jl:876; _throw_if_get_attribute_not_allowed(model::MathOptInterface.Utilities.CachingOptimizer{MathOptIn...
     ╎ 1     @Base/essentials.jl:788; isempty
    1╎1     @MathOptInterface/src/Utilities/cachingoptimizer.jl:584; _replace_constraint_function_or_set(m::MathOptInterface.Utilities.CachingOptimizer{MathOptInterf...
    1╎1     @MathOptInterface/src/Utilities/cachingoptimizer.jl:898; get(model::MathOptInterface.Utilities.CachingOptimizer{MathOptInterface.Bridges.LazyBridgeOptimi...
     ╎1     @MathOptInterface/src/Utilities/cachingoptimizer.jl:905; get(model::MathOptInterface.Utilities.CachingOptimizer{MathOptInterface.Bridges.LazyBridgeOptimi...
     ╎ 1     @MathOptInterface/src/Bridges/bridge_optimizer.jl:902; get
    1╎1     @MathOptInterface/src/Utilities/cachingoptimizer.jl:920; get(model::MathOptInterface.Utilities.CachingOptimizer{MathOptInterface.Bridges.LazyBridgeOptimi...
     ╎4     @MathOptInterface/src/Utilities/cachingoptimizer.jl:932; get(model::MathOptInterface.Utilities.CachingOptimizer{MathOptInterface.Bridges.LazyBridgeOptimi...
     ╎ 4     @MathOptInterface/src/Utilities/copy/index_map.jl:64; getindex
    1╎1     @MathOptInterface/src/Utilities/cachingoptimizer.jl:780; set(m::MathOptInterface.Utilities.CachingOptimizer{MathOptInterface.Bridges.LazyBridgeOptimizer{...
     ╎2     @MathOptInterface/src/Utilities/functions.jl:952; is_canonical(f::MathOptInterface.ScalarNonlinearFunction)
     ╎ 2     @Base/array.jl:1064; push!
    2╎2     @MathOptInterface/src/Utilities/functions.jl:246; map_indices(index_map::Base.Fix1{typeof(getindex), MathOptInterface.Utilities.IndexMap}, vi::Mat...
     ╎5     @MathOptInterface/src/Utilities/functions.jl:247; map_indices(index_map::Base.Fix1{typeof(getindex), MathOptInterface.Utilities.IndexMap}, vi::Mat...
     ╎ 5     @Base/operators.jl:1096; Fix1
    1╎1     @MathOptInterface/src/Utilities/functions.jl:254; map_indices(index_map::Base.Fix1{typeof(getindex), MathOptInterface.Utilities.IndexMap}, x::Vect...
     ╎8     @MathOptInterface/src/Utilities/functions.jl:365; map_indices(index_map::Base.Fix1{typeof(getindex), MathOptInterface.Utilities.IndexMap}, f::Math...
     ╎ 8     @Base/array.jl:1058; push!
     ╎1     @MathOptInterface/src/Utilities/universalfallback.jl:463; get(uf::MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}},...
     ╎ 1     @MathOptInterface/src/Utilities/model.jl:378; get
    1╎1     @MathOptInterface/src/functions.jl:1221; convert(F::Type{MathOptInterface.ScalarNonlinearFunction}, f::MathOptInterface.ScalarAffineFunct...
    1╎1     @OrderedCollections/src/ordered_dict.jl:235; ht_keyindex(h::OrderedCollections.OrderedDict{MathOptInterface.Nonlinear.ConstraintIndex, MathOp...
     ╎1     @OrderedCollections/src/ordered_dict.jl:240; ht_keyindex(h::OrderedCollections.OrderedDict{MathOptInterface.Nonlinear.ConstraintIndex, MathOp...
     ╎ 1     @OrderedCollections/src/dict_support.jl:6; hashindex
Total snapshots: 66771. Utilization: 100% across all threads and tasks. Use the `groupby` kwarg to break down by thread and/or task
1 Like