我正在尝试使用Gym Retro和稳定基线来训练一个机器人来玩超级马里奥兄弟。一切似乎都可以工作,除了它看起来环境并没有在它应该结束/重置的时候真正结束/重置。它录制的BK2文件大小超过500kb,大约需要20分钟才能转换成视频,视频大约有2小时长。视频本身开始大约三分钟的人工智能游戏,但在它失去了所有三个生命后,它坐在标题屏幕上,直到演示开始播放。我很确定这个演示会被奖励函数选中,所以它会干扰训练。我还担心它会大大减慢训练速度,因为它必须坐2个小时的额外“游戏”。下面是我的场景文件:
{
"done": {
"condition": "any",
"variables": {
"lives": {
"op": "equal",
"reference": -1
},
"time": {
"op": "equal",
"reference": 0
}
}
},
"reward": {
"variables": {
"xscrollHi": {
"reward": 10
},
"playerx": {
"reward": 0.1
},
"coins": {
"reward": 10
}
}
}
}我已经使用Integration UI工具验证了,当满足任一Done条件时,done和Did-End变量将切换为yes。以防万一,下面是相关的Python代码:
env = DummyVecEnv([lambda: retro.make("SuperMarioBros-Nes", state="Level1-1.state", scenario="training", record="/gdrive/MyDrive/530_project")])
#model = PPO2(CnnPolicy, env, verbose=1)
for i in range(24):
model = PPO2.load(filePath + "/" + fileName)
model.set_env(env)
model.learn(total_timesteps=time_steps, log_interval=1000, reset_num_timesteps=False)
model.save(filePath + "/" + fileName)
print("done with iteration ", i)
del model 如果你想查看整个Python笔记本,这里有一个链接:https://colab.research.google.com/drive/1ThxDqjeNQh3rNEXYqlXJQ6tn3W2TPK7k?usp=sharing
修复这个问题可能不会改变它的训练方式,但至少我希望有更小的bk2和mp4文件,这样它们就更容易处理。任何建议都将不胜感激。如果有更好的地方问这个问题,也请告诉我
发布于 2020-12-02 23:01:54
如果任何人在这个问题上发现了这个问题,我差不多找到了答案。我误解了total_timesteps是什么。看起来它实际上是每次运行的时间限制。我将其设置为生命中的时间耗尽所需的时间,这样它就可以有效地工作,但它仍然有点卡壳。
发布于 2021-05-21 18:28:55
你不需要加载和删除每一集的模型。learn()中的时间步长与学习所有剧集的总时间步长相对应。如果你想限制剧集长度,你可以使用健身房TimeLimit ->。
您的代码可能如下所示:
from gym.wrappers.time_limit import TimeLimit
time_steps = 1000000
episode_length = 500
env = DummyVecEnv([lambda: TimeLimit('your_mario_env_config...',
max_episode_steps=episode_length)])
model = PPO2(CnnPolicy, env, verbose=1)
model.learn(total_timesteps=time_steps, log_interval=1000, reset_num_timesteps=False)
model.save(filePath + "/" + fileName)我们在这里限制了每一集的500步,而整个学习过程将有大约1000000步。
https://stackoverflow.com/questions/65062331
复制相似问题