JuDGE.jl
JuDGE stands for: Julia Decomposition for Generalized Expansion. Functionally, it is a solver which leverages the syntax of the JuMP modelling language to solve a particular class of capacity expansion problems.
For more details see our working paper: JuDGE.jl: a Julia package for optimizing capacity expansion.
Problem Class / Decomposition
JuDGE solves multi-stage stochastic integer programming problems using Dantzig-Wolfe decomposition. The user must specify a tree that represents the uncertainty of the problem, and at each node define a subproblem that can be a linear or integer program. Further, the expansion variables which link the subproblems must be declared.
JuDGE automatically generates a master problem and performs column generation to converge to an optimal solution.
Requirements
JuDGE requires Julia-1.3+, JuMP and appropriate optimiser(s). For academics, Gurobi / CPLEX provide free academic licenses, otherwise, you can use CBC/Clp or GLPK.
Installation
JuDGE is installed by the Pkg
utility provided by Julia. In the Julia REPL, simply make the following function call.
] add "https://github.com/reganbaucke/JuDGE.jl"
Then, in your Julia script, use
using JuDGE
to import the functions from the JuDGE module into the current namespace.
Stochastic Knapsack Example
JuDGE is distributed with an example of a multi-stage stochastic integer programming problem. This is a stochastic knapsack problem with investment. The file knapsack.jl contains the implementation of this problem within the JuDGE framework. There are also a number of variants of this model demonstrating other features of JuDGE.
See the Tutorials for details about this.
Limitations
- The package is currently under development, and while it has been tested on a
number of example problems, there may be some issues that have yet to be addressed.
- Support for decisions to reduce capacity is not fully tested.
Bugs
Please raise an issue if you experience an error while using JuDGE.