-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
daf0f47
commit ceb0074
Showing
7 changed files
with
21 additions
and
148 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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 | ||
|
||
|
@@ -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. | ||
|
@@ -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, | ||
|
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 removed
BIN
-444 KB
.../illustrative_figures/TradeOffCurves_N=100_alpha=0.01_epsilon=0.1_iMax=1000.png
Binary file not shown.
Binary file added
BIN
+496 KB
docs/illustrative_figures/TradeOffCurves_N=300_alpha=0.01_epsilon=0.1_iMax=100.png
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.
This file was deleted.
Oops, something went wrong.