1

我正在尝试创建一个代理来玩“nim”游戏。 尼姆游戏图片

(数字是与每个链接关联的“id”)

我创建了一个健身房环境。

我的观察空间是:整数类型的 Box(0,2, shape=(,144))。

有 144 个可能的链接

0 = 无链接

1 = 我们连接的链接

2 = 被对手连接的链接

我的动作空间是: Discrete(144) 我们选择了要连接的链接的编号。

一开始所有144个链接都可以连接随着游戏的进行,链接已连接,我们无法在已连接的链接上玩。

我的奖励是:

  • +100 如果我们连接一个链接
  • -1000 如果对手关闭一个盒子
  • +1000 如果我们关闭一个盒子
  • -10000 如果对手赢得比赛
  • +10000 如果我们赢了比赛
  • -100000000 如果我们采取不公平的行动

这是我用来训练代理的代码:

env = DotsAndBoxesEnv()
state = env.reset()
model = A2C('MlpPolicy', env, verbose=1, tensorboard_log=logPath)
model.learn(total_timesteps=1000000)

问题是代理在我训练时只使用非法动作。更准确地说,他一遍又一遍地玩同一个号码。

我怎样才能提高他的训练?

4

1 回答 1

0

我在自定义多人游戏环境中遇到了类似的问题。原因似乎是我的经纪人正在训练的对手是一个 RNG,基本上,它只是选择随机的合法动作。我的猜测是,来自对手的随机移动提供的训练信息太少,并且 nnet 不能仅仅弄清楚如何移动。

为我解决问题的是我决定让对手使用 MiniMax 算法,因此它的行为背后至少有一些逻辑。这似乎解决了仅 10 分钟训练后 nnet 选择非法动作的问题。

于 2022-02-11T15:16:16.663 回答