--- license: mit pipeline_tag: reinforcement-learning --- # RLOR: A Flexible Framework of Deep Reinforcement Learning for Operation Research 1️⃣ First work to incorporate end-to-end vehicle routing model in a modern RL platform (CleanRL) ⚡ Speed up the training of Attention Model by 8 times (25hours --> 3 hours) 🔎 A flexible framework for developing *model*, *algorithm*, *environment*, and *search* for operation research ## News - 24/03/2023: We release our paper on [arxiv](https://arxiv.org/abs/2303.13117)! - 20/03/2023: We release demo and pretrained checkpoints! - 10/03/2023: We release our codebase! ## Demo We provide inference demo on colab notebook: | Environment | Search | Demo | | ----------- | ------------ | ------------------------------------------------------------ | | TSP | Greedy |
Open In Colab
| | CVRP | Multi-Greedy |
Open In Colab
| ## Installation ### Conda ```shell conda env create -n -f environment.yml # The environment.yml was generated from # conda env export --no-builds > environment.yml ``` It can take a few minutes. ### Optional dependency `wandb` Refer to their [quick start guide](https://docs.wandb.ai/quickstart) for installation. ## File structures All the major implementations were under [rlor](./rlor) folder. ```shell ./rlor ├── envs │ ├── tsp_data.py # load pre-generated data for evaluation │ ├── tsp_vector_env.py # define the (vectorized) gym environment │ ├── cvrp_data.py │ └── cvrp_vector_env.py ├── models │ ├── attention_model_wrapper.py # wrap refactored attention model to cleanRL │ └── nets # contains refactored attention model └── ppo_or.py # implementaion of ppo with attention model for operation research problems ``` The [ppo_or.py](./ppo_or.py) was modified from [cleanrl/ppo.py](https://github.com/vwxyzjn/cleanrl/blob/28fd178ca182bd83c75ed0d49d52e235ca6cdc88/cleanrl/ppo.py). To see what's changed, use diff: ```shell # apt install diff diff --color ppo.py ppo_or.py ``` ## Training OR model with PPO ### TSP ```shell python ppo_or.py --num-steps 51 --env-id tsp-v0 --env-entry-point envs.tsp_vector_env:TSPVectorEnv --problem tsp ``` ### CVRP ```shell python ppo_or.py --num-steps 60 --env-id cvrp-v0 --env-entry-point envs.cvrp_vector_env:CVRPVectorEnv --problem cvrp ``` ### Enable WandB ```shell python ppo_or.py ... --track ``` Add `--track` argument to enable tracking with WandB. ### Where is the tsp data? It can be generated from the [official repo](https://github.com/wouterkool/attention-learn-to-route) of the attention-learn-to-route paper. You may modify the [./envs/tsp_data.py](./envs/tsp_data.py) to update the path to data accordingly. # Acknowledgements The neural network model is refactored and developed from [Attention, Learn to Solve Routing Problems!](https://github.com/wouterkool/attention-learn-to-route). The idea of multiple trajectory training/ inference is from [POMO: Policy Optimization with Multiple Optima for Reinforcement Learning](https://proceedings.neurips.cc/paper/2020/hash/f231f2107df69eab0a3862d50018a9b2-Abstract.html). The RL environments are defined with [OpenAI Gym](https://github.com/openai/gym/tree/0.23.1). The PPO algorithm implementation is based on [CleanRL](https://github.com/vwxyzjn/cleanrl).