【发布时间】:2026-01-21 19:00:01
【问题描述】:
嗨 我在哪里可以找到有关如何为该游戏实施 AI 的信息。 以前从未做过任何类型的人工智能。
寻找最佳和简单方法的建议 谢谢
【问题讨论】:
标签: c# artificial-intelligence game-engine
嗨 我在哪里可以找到有关如何为该游戏实施 AI 的信息。 以前从未做过任何类型的人工智能。
寻找最佳和简单方法的建议 谢谢
【问题讨论】:
标签: c# artificial-intelligence game-engine
就像在几乎所有棋盘游戏中一样,您必须 (a) 评估一个位置的好坏程度,并 (b) 寻找导致对您有利的位置的移动。
奥赛罗与国际象棋等其他游戏稍有不同之处在于 (a) 有点困难。你不能轻易判断哪些位置是好的,因为桌子可以很快转动。然而,如果你刚刚开始,一个很好的启发式方法是
对于 (b),您可以使用标准博弈树搜索算法,例如 Minimax 或 Alpha-Beta Pruning。有许多不同的可供选择。
Michael Buro 编写了 Logistello,这是(以前?)最强的黑白棋游戏之一,他写了几篇关于这个主题的引人入胜的论文。为了判断一个位置有多好,他将棋盘上的模式(每个等级、每个文件、所有对角线形成模式)与程序先前学习的数据库中的模式进行比较。为了搜索理想的结果,他使用了一种称为 Multi-Prob Cut 的搜索算法。
可能有用的链接:
【讨论】:
Russel/Norvig 的“人工智能 - 一种现代方法”是学习博弈论、人工智能、启发式和相关知识的良好起点。看看这里:http://aima.cs.berkeley.edu/
【讨论】:
嗯,实际上,黑白棋是游戏的一个例子,其中 Minmax/Negamax 不能很好地工作,因为您需要启发式方法来评估中间游戏状态,这在黑白棋中是很困难的。看看蒙特卡洛树搜索(MCTS)。这应该运作良好。实际上,我自己实现了一个非常简单的机制,灵感来自 MCTS,它击败了我迄今为止测试过的所有在线 AI(而 AI 在很短的时间内完成动作:2 秒)。 该机制的工作原理如下: (a) 获取当前玩家的所有可能动作 (b) 随机选择其中之一 (c) 以完全随机(有效)的动作交替进行游戏,直到游戏结束。 (d) 重视比赛结果 (e) 将此值添加到步骤 (b) 中选择的移动的总分中 (f) 将步骤 (b) 中选择的移动的访问次数加 1 (g) 如果还有时间跳到 (b)(我给了算法 2 秒) (h) 以最高平均分(总分/访问次数)移动
一些优化是非常明显的,比如立即移动,如果只有一个有效的移动,或者除了时间限制之外限制随机模拟的数量(比如每个有效移动 2000 次左右)。
再说一遍,这不是 MCTS,而只是 MCTS 的最后一部分,但它工作得很好。
您好, 响尾蛇
【讨论】:
negamax 或 minimax 算法很简单,应该可以正常工作。
要达到更高的游戏水平,您需要添加一些启发式方法,但简单的两步 negamax 实现起来很简单而且速度很快。
【讨论】:
Logistello 的源代码可在here 获得,这是十年前镇上最好的游戏。
【讨论】: