nsidn98 / NICE

Combining Reinforcement Learning with Integer Programming for Robust Scheduling
https://nsidn98.github.io/NICE
GNU General Public License v3.0
25 stars 10 forks source link
deep-learning integer-programming machine-learning reinforcement-learning scheduling

NICE: Neural network Integer programming Coefficient Extraction

Official codebase for our paper "NICE: Robust Scheduling through Reinforcement Learning-Guided Integer Programming" accepted at AAAI 2022

Project Page | AAAI 2022 Paper

Abstract:

Integer programs provide a powerful abstraction for representing a wide range of real-world scheduling problems. Despite their ability to model general scheduling problems, solving large-scale integer programs (IP) remains a computational challenge in practice. The incorporation of more complex objectives such as robustness to disruptions further exacerbates the computational challenge. We present NICE (Neural network IP Coefficient Extraction), a novel technique that combines reinforcement learning and integer programming to tackle the problem of robust scheduling. More specifically, NICE uses reinforcement learning to approximately represent complex objectives in an integer programming formulation. We use NICE to determine assignments of pilots to a flight crew schedule so as to reduce the impact of disruptions. We compare NICE with (1) a baseline integer programming formulation that produces a feasible crew schedule, and (2) a robust integer programming formulation that explicitly tries to minimize the impact of disruptions. Our experiments show that NICE produces schedules that are more robust to disruptions than the baseline formulation, with computation times that are lower than those of the robust integer program.

Disruption experiment structure

Experiemental code for NICE logits scheduling approach. Disruption experiments are run with:

python3 test_disrupt.py -l feasibility -i 100 -p model_wts/s0_d1_m0.0_b1.0.ckpt -d flights_delay -n 50 3 -r 2 -c 2 > constrained_experiment/delayed_50_buffer_exp.txt

-l specifies the type of baseline linear program you are comparing the logits approach to. "feasibility" in this case refers to the baseline IP.

-i specifies the number of iterations it should be run for.

-p is the saved neural network to use for the NICE and RL scheduling approach.

-d specifies the disruption type. "flights_delay" indicates that flights will be delayed

-n specifies the parameters for the disruption type. The first value ("50") is the percentage of flights that get delayed. The second ("3") is the maximum number of days any one flight will be delayed.

-r inidicates the "n" value for the weight extraction method

-c indicates the density of flights for the given schedule.

Note that we changed the name of the NICE scheduler while developing the code. In the codebase, it is referred to as "CARLO", "LOGITS", and "NICE". They are all synonymous.

Bash commands and corresponding experiments:

For the model training (all of the experiments in the training_scripts folder), we used the Python package versions found in training_requirements.txt with Python 3.7.3. All of the other experiments used the package versions in testing_requirements.txt with Python 3.8.2.

If you find this code useful, please consider citing our paper:

@inproceedings{DBLP:conf/aaai/KenworthyNCB22,
  author    = {Luke Kenworthy and
               Siddharth Nayak and
               Christopher Chin and
               Hamsa Balakrishnan},
  title     = {{NICE:} Robust Scheduling through Reinforcement Learning-Guided Integer
               Programming},
  booktitle = {Thirty-Sixth {AAAI} Conference on Artificial Intelligence, {AAAI}
               2022, Thirty-Fourth Conference on Innovative Applications of Artificial
               Intelligence, {IAAI} 2022, The Twelveth Symposium on Educational Advances
               in Artificial Intelligence, {EAAI} 2022 Virtual Event, February 22
               - March 1, 2022},
  pages     = {9821--9829},
  publisher = {{AAAI} Press},
  year      = {2022},
  url       = {https://ojs.aaai.org/index.php/AAAI/article/view/21218},
  biburl    = {https://dblp.org/rec/conf/aaai/KenworthyNCB22.bib},
  bibsource = {dblp computer science bibliography, https://dblp.org}
}    

Contact Us

In case of any queries, please reach out to Luke or Siddharth.