Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ERROR: MathOptInterface.UpperBoundAlreadySet{MathOptInterface.Interval, MathOptInterface.LessThan} #109

Closed
freemin7 opened this issue Oct 20, 2022 · 1 comment · Fixed by #116

Comments

@freemin7
Copy link

freemin7 commented Oct 20, 2022

ERROR: MathOptInterface.UpperBoundAlreadySet{MathOptInterface.Interval{Float64}, MathOptInterface.LessThan{Float64}}: Cannot add `VariableIndex`-in-`MathOptInterface.LessThan{Float64}` constraint for variable MathOptInterface.VariableIndex(15) as a `VariableIndex`-in-`MathOptInterface.Interval{Float64}` constraint was already set for this variable and both constraints set an upper bound.
Stacktrace:
  [1] _throw_if_upper_bound_set_inner(variable::MathOptInterface.VariableIndex, S2::Type, mask::UInt16, T::Type)
    @ MathOptInterface.Utilities ~/.julia/packages/MathOptInterface/Ohzb2/src/Utilities/variables_container.jl:126
  [2] _throw_if_upper_bound_set
    @ ~/.julia/packages/MathOptInterface/Ohzb2/src/Utilities/variables_container.jl:137 [inlined]
  [3] add_constraint
    @ ~/.julia/packages/MathOptInterface/Ohzb2/src/Utilities/variables_container.jl:256 [inlined]
  [4] add_constraint
    @ ~/.julia/packages/MathOptInterface/Ohzb2/src/Utilities/model.jl:371 [inlined]
  [5] add_constraint(m::MathOptInterface.Utilities.CachingOptimizer{Cbc.Optimizer, MathOptInterface.Utilities.Model{Float64}}, func::MathOptInterface.VariableIndex, set::MathOptInterface.LessThan{Float64})
    @ MathOptInterface.Utilities ~/.julia/packages/MathOptInterface/Ohzb2/src/Utilities/cachingoptimizer.jl:546
  [6] add_constraint(b::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{Cbc.Optimizer, MathOptInterface.Utilities.Model{Float64}}}, f::MathOptInterface.VariableIndex, s::MathOptInterface.LessThan{Float64})
    @ MathOptInterface.Bridges ~/.julia/packages/MathOptInterface/Ohzb2/src/Bridges/bridge_optimizer.jl:1666
  [7] add_constraint
    @ ~/.julia/packages/EAGO/XpIwc/src/eago_optimizer/types/incremental.jl:84 [inlined]
  [8] update_relaxed_problem_box!(m::EAGO.GlobalOptimizer{EAGO.Incremental{Cbc.Optimizer}, EAGO.Incremental{Ipopt.Optimizer}, EAGO.DefaultExt})
    @ EAGO ~/.julia/packages/EAGO/XpIwc/src/eago_optimizer/optimize/nonconvex/lower_problem.jl:89
  [9] relax_problem!(m::EAGO.GlobalOptimizer{EAGO.Incremental{Cbc.Optimizer}, EAGO.Incremental{Ipopt.Optimizer}, EAGO.DefaultExt})
    @ EAGO ~/.julia/packages/EAGO/XpIwc/src/eago_optimizer/optimize/nonconvex/lower_problem.jl:215
 [10] obbt!(m::EAGO.GlobalOptimizer{EAGO.Incremental{Cbc.Optimizer}, EAGO.Incremental{Ipopt.Optimizer}, EAGO.DefaultExt})
    @ EAGO ~/.julia/packages/EAGO/XpIwc/src/eago_optimizer/domain_reduction.jl:253
 [11] preprocess!(t::EAGO.DefaultExt, m::EAGO.GlobalOptimizer{EAGO.Incremental{Cbc.Optimizer}, EAGO.Incremental{Ipopt.Optimizer}, EAGO.DefaultExt})
    @ EAGO ~/.julia/packages/EAGO/XpIwc/src/eago_optimizer/optimize/nonconvex/lower_problem.jl:321
 [12] preprocess!
    @ ~/.julia/packages/EAGO/XpIwc/src/eago_optimizer/optimize/nonconvex/lower_problem.jl:330 [inlined]
 [13] macro expansion
    @ ./timing.jl:299 [inlined]
 [14] global_solve!(m::EAGO.GlobalOptimizer{EAGO.Incremental{Cbc.Optimizer}, EAGO.Incremental{Ipopt.Optimizer}, EAGO.DefaultExt})
    @ EAGO ~/.julia/packages/EAGO/XpIwc/src/eago_optimizer/optimize/optimize_nonconvex.jl:285
 [15] optimize!
    @ ~/.julia/packages/EAGO/XpIwc/src/eago_optimizer/optimize/optimize_nonconvex.jl:354 [inlined]
 [16] optimize!(m::Optimizer{EAGO.Incremental{Cbc.Optimizer}, EAGO.Incremental{Ipopt.Optimizer}, EAGO.DefaultExt})
    @ EAGO ~/.julia/packages/EAGO/XpIwc/src/eago_optimizer/optimize/optimize.jl:39
 [17] optimize!
    @ ~/.julia/packages/MathOptInterface/Ohzb2/src/Bridges/bridge_optimizer.jl:376 [inlined]
 [18] optimize!
    @ ~/.julia/packages/MathOptInterface/Ohzb2/src/MathOptInterface.jl:87 [inlined]
 [19] optimize!(m::MathOptInterface.Utilities.CachingOptimizer{MathOptInterface.Bridges.LazyBridgeOptimizer{Optimizer{EAGO.Incremental{Cbc.Optimizer}, EAGO.Incremental{Ipopt.Optimizer}, EAGO.DefaultExt}}, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}})
    @ MathOptInterface.Utilities ~/.julia/packages/MathOptInterface/Ohzb2/src/Utilities/cachingoptimizer.jl:316
 [20] optimize!(model::Model; ignore_optimize_hook::Bool, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ JuMP ~/.julia/packages/JuMP/Y4piv/src/optimizer_interface.jl:161
 [21] optimize!(model::Model)
    @ JuMP ~/.julia/packages/JuMP/Y4piv/src/optimizer_interface.jl:143
 [22] top-level scope
    @ REPL[59]:1

Package environment:

      Status `~/privatepath/model/Project.toml`
  [07493b3f] Alpine v0.5.1
  [bb8be931] EAGO v0.7.1
  [87dc4568] HiGHS v1.1.4
  [b99e6be6] Hypatia v0.7.0
  [b6b21f68] Ipopt v1.1.0
  [4076af6c] JuMP v1.1.1
  [2ddba703] Juniper v0.9.1
  [2f354839] Pajarito v0.8.0
  [2f01184e] SparseArrays

Offending code:
Offending code:


using Ipopt, Alpine, LinearAlgebra, Juniper, EAGO, SparseArrays, JuMP

nn = 4
np = 5
n0 = 1

Qmax = 500
Pmin = 5
Pmax = 45


Aqp = sparse([1,2,2,3,3,4,4,5,5],[1,1,2,1,3,2,4,3,4],[1.,1.,-1.,-1.,1.,1.,-1.,1.,-1.],5,4)
Aq0 = sparse([1],[1],[-1.],5,1)

Demands = fill(25.,(4))
Elevation = [90.,90.,88.,88.]
WaterHeight = [100.;]

nv = 4

## MINLP

mip = optimizer_with_attributes(HiGHS.Optimizer, 
                                         MOI.Silent() => true,
                                         "presolve"   => "on") 

# NLP optimizer
ipopt = optimizer_with_attributes(Ipopt.Optimizer, 
                                        MOI.Silent() => true, 
                                        "sb" => "yes", 
                                        "max_iter"   => 9999)
                                        
# Local MINLP feasibility pump
juniper = optimizer_with_attributes(
        Juniper.Optimizer,
       # MOI.Silent() => true,
        "mip_solver" => mip,
        "nl_solver" => ipopt,
    )


# Global optimizer
alpine = optimizer_with_attributes(Alpine.Optimizer, 
                                         "nlp_solver" => ipopt,
                                         "mip_solver" => mip,
                                         "minlp_solver" => juniper)
mnl = Model(EAGO)
@variable(mnl, Pmin <= p[1:nn] <= Pmax)
@variable(mnl, 0 <= q[1:(2*np)] <= Qmax)
@variable(mnl, z[1:(2*np)], Bin)
@variable(mnl, hfq[1:(2*np)])

@constraint(mnl, transpose(Aqp)*(q[1:np] - q[(np+1):(2np)]) - Demands .== 0)


@variable(mnl, b[1:(2*np)])
@constraint(mnl, b[1:np] .== -Aqp*p -Aqp*Demands -Aq0*WaterHeight -hfq[1:np] )
@constraint(mnl, b[(np+1):(2np)] .== +Aqp*p +Aqp*Demands +Aq0*WaterHeight -hfq[(np+1):(2np)])


for i in 1:(2*np)
  @NLconstraint(mnl, 0 <=    q[i]*b[i] )
end

@constraint(mnl, -Aqp*p -Aqp*Demands -Aq0*WaterHeight -hfq[1:np] -100*z[1:np] .<= 0)
@constraint(mnl, +Aqp*p +Aqp*Demands +Aq0*WaterHeight -hfq[(np+1):(2np)] -100*z[(1+np):(2*np)] .<= 0)

@constraint(mnl, z[1:np] + z[(np+1):(2np)] .<= 1)
@constraint(mnl, sum(z) == nv)

for i in 1:(2*np)
  @NLconstraint(mnl, hfq[i] == q[i]^1.852)
end


@objective(mnl,Min,sum(p))

optimize!(mnl)

Related issue: lanl-ansi/Alpine.jl#223

I will narrow down the issue a bit more in the coming days.

@javieravz
Copy link

I'm having the same error. How did you solve it?

@DimitriAlston DimitriAlston linked a pull request Jun 15, 2023 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants