SLDP: example 1

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

This example is derived from Section 4.2 of the paper: Ahmed, S., Cabral, F. G., & da Costa, B. F. P. (2019). Stochastic Lipschitz Dynamic Programming. Optimization Online. PDF

using SDDP, HiGHS, Testfunction sldp_example_one()    model = SDDP.LinearPolicyGraph(;        stages = 8,        lower_bound = 0.0,        optimizer = HiGHS.Optimizer,    ) do sp, t        @variable(sp, x, SDDP.State, initial_value = 2.0)        @variables(sp, begin            x⁺ >= 0            x⁻ >= 0            0 <= u <= 1, Bin            ω        end)        @stageobjective(sp, 0.9^(t - 1) * (x⁺ + x⁻))        @constraints(sp, begin            x.out == x.in + 2 * u - 1 + ω            x⁺ >= x.out            x⁻ >= -x.out        end)        points = [            -0.3089653673606697,            -0.2718277412744214,            -0.09611178608243474,            0.24645863921577763,            0.5204224537256875,        ]        SDDP.parameterize-> fix(ω, φ), sp, [points; -points])        return    end    SDDP.train(model; log_frequency = 10)    @test SDDP.calculate_bound(model) <= 1.1675    returnendsldp_example_one()
-------------------------------------------------------------------
         SDDP.jl (c) Oscar Dowson and contributors, 2017-26
-------------------------------------------------------------------
problem
  nodes           : 8
  state variables : 1
  scenarios       : 1.00000e+08
  existing cuts   : false
options
  solver          : serial mode
  risk measure    : SDDP.Expectation()
  sampling scheme : SDDP.InSampleMonteCarlo
subproblem structure
  VariableRef                             : [7, 7]
  AffExpr in MOI.EqualTo{Float64}         : [1, 1]
  AffExpr in MOI.GreaterThan{Float64}     : [2, 2]
  VariableRef in MOI.GreaterThan{Float64} : [4, 4]
  VariableRef in MOI.LessThan{Float64}    : [1, 2]
  VariableRef in MOI.ZeroOne              : [1, 1]
numerical stability report
  matrix range     [1e+00, 2e+00]
  objective range  [5e-01, 1e+00]
  bounds range     [1e+00, 1e+00]
  rhs range        [1e+00, 1e+00]
-------------------------------------------------------------------
 iteration    simulation      bound        time (s)     solves  pid
-------------------------------------------------------------------
        10   3.311011e+00  1.161744e+00  3.101318e+00      1680   1
        20   3.866628e+00  1.162078e+00  3.384284e+00      2560   1
        30   2.614213e+00  1.166965e+00  6.172632e+00      4240   1
        40   3.293727e+00  1.166965e+00  6.467546e+00      5120   1
        50   2.763199e+00  1.166965e+00  9.303080e+00      6800   1
        60   4.045921e+00  1.166965e+00  9.634269e+00      7680   1
        70   3.829274e+00  1.167299e+00  1.242667e+01      9360   1
        80   3.473301e+00  1.167299e+00  1.273425e+01     10240   1
        90   3.408984e+00  1.167416e+00  1.554495e+01     11920   1
       100   2.820262e+00  1.167416e+00  1.586751e+01     12800   1
-------------------------------------------------------------------
status         : simulation_stopping
total time (s) : 1.586751e+01
total solves   : 12800
best bound     :  1.167416e+00
numeric issues : 0
-------------------------------------------------------------------