# Argonne-National-Laboratory/DSP

An open-source parallel optimization solver for stochastic mixed-integer programming
HTML C C++ Fortran CSS Makefile Other
Latest commit 0c1c38d Dec 30, 2016 Kibaek Kim do not increase TR size
 Failed to load latest commit information. docs Aug 20, 2016 examples Oct 6, 2016 extra Oct 6, 2016 lib Dec 30, 2015 parameters Aug 20, 2016 src Dec 31, 2016 test Aug 22, 2016 .gitignore Aug 24, 2016 CMakeLists.txt Aug 22, 2016 INSTALL.md Sep 2, 2016 LICENSE Jun 10, 2015 README.md Aug 23, 2016 RELEASE.md Aug 22, 2016 color_scheme.cmake Jul 8, 2016 config_path.cmake Jul 8, 2016 get.essentials.archlinux Sep 2, 2016 get.essentials.debian Sep 2, 2016 get.essentials.macosx Sep 2, 2016 get.essentials.opensuse Sep 2, 2016 get.essentials.redhat Sep 2, 2016 get_mpi4py_include.py Jul 8, 2016

# DSP

DSP is an open-source and parallel package that implements decomposition methods for stochastic mixed-integer programming (SMIP) problems. These are structured optimization problems considering uncertain scenario realizations s with probabilities p_s in the following form:

    minimize   c^T x + \sum_{s=1}^S p_s q_s^T y_s
subject to   A x                              = b
T_s x +                    W_s y_s = h_s for s = 1, .., S
some x, y_s are integers


where x and y_s are decision variable vectors with dimensions n_1 and n_2, respectively, A, T_s and W_s are matrices of dimensions m_1 by n_1, m_2 by n_1 and m_2 by n_2, respectively, and c, q_s, b, and h_s are vectors of appropriate dimensions.

DSP provides parallel implementations for the following decomposition methods:

• Dual decomposition (with subgradient method and several bundle methods)
• Benders decomposition

The methods can be run on computing clusters and multi-core processors.

You can clone this repository in your preferred directory by typing:

git clone https://github.com/Argonne-National-Laboratory/DSP.git

See INSTALL.md

## Interfaces

### Julia Interface

DSP can use Julia as a modeling interface for the computational experiments. Julia is a high level dynamic programming language for technical computing, with syntax that is familiar to users of other technical computing environments such as MATLAB and Python. Julia can be downloaded from http://julialang.org/downloads/ If Julia is successfully installed on your machine, then you can start the Julia command-line tool by typing

julia

Now we need to install four Julia packages required to run DSP in the Julia environment. The packages should be installed in the Julia command-line tool. Please update the package list of Julia by typing

Pkg.update();
• JuMP.jl is a algebraic modeling package in Julia for mathematical programming, which can be installed by the following Julia command:
    Pkg.add("JuMP");
• The Dsp.jl package provides an interface to JuMP.jl. DSPsolver.jl can be installed by the Julia command
    Pkg.clone("https://github.com/kibaekkim/Dsp.jl.git");
• MPI.jl is an optional package to run DSP in parallel on high-performance computing machines using MPI library. This is an MPI interface package, which can be installed by the following Julia command. MPICH is required for this package.
    Pkg.add("MPI");

### Python Interface

Python interface will be automatically installed if python library is available on your machine.

## Example

You can find examples in subdirectory examples.

## Credits

DSP has been developed and is maintained by:

• Kibaek Kim, Mathematics and Computer Science Division, Argonne National Laboratory.
• Victor M. Zavala, Department of Chemical and Biological Engineering, University of Wisconsin-Madison.

## Acknowledgements

This material is based upon work supported by the U.S. Department of Energy, Office of Science, under contract number DE-AC02-06CH11357. We gratefully acknowledge the computing resources provided on Blues, a high-performance computing cluster operated by the Laboratory Computing Resource Center at Argonne National Laboratory. We thank E. Michael Gertz and Stephen Wright for providing the OOQP software package.