othello游戏简单实用AI的想法(又名:reversi)

时间:2011-03-26 16:44:55

标签: c# artificial-intelligence game-engine

您好 我在哪里可以找到有关如何为此游戏实施AI的一些信息。 从来没有做过任何类型的人工智能。

寻找最佳和简单方法的建议 感谢

5 个答案:

答案 0 :(得分:10)

正如在几乎所有的棋盘游戏中一样,你必须(a)评估一个位置有多好,以及(b)寻找能够带来对你有利的位置的动作。

奥赛罗与国际象棋等其他比赛略有不同,因为(a)有点困难。你不能轻易分辨哪些位置是好的,因为表格可以很快转变。但是,如果你刚刚开始,一个好的启发式是

  • 高度重视角落
  • 高度惩罚角落旁边的田地
  • 将其他边框图块的值设置为高于剩余图块
  • 尽量减少对手的行动次数

对于(b),您可以使用标准游戏树搜索算法,例如MinimaxAlpha-Beta Pruning。有许多不同的可供选择。

编写Logistello的迈克尔·伯罗(Michael Buro)撰写了几篇关于这一主题的精彩文章,后者是(前身为?)最强大的othello演奏节目之一。为了说明一个位置有多好,他将板上的模式(每个等级,每个文件,所有对角线形成模式)与之前由程序学习的数据库中的模式进行比较。为了搜索理想的结果,他使用了一种名为Multi-Prob Cut的搜索算法。

可能有用的链接:

答案 1 :(得分:2)

Russel / Norvig"人工智能 - 现代方法"是了解博弈论,ai,启发式和相关内容的良好起点。看看这里:http://aima.cs.berkeley.edu/

答案 2 :(得分:2)

嗯,实际上,奥赛罗是一个游戏的例子,其中Minmax / Negamax不能很好地运作,因为你需要启发式来评估奥赛罗很难的中间游戏状态。看看蒙特卡罗树搜索(MCTS)。这应该很好。实际上,我实现了一个非常简单的机制,受到MCTS的启发,它击败了我迄今为止测试的所有在线AI(当AI在很短的时间内移动:2秒)。 该机制的工作原理如下: (a)获得当前玩家的所有可能动作 (b)随意选择其中一个 (c)以完全随机(有效)的动作交替玩游戏直到游戏结束。 (d)重视游戏结果 (e)将此值添加到步骤(b)中选择的移动的总核心 (f)将步骤(b)所选择的访问次数加1 (g)如果还剩下时间,跳到(b)(我给了算法2秒) (h)以最高平均分数(总分数/访问次数)进行移动

一些优化是非常明显的,比如立即移动,如果只有一个有效或限制随机模拟的数量以及时间限制(如每次有效移动约2000)。

同样,这不是MCTS,而只是MCTS的最后一部分,但效果很好。

问候, rattlehead

答案 3 :(得分:1)

negamax或minimax算法很简单,应该可以正常工作。

为了获得更高的游戏性,你需要添加一些启发式游戏,但是简单的两个移动negamax实现起来很快并且很快。

答案 4 :(得分:0)

Logistello的源代码可用here,这是十年前镇上最好的游戏。