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.