庙算·陆战平台面向AI算法研发,新增训练环境“环境复制”和“任意态势载入”功能
发布时间: 2021-03-09
应广大AI开发者们提出的需求,环境新增“任意态势载入”和“环境复制”功能。
“任意态势载入”功能给开发者提供了复现某个盘面的能力。该功能可使AI开发者以自己关注的盘面开始推演,在代码中打断点进行代码debug,更准确的掌握自己的AI在做某一时刻决策时的逻辑流。
“环境复制”功能使开发者可以在推演过程中的任意时刻复制一份完全相同的当前环境,包括随机数生成器的内部状态。通过复制环境,开发者可以使用MCTS(蒙特卡洛搜索树)的相关技术去探索在某一时刻下,不同的动作选择可能带来的不同结果。为开发者调试时提供平行的决策过程,从而可以达到决策最优化。
陆战兵棋AI开发包,训练引擎下载地址:
访问:http://wargame.ia.ac.cn/aiinfo
点击“庙算·智胜 社区开发版(LINUX)”下方的“下载”按钮下载
下载并解压缩后,使用解压后的新工程目录,或将解压后目录中的landwar/core文件夹拷贝覆盖当前所使用AI工程的相同文件夹
“环境复制”功能以环境接口TrainEnv::duplicate的形式出现,开发者通过“TrainEnv”实例调用接口。环境复制功能主要用于训练AI,使用MCTS(蒙特卡洛树搜索)算法时需要对环境进行复制的需求。复制出来的环境实例将和主环境一模一样。如果两个环境输入同样的动作到推演结束,应当得到相同的推演结果(分数,盘面)。此功能可以在任何步数使用。
TrainEnv::duplicate
功能:复制一个一摸一样的环境
参数说明:无
返回值:TrainEnv环境实例
# 略。。。 while not done: actions = red1.step(state[RED]) actions += blue1.step(state[BLUE]) state, done = env1.step(actions) if state[-1]['time']['cur_step'] == 200: # 当200步时,复制一份当前环境 env2 = env1.duplicate() if state[-1]['time']['cur_step'] > 200: state2, done = env2.step(actions) # env2得到和env1一样的动作 env1.save_replay(game_id) env2.save_replay(game_id+'_env2') env1.reset() env2.reset() # 略。。。
此功能的作用是让环境可以载入任意态势并从此态势开始推演。
开发AI时,可以复现复盘中的某一时刻,用来训练AI在特定条件下的决策。
合法的载入态势格式为某个复盘文件中的某一帧的绿方态势。
此功能有两个相关接口:TrainEnv::save_snapshot和TrainEnv::load_snapshot。两个接口可搭配使用。
TrainEnv::save_snapshot
功能:保存一个在当前步数的环境快照,快照可用于复现环境,从此快照开始推演。保存的快照是json文件格式
参数说明:
参数名 | 数据类型 | 说明 |
filename | string | 保存快照的地址和文件名 |
返回值:无
TrainEnv::load_snapshot
功能:根据提供的快照,将一个环境实例还原成和快照一致的状态。
参数说明:
参数名 | 数据类型 | 说明 |
source | dict | source是某一时刻的完整态势里的绿方态势,或通过Train:save_snapshot保存下来的快照json文件中读取出来的字典 |
返回值:无
# save_snapshot while not done: actions = red1.step(state[RED]) actions += blue1.step(state[BLUE]) state, done = env1.step(actions) if state[-1]['time']['cur_step'] == 200: env1.save_snapshot('output/snapshot.json')
# load_snapshot env1 = TrainEnv() with open('output/snapshot.json', "r", encoding="utf-8") as file: source = json.load(file) env1.load_snapshot(source) while not done: actions = red1.step(state[RED]) actions += blue1.step(state[BLUE]) state, done = env1.step(actions)