FAST: the production management problem
This tutorial was generated using Literate.jl. Download the source as a .jl
file. Download the source as a .ipynb
file.
An implementation of the Production Management example from FAST
using SDDP, HiGHS, Test
function fast_production_management(; cut_type)
DEMAND = [2, 10]
H = 3
N = 2
C = [0.2, 0.7]
S = 2 .+ [0.33, 0.54]
model = SDDP.LinearPolicyGraph(;
stages = H,
lower_bound = -50.0,
optimizer = HiGHS.Optimizer,
) do sp, t
@variable(sp, x[1:N] >= 0, SDDP.State, initial_value = 0.0)
@variables(sp, begin
s[i = 1:N] >= 0
d
end)
@constraints(sp, begin
[i = 1:N], s[i] <= x[i].in
sum(s) <= d
end)
SDDP.parameterize(sp, t == 1 ? [0] : DEMAND) do ω
return JuMP.fix(d, ω)
end
@stageobjective(sp, sum(C[i] * x[i].out for i in 1:N) - S's)
end
SDDP.train(model; cut_type = cut_type, print_level = 2, log_frequency = 5)
@test SDDP.calculate_bound(model) ≈ -23.96 atol = 1e-2
end
fast_production_management(; cut_type = SDDP.SINGLE_CUT)
fast_production_management(; cut_type = SDDP.MULTI_CUT)
Test Passed