Overview

What is ROC++?

ROC++ is a C++ based platform for modeling, automatically reformulating, and solving robust optimization problems.

What problems can ROC++ solve?

ROC++ can address both single- and multi-stage problems involving exogenous and/or endogenous uncertain parameters and real- and/or binary-valued adaptive variables.

How to use it?

The ROC++ modeling language is similar to the one provided for the deterministic case by state-of-the-art deterministic optimization solvers. ROC++ comes with detailed documentation to facilitate its use and expansion. See our license page for information on usage permissions.

In More Detail...

Over the last two decades, robust optimization techniques have emerged as a very popular means to address decision-making problems affected by uncertainty. Their success has been fueled by their attractive robustness and scalability properties, by ease of modeling, and by the limited assumptions they need about the uncertain parameters to yield meaningful solutions. Robust optimization techniques are available which can address both single- and multi-stage decision-making problems involving real-valued and/or binary decisions, and affected by both exogenous (decision-independent) and endogenous (decision-dependent) uncertain parameters. Many of these techniques apply to problems with either robust (worst-case) or stochastic (expectation) objectives and can thus be tailored to the risk preferences of the decision-maker. Robust optimization techniques rely on duality theory (potentially augmented with approximations) to transform a semi-infinite optimization problem to a finite program of benign complexity (the ``robust counterpart'').

While writing down the model for a robust or stochastic optimization problem is usually a simple task, obtaining the robust counterpart requires expertise in robust optimization. To date, very few solutions are available that can facilitate the modeling and solution of such problems. This has been a major impediment to their being put to practical use. We propose ROC++, a C++ based platform for automatic robust optimization, applicable to a wide array of single- and multi-stage stochastic and robust problems with both exogenous and endogenous uncertain parameters. Our platform naturally extends existing off-the-shelf deterministic optimization platforms. We also propose the ROB file format that generalizes the LP file format to robust optimization.

In this website, we provide detailed instructions on how to install and use our platform. We discuss several decision-making problems of practical interest and show how to model and solve them in ROC++. Our platform can help streamline the modeling and solution of stochastic and robust optimization problems for both researchers and practitioners. It comes with detailed Doxygen documentation to facilitate its use and expansion.

Through ROC++, we hope to facilitate and promote the use of robust optimization techniques to address important decision-making problems affected by uncertainty facing decision- and policy-makers.

Ongoing Development

This code is being developed on an on-going basis at https://github.com/robust-opt-cpp/ROCPP. Please go there if you would like to get a more recent version.

Citation

We hope that you find ROC++ useful in your work. To cite this software, please cite the paper using its DOI and the software itself, using the following DOI.

10.5281/zenodo.6360996


Below is the BibTex for citing this version of the code:

@article{ROCPP,

author = {P. Vayanos, Q. Jin, G. Elissaios},

publisher = {INFORMS Journal on Computing},

title = {{ROCPP} Version v2020.0140},

year = {2022},

doi = {10.5281/zenodo.6360996},

url = {https://github.com/INFORMSJoC/2020.0140},

}

Here is the citation to the paper:

P. Vayanos, Q. Jin, and G. Elissaios, ROC++: Robust Optimization in C++, Technical Report, University of Southern California, June 2020, available on Optimization Online.