Release notes
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
v1.13.0 (August 11, 2025)
Added
- Added
ImportanceSamplingForwardPass(#848) - Added
.optimizertoFixedDiscreteDuality(#868) - Added the experimental
SDDP.Innersubmodule (#830)
Fixed
- Improved the performance of
LagrangianDuality(861) - Fixed
FixedDiscreteDualityto be globbally valid (#865) - Fixed
log_frequency=1to overridelog_every_seconds(#867) - Fixed a performance bug computing the stage objective value (#870)
Other
- Added the Duality handlers tutoriall (#860)
- Removed unnecessary
SDDP.prefix (#866)
v1.12.0 (June 11, 2025)
Added
- Added
FixedDiscreteDuality(#856)
Other
- Added the Example: batteries tutorial (#849)
- Improved various docstrings (#851), (#855)
- Updated to HiGHS v1.11 (#850)
- Skipped a failing test on 32-bit (#853)
- Added Oscar's Part IV report (#857)
v1.11.0 (April 16, 2025)
Added
- Added an
optimizerargument to the various duality handlers to allow different optimizers on the forward and backward passes (#846)
Other
- Updated
/papersand their various citations (#841) - Fixed environment loading in
test/plugins/parallel_schemes.jl(#842) - Fixed a bug in
/papers/msppy/msppy_hydro_thermal.jl(#843) - Rotated
DOCUMENTER_KEY(#845)
v1.10.5 (April 2, 2025)
Fixed
- Fixed a bug in which we discarded the Markovian structure when parsing
MSPFormatfiles (#834)
Other
- Added documentation Add a custom cut (#832)
- Added documentation Use multithreading (#833)
- Fixed a typo in Risk aversion (#835)
- Changed to use
test/Project.toml(#837) - Debug and work around a bug in
HiGHS_jll@1.10(#836), (#839)
v1.10.4 (January 29, 2025)
Fixed
- Throw a warning and limit threads when there are fewer nodes than threads available (#823)
- Fixed
simulatewithThreadedto spawn chunked threads instead of one thread for each replication (#824) (#828) (#829)
Other
v1.10.3 (January 22, 2025)
Other
- Add variable bounds to incoming states in
LagrangianDuality(#819) - Document how to use the
Threadedparallel scheme (#821)
v1.10.2 (January 13, 2025)
Fixed
- Fixed
ConvexCombinationwith intercept terms (#815)
Other
- Improved test coverage (#810) (#811)
- Improved documentation for risk measures (#813)
- Fixed badges for GitHub actions (#816)
- Updated API reference (#814)
v1.10.1 (November 28, 2024)
Fixed
- Fixed thread safety of
RegularizedForwardPass(#806) - Fixed thread safety of
AlternativeForwardPass(#808)
Other
- Documentation updates (#801)
v1.10.0 (November 19, 2024)
Added
Fixed
- Fixed a bug with cut sharing in a graph with zero-probability arcs (#797)
Other
- Added a new tutorial Example: inventory management (#795)
- Added a stochastic lead time example to docs (#800)
v1.9.0 (October 17, 2024)
Added
- Added
write_only_selected_cutsandcut_selectionkeyword arguments towrite_cuts_to_fileandread_cuts_from_fileto skip potentially expensive operations (#781) (#784) - Added
set_numerical_difficulty_callbackto modify the subproblem on numerical difficulty (#790)
Fixed
- Fixed the tests to skip threading tests if running in serial (#770)
- Fixed
BanditDualityto handle the case where the standard deviation isNaN(#779) - Fixed an error when lagged state variables are encountered in
MSPFormat(#786) - Fixed
publication_plotwith replications of different lengths (#788) - Fixed CTRL+C interrupting the code at unsafe points (#789)
Other
v1.8.1 (August 5, 2024)
Fixed
- Fixed various issues with
SDDP.Threaded()(#761) - Fixed a deprecation warning for sorting a dictionary (#763)
Other
v1.8.0 (July 24, 2024)
Added
- Added
SDDP.Threaded(), which is an experimental parallel scheme that supports solving problems using multiple threads. Some parts of SDDP.jl may not be thread-safe, and this can cause incorrect results, segfaults, or other errors. Please use with care and report any issues by opening a GitHub issue. (#758)
Other
v1.7.0 (June 4, 2024)
Added
- Added
sample_backward_noise_terms_with_statefor creating backward pass sampling schemes that depend on the current primal state. (#742) (Thanks @arthur-brigatto)
Fixed
- Fixed error message when
publication_plothas non-finite data (#738)
Other
- Updated the logo constructor (#730)
v1.6.7 (February 1, 2024)
Fixed
- Fixed non-constant state dimension in the
MSPFormatreader (#695) - Fixed SimulatorSamplingScheme for deterministic nodes (#710)
- Fixed line search in BFGS (#711)
- Fixed handling of
NEARLY_FEASIBLE_POINTstatus (#726)
Other
- Documentation improvements (#692) (#694) (#706) (#716) (#727)
- Updated to StochOptFormat v1.0 (#705)
- Added an experimental
OuterApproximationalgorithm (#709) - Updated
.gitignore(#717) - Added code for MDP paper (#720) (#721)
- Added Google analytics (#723)
v1.6.6 (September 29, 2023)
Other
- Updated Example: two-stage newsvendor tutorial (#689)
- Added a warning for people using
SDDP.Statistical(#687)
v1.6.5 (September 25, 2023)
Fixed
- Fixed duplicate nodes in
MarkovianGraph(#681)
Other
v1.6.4 (September 23, 2023)
Fixed
- Fixed error for invalid
log_frequencyvalues (#665) - Fixed objective sense in
deterministic_equivalent(#673)
Other
- Documentation updates (#658) (#666) (#671)
- Switch to GitHub action for deploying docs (#668) (#670)
- Update to Documenter@1 (#669)
v1.6.3 (September 8, 2023)
Fixed
- Fixed default stopping rule with
iteration_limitortime_limitset (#662)
Other
v1.6.2 (August 24, 2023)
Fixed
MSPFormatnow detect and exploit stagewise independent lattices (#653)- Fixed
set_optimizerfor models read from file (#654)
Other
v1.6.1 (July 20, 2023)
Fixed
Other
- Clarified
OutOfSampleMonteCarlodocstring (#643)
v1.6.0 (July 3, 2023)
Added
- Added
RegularizedForwardPass(#624) - Added
FirstStageStoppingRule(#634)
Other
- Removed an unbound type parameter (#632)
- Fixed typo in docstring (#633)
- Added Here-and-now and hazard-decision tutorial (#635)
v1.5.1 (June 30, 2023)
This release contains a number of minor code changes, but it has a large impact on the content that is printed to screen. In particular, we now log periodically, instead of each iteration, and a "good" stopping rule is used as the default if none are specified. Try using SDDP.train(model) to see the difference.
Other
- Fixed various typos in the documentation (#617)
- Fixed printing test after changes in JuMP (#618)
- Set
SimulationStoppingRuleas the default stopping rule (#619) - Changed the default logging frequency. Pass
log_every_seconds = 0.0totrainto revert to the old behavior. (#620) - Added example usage with Distributions.jl (@slwu89) (#622)
- Removed the numerical issue
@warn(#627) - Improved the quality of docstrings (#630)
v1.5.0 (May 14, 2023)
Added
- Added the ability to use a different model for the forward pass. This is a novel feature that lets you train better policies when the model is non-convex or does not have a well-defined dual. See the Alternative forward models tutorial in which we train convex and non-convex formulations of the optimal power flow problem. (#611)
Other
- Updated missing
changelogentries (#608) - Removed global variables (#610)
- Converted the
Optionsstruct to keyword arguments. This struct was a private implementation detail, but the change is breaking if you developed an extension to SDDP that touched these internals. (#612) - Fixed some typos (#613)
v1.4.0 (May 8, 2023)
Added
- Added
SDDP.SimulationStoppingRule(#598) - Added
sampling_schemeargument toSDDP.write_to_file(#607)
Fixed
v1.3.0 (May 3, 2023)
Added
- Added experimental support for
SDDP.MSPFormat.read_from_file(#593)
Other
- Updated to StochOptFormat v0.3 (#600)
v1.2.1 (May 1, 2023)
Fixed
- Fixed
log_every_seconds(#597)
v1.2.0 (May 1, 2023)
Added
- Added
SDDP.SimulatorSamplingScheme(#594) - Added
log_every_secondsargument toSDDP.train(#595)
Other
v1.1.4 (April 10, 2023)
Fixed
- Logs are now flushed every iteration (#584)
Other
- Added docstrings to various functions (#581)
- Minor documentation updates (#580)
- Clarified integrality documentation (#582)
- Updated the README (#585)
- Number of numerical issues is now printed to the log (#586)
v1.1.3 (April 2, 2023)
Other
- Fixed typo in Example: deterministic to stochastic tutorial (#578)
- Fixed typo in documentation of
SDDP.simulate(#577)
v1.1.2 (March 18, 2023)
Other
- Added Example: deterministic to stochastic tutorial (#572)
v1.1.1 (March 16, 2023)
Other
- Fixed email in
Project.toml - Added notebook to documentation tutorials (#571)
v1.1.0 (January 12, 2023)
Added
- Added the
node_name_parserargument toSDDP.write_cuts_to_fileand added the option to skip nodes inSDDP.read_cuts_from_file(#565)
v1.0.0 (January 3, 2023)
Although we're bumping MAJOR version, this is a non-breaking release. Going forward:
- New features will bump the MINOR version
- Bug fixes, maintenance, and documentation updates will bump the PATCH version
- We will support only the Long Term Support (currently v1.6.7) and the latest patch (currently v1.8.4) releases of Julia. Updates to the LTS version will bump the MINOR version
- Updates to the compat bounds of package dependencies will bump the PATCH version.
We do not intend any breaking changes to the public API, which would require a new MAJOR release. The public API is everything defined in the documentation. Anything not in the documentation is considered private and may change in any PATCH release.
Added
- Added
num_nodesargument toSDDP.UnicyclicGraph(#562) - Added support for passing an optimizer to
SDDP.Asynchronous(#545)
Other
- Updated Plotting tools to use live plots (#563)
- Added vale as a linter (#565)
- Improved documentation for initializing a parallel scheme (#566)
v0.4.9 (January 3, 2023)
Added
- Added
SDDP.UnicyclicGraph(#556)
Other
- Added tutorial on Markov Decision Processes (#556)
- Added two-stage newsvendor tutorial (#557)
- Refactored the layout of the documentation (#554) (#555)
- Updated copyright to 2023 (#558)
- Fixed errors in the documentation (#561)
v0.4.8 (December 19, 2022)
Added
- Added
terminate_on_cycleoption toSDDP.Historical(#549) - Added
include_last_nodeoption toSDDP.DefaultForwardPass(#547)
Fixed
- Reverted then fixed (#531) because it failed to account for problems with integer variables (#546) (#551)
v0.4.7 (December 17, 2022)
Added
- Added
initial_nodesupport toInSampleMonteCarloandOutOfSampleMonteCarlo(#535)
Fixed
- Rethrow
InterruptExceptionwhen solver is interrupted (#534) - Fixed numerical recovery when we need dual solutions (#531) (Thanks @bfpc)
- Fixed re-using the
dashboard = trueoption between solves (#538) - Fixed bug when no
@stageobjectiveis set (now defaults to0.0) (#539) - Fixed errors thrown when invalid inputs are provided to
add_objective_state(#540)
Other
- Drop support for Julia versions prior to 1.6 (#533)
- Updated versions of dependencies (#522) (#533)
- Switched to HiGHS in the documentation and tests (#533)
- Added license headers (#519)
- Fixed link in air conditioning example (#521) (Thanks @conema)
- Clarified variable naming in deterministic equivalent (#525) (Thanks @lucasprocessi)
- Added this change log (#536)
- Cuts are now written to
model.cuts.jsonwhen numerical instability is discovered. This can aid debugging because it allows to you reload the cuts as of the iteration that caused the numerical issue (#537)
v0.4.6 (March 25, 2022)
Other
- Updated to JuMP v1.0 (#517)
v0.4.5 (March 9, 2022)
Fixed
- Fixed issue with
set_silentin a subproblem (#510)
Other
- Fixed many typos (#500) (#501) (#506) (#511) (Thanks @bfpc)
- Update to JuMP v0.23 (#514)
- Added auto-regressive tutorial (#507)
v0.4.4 (December 11, 2021)
Added
- Added
BanditDuality(#471) - Added benchmark scripts (#475) (#476) (#490)
write_cuts_to_filenow saves visited states (#468)
Fixed
- Fixed
BoundStallingin a deterministic policy (#470) (#474) - Fixed magnitude warning with
zerocoefficients (#483)
Other
- Improvements to LagrangianDuality (#481) (#482) (#487)
- Improvements to
StrengthenedConicDuality(#486) - Switch to functional form for the tests (#478)
- Fixed typos (#472) (Thanks @vfdev-5)
- Update to JuMP v0.22 (#498)
v0.4.3 (August 31, 2021)
Added
Other
v0.4.2 (August 24, 2021)
Fixed
- Fixed a bug in Lagrangian duality (#457)
v0.4.1 (August 23, 2021)
Other
v0.4.0 (August 17, 2021)
Breaking
- A large refactoring for how we handle stochastic integer programs. This added support for things like
SDDP.ContinuousConicDualityandSDDP.LagrangianDuality. It was breaking because we removed theintegrality_handlerargument toPolicyGraph. (#449) (#453)
Other
v0.3.17 (July 6, 2021)
Added
- Added
SDDP.PSRSamplingScheme(#426)
Other
v0.3.16 (June 17, 2021)
Added
- Added
SDDP.RiskAdjustedForwardPass(#413) - Allow
SDDP.Historicalto sample sequentially (#420)
Other
- Update risk measure docstrings (#418)
v0.3.15 (June 1, 2021)
Added
- Added
SDDP.StoppingChain
Fixed
- Fixed scoping bug in
SDDP.@stageobjective(#407) - Fixed a bug when the initial point is infeasible (#411)
- Set subproblems to silent by default (#409)
Other
v0.3.14 (March 30, 2021)
Fixed
- Fixed
O(N^2)behavior inget_same_children(#393)
v0.3.13 (March 27, 2021)
Fixed
- Fixed bug in
print.jl - Fixed compat of
Reexport(#388)
v0.3.12 (March 22, 2021)
Added
Fixed
- Fixed subtypes in
visualization(#384)
v0.3.11 (March 22, 2021)
Fixed
- Fixed constructor in direct mode (#383)
Other
- Fix documentation (#379)
v0.3.10 (February 23, 2021)
Fixed
- Fixed
seriescolorin publication plot (#376)
v0.3.9 (February 20, 2021)
Added
- Add option to simulate with different incoming state (#372)
- Added warning for cuts with high dynamic range (#373)
Fixed
- Fixed
seriesalphain publication plot (#375)
v0.3.8 (January 19, 2021)
Other
v0.3.7 (January 8, 2021)
Other
v0.3.6 (December 17, 2020)
Other
v0.3.5 (November 18, 2020)
Other
v0.3.4 (August 25, 2020)
Added
- Added non-uniform distributionally robust risk measure (#328)
- Added numerical recovery functions (#330)
- Added experimental StochOptFormat (#332) (#336) (#337) (#341) (#343) (#344)
- Added entropic risk measure (#347)
Other
v0.3.3 (June 19, 2020)
Added
- Added asynchronous support for price and belief states (#325)
- Added
ForwardPassplug-in system (#320)
Fixed
- Fix check for probabilities in Markovian graph (#322)
v0.3.2 (April 6, 2020)
Added
- Added
log_frequencyargument toSDDP.train(#307)
Other
v0.3.1 (February 26, 2020)
Fixed
- Fixed filename in
integrality_handlers.jl(#304)
v0.3.0 (February 20, 2020)
Breaking
- Breaking changes to update to JuMP v0.21 (#300).
v0.2.4 (February 7, 2020)
Added
- Added a counter for the number of total subproblem solves (#301)
Other
v0.2.3 (January 24, 2020)
Added
- Added support for convex risk measures (#294)
Fixed
Other
- Added example from IJOC paper (#293)
v0.2.2 (January 10, 2020)
Fixed
- Fixed flakey time limit in tests (#291)
Other
v0.2.1 (December 19, 2019)
Added
- Added support for approximating a Markov lattice (#282) (#285)
- Add tools for visualizing the value function (#272) (#286)
- Write
.mof.jsonfiles on error (#284)
Other
v0.2.0 (December 16, 2019)
This version added the asynchronous parallel implementation with a few minor breaking changes in how we iterated internally. It didn't break basic user-facing models, only implementations that implemented some of the extension features. It probably could have been a v1.1 release.
Added
Other
- Improved error messages in
PolicyGraph(#271) - Added JuliaFormatter (#273) (#276)
- Fixed compat bounds (#274) (#278)
- Added documentation for simulating non-standard graphs (#280)
v0.1.0 (October 17, 2019)
A complete rewrite of SDDP.jl based on the policy graph framework. This was essentially a new package. It has minimal code in common with the previous implementation.
Development started on September 28, 2018 in Kokako.jl, and the code was merged into SDDP.jl on March 14, 2019.
The pull request SDDP.jl#180 lists the 29 issues that the rewrite closed.
v0.0.1 (April 18, 2018)
Initial release. Development had been underway since January 22, 2016 in the StochDualDynamicProgram.jl repository. The last development commit there was April 5, 2017. Work then continued in this repository for a year before the first tagged release.