-
Notifications
You must be signed in to change notification settings - Fork 98
Open
Description
See https://discourse.julialang.org/t/lagrange-multipliers-of-a-vectornonlinearoracle-after-solve/134236
julia> using JuMP, Ipopt
julia> set = MOI.VectorNonlinearOracle(;
dimension = 2,
l = [-Inf],
u = [1.0],
eval_f = (ret, x) -> (ret[1] = x[1]^2 + x[2]^2),
jacobian_structure = [(1, 1), (1, 2)],
eval_jacobian = (ret, x) -> ret .= 2.0 .* x,
hessian_lagrangian_structure = [(1, 1), (2, 2)],
eval_hessian_lagrangian = (ret, x, u) -> ret .= 2.0 .* u[1],
)
VectorNonlinearOracle{Float64}(;
dimension = 2,
l = [-Inf],
u = [1.0],
...,
)
julia> model = Model(Ipopt.Optimizer)
A JuMP Model
├ solver: Ipopt
├ objective_sense: FEASIBILITY_SENSE
├ num_variables: 0
├ num_constraints: 0
└ Names registered in the model: none
julia> set_silent(model)
julia> @variable(model, x[1:2])
2-element Vector{VariableRef}:
x[1]
x[2]
julia> @objective(model, Max, sum(x))
x[1] + x[2]
julia> @constraint(model, c, x in set)
c : [x[1], x[2]] ∈ VectorNonlinearOracle{Float64}(;
dimension = 2,
l = [-Inf],
u = [1.0],
...,
)
julia> optimize!(model)
julia> value(x)
2-element Vector{Float64}:
0.7071067834685273
0.7071067834685273
julia> dual(c)
2-element Vector{Float64}:
-0.9999999999982961
-0.9999999999982961What should dual(c) here be?
I based it on:
julia> using JuMP, Ipopt
julia> model = Model(Ipopt.Optimizer)
A JuMP Model
├ solver: Ipopt
├ objective_sense: FEASIBILITY_SENSE
├ num_variables: 0
├ num_constraints: 0
└ Names registered in the model: none
julia> set_silent(model)
julia> @variable(model, x[1:2])
2-element Vector{VariableRef}:
x[1]
x[2]
julia> @objective(model, Max, sum(x))
x[1] + x[2]
julia> @constraint(model, c, sum(x.^2) <= 1)
c : x[1]² + x[2]² ≤ 1
julia> optimize!(model)
julia> value(x)
2-element Vector{Float64}:
0.7071067834685273
0.7071067834685273
julia> dual(c)
-0.7071067789033629
julia> dual(c)' * (2 * value(x))
2-element Vector{Float64}:
-0.9999999999982961
-0.9999999999982961but the user doesn't have an easy way to access the multipliers on the individual rows.
cc @Robbybp
Metadata
Metadata
Assignees
Labels
No labels