代码说明所在位置:GitHub - chongminggao/DORL-codes: Source codes for our SIGIR '23 paper
1.运行代码的示例
1.1运行传统的基于DQN的baselines,如BCQ或者SQN
1.1.1运行静态用户模型(DeepFM)来获得用户和物品的嵌入
python run_worldModel_ensemble.py --env CoatEnv-v0 --cuda 0 --epoch 5 --tau 0 --loss "pointneg" --message "pointneg"
其中,message是命名保存文件的生成器
运行结果分析:
生成了DeepFM文件夹,执行完成后在save_models的CoatEnv-v0环境文件夹下生成了DeepFM文件夹
1.1.2运行RL策略,默认情况下使用上一步训练的用户/物品嵌入
运行BCQ
python run_Policy_BCQ.py --env CoatEnv-v0 --seed 0 --cuda 0 --which_tracker avg --reward_handle "cat" --unlikely-action-threshold 0.6 --window_size 3 --read_message "pointneg" --message "BCQ"
运行结果分析:
生成了BCQ文件夹,并将日志文件保存在了在文件夹下的logs文件夹中
运行SQN
python run_Policy_SQN.py --env CoatEnv-v0 --seed 0 --cuda 0 --num_leave_compute 1 --leave_threshold 0 --which_tracker avg --reward_handle "cat" --window_size 3 --read_message "pointneg" --message "SQN"
没去执行
1.2运行基于模型的方法,即DORL、MBPO、MOPO
1.2.1运行静态用户模型(DeepFM)来获得用户和物品的嵌入
python run_worldModel_ensemble.py --env KuaiEnv-v0 --cuda 0 --epoch 5 --loss "pointneg" --message "pointneg"
运行结果分析:
生成了DeepFM文件夹,执行完成后在save_models的KuaiEnv-v0环境文件夹下生成了DeepFM文件夹
1.2.2运行RL策略.使用参数 --read_message"pointneg"来确保embeddings 和rewards 是从上一步训练的模型中生成出来的
运行DORL(论文中提出的方法)
python run_Policy_Main.py --env KuaiEnv-v0 --seed 0 --cuda 0 --num_leave_compute 1 --leave_threshold 0 --which_tracker avg --reward_handle "cat" --lambda_variance 0.01 --lambda_entropy 0.05 --window_size 3 --read_message "pointneg" --message "DORL" &
运行MBPO(基于香草模型的离线RL方法)
python run_Policy_Main.py --env KuaiEnv-v0 --seed 0 --cuda 0 --num_leave_compute 1 --leave_threshold 0 --which_tracker avg --reward_handle "cat" --lambda_variance 0 --lambda_entropy 0 --window_size 3 --read_message "pointneg" --message "MBPO" &
运行MOPO(考虑分布位移的基于模型的RL方法)
python run_Policy_Main.py --env KuaiEnv-v0 --seed 0 --cuda 0 --num_leave_compute 1 --leave_threshold 0 --which_tracker avg --reward_handle "cat" --lambda_variance 0.05 --lambda_entropy 0 --window_size 3 --read_message "pointneg" --message "MOPO" &
运行结果分析:
生成了log文件,在KuaiEnv-v0下的A2C_with_emb的logs中
2.重现论文结果(图7)
2.1重新运行实验
2.1.1训练静态用户模型以及静态基线方法
对于KuaiEnv环境
python run_worldModel_IPS.py --env KuaiEnv-v0 --seed 0 --cuda 0 --loss "pointneg" --message "DeepFM-IPS" &
python run_linUCB.py --env KuaiEnv-v0 --num_leave_compute 4 --leave_threshold 0 --epoch 200 --seed 0 --cuda 0 --loss "pointneg" --message "UCB" &
python run_epsilongreedy.py --env KuaiEnv-v0 --num_leave_compute 4 --leave_threshold 0 --epoch 200 --seed 0 --cuda 1 --loss "pointneg" --message "epsilon-greedy" &
python run_worldModel_ensemble.py --env KuaiEnv-v0 --cuda 0 --epoch 5 --loss "pointneg" --message "pointneg" &
运行结果分析:
第一条指令: user_model and its parameters have been saved in ./saved_models/KuaiEnv-v0/DeepFM-IPS
第2-3条指令:生成了log文件
第4条指令: user_model and its parameters have been saved in ./saved_models/KuaiEnv-v0/DeepFM
对于KuaiRand环境
python run_worldModel_IPS.py --env KuaiRand-v0 --seed 0 --cuda 0 --loss "pointneg" --message "DeepFM-IPS" &
python run_linUCB.py --env KuaiRand-v0 --num_leave_compute 4 --leave_threshold 0 --epoch 200 --seed 0 --cuda 2 --loss "pointneg" --message "UCB" &
python run_epsilongreedy.py --env KuaiRand-v0 --num_leave_compute 4 --leave_threshold 0 --epoch 200 --seed 0 --cuda 3 --loss "pointneg" --message "epsilon-greedy" &
python run_worldModel_ensemble.py --env KuaiRand-v0 --cuda 0 --epoch 5 --loss "pointneg" --message "pointneg" &
运行结果分析:
与KuaiEnv一致
注意:在进入下一个阶段前,所有的指令需要全部执行完成 。
2.1.2学习RL策略
对于KuaiEnv环境
python run_Policy_SQN.py --env KuaiEnv-v0 --seed 0 --cuda 4 --num_leave_compute 1 --leave_threshold 0 --which_tracker avg --reward_handle "cat" --window_size 3 --read_message "pointneg" --message "SQN" &
python run_Policy_CRR.py --env KuaiEnv-v0 --seed 0 --cuda 5 --num_leave_compute 1 --leave_threshold 0 --which_tracker avg --reward_handle "cat" --window_size 3 --read_message "pointneg" --message "CRR" &
python run_Policy_CQL.py --env KuaiEnv-v0 --seed 0 --cuda 6 --num_leave_compute 1 --leave_threshold 0 --which_tracker avg --reward_handle "cat" --num-quantiles 20 --min-q-weight 10 --window_size 3 --read_message "pointneg" --message "CQL" &
python run_Policy_BCQ.py --env KuaiEnv-v0 --seed 0 --cuda 7 --num_leave_compute 1 --leave_threshold 0 --which_tracker avg --reward_handle "cat" --unlikely-action-threshold 0.6 --window_size 3 --read_message "pointneg" --message "BCQ" &
python run_Policy_IPS.py --env KuaiEnv-v0 --seed 0 --cuda 7 --num_leave_compute 1 --leave_threshold 0 --which_tracker avg --reward_handle "cat" --lambda_variance 0 --lambda_entropy 0 --window_size 3 --read_message "DeepFM-IPS" --message "IPS" &
python run_Policy_Main.py --env KuaiEnv-v0 --seed 0 --cuda 7 --num_leave_compute 1 --leave_threshold 0 --which_tracker avg --reward_handle "cat" --lambda_variance 0 --lambda_entropy 0 --window_size 3 --read_message "pointneg" --message "MBPO" &
python run_Policy_Main.py --env KuaiEnv-v0 --seed 0 --cuda 7 --num_leave_compute 1 --leave_threshold 0 --which_tracker avg --reward_handle "cat" --lambda_variance 0.05 --lambda_entropy 0 --window_size 3 --read_message "pointneg" --message "MOPO" &
python run_Policy_Main.py --env KuaiEnv-v0 --seed 0 --cuda 7 --num_leave_compute 1 --leave_threshold 0 --which_tracker avg --reward_handle "cat" --lambda_variance 0.05 --lambda_entropy 5 --window_size 3 --read_message "pointneg" --message "DORL" &
运行结果分析:
前5条指令生成了一下五个文件,该5个文件夹下是log日志文件
后3条指令在A2C_with_emb下生成了三个log文件
对于KuaiRand环境
python run_Policy_SQN.py --env KuaiRand-v0 --seed 0 --cuda 3 --num_leave_compute 1 --leave_threshold 0 --which_tracker avg --reward_handle "cat" --window_size 3 --read_message "pointneg" --message "SQN" &
python run_Policy_CRR.py --env KuaiRand-v0 --seed 0 --cuda 2 --num_leave_compute 1 --leave_threshold 0 --which_tracker avg --reward_handle "cat" --window_size 3 --read_message "pointneg" --message "CRR" &
python run_Policy_CQL.py --env KuaiRand-v0 --seed 0 --cuda 1 --num_leave_compute 1 --leave_threshold 0 --which_tracker avg --reward_handle "cat" --num-quantiles 20 --min-q-weight 10 --window_size 3 --read_message "pointneg" --message "CQL" &
python run_Policy_BCQ.py --env KuaiRand-v0 --seed 0 --cuda 0 --num_leave_compute 1 --leave_threshold 0 --which_tracker avg --reward_handle "cat" --unlikely-action-threshold 0.6 --window_size 3 --read_message "pointneg" --message "BCQ" &
python run_Policy_IPS.py --env KuaiRand-v0 --seed 0 --cuda 7 --num_leave_compute 1 --leave_threshold 0 --which_tracker avg --reward_handle "cat" --lambda_variance 0 --lambda_entropy 0 --window_size 3 --read_message "DeepFM-IPS" --message "IPS" &
python run_Policy_Main.py --env KuaiRand-v0 --seed 0 --cuda 7 --num_leave_compute 1 --leave_threshold 0 --which_tracker avg --reward_handle "cat" --lambda_variance 0 --lambda_entropy 0 --window_size 3 --read_message "pointneg" --message "MBPO" &
python run_Policy_Main.py --env KuaiRand-v0 --seed 0 --cuda 7 --num_leave_compute 1 --leave_threshold 0 --which_tracker avg --reward_handle "cat" --lambda_variance 0.01 --lambda_entropy 0 --window_size 3 --read_message "pointneg" --message "MOPO" &
python run_Policy_Main.py --env KuaiRand-v0 --seed 0 --cuda 7 --num_leave_compute 1 --leave_threshold 0 --which_tracker avg --reward_handle "cat" --lambda_variance 0.01 --lambda_entropy 0.05 --window_size 3 --read_message "pointneg" --message "DORL" &
运行结果分析:
与KuaiEnv一致
3.可视化代码结果
在进行可视化时,用到的代码文件为results_for_paper/visualize_main_results.ipynb。
图7需要使用results_all文件夹中两个环境下的log文件,故将原results_all文件夹重命名为old_results_all文件夹。新建results_all文件夹并将自己执行代码获得的log文件分环境放入其中。参考如下:
减少迭代次数后,可视化图7如下:
4.备注
4.1一点小说明
此博客和开头所提的链接为重现论文中的图7所进行的工作,该部分代码也在下图所示的文件中
若想复现论文中的图9,其代码在
results_all文件夹是为论文中的图7准备的,results_leave文件夹是为论文中的图9准备的。若想自己验证图9,需要先执行scrip_leave.sh中的指令。