Infinite horizon trivial
This tutorial was generated using Literate.jl. Download the source as a .jl
file. Download the source as a .ipynb
file.
using SDDP, HiGHS, Test
function infinite_trivial()
graph = SDDP.Graph(
:root_node,
[:week],
[(:root_node => :week, 1.0), (:week => :week, 0.9)],
)
model = SDDP.PolicyGraph(
graph;
lower_bound = 0.0,
optimizer = HiGHS.Optimizer,
) do subproblem, node
@variable(subproblem, state, SDDP.State, initial_value = 0)
@constraint(subproblem, state.in == state.out)
@stageobjective(subproblem, 2.0)
end
SDDP.train(model; log_frequency = 10)
@test SDDP.calculate_bound(model) ≈ 2.0 / (1 - 0.9) atol = 1e-3
return
end
infinite_trivial()
-------------------------------------------------------------------
SDDP.jl (c) Oscar Dowson and contributors, 2017-24
-------------------------------------------------------------------
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
-------------------------------------------------------------------
10 4.000000e+00 1.997089e+01 6.962800e-02 1204 1
20 8.000000e+00 2.000000e+01 9.020805e-02 1420 1
30 1.600000e+01 2.000000e+01 1.575680e-01 2628 1
40 8.000000e+00 2.000000e+01 1.791070e-01 2834 1
-------------------------------------------------------------------
status : simulation_stopping
total time (s) : 1.791070e-01
total solves : 2834
best bound : 2.000000e+01
simulation ci : 1.625000e+01 ± 4.766381e+00
numeric issues : 0
-------------------------------------------------------------------