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. In this paper, 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. We showcase the modeling power of ROC++ on several decision-making problems of practical interest. Our platform can help streamline the modeling and solution of stochastic and robust optimization problems for both researchers and practitioners. It comes with detailed documentation to facilitate its use and expansion. ROC++ is freely distributed for academic use at https://sites.google.com/usc.edu/robust-opt-cpp/.
Technical Report, University of Southern California, June 2020