纸牌游戏的 DQN 输入表示

人工智能 强化学习 dqn
2021-11-12 18:32:06

为了了解 DP 和 RL,我选择开始一个业余项目,我将训练 AI 玩“简单”的纸牌游戏。我将使用带有重放内存的 DQN 来执行此操作。
问题是,我无法理解如何表示神经网络的输入。

关于游戏

这是一个相当简单的2人游戏。一副牌有 40 张独特的卡片(4 种卡片,每种卡片 10 张编号的卡片)。
每个玩家得到 4 张牌,每回合玩家必须将一张牌放在桌子上。
如果玩家放了一张牌,并且桌上已经有一张相同数字的牌,则该玩家赢得两张牌。
例如,如果玩家打出卡片 2,而桌上有卡片 2、3、4、5,那么玩家将赢得所有这些卡片(序列)。
牌不会回到手牌或牌堆,它们只是像分数一样保存。
当玩家手中有 0 张牌时,每张牌再发 4 张牌,直到牌组剩下 0 张牌,然后我们根据吃/赢的牌数来决定谁赢。

问题

作为输入,我将使用以下内容:

  • AI手中的现有卡片(40个一键编码功能?)
  • 桌面上的当前卡片(40 个单热编码功能?)
  • 扑克牌的历史(40 个单热编码功能?)

这将在每个州提供 120 列/功能。
我想知道这对 NN 来说是否太多了,或者我的输入表示对 NN 是否有害?
特征应该表示为 (120,) 向量还是 3x40 矩阵?

我还想知道将桌子上的当前卡片表示为仅 10 个单热编码特征是否是个好主意,因为卡片的类型无关紧要,并且相同的数字不能在表格中存在 2 次?

先感谢您。

1个回答

一个足够复杂的网络可以处理 120 个输入。处理高复杂性是 NN 的优势之一。

使用 (120,) 向量或 (3,40) 矩阵是相同的,它们仍然是 120 个输入。您的二进制编码应该可以工作。另一种选择是单个 (40,) 向量,其中 0 表示“仍在牌组中”,1 表示“在手”,2 表示“在桌子上”,3 表示“已经玩过”。

如果牌的类型无关紧要,您实际上可以有一个 (3,10) 矩阵,其中包含牌的计数器(手上的 1 个,桌上的 1 个,已经玩过的 2 个)。您可以尝试不同的方法,看看哪种方法最有效。