如何使用 DQN 处理一个不完美但完整的信息博弈?

人工智能 强化学习 游戏-ai q学习 不完全信息
2021-10-27 05:30:28

我目前在对抗玩 Schieber Jass 游戏的随机机器人时遇到了麻烦。这是一个不完美的纸牌信息游戏。(瑞士著名https://www.schieber.ch/

我使用的环境在 Github https://github.com/murthy10/pyschieber

为了简要了解 Schieber Jass,我将描述游戏的主要特点。Schieber Jass 由四名球员组成,组建两支球队。开始时每个玩家随机获得九张牌(共有 36 张牌)。现在有九轮,每个玩家每轮必须选择一张牌。根据游戏规则,“最高牌”获胜,球队获得积分。因此,目标是获得比你的对手球队更多的积分。

还有更多规则,但我认为您可以想象游戏应该如何大致工作。

现在我正在尝试在游戏中应用 DQN 方法。

我的尝试:

  • 我让两个独立的强化玩家对抗两个随机玩家
  • 我将输入状态设计为一个向量(一个热编码),每个玩家都有 36 个“位”,并为您在游戏中可以玩的每张牌重复此九次。
  • 输出是每个可能的卡的 36 个“位”向量。
  • 如果网络的贪心输出表明一个无效动作,我会采取允许动作中概率最高的动作
  • 获胜奖励为+1,失败为-1,无效操作为-0.1,不会导致终止状态的操作为0

我的问题:

  • 使用 LSTM 并减少输入状态会有所帮助吗?
  • 如何处理无效动作?
  • 你有什么好的改进想法吗?(如神经虚拟自我游戏或类似的东西)
  • 或者这整个方法绝对是胡说八道?
1个回答

使用 LSTM 并减少输入状态会有所帮助吗?

我敢打赌,不。LSTM 更复杂,更难学习,而输入为 4 * 9 * 36 位仍然相当有限。

但是,您可能希望以某种方式聚合信息,例如,添加额外的位来告知已经打出的牌(无论何时)。此信息是多余的,但通过提供它,您可以为网络节省不少学习时间。

同时,您可能想要使用对称性(除了王牌之外的所有颜色都是等价的,因此权重应该相同)。

如何处理无效动作?

这很简单:没有无效的动作。该网络提供了 36 个输出,表示它想玩给定的牌。您只需拿一张具有最大输出值的有效卡片。您不要试图让网络了解哪些动作是有效的,因为这既不需要也没有帮助。

你有什么好的改进想法吗?(如神经虚拟自我游戏或类似的东西)

我说不出来。但它现在应该很重要。先让你的网络清楚地击败随机玩家,然后你可以寻找更多。或者从 Self-Play 开始,因为您可能想要两者进行比较。

或者这整个方法绝对是胡说八道?

我不这么认为,但是……(见下文)

我将输入状态设计为一个向量(一个热编码),每个玩家都有 36 个“位”

这听起来不太好。每个玩家都有 36 张牌中的 9 张,因此应该是编码。一个玩家不知道其他玩家的牌。

获胜奖励为+1,失败为-1,

在我知道的大多数纸牌游戏中,重要的是你赢了多少(不像围棋)。即使没关系,在早期学习阶段使用这些信息也是有用的。

-0.1 无效动作和

删除无效操作。只需将网络产生的任何内容转换为有效动作,不添加任何惩罚(如上所述)。

... 0 表示不会导致终止状态的操作

除了最后一个动作之外的所有动作都会导致非终止状态。您可以使用一些时间差异学习或使用游戏具有少量固定移动数并奖励/惩罚整个游戏中所有动作的事实。