Skip to content

Commit

Permalink
Update readme
Browse files Browse the repository at this point in the history
  • Loading branch information
JustinStarreveld committed Aug 23, 2024
1 parent daf0f47 commit ceb0074
Show file tree
Hide file tree
Showing 7 changed files with 21 additions and 148 deletions.
34 changes: 21 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,18 +28,24 @@ pip install ".[examples]"
## Numerical Experiments

1) Toy Problem (abbreviated as tp).
We compare ROBIST with the methods of Calafiore & Campi (2005) and Yanıkoglu & den Hertog (2013) in [`examples/tp_experiments_cal2005_yan2013.py`](https://github.com/JustinStarreveld/ROBIST/blob/main/examples/tp_experiments_cal2005_yan2013.py). Furthermore we analyze the performance of ROBIST in more detail in [`examples/tp_analysis.py`](https://github.com/JustinStarreveld/ROBIST/blob/main/examples/tp_analysis.py).
We compare ROBIST with the methods of Calafiore & Campi (2005) and Yanıkoglu & den Hertog (2013) in [`examples/tp_experiments.py`](https://github.com/JustinStarreveld/ROBIST/blob/main/examples/tp_experiments.py).

2) Portfolio Management Problem (abbreviated as pm).
We compare ROBIST with the data-driven robust optimization approach proposed by Bertsimas et al. (2018) and the scenario optimization approach of Calafiore (2013) in [`examples/pm_experiments.py`](https://github.com/JustinStarreveld/ROBIST/blob/main/examples/pm_experiments.py).
2) Altered Toy Problem (abbreviated as tp2).
We analyze the performance of ROBIST in more detail in [`examples/tp2_analysis.py`](https://github.com/JustinStarreveld/ROBIST/blob/main/examples/tp2_analysis.py), [`examples/tp2_extra_experiments_1.py`](https://github.com/JustinStarreveld/ROBIST/blob/main/examples/tp2_extra_experiments_1.py) and [`examples/tp2_extra_experiments_2.py`](https://github.com/JustinStarreveld/ROBIST/blob/main/examples/tp2_extra_experiments_2.py).

3) Linear CCP Problem (abbreviated as jiang2022).
We compare ROBIST with the SAA-based methods of Ahmed et al. (2017) and Jiang and Xie (2022) in [`examples/jiang2022_experiments.py`](https://github.com/JustinStarreveld/ROBIST/blob/main/examples/jiang2022_experiments.py).

3) Weighted Distribution Problem (abbreviated as wdp).
4) Weighted Distribution Problem (abbreviated as wdp).
We compare ROBIST with the scenario optimization methods of Calafiore & Campi (2005), Caré et al. (2014), Calafiore (2016) and Garatti et al. (2022) in [`examples/wdp_experiments.py`](https://github.com/JustinStarreveld/ROBIST/blob/main/examples/wdp_experiments.py).

4) Two-Stage Lot-Sizing Problem (abbreviated as ls).
5) Portfolio Management Problem (abbreviated as pm).
We compare ROBIST with the data-driven robust optimization approach proposed by Bertsimas et al. (2018) and the scenario optimization approach of Calafiore (2013) in [`examples/pm_experiments.py`](https://github.com/JustinStarreveld/ROBIST/blob/main/examples/pm_experiments.py).

6) Two-Stage Lot-Sizing Problem (abbreviated as ls).
We compare ROBIST with the method of Vayanos et al. (2012) in [`examples/ls_experiments.py`](https://github.com/JustinStarreveld/ROBIST/blob/main/examples/ls_experiments.py).

For more information about these problems we refer to [preprint-paper].
For more information on these experiments and the results we refer to [preprint-paper].

## Illustrative Example

Expand All @@ -59,9 +65,9 @@ where $z_1$ and $z_2$ are uncertain parameters, both uniformly distributed with
Suppose we have access to a data set of $N=200$ realizations of $(\tilde{z}_1, \tilde{z}_2)$ and would like the solution to be feasible with probability of at least 90%.
We illustrate the application of ROBIST for this toy problem using the following figures.

First, we randomly split the data set into two equal-sized sets $\mathcal{D}^{train}\_{N_1}$ and $\mathcal{D}^{\text{test}}\_{N_2}$, each containing $100$ scenarios.
First, we randomly split the data set into three equal-sized sets $\mathcal{D}^{train}\_{N_1}$, $\mathcal{D}^{\text{valid}}\_{N_2}$ and $\mathcal{D}^{\text{test}}\_{N_3}$, each containing $100$ scenarios.

![Data](https://github.com/JustinStarreveld/ROBIST/raw/main/docs/illustrative_figures/Illustrate_data_split_N=200.png)
![Data](https://github.com/JustinStarreveld/ROBIST/raw/main/docs/illustrative_figures/Illustrate_data_split_N=300.png)

We initialize the algorithm by optimizing for the expected/nominal scenario, i.e., $\bar{\mathbf{z}} = (z_1, z_2) = (0,0)$. This provides an initial solution: $\mathbf{x}\_{0} = (x_1, x_2) = (1,1)$ with an objective value of 2.
The next step is to use the training data $\mathcal{D}^{\text{train}}\_{N_1}$ to evaluate the robustness of $\mathbf{x}\_{0}$. This evaluation is illustrated in the following figure.
Expand All @@ -77,19 +83,21 @@ Again, we can evaluate the robustness of our newly generated solution $\mathbf{x
We find that $\mathbf{x}\_{1}$ exceeds our desired level of robustness, thus the algorithm will remove a randomly picked scenario from our set of sampled scenarios in the following iteration.
The algorithm continues adding or removing scenarios and evaluating the resulting solutions on $\mathcal{D}^{\text{train}}\_{N_1}$ in this manner until either the time limit or iteration limit is reached.

Once the stopping criteria is reached, we use the "out-of-sample" test data $\mathcal{D}^{\text{test}}\_{N_2}$ to properly evaluate each solution $\mathbf{x}\_{i}$ and obtain valid "feasibility certificates".
These evaluations can then be used to construct a trade-off curve and aid in choosing a solution. The orange line in the figure below depicts such a trade-off curve.
Once the stopping criteria is reached, we use the validation data $\mathcal{D}^{\text{valid}}\_{N_2}$ to properly evaluate each solution $\mathbf{x}\_{i}$ and obtain valid "feasibility certificates".
These evaluations can then be used to construct a trade-off curve and aid in choosing a final solution (the orange line in the figure below depicts such a trade-off curve, where each orange square
represents a non-dominated solution with respect to the validation data). Recall that we would like our solution to be feasible with probability $\geq 90\%$, thus we select the solution with the highest
objective value while requiring that the proxy certificate derived from the validation data is greater than or equal to 0.90. Finally, we utilize $\mathcal{D}^{\text{test}}\_{N_3}$ to provide
a valid feasibility certificate for this solution. In this example, the algorithm returns a solution with objective value 1.37 and feasibility certificate 0.93.

![Trade-off curve](https://github.com/JustinStarreveld/ROBIST/raw/main/docs/illustrative_figures/TradeOffCurves_N=100_alpha=0.01_epsilon=0.1_iMax=1000.png)
![Trade-off curve](https://github.com/JustinStarreveld/ROBIST/raw/main/docs/illustrative_figures/TradeOffCurves_N=300_alpha=0.01_epsilon=0.1_iMax=100.png)

The script used to create the figures in this illustrative example is [`examples/tp_illustrative_plots.py`](https://github.com/JustinStarreveld/ROBIST/blob/main/examples/tp_illustrative_plots.py).

## Contact Information
Our code is not flawless. In case you have any questions or suggestions, please reach us at [email protected].

## Citation

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

```
@misc{ROBIST,
Expand Down
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes.
135 changes: 0 additions & 135 deletions examples/tp_plot_tradeoff_curves.py

This file was deleted.

0 comments on commit ceb0074

Please sign in to comment.