1

我正在尝试使用 Gym Retro 和 Stable-Baselines 来训练机器人玩超级马里奥兄弟。一切似乎都有效,只是环境似乎并没有真正结束/重置。它录制的BK2文件大小超过500 kb,转换成视频大约需要20分钟,视频时长大约2小时。视频本身以大约三分钟的 AI 游戏开始,但在失去所有三个生命后,它会停留在标题屏幕上,直到演示开始播放。我很确定这个演示会被奖励功能所接受,所以它会干扰训练。我还担心它会大大减慢训练速度,因为它必须经历 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
      }
    }
  }
}

我已经使用集成 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 笔记本,请点击以下链接:https ://colab.research.google.com/drive/1ThxDqjeNQh3rNEXYqlXJQ6tn3W2TPK7k?usp=sharing

修复这个问题可能不会改变它的训练方式,但至少我希望有更小的 bk2 和 mp4 文件,这样它们更容易处理。任何意见,将不胜感激。也让我知道是否有更好的地方可以问这个问题

4

2 回答 2

1

如果有人发现这个问题,我有点找到答案。我误解了 total_timesteps 是什么。看起来它实际上是每次运行的时间限制。我将其设置为关于一个生命的时间用完需要多长时间,以便它有效地工作,但它仍然有点卡顿。

于 2020-12-02T15:01:53.853 回答
0

您不需要在每集加载和删除模型。learn() 中的时间步长对应于在所有情节中学习的总时间步长。如果你想限制剧集长度 -> 你可以使用gym TimeLimitwrapper。

您的代码可能如下所示:

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 步。

于 2021-05-21T10:28:54.860 回答