我目前正在为Othello开发一个简单的AI,使用极大极小值和阿尔法-贝塔修剪。
我的问题与董事会的评估职能有关。
我目前希望通过查看以下内容来评估它:
-
光盘计数(奇偶校验)
-
的合法移动次数
-
特定位置的重要性
假设根节点是初始游戏状态。第一个动作是AI的动作,而第二个动作是对手的动作。
0
/ AI's Action
1 1
/ Opponent's action
2 2 2
在节点级别1,我是否评估我的AI芯片的盘数,以及在完成动作后的某个时间点它可以进行的合法移动次数?
在节点级别2,我是否评估对手筹码的盘数以及在对手完成动作后的某个时间点可以进行的合法移动次数?
意味着AI移动->对方移动===>在这个时候,我评估对手的光盘数量和对手可以制作的合法光盘数量。
生成游戏树时,不应该评估节点,除非它是叶节点。也就是说,你会生成一个树,直到达到N级(对应于一个在棋盘当前状态之前移动了N次的棋盘),除非你到达了一个对应于游戏结束情况的节点只有在这些节点中,您才应该使用评估函数来评估棋盘游戏的状态这就是minimax算法的意义所在。我知道的唯一一种情况是,在每次玩家移动后都要评估一个节点,那就是迭代深化算法,而你似乎没有使用它。
评估功能负责快速评估特定职位的"分数"——换句话说,哪一方获胜以及获胜幅度。它也被称为静态评估函数,因为它只关注特定的板配置。所以,是的,当你达到N级时,你可以计算计算机和用户可能的移动,并减去它们。例如,如果结果是肯定的,则意味着计算机具有优势,如果结果为0,则表示平局,而结果为否定,则表示用户在移动性方面处于劣势。对一个代表游戏板配置结束的节点进行评分是微不足道的,如果你赢了,分配一个最大值,如果你输了,分配最小值。
机动性是大多数棋盘游戏(在这些游戏中很有价值)的评估功能中需要考虑的最重要的功能之一。为了评估它,你可以计算每个玩家在静态棋盘配置下的可能移动,无论下一个轮到谁。即使一名球员最近做出了一次移动,当同一名球员做出最后一次移动时,你也会给树的同一级别N的木板打分(因此,在相同的条件下给它们打分),并挑选得分最高的木板。
你在评估中考虑的功能非常好。通常,你想在非常有价值的游戏中考虑材料和机动性(你就是这样)(尽管,我不知道材料在《奥赛罗》中是否总是一个优势,你应该更清楚,因为这是你正在进行的游戏),以获得胜利,所以我想你走在了正确的道路上。
编辑:小心!在叶节点中,您唯一想做的就是为板配置指定一个特定的分数。它在其父节点中,返回该分数并与其他分数(对应于其他子节点)进行比较。为了选择哪一个是特定玩家可用的最佳移动,请执行以下操作:如果父节点对应于对手的移动,则选择(最小)值最小的一个。如果轮到计算机移动,请选择(最大)值最高的分数,使其代表该玩家的最佳移动。
结束游戏评估功能
如果你的搜索达到了全板,那么评估应该简单地基于光盘数量来确定谁赢了。
游戏中期评估功能
法定招式的数量在开局和中局都很有用,因为对你来说,大量的招式(对对手来说,数量较低)通常表明你有一个好的位置,有很多稳定的圆盘,对手无法攻击,而对手的位置不好,他们可能会用尽招式,被迫打出糟糕的招式(例如让你在角落里打球)。
出于这个目的,在计算招式时轮到谁并不重要,所以我认为你走在了正确的道路上。
(请注意,在游戏的早期阶段,拥有较少光盘的人通常是一个优势,因为这通常意味着你的对手几乎没有安全的移动。)
随机评价函数
很久以前,我听说对奥赛罗评价函数使用随机数也是一个非常合理的选择(令我惊讶)。
逻辑是,拥有最多选择的玩家将能够引导游戏获得最高的随机数,因此这种方法再次意味着人工智能将青睐给它很多选择的动作,而他的对手很少。