An open API service indexing awesome lists of open source software.

https://github.com/justinstarreveld/multistage-robustness-analysis

Demonstration of robustness analysis for (multistage) adaptive optimization
https://github.com/justinstarreveld/multistage-robustness-analysis

optimization robustness-analysis

Last synced: 14 days ago
JSON representation

Demonstration of robustness analysis for (multistage) adaptive optimization

Awesome Lists containing this project

README

          

# Robustness Analysis for Adaptive Optimization

[![License: MIT][license-badge]][license]
[![DOI][Zenodo-badge]][Zenodo-url]

This repository provides code for applying _Robustness_ _Analysis_ (RA).
RA is used to analyze the performance of a particular solution under variation in the uncertain parameters of an optimization problem.
This can be done in a static manner, or a multistage adaptive manner, which allows some of the decisions to adapt to realizations of the uncertainty.
This differs from Sensitivity Analysis (SA), which analyzes how the optimal solution changes under variation in the uncertain parameters.
The methodology and problem are described in detail in an accompanying paper, available online [here](https://optimization-online.org/?p=26715).

## Code

The code is written in `Python`, version 3.10.9. The dependency packages are listed in `requirements.txt`. The algorithms are implemented in `analysis.py` and the application to the toy problem is done in `main_illustrative_toy_problem.py`.

## Illustrative Example

We highlight the difference between SA, RA for static optimization and RA for adaptive optimization using the illustrative example as described in Section 2.2 of the [paper](https://optimization-online.org/?p=26715).

We assume to have access to a randomly generated data set of $N=1000$ realizations of $(c_{A,1}, c_{A,2})$ and use this scenario data to analyze the performance of our nominal solution in a 3-stage setting.
Then, using the same set of scenarios, we highlight the difference between SA, RA in a static setting and RA in an adaptive setting, by comparing the results from applying these three methods.
The objective value is analyzed and the results are shown in the following figures.

Results from applying sensitivity analysis:

![Sensitivity Analysis](https://github.com/JustinStarreveld/multistage-robustness-analysis/raw/main/docs/illustrative_figures/obj_hist_N=1000_SA.png)

Results from applying robustness analysis in a static setting:

![Robustness Analysis (static)](https://github.com/JustinStarreveld/multistage-robustness-analysis/raw/main/docs/illustrative_figures/obj_hist_N=1000_RA_static.png)

Results from applying robustness analysis in a 3-stage adaptive setting:

![Robustness Analysis (adaptive)](https://github.com/JustinStarreveld/multistage-robustness-analysis/raw/main/docs/illustrative_figures/obj_hist_N=1000_RA_adaptive.png)

The script used to create the figures in this illustrative example is [`main_illustrative_toy_problem.py`](https://github.com/JustinStarreveld/multistage-robustness-analysis/blob/main/main_illustrative_toy_problem.py).

## Contact Information
The code is not flawless. In case you have any questions or suggestions, please reach out at j.s.starreveld@uva.nl.

## Citation

Was our software useful to you? Great! You can cite us using:

```
@misc{RA_adaptive,
doi = {10.5281/zenodo.11448965},
year = {2024},
author = {Justin Starreveld, Gregor Brandt, Jaron Davelaar, Dick den Hertog, Zofia Lukszo and Nort Thijssen},
title = {Robustness Analysis for Adaptive Optimization},
url = {https://github.com/JustinStarreveld/multistage-robustness-analysis}
}
```

[license]: https://opensource.org/license/mit/
[license-badge]: https://img.shields.io/badge/license-MIT-blue
[Zenodo-url]: https://doi.org/10.5281/zenodo.11448965
[Zenodo-badge]: https://zenodo.org/badge/494070848.svg
[preprint-paper]: https://optimization-online.org/?p=26715