-1

我目前正在为纸牌游戏开发 AI Wizard开发 AI 。巫师是一个花样游戏,每个玩家在实际游戏开始之前说明他认为自己会花多少花样。

在阅读了一些论文和本书的某些部分之后在阅读了《人工智能:一种现代方法,我决定首先设计我的算法,用于开放纸牌游戏,以便每个玩家都有完整的信息。所以我刚刚开始并使用 UCB 选择策略实现了蒙特卡洛树搜索算法。我已经在 java 中实现了所有东西,它似乎运行得很好,但是我的机器人还没有发挥最佳效果。尤其是预测你得到的技巧似乎是一项艰巨的任务,为此我使用了与演奏相同的 MCTS。

所以基本上我的算法扩展了游戏的当前状态(例如 2 个玩家出价)创建一个新节点(例如 3 个玩家出价),然后随机播放直到游戏结束。然后通过节点评估和备份分数。

我认为改进算法的下一步是在树搜索中添加一些启发式方法,以便从一开始就忽略最有可能导致损失的分支。

我的问题是:你认为这是一个好方法吗?还有哪些其他方法很有希望,或者您还有其他提示吗?

4

1 回答 1

3

我不知道这个游戏,但我可以给你一般的建议。蒙特卡洛方法是一个很好的解决方案,如果

  • 搜索空间非常巨大(即围棋棋盘游戏)
  • 你不知道如何建立一个强大的启发式

在这些条件下,MCTS 是您能做的最好的。

但是,如果您能够构建一个强大的启发式函数,那么您必须直接使用“Min-Max/Alpha-Beta Pruning”算法(或类似算法)。一般来说,通过这些算法,您可以获得更强大的 AI。

这就是原因,因为在 GO 中我们使用 MCTS,但在 Chess 中我们仍然使用 Min-Max。

但算法只是人工智能的 10%。游戏 AI 编程中最困难(也是最漂亮)的部分是利用游戏机制来修剪搜索空间并构建最强的启发式 :)

例如,您可以从一个著名的纸牌游戏开始了解 AI:扑克 (http://webdocs.cs.ualberta.ca/~games/poker/)。然后,您可以将这些技术扩展到您的游戏。

于 2012-09-02T08:58:14.327 回答