We present the Decision Programming framework for solving multi-stage stochastic problems. The problem is first formulated as an influence diagram and then converted to a mixed-integer linear programming problem. The DecisionProgramming.jl package is implemented as an extension to JuMP, taking advantage of the versatility of JuMP in using different solvers and accessing different solver attributes.
Decision Programming combines ideas from the fields of decision analysis and stochastic programming, using the strengths of both approaches to overcome the limitations of the other. Stochastic optimization has struggled with representing endogenous uncertainties, which can be easily represented in an influence diagram. On the other hand, solution methods for influence diagrams are often problem-specific and require strong assumptions, such as the no-forgetting assumption. Using the solution methods available for mixed-integer linear problems helps us overcome these challenges.
While Decision Programming is still in a relatively early development phase as a mathematical optimization framework, we have published the package DecisionProgramming.jl, implementing the framework in its current state. We believe that Decision Programming can be a valuable tool for users in the field of mathematical optimization and decision-making. A significant amount of work has gone into making the framework user-friendly, making it easy for an inexperienced user to formulate decision problems and obtain solutions without strong knowledge of the underlying optimization methods.
In addition to the core framework, we present examples of primal heuristics and valid inequalities for improving the computational performance of the framework considerably. DecisionProgramming.jl is built as an extension to JuMP, allowing more experienced users to easily modify and further extend the formulations in the package. This combination of being easy to use for beginners and easy to build on for experienced users is what has strongly contributed to the popularity of JuMP, and we hope this will also be the case for DecisionProgramming.jl.