我正在为棋盘游戏编写 AI,以前我只会创建一个价值最大化状态机并一次调整一个因素。
然而,这方面的问题越来越明显。我的上一个 AI 没有展望未来,损害了它的长期机会,并且手动调整权重被证明是一件苦差事。
我研究了极小极大算法,但是对于不完美的信息游戏和随机机会元素,我不太相信它会有效。
我也研究过传统的神经网络,但评估棋盘状态很棘手,而且游戏也不能很好地分解棋子。
我正在为其编写 AI 的游戏是 Ticket To Ride,但对于任何具有类似机制的棋盘游戏,我将不胜感激。
我正在为棋盘游戏编写 AI,以前我只会创建一个价值最大化状态机并一次调整一个因素。
然而,这方面的问题越来越明显。我的上一个 AI 没有展望未来,损害了它的长期机会,并且手动调整权重被证明是一件苦差事。
我研究了极小极大算法,但是对于不完美的信息游戏和随机机会元素,我不太相信它会有效。
我也研究过传统的神经网络,但评估棋盘状态很棘手,而且游戏也不能很好地分解棋子。
我正在为其编写 AI 的游戏是 Ticket To Ride,但对于任何具有类似机制的棋盘游戏,我将不胜感激。
许多成功的游戏引擎使用某种形式的搜索来展望未来并计划下一步行动。即使在随机环境中,通过构建分配概率的树,或者通过在规划期间模拟随机性并依靠大量样本来获得合理的价值估计,这也是可能的。
有许多可能的方法。但是,由于 Ticket to Ride 是一款相对简单的游戏,您可以自动快速玩到最后(每秒 1000 次),因此您可以将蒙特卡洛树搜索(MCTS) 作为一种游戏机制经纪人向前看,并根据当前的赔率调整他们的比赛。
蒙特卡洛树搜索的基础知识:
反过来,代理在其当前状态本地建立一个评估树 - 树的每个节点都是一个游戏状态,并增加了来自 MCTS 的统计信息(选择节点的频率,代理最终从该节点获胜的次数) 并且每个链接都是玩家做出的选择。这是慢慢建立起来的,通常每个完整的模拟游戏只添加一个节点。
对于树“内部”的前瞻搜索,代理根据它们的相对承诺探索选项,根据当时对价值的最佳估计选择要模拟的动作。它需要探索替代方案以确保它不会遗漏任何东西,并且这样做有一些变体。在树内进行动作选择的一种成功方法是应用于树(或简称 UCT)的上置信界限。
当游戏到达树的叶节点时,树可能会稍微扩展,然后代理会模拟游戏的游戏到最后或稳健的评估点。这个后来的游戏可能完全是随机的 - 或者可能仍然由一些启发式概率引导 - 并且被称为推出。这里重要的是快速播放以获取样本,以粗略评估树的叶子处的位置。
推出的评估结果被反馈到树中,它建立了最有希望的游戏变化的抽样统计数据。
在整个算法(局部树搜索、扩展树、推出和更新)一定次数的重复之后,代理从树中选择最有希望的下一步。在这一点上,它可能会丢弃整棵树——在一个有很多随机性的游戏中,这可能是你现在要做的,因为你之前认为只是概率的事情将成为历史事实,而且很有可能重新-从下一个开始位置运行树构建会更准确。
有几种可能的变体,包括与 AlphaZero 中使用的神经网络的组合。
基本原则是从许多选择中进行抽样,根据这些选择的统计数据,随着时间的推移关注每个玩家看起来“最好”的选择。
由于 Ticket To Ride 是一款纸牌游戏,可以从看不见的牌组中抽牌,并且使用实际的牌组进行模拟和推出会被视为作弊,因此您需要对推出期间使用的剩余未知牌进行逼真的洗牌. 如果没有现实的部分,它可能仍然可以很好地工作,并且为了速度,只需假设随机无限的一副牌(因为在每次想象的推出时重新洗牌会很昂贵)。