考虑一个单人纸牌游戏,它与“不专业”(不在赌场玩,请参阅第 2 点)有许多共同特征,即:
- 您正在与有固定规则的庄家对战。
- 你有一副牌,完全打完。
- 等等。我的问题不需要对游戏的准确描述,因此我保留这些简单的要点。
尤其是第二点具有重要意义。看到的牌越多,预测下一张牌的几率就越高 - 最后一张牌的概率高达 100%。显然,该规则允许精确利用所述游戏。
就动作和状态空间而言:动作空间是离散的,玩家只有固定数量的动作(本例为五个——由于缺少对规则的解释,我不再深入这个)。更重要的是状态空间。就我而言,我决定将其结构如下:
一个 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Ĵ |
---|---|---|---|---|---|---|---|---|---|---|
4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 14 | 2 |
我的状态空间的第一部分描述了留在堆栈中的每张牌的价值,因此在第一次移动时,所有 52 张牌仍然在牌堆中。仅这一部分就允许大约 700 万种可能的变化。
状态空间的第二部分描述了游戏中的各种套牌(同样没有规则,很难详细解释)。基本上是从 0 到 21 的五个整数,具体取决于之前的操作。另一个 200k 不同的情况。
第三部分是两个细节——一些已知的卡片和信息,虽然它们只占很小的因素,但仍然给我的状态空间带来了相当大的变化。
因此,一个完整的状态空间可能看起来像这样:示例一个是 start setup: 444444444142;00000;00
。游戏中的另一个例子:42431443081;1704520;013
. 为了便于阅读,添加了分号。
所以现在出现了一个问题:根据我的理解,我的状态空间肯定是有限且离散的,但太大而无法通过 SARSA、Q-learning、Monte Carlo 或类似方法来解决。我如何在不丢失大量可预测性的情况下处理具有大状态空间的项目(我可能会担心使用 DQN、DDPQ 或 TD3)?特别是由于只使用了一个套牌——而且它在这个游戏中被玩过了——似乎更精确的解决方案是可能的。