No strong duality

This tutorial was generated using Literate.jl. Download the source as a .jl file. Download the source as a .ipynb file.

This example is interesting, because strong duality doesn't hold for the extensive form (see if you can show why!), but we still converge.

using SDDP, HiGHS, Testfunction no_strong_duality()    model = SDDP.PolicyGraph(        SDDP.Graph(            :root,            [:node],            [(:root => :node, 1.0), (:node => :node, 0.5)],        );        optimizer = HiGHS.Optimizer,        lower_bound = 0.0,    ) do sp, t        @variable(sp, x, SDDP.State, initial_value = 1.0)        @stageobjective(sp, x.out)        @constraint(sp, x.in == x.out)    end    SDDP.train(model)    @test SDDP.calculate_bound(model)  2.0 atol = 1e-5    returnendno_strong_duality()
-------------------------------------------------------------------
         SDDP.jl (c) Oscar Dowson and contributors, 2017-26
-------------------------------------------------------------------
problem
  nodes           : 1
  state variables : 1
  scenarios       : Inf
  existing cuts   : false
options
  solver          : serial mode
  risk measure    : SDDP.Expectation()
  sampling scheme : SDDP.InSampleMonteCarlo
subproblem structure
  VariableRef                             : [3, 3]
  AffExpr in MOI.EqualTo{Float64}         : [1, 1]
  VariableRef in MOI.GreaterThan{Float64} : [1, 1]
numerical stability report
  matrix range     [1e+00, 1e+00]
  objective range  [1e+00, 1e+00]
  bounds range     [0e+00, 0e+00]
  rhs range        [0e+00, 0e+00]
-------------------------------------------------------------------
 iteration    simulation      bound        time (s)     solves  pid
-------------------------------------------------------------------
         1   1.000000e+00  1.500000e+00  1.627207e-03         3   1
        40   1.000000e+00  2.000000e+00  1.909900e-02       608   1
-------------------------------------------------------------------
status         : simulation_stopping
total time (s) : 1.909900e-02
total solves   : 608
best bound     :  2.000000e+00
numeric issues : 0
-------------------------------------------------------------------