martinbiel / StochasticPrograms.jl

Julia package for formulating and analyzing stochastic recourse models.
MIT License
75 stars 25 forks source link

Can't solve deterministic equivalent using SCS, COSMO or Xpress #26

Closed iagoleal closed 3 years ago

iagoleal commented 3 years ago

Hi! I was experimenting with the library and tried to solve some of examples on the Quickstart using different solvers to compare the performance. Apparently the first example (deterministic equivalent) raises a method error on all_decisions if you substitute GLPK by SCS, COSMO or Xpress. I also tested with Clp and the program runs fine. Please tell me if there is any more info I can provide on the issues.

The code raising the error is the following:

using StochasticPrograms
import SCS
simple_model = @stochastic_model begin
    @stage 1 begin
        @decision(model, x₁ >= 40)
        @decision(model, x₂ >= 20)
        @objective(model, Min, 100*x₁ + 150*x₂)
        @constraint(model, x₁ + x₂ <= 120)
    end
    @stage 2 begin
        @uncertain q₁ q₂ d₁ d₂
        @recourse(model, 0 <= y₁ <= d₁)
        @recourse(model, 0 <= y₂ <= d₂)
        @objective(model, Max, q₁*y₁ + q₂*y₂)
        @constraint(model, 6*y₁ + 10*y₂ <= 60*x₁)
        @constraint(model, 8*y₁ + 5*y₂ <= 80*x₂)
    end
end
ξ₁ = @scenario q₁ = 24.0 q₂ = 28.0 d₁ = 500.0 d₂ = 100.0 probability = 0.4
ξ₂ = @scenario q₁ = 28.0 q₂ = 32.0 d₁ = 300.0 d₂ = 300.0 probability = 0.6
sp = instantiate(simple_model, [ξ₁, ξ₂], optimizer = SCS.Optimizer)
optimize!(sp)

And the error message:

ERROR: LoadError: MethodError: no method matching all_decisions(::Determinist
icEquivalent{2,1,Tuple{Array{Scenario{NamedTuple{(:q₁, :q₂, :d₁, :d₂),NTuple{
4,Float64}}},1}}})
Closest candidates are:
  all_decisions(::Model) at C:\Users\iago\.julia\packages\StochasticPrograms\
54439\src\types\decisions\variable_interface.jl:30
  all_decisions(::Decisions) at C:\Users\iago\.julia\packages\StochasticProgr
ams\54439\src\types\decisions\decisions.jl:123
  all_decisions(::Model, ::Integer) at C:\Users\iago\.julia\packages\Stochast
icPrograms\54439\src\types\decisions\variable_interface.jl:30
Stacktrace:
 [1] optimize!(::DeterministicEquivalent{2,1,Tuple{Array{Scenario{NamedTuple{
(:q₁, :q₂, :d₁, :d₂),NTuple{4,Float64}}},1}}}, ::MathOptInterface.Utilities.C
achingOptimizer{MathOptInterface.AbstractOptimizer,MathOptInterface.Utilities
.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}, ::Array{Float
64,1}) at C:\Users\iago\.julia\packages\StochasticPrograms\54439\src\methods\
deterministic_equivalent\optimization.jl:6
 [2] optimize!(::StochasticProgram{2,Tuple{StochasticPrograms.Stage{NamedTupl
e{(),Tuple{}}},StochasticPrograms.Stage{NamedTuple{(),Tuple{}}}},Deterministi
cEquivalent{2,1,Tuple{Array{Scenario{NamedTuple{(:q₁, :q₂, :d₁, :d₂),NTuple{4
,Float64}}},1}}}}; crash::StochasticPrograms.Crash.None, kw::Base.Iterators.P
airs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}) at C:\Users\iago\.julia
\packages\StochasticPrograms\54439\src\methods\api.jl:209
 [3] optimize!(::StochasticProgram{2,Tuple{StochasticPrograms.Stage{NamedTupl
e{(),Tuple{}}},StochasticPrograms.Stage{NamedTuple{(),Tuple{}}}},Deterministi
cEquivalent{2,1,Tuple{Array{Scenario{NamedTuple{(:q₁, :q₂, :d₁, :d₂),NTuple{4
,Float64}}},1}}}}) at C:\Users\iago\.julia\packages\StochasticPrograms\54439\
src\methods\api.jl:201
martinbiel commented 3 years ago

Should be fixed on master, thanks for spotting.