Python 健身房复古/稳定基线不';t在满足完成条件后停止迭代
我正在尝试使用健身房复古和稳定的基线来训练机器人玩超级马里奥兄弟。一切似乎都正常,只是环境似乎没有真正结束/重置。它记录的BK2文件大小超过500 kb,转换为视频大约需要20分钟,视频长度约为2小时。视频本身以大约三分钟的人工智能游戏开始,但在失去所有三条生命后,它会一直放在标题屏幕上,直到演示开始播放。我很确定这个演示会被奖励功能所接受,所以它会干扰训练。我还担心它会大大降低训练速度,因为它必须坐着完成2个小时的额外“游戏”。下面是我的场景文件的外观:Python 健身房复古/稳定基线不';t在满足完成条件后停止迭代,python,artificial-intelligence,reinforcement-learning,openai-gym,stable-baselines,Python,Artificial Intelligence,Reinforcement Learning,Openai Gym,Stable Baselines,我正在尝试使用健身房复古和稳定的基线来训练机器人玩超级马里奥兄弟。一切似乎都正常,只是环境似乎没有真正结束/重置。它记录的BK2文件大小超过500 kb,转换为视频大约需要20分钟,视频长度约为2小时。视频本身以大约三分钟的人工智能游戏开始,但在失去所有三条生命后,它会一直放在标题屏幕上,直到演示开始播放。我很确定这个演示会被奖励功能所接受,所以它会干扰训练。我还担心它会大大降低训练速度,因为它必须坐着完成2个小时的额外“游戏”。下面是我的场景文件的外观: { "done"
{
"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
}
}
}
}
我已经使用集成UI工具验证了当满足任一完成条件时,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笔记本,请访问以下链接:
这是可能的修复这不会改变它的训练方式,但至少我希望有较小的bk2和mp4文件,使他们更容易处理。如有任何建议,将不胜感激。另外,请告诉我是否有更好的地方可以问这个问题如果有人发现这个问题,我会找到一个答案。我误解了total_timesteps是什么。看起来每次跑步都有一个时间限制。我把它设定为一个人的生命需要多长时间才能结束,这样它才能有效地工作,但还是有点僵硬。如果有人发现这个问题,我会找到一个答案。我误解了total_timesteps是什么。看起来每次跑步都有一个时间限制。我已经把它设置为一次生命的时间需要多长,这样它才能有效地工作,但它仍然有点僵硬。你不需要加载和删除每一集的模型。learn()中的Timesteps对应于所有剧集学习的总Timesteps。 如果你想限制剧集长度->你可以使用gym
TimeLimit
wrapper
您的代码可以如下所示:
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个步骤。您不需要加载和删除每一集的模型。learn()中的Timesteps对应于所有剧集学习的总Timesteps。 如果你想限制剧集长度->你可以使用gym
TimeLimit
wrapper
您的代码可以如下所示:
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个步骤