How to choose a stopping rule
The theory of SDDP tells us that the algorithm converges to an optimal policy almost surely in a finite number of iterations. In practice, this number is very large. Therefore, we need some way of pre-emptively terminating SDDP when the solution is “good enough.” We call heuristics for pre-emptively terminating SDDP stopping rules.
Basic limits
The training of an SDDP policy can be terminated after a fixed number of iterations using the iteration_limit keyword.
SDDP.train(model; iteration_limit = 10)The training of an SDDP policy can be terminated after a fixed number of seconds using the time_limit keyword.
SDDP.train(model; time_limit = 2.0)Stopping rules
In addition to the limits provided as keyword arguments, a variety of other stopping rules are available. These can be passed to SDDP.train as a vector to the stopping_rules keyword. Training stops if any of the rules becomes active. To stop when all of the rules become active, use SDDP.StoppingChain. For example:
Terminate if BoundStalling becomes true:
SDDP.train( model; stopping_rules = [SDDP.BoundStalling(10; rtol = 1e-4)],)Terminate if TimeLimit OR BoundStalling becomes true:
SDDP.train( model; stopping_rules = [ SDDP.TimeLimit(100.0), SDDP.BoundStalling(10; rtol = 1e-4), ],)Terminate if TimeLimit AND BoundStalling becomes true:
SDDP.train( model; stopping_rules = [ SDDP.StoppingChain( SDDP.TimeLimit(100.0), SDDP.BoundStalling(10; rtol = 1e-4), ), ],)Supported rules
The stopping rules implemented in SDDP.jl are: