我将井字游戏建模为 RL 问题 - 带有环境和代理。
起初,我制作了一个“精确”代理——使用 SARSA 算法,我保存了每个独特的状态,并在给定该状态的情况下选择最佳(可用)动作。我让 2 个代理通过相互竞争来学习。
特工们学得很快——他们只用了 3 万场比赛就达到了平局。并且代理清楚地知道如何玩游戏。
然后我尝试使用函数逼近而不是保存确切的状态。我的功能是 FF-NN。我的第一个(工作)架构是 9(输入)x 36 x 36 x 9(动作)。我使用了半梯度 1-step SARSA。代理需要更长的时间来学习。在大约 50k 场比赛之后,他们仍然不如确切的代理人好。然后我在 Exact 和 NN 代理之间进行了对峙——Exact 代理从 10k 中赢得了 1721 场比赛,其余的打成平手。这还不错。
然后我尝试将隐藏层中的单元数量减少到 12 个,但没有得到好的结果(即使在总共玩了 500k+ 游戏之后,调整了一些东西)。我也尝试过使用卷积架构,再次 - 没有得到任何结果。
我想知道是否有一些最佳函数逼近解决方案可以获得与精确代理一样好的结果。TicTacToe 对我来说似乎不是一个难题。
从概念上讲,我认为解决它所涉及的复杂性应该少得多,然后可以用 9x36x36x9 网络表示。我错了吗,这只是简单的错觉?还是有更好的方法?也许以不同的方式建模问题?