我目前正在使用min-max和Alpha-beta修剪为othello开发一个简单的AI。
我的问题与董事会状态的评估功能有关。
我目前正在考虑通过计算来评估它
1)光盘数
2)没有合法举措
3)特定职位的重要性
因此,假设根节点是初始游戏状态。第一个动作是AI的动作,而第二个动作是对手的动作。
0
/ \ AI's Action
1 1
/ \ \ Opponent's action
2 2 2
在节点级别1,我是否会评估我的AI芯片的光盘数量以及它在完成某个操作后可以进行的法律移动次数?
在节点级别2,我是否评估对手筹码的盘数以及在对手完成某个动作后可以进行的合法动作次数? 意思是AI移动 - >对手移动==>在这个时间点,我评估对手的盘数和对手可以合法的数量。
只是想检查我是否在正确的道路上,因为计算刚刚完成某项行动的玩家的合法行动次数感觉很奇怪。
谢谢和问候, 纳特
答案 0 :(得分:7)
生成游戏树时,除非是节点,否则不应评估节点。也就是说,你生成一个树,直到等级N (对应于在棋盘的当前状态之前进行N次移动的棋盘),除非你到达了一个对应于游戏结束的节点情况。 仅在那些节点中,您应该使用评估函数评估棋盘游戏的状态。 这就是minimax算法的意义。我知道在每个玩家移动后评估节点的唯一情况是iterative deepening算法,这似乎是你没有使用的。
评估功能负责快速评估特定位置的“得分” - 换句话说,哪一方获胜以及获胜多少。它也称为静态评估功能,因为它仅查看特定的板配置。所以是的,当你达到N级时,你可以计算出计算机和用户可能的移动并减去它们。例如,如果结果是肯定的,则意味着计算机具有优势,如果它是0则意味着平局并且它是负的,它将代表用户在移动性方面的不利情况。对表示游戏板配置结束的节点进行评分是微不足道的,如果您赢了则分配最大值,如果丢失则分配最小值。
移动性是大多数棋盘游戏评估功能中最重要的功能之一(有价值的棋盘游戏)。为了评估它,你可以计算每个玩家在静态板配置下的可能移动,无论接下来是谁。即使一个玩家最近采取了行动,当同一个玩家进行最后一次移动(因此,在相同的条件下对它们进行评分)并选择那些具有最好成绩。
您在评估中考虑的功能非常好。通常,你想在他们非常有价值的游戏中考虑材料和移动性(你是)(但是,我不知道材料在奥赛罗是否总是优势,你应该更好地了解它,因为它是你的游戏正在努力争取胜利的局面,所以我猜你正走在正确的道路上。
编辑:小心!在叶节点中,您唯一要做的就是为电路板配置分配特定分数。它位于父节点中,返回该分数并与其他分数(与其他子代相对应)进行比较。为了选择哪个是特定玩家可用的最佳移动,请执行以下操作:如果父节点对应对手的移动,则选择(min)值最小的一个即可。如果要移动计算机,请选择具有最高(最大)值的分数,以便它代表此播放器的最佳移动。
答案 1 :(得分:5)
如果你的搜索达到一个完整的电路板,那么评估应该只根据光盘数来确定谁赢了。
合法移动的数量在开场和中期是有用的,因为你的大量动作(以及对手的低位数)通常表明你有一个很好的位置,你的对手无法攻击很多稳定的光盘,虽然对手的位置不好,他们可能会用尽一些动作并被迫做出不好的动作(例如让你在角落里进行比赛)。
为此目的,在计算动作时轮到它并不重要,所以我认为你走的是正确的道路。
(请注意,在游戏的早期阶段,成为较少光盘的人通常是有利的,因为这通常意味着您的对手几乎没有安全动作。)
曾几何时我听说只使用奥赛罗评价函数的随机数(对我来说很惊人)也是一个非常合理的选择。
逻辑是,拥有最多选择的玩家将能够引导游戏获得最高的随机数,因此这种方法再次意味着AI会支持那些给予它很多选择的动作,而他的对手很少。