本仓库为捕碳大作战游戏, 提供了基于Pytorch版本的PPO算法的基线方案供选手参考
config
main_config.py
: 参数配置
train.py
: 捕碳大作战游戏的训练脚本主入口carbon_game_runner.py
: 用于收集数据并进行PPO训练文件algorithms
model.py
: 定义 actor 和 critic 网络架构test_model.py
: actor 和 critic 网络架构的测试文件base_policy.py
: 策略文件基础类,含义 actor 和 critic 网络,用于计算动作和值函数,以作训练和评估使用learner_policy.py
: 训练策略文件,PPO算法实现learner_partner_policy.py
: 用于self-play的对局机器人,加载最优模型与训练策略对局 (selfplay=True
时有效)eval_policy.py
: 评估策略文件,可以配合test.ipynb
文件,加载模型文件,并在ipython中实时观看对局情况
envs
:carbon_env.py
: Carbon游戏的包装类obs_parser.py
: 将原始状态数据(json类型)转换成状态特征carbon_trainer_env.py
: 训练使用的环境,内部包装了carbon_env.py
和obs_parser.py
,计算状态特征和奖励,通过reset
接口和step
接口返回test_carbon_trainer_env.py
: carbon_trainer_env测试文件
utils
:parallel_env.py
: 多进程环境封装,可配合carbon_trainer_env.py
使用replay_buffer.py
: 训练使用的replay buffer类,训练数据由此获取trajectory_buffer.py
: 游戏进行过程中的临时存储区,用于收集每个agent的轨迹数据utils.py
: 常用的工具函数
static_resources
: 静态图片相关文件model.pth
: 预训练模型
我们使用PPO算法来控制每个agent(包括转化中心、种树员和捕碳员),所有的agent共享同一个模型参数。
每个agent的目标是尽可能获取最大的金额奖励(在carbon_trainer_env.py
文件中计算),采用端到端的训练来生成该基线模型,供选手使用。
创建并激活一个虚拟的Python环境
conda create -n carbon python==3.9
conda activate carbon (OSx/Linux)
activate carbon (Windows)
安装依赖
pip install -r requirements.txt
在 config/main_config.py
文件中修改超参数后并运行以下命令:
python train.py
命令行上会输出相关的训练信息,也可以通过tensorboard查看
在 evaluate.py 中修改你的模型加载路径后运行脚本来测试你的模型效果。
python evaluate.py
需要注意的是,此测试脚本使用了一个内置的 random agent 作为对手。如果你需要对比其他智能体的话则需要修改 “random” 为对应的智能体方法。当你提交模型和方案到平台前,也可以使用此脚本来测试你的代码中是否无误。
以下图片展示了训练过程中PPO算法的学习效果的部分截图。目前,我们仅选取了一个随机智能体作为对手。为了在赛事中得到较好的名次,选手应该训练出一个更为鲁棒的模型(如设计更好的状态特征、奖励函数、添加部分规则约束、改进算法等)。
当训练过程中,或训练完成后,可以打开ipython notebook查看。
jupyter lab
jupyter lab成功运行之后,会自动打开浏览器页面,此时选择test.ipynb
,并选择carbon
(或ipykernel
) kernel。
依次运行两个cell,可以看到,模型策略 vs 内置random机器人的对局的动画情况。
可以修改你的模型文件位置,观看自己模型的情况。
目前选手们只能提交一个文件到平台上,因此选手需要将需要用到的函数和模型都放置到同一个文件中。为了在文件中加载模型,选手需要先将模型编码成字节串然后放到文件中,在需要加载模型的地方将字节串解码。
选手可以参考 encode_model.py
查看如何编码模型,参考 submission.py
文件查看提交范例和加载模型,同时还提供了submission_random_action.py
作为随机动作的可提交文件供选手参考。
需要注意的是,评分系统只会调用提交文件的最后一个函数方法。因此选手需要将智能体给出动作的函数方法放在提交文件的最后,此方法接收 observation 和 configuration作为输入,给出每艘飞船和基地的动作,具体选手可查看 submission.py
或 submission_random_action.py
文件。
-
上传文件的大小?
建议小于50M。若有大文件需求,可以联系官方人员协助解决
-
每天提交的次数有无限制?
每天最多可提交的总次数为5次
-
给出动作有无时间限制?
选手给出动作指令的时间为1s,多余1s的时间会统计为超时时间,当超时时间总和大于60s的时候,会被直接淘汰。
-
提交的时候是否有GPU?
提交的时候,仅支持CPU的环境(可以线下GPU训练,提交的时候转成CPU)。