Deterministic All Blacks

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

using SDDP, HiGHS, Testfunction all_blacks()    # Number of time periods, number of seats, R_ij = revenue from selling seat    # i at time j, offer_ij = whether an offer for seat i will come at time j    (T, N, R, offer) = (3, 2, [3 3 6; 3 3 6], [1 1 0; 1 0 1])    model = SDDP.LinearPolicyGraph(;        stages = T,        sense = :Max,        upper_bound = 100.0,        optimizer = HiGHS.Optimizer,    ) do sp, stage        # Seat remaining?        @variable(sp, 0 <= x[1:N] <= 1, SDDP.State, Bin, initial_value = 1)        # Action: accept offer, or don't accept offer        @variable(sp, accept_offer, Bin)        # Balance on seats        @constraint(            sp,            [i in 1:N],            x[i].out == x[i].in - offer[i, stage] * accept_offer        )        @stageobjective(            sp,            sum(R[i, stage] * offer[i, stage] * accept_offer for i in 1:N)        )    end    SDDP.train(model; duality_handler = SDDP.LagrangianDuality())    @test SDDP.calculate_bound(model)  9.0    returnendall_blacks()
-------------------------------------------------------------------
         SDDP.jl (c) Oscar Dowson and contributors, 2017-26
-------------------------------------------------------------------
problem
  nodes           : 3
  state variables : 2
  scenarios       : 1.00000e+00
  existing cuts   : false
options
  solver          : serial mode
  risk measure    : SDDP.Expectation()
  sampling scheme : SDDP.InSampleMonteCarlo
subproblem structure
  VariableRef                             : [6, 6]
  AffExpr in MOI.EqualTo{Float64}         : [2, 2]
  VariableRef in MOI.GreaterThan{Float64} : [2, 3]
  VariableRef in MOI.LessThan{Float64}    : [3, 3]
  VariableRef in MOI.ZeroOne              : [3, 3]
numerical stability report
  matrix range     [1e+00, 1e+00]
  objective range  [1e+00, 6e+00]
  bounds range     [1e+00, 1e+02]
  rhs range        [0e+00, 0e+00]
-------------------------------------------------------------------
 iteration    simulation      bound        time (s)     solves  pid
-------------------------------------------------------------------
         1L  6.000000e+00  9.000000e+00  2.719402e-02         6   1
        20L  9.000000e+00  9.000000e+00  5.872083e-02       123   1
-------------------------------------------------------------------
status         : simulation_stopping
total time (s) : 5.872083e-02
total solves   : 123
best bound     :  9.000000e+00
numeric issues : 0
-------------------------------------------------------------------