This is the code for the paper Uncertainty-aware Constraint Inference in Inverse Constrained Reinforcement Learning published at ICLR 2024. Note that:
- Our work includes MuJoCo and CommonRoad environments.
- The implementation is based on the code from ICRL-benchmark.
- Please install the conda before proceeding.
- Create a conda environment and install the packages:
mkdir save_model
mkdir evaluate_model
conda env create -n cn39 python=3.9 -f python_environment.yml
conda activate cn39
You can also first install Python 3.9 with the torch (2.0.1+cu117) and then install the packages listed in python_environment.yml
.
1. Setup MuJoCo Environment (you can also refer to MuJoCo Setup)
- Download the MuJoCo version 2.1 binaries for Linux or OSX.
- Extract the downloaded mujoco210 directory into ~/.mujoco/mujoco210.
- Install and use mujoco-py.
pip install -U 'mujoco-py<2.2,>=2.1'
pip install -e ./mujuco_environment
export MUJOCO_PY_MUJOCO_PATH=YOUR_MUJOCO_DIR/.mujoco/mujoco210
export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:YOUR_MUJOCO_DIR/.mujoco/mujoco210/bin:/usr/lib/nvidia
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/nvidia
2. Setup CommonRoad Environment (you can also refer to CommonRoad Setup)
sudo apt-get update
sudo apt-get install build-essential make cmake
# option 1: Install with sudo rights (cn39 is the name of the conda environment).
cd ./commonroad_environment
bash ./scripts/install.sh -e cn39
# Option 2: Install without sudo rights
bash ./commonroad_environment/scripts/install.sh -e cn39 --no-root
Note that we have generated the expert data for ease of usage, and you can download it through expert_data.
Alternatively, you can also generate your own dataset with different settings such as different constraints or noise levels through the following steps (here we use the Blocked Half-Cheetah
environment with noise level 1e-3 as an example):
Firstly we should train an expert agent (PPO-Lag) with ground-truth constraints:
# run PPO-Lag knowing the ground-truth constraints
python train_policy.py ../config/Mujoco/Blocked_HalfCheetah/train_PPO-Lag_HC-noise-1e-3.yaml -n 5 -s 123
After training the expert agent, we can get the expert demonstration through sampling from it:
# run data generation
python generate_data_for_constraint_inference.py -n 5 -mn your_expert_file_path -tn PPO-Lag-HC -ct no-constraint -rn 0
Note that you need to replace the your_expert_file_path
with the saved path of your trained expert. You can find it through save_model/PPO-Lag-HC/your_expert_file_path
.
We use the Blocked Half-Cheetah
environment with noise level 1e-1 and seed 123 as an example. You can use different seeds or modify the noise level using different configs.
# train GACL
python train_gail.py ..config/Mujoco/Blocked_HalfCheetah/train_GAIL_HC-noise-1e-1.yaml -n 5 -s 123
# train BC2L
python train_icrl.py ...config/Mujoco/Blocked_HalfCheetah/train_BC2L_HC-noise-1e-1.yaml -n 5 -s 123
# train ICRL
python train_icrl.py ..config/Mujoco/Blocked_HalfCheetah/train_ICRL_HC-noise-1e-1.yaml -n 5 -s 123
# train VICRL
python train_icrl.py ..config/Mujoco/Blocked_HalfCheetah/train_VICRL_HC-noise-1e-1.yaml -n 5 -s 123
# train UAICRL
python train_icrl.py ..config/Mujoco/Blocked_HalfCheetah/train_UAICRL_HC-noise-1e-1.yaml -n 5 -s 123
After training the algorithms, we can evaluate their performance through the following steps:
- Modify
plot_results_dirs.py
ininterface/plot_results
to add the log path of different algorithms in different environments. - Run
generate_running_plots.py
and check the results and figures in theplot_results
folder.
If you have any questions, please contact me via shengxu1@link.cuhk.edu.cn.
If you feel the work helpful, please use the citation:
@inproceedings{xu2024uaicrl,
title={Uncertainty-aware Constraint Inference in Inverse Constrained Reinforcement Learning},
author={Xu, Sheng and Liu, Guiliang},
booktitle={The Twelfth International Conference on Learning Representations},
year={2024}
url={https://openreview.net/pdf?id=ILYjDvUM6U}
}