This repository is by Priya L. Donti, Brandon Amos, and J. Zico Kolter and contains the PyTorch source code to reproduce the experiments in our paper Task-based End-to-end Model Learning in Stochastic Optimization.
If you find this repository helpful in your publications, please consider citing our paper.
@inproceedings{donti2017task,
title={Task-based end-to-end model learning in stochastic optimization},
author={Donti, Priya and Amos, Brandon and Kolter, J Zico},
booktitle={Advances in Neural Information Processing Systems},
pages={5484--5494},
year={2017}
}
As machine learning techniques have become more ubiquitous, it has become common to see machine learning prediction algorithms operating within some larger process. However, the criteria by which we train machine learning algorithms often differ from the ultimate criteria on which we evaluate them.
This repository demonstrates an end-to-end approach for learning probabilistic machine learning models within the context of stochastic programming, in a manner that directly captures the ultimate task-based objective for which they will be used. Specifically, we evaluate our approach in the context of (a) a generic inventory stock problem and (b) an electrical grid scheduling task based on over eight years of data from PJM.
Please see our paper Task-based End-to-end Model Learning in Stochastic Optimization and the code in this repository (locuslab/e2e-model-learning) for more details about the general approach proposed and our initial experimental implementations.
- Python 3.x/numpy/scipy
- cvxpy 1.x
- PyTorch 1.x
- qpth 0.0.15: A fast QP solver for PyTorch released in conjunction with the paper OptNet: Differentiable Optimization as a Layer in Neural Networks.
- bamos/block: An intelligent block matrix library for numpy, PyTorch, and beyond.
- pandas/matplotlib/seaborn
- Optional: bamos/setGPU:
A small library to set
CUDA_VISIBLE_DEVICES
on multi-GPU systems. - Optional: setproctitle: A library to set process names.
Experiments considering a "conditional" variation of the inventory stock problem. Problem instances are generated via random sampling.
newsvendor
βββ main.py - Run inventory stock problem experiments. (See arguments.)
βββ task_net.py - Functions for our task-based end-to-end model learning approach.
βββ mle.py - Functions for linear maximum likelihood estimation approach.
βββ mle_net.py - Functions for nonlinear maximum likelihood estimation approach.
βββ policy_net.py - Functions for end-to-end neural network policy model.
βββ batch.py - Helper functions for minibatched evaluation.
βββ plot.py - Plot experimental results.
βββ constants.py - Constants to set GPU vs. CPU.
Experiments considering a realistic grid-scheduling task, in which electricity generation is scheduled based on some (unknown) distribution over electricity demand. Historical load data for these experiments were obtained from PJM.
power_sched
βββ main.py - Run load forecasting problem experiments. (See arguments.)
βββ model_classes.py - Models used for experiments.
βββ nets.py - Functions for RMSE, cost-weighted RMSE, and task nets.
βββ plot.py - Plot experimental results.
βββ constants.py - Constants to set GPU vs. CPU.
βββ pjm_load_data_*.txt - Historical load data from PJM.
Experiments considering a realistic battery arbitrage task, in which a power grid-connected battery generates a charge/discharge schedule based on some (unknown) distribution over energy prices. Historical energy price data for these experiments were obtained from PJM.
battery_storage
βββ main.py - Run battery storage problem experiments. (See arguments.)
βββ model_classes.py - Models used for experiments.
βββ nets.py - Functions for RMSE and task nets.
βββ calc_stats.py - Calculate experimental result stats.
βββ constants.py - Constants to set GPU vs. CPU.
βββ storage_data.csv - Historical energy price data from PJM.
This material is based upon work supported by the National Science Foundation Graduate Research Fellowship Program under Grant No. DGE1252522.
Unless otherwise stated, the source code is copyright Carnegie Mellon University and licensed under the Apache 2.0 License.