StochasticPrograms.jl
A modeling framework for stochastic programming problems
Summary
Stochastic programming models recourse problems where an initial decision is taken, uncertain parameters are observed, followed by recourse decisions to correct any inaccuracy in the initial decision. StochasticPrograms.jl is a general purpose modeling framework for stochastic programming. The framework includes both modeling tools and structure-exploiting optimization algorithms. The underlying optimization problems are formulated using JuMP.jl. Stochastic programming models can be efficiently formulated using an expressive syntax and models can be instantiated, inspected, and analyzed interactively. The framework scales seamlessly to distributed environments. Small instances of a model can be run locally to ensure correctness, while larger instances are automatically distributed in a memory-efficient way onto supercomputers or clouds and solved using parallel optimization algorithms. These structure-exploiting solvers are based on variations of the classical L-shaped, progressive-hedging, and quasi-gradient algorithms.
The framework will prove useful to researchers, educators and industrial users alike. Researchers will benefit from the readily extensible open-source framework, where they can formulate complex stochastic models or quickly typeset and test novel optimization algorithms. Educators of stochastic programming will benefit from the clean and expressive syntax. Moreover, the framework supports analysis tools and stochastic programming constructs, such as expected value of perfect information (EVPI
) and value of the stochastic solution (VSS
), from classical theory and leading textbooks. Industrial practitioners can make use of StochasticPrograms.jl to rapidly formulate complex models, analyze small instances locally, and then run large-scale instances in production. In doing so, they get distributed capabilities for free, without changing the code, and access to well-tested state-of-the-art implementations of parallel structure-exploiting solvers. A good introduction to recourse models, and to the stochastic programming constructs provided in this package, is given in Introduction to Stochastic Programming.
Features
- Flexible problem definition
- Deferred model instantiation
- Scenario data injection
- Comprehensive collection of stochastic programming methods
- Natively distributed
- Interface to structure-exploiting solver algorithms
- Efficient parallel implementations of classical algorithms
Consider Quick start for a tutorial explaining how to get started using StochasticPrograms.
Some examples of models written in StochasticPrograms can be found on the Examples page.
See the Index for the complete list of documented functions and types.
Citing
If you use StochasticPrograms, please cite the following preprint:
@article{spjl,
title={Efficient stochastic programming in Julia},
author={Biel, Martin and Johansson, Mikael},
journal={INFORMS Journal on Computing},
year={2022},
publisher={INFORMS}
}
If you use the cut aggregation funcionality for L-shaped, please cite the following preprint
@article{cutaggregation,
title = {Dynamic cut aggregation in {L}-shaped algorithms},
author = {Martin Biel and Mikael Johansson},
journal = {arXiv preprint arXiv:1910.13752},
year = {2019}
}
Manual Outline
- Quick start
- Stochastic data
- Stochastic models
- Decision API
- Distributed stochastic programs
- Structured solvers
- Examples
Library Outline
- Public interface
- Solver interface
- Crash
- L-shaped solvers
- Progressive-hedging solvers
- Sample average approximation
Index
StochasticPrograms.AbstractSampler
StochasticPrograms.AbstractScenario
StochasticPrograms.AbstractStochasticStructure
StochasticPrograms.DecisionRef
StochasticPrograms.DecisionVariable
StochasticPrograms.Deterministic
StochasticPrograms.DeterministicEquivalent
StochasticPrograms.DistributedHorizontal
StochasticPrograms.DistributedScenarioDecomposition
StochasticPrograms.DistributedStageDecomposition
StochasticPrograms.DistributedVertical
StochasticPrograms.ExpectedScenario
StochasticPrograms.Horizontal
StochasticPrograms.Probability
StochasticPrograms.SMPS.SMPSSampler
StochasticPrograms.SMPS.SMPSScenario
StochasticPrograms.SPConstraintRef
StochasticPrograms.Sampler
StochasticPrograms.Scenario
StochasticPrograms.ScenarioDecomposition
StochasticPrograms.ScenarioDecompositionStructure
StochasticPrograms.StageDecomposition
StochasticPrograms.StageDecompositionStructure
StochasticPrograms.StochasticInstantiation
StochasticPrograms.StochasticProgram
StochasticPrograms.StochasticProgram
StochasticPrograms.StochasticProgram
StochasticPrograms.StochasticProgram
StochasticPrograms.StochasticProgram
StochasticPrograms.StochasticProgram
StochasticPrograms.UnloadableStructure
StochasticPrograms.UnloadedStructure
StochasticPrograms.UnspecifiedInstantiation
StochasticPrograms.UnsupportedStructure
StochasticPrograms.Vertical
StochasticPrograms.@decision
StochasticPrograms.@define_scenario
StochasticPrograms.@define_scenario
StochasticPrograms.@expectation
StochasticPrograms.@expectation
StochasticPrograms.@first_stage
StochasticPrograms.@known
StochasticPrograms.@parameters
StochasticPrograms.@recourse
StochasticPrograms.@sample
StochasticPrograms.@sampler
StochasticPrograms.@scenario
StochasticPrograms.@scenario
StochasticPrograms.@second_stage
StochasticPrograms.@stage
StochasticPrograms.@stochastic_model
StochasticPrograms.@uncertain
StochasticPrograms.@uncertain
StochasticPrograms.@zero
StochasticPrograms.@zero
Base.getindex
Base.read
Base.read
Base.read
JuMP.BinaryRef
JuMP.FixRef
JuMP.IntegerRef
JuMP.LowerBoundRef
JuMP.UpperBoundRef
JuMP.all_constraints
JuMP.constraint_by_name
JuMP.constraint_object
JuMP.constraint_object
JuMP.delete
JuMP.delete
JuMP.delete
JuMP.delete
JuMP.delete
JuMP.delete
JuMP.delete
JuMP.delete
JuMP.delete_lower_bound
JuMP.delete_lower_bound
JuMP.delete_upper_bound
JuMP.delete_upper_bound
JuMP.dual
JuMP.dual
JuMP.dual_objective_value
JuMP.dual_objective_value
JuMP.dual_objective_value
JuMP.dual_status
JuMP.dual_status
JuMP.dual_status
JuMP.fix
JuMP.fix
JuMP.fix
JuMP.get_optimizer_attribute
JuMP.get_optimizer_attribute
JuMP.has_duals
JuMP.has_duals
JuMP.has_duals
JuMP.has_lower_bound
JuMP.has_lower_bound
JuMP.has_upper_bound
JuMP.has_upper_bound
JuMP.has_values
JuMP.has_values
JuMP.has_values
JuMP.index
JuMP.index
JuMP.is_binary
JuMP.is_binary
JuMP.is_fixed
JuMP.is_fixed
JuMP.is_integer
JuMP.is_integer
JuMP.is_valid
JuMP.is_valid
JuMP.is_valid
JuMP.is_valid
JuMP.list_of_constraint_types
JuMP.lower_bound
JuMP.lower_bound
JuMP.name
JuMP.name
JuMP.name
JuMP.name
JuMP.normalized_coefficient
JuMP.normalized_coefficient
JuMP.normalized_rhs
JuMP.normalized_rhs
JuMP.num_constraints
JuMP.num_variables
JuMP.objective_bound
JuMP.objective_bound
JuMP.objective_function
JuMP.objective_function
JuMP.objective_function
JuMP.objective_function_type
JuMP.objective_function_type
JuMP.objective_function_type
JuMP.objective_sense
JuMP.objective_sense
JuMP.objective_sense
JuMP.objective_value
JuMP.objective_value
JuMP.objective_value
JuMP.objective_value
JuMP.optimize!
JuMP.optimize!
JuMP.optimizer_index
JuMP.optimizer_index
JuMP.optimizer_index
JuMP.optimizer_index
JuMP.primal_status
JuMP.primal_status
JuMP.primal_status
JuMP.raw_status
JuMP.raw_status
JuMP.raw_status
JuMP.reduced_cost
JuMP.reduced_cost
JuMP.relative_gap
JuMP.relative_gap
JuMP.relax_integrality
JuMP.set_binary
JuMP.set_binary
JuMP.set_integer
JuMP.set_integer
JuMP.set_lower_bound
JuMP.set_lower_bound
JuMP.set_name
JuMP.set_name
JuMP.set_name
JuMP.set_name
JuMP.set_normalized_coefficient
JuMP.set_normalized_coefficient
JuMP.set_normalized_rhs
JuMP.set_normalized_rhs
JuMP.set_objective_coefficient
JuMP.set_objective_coefficient
JuMP.set_objective_sense
JuMP.set_objective_sense
JuMP.set_objective_sense
JuMP.set_optimizer
JuMP.set_optimizer
JuMP.set_optimizer_attribute
JuMP.set_optimizer_attribute
JuMP.set_optimizer_attributes
JuMP.set_start_value
JuMP.set_start_value
JuMP.set_upper_bound
JuMP.set_upper_bound
JuMP.shadow_price
JuMP.shadow_price
JuMP.solve_time
JuMP.solve_time
JuMP.solve_time
JuMP.start_value
JuMP.start_value
JuMP.termination_status
JuMP.termination_status
JuMP.termination_status
JuMP.unfix
JuMP.unfix
JuMP.unset_binary
JuMP.unset_binary
JuMP.unset_integer
JuMP.unset_integer
JuMP.upper_bound
JuMP.upper_bound
JuMP.value
JuMP.value
JuMP.value
JuMP.value
JuMP.value
JuMP.value
JuMP.value
StochasticPrograms.DEP
StochasticPrograms.EEV
StochasticPrograms.EEV
StochasticPrograms.EV
StochasticPrograms.EVP
StochasticPrograms.EVPI
StochasticPrograms.EVPI
StochasticPrograms.EWS
StochasticPrograms.EWS
StochasticPrograms.StochasticStructure
StochasticPrograms.VRP
StochasticPrograms.VRP
StochasticPrograms.VSS
StochasticPrograms.VSS
StochasticPrograms.WS
StochasticPrograms.add_scenario!
StochasticPrograms.add_scenario!
StochasticPrograms.add_scenario!
StochasticPrograms.add_scenario!
StochasticPrograms.add_scenarios!
StochasticPrograms.add_scenarios!
StochasticPrograms.add_scenarios!
StochasticPrograms.add_scenarios!
StochasticPrograms.add_worker_scenario!
StochasticPrograms.add_worker_scenario!
StochasticPrograms.add_worker_scenario!
StochasticPrograms.add_worker_scenario!
StochasticPrograms.add_worker_scenarios!
StochasticPrograms.add_worker_scenarios!
StochasticPrograms.add_worker_scenarios!
StochasticPrograms.add_worker_scenarios!
StochasticPrograms.all_auxiliary_variables
StochasticPrograms.all_decision_variables
StochasticPrograms.all_decision_variables
StochasticPrograms.all_decision_variables
StochasticPrograms.all_decision_variables
StochasticPrograms.all_known_decision_variables
StochasticPrograms.all_known_decision_variables
StochasticPrograms.cache_solution!
StochasticPrograms.clear!
StochasticPrograms.confidence_interval
StochasticPrograms.decision
StochasticPrograms.decision
StochasticPrograms.decision
StochasticPrograms.decision
StochasticPrograms.decision
StochasticPrograms.decision_by_name
StochasticPrograms.default_structure
StochasticPrograms.deferred
StochasticPrograms.distributed
StochasticPrograms.evaluate_decision
StochasticPrograms.evaluate_decision
StochasticPrograms.evaluate_decision
StochasticPrograms.expected
StochasticPrograms.expected
StochasticPrograms.expected_value_decision
StochasticPrograms.first_stage
StochasticPrograms.gap
StochasticPrograms.generate!
StochasticPrograms.generator
StochasticPrograms.has_generator
StochasticPrograms.instantiate
StochasticPrograms.instantiate
StochasticPrograms.instantiate
StochasticPrograms.instantiate
StochasticPrograms.lower_confidence_interval
StochasticPrograms.master_optimizer
StochasticPrograms.num_decisions
StochasticPrograms.num_decisions
StochasticPrograms.num_known_decisions
StochasticPrograms.num_scenarios
StochasticPrograms.num_stages
StochasticPrograms.num_subproblems
StochasticPrograms.optimal_decision
StochasticPrograms.optimal_decision
StochasticPrograms.optimal_decision
StochasticPrograms.optimal_decision
StochasticPrograms.optimal_recourse_decision
StochasticPrograms.optimizer
StochasticPrograms.optimizer
StochasticPrograms.optimizer_constructor
StochasticPrograms.optimizer_constructor
StochasticPrograms.optimizer_name
StochasticPrograms.optimizer_name
StochasticPrograms.outcome_model
StochasticPrograms.outcome_model
StochasticPrograms.probability
StochasticPrograms.probability
StochasticPrograms.probability
StochasticPrograms.probability
StochasticPrograms.proxy
StochasticPrograms.recourse_decision
StochasticPrograms.sample
StochasticPrograms.sample!
StochasticPrograms.sample!
StochasticPrograms.scenario
StochasticPrograms.scenario
StochasticPrograms.scenario_type
StochasticPrograms.scenario_types
StochasticPrograms.scenarios
StochasticPrograms.scenariotext
StochasticPrograms.set_probability!
StochasticPrograms.stage
StochasticPrograms.stage
StochasticPrograms.stage_model
StochasticPrograms.stage_one_model
StochasticPrograms.stage_parameters
StochasticPrograms.stage_probability
StochasticPrograms.state
StochasticPrograms.state
StochasticPrograms.state
StochasticPrograms.statistically_evaluate_decision
StochasticPrograms.structure
StochasticPrograms.structure_name
StochasticPrograms.subproblem
StochasticPrograms.subproblem
StochasticPrograms.subproblem_optimizer
StochasticPrograms.subproblems
StochasticPrograms.update_decisions!
StochasticPrograms.update_known_decisions!
StochasticPrograms.upper_confidence_interval
StochasticPrograms.upper_confidence_interval
StochasticPrograms.wait_and_see_decision