使用alpha beta修剪了解minimax

时间:2017-04-11 13:53:53

标签: optimization minimax alpha-beta-pruning othello

对于图片感到抱歉,它直接来自我的笔记。

alpha

我已经阅读了最后一天的minimax树和alpha数据修剪,并为我的项目做准备。这是奥赛罗在c。

中的实施

我已经阅读了大量关于它的资源,我知道它会被问到很多。 在开始我的评估功能之前,我想完全理解这一点。

在附图中,我无法弄清楚函数Max_Node(pos)Error:(190) Error: Unexpected cast to ShareButton: layout tag was ImageView [WrongViewCast] 会做什么,任何输入都会非常感激。

如果有任何提示或事情我应该在实施这个以及我对奥赛罗的评估功能时注意,我愿意接受我能找到的任何帮助。

2 个答案:

答案 0 :(得分:0)

minimax算法(也称为here)需要在给定游戏树中的当前位置的情况下找到最佳值的移动。该位置由电路板配置和当前播放器组成(对于某些游戏,可以仅根据电路板配置决定)。通常,递归定义移动的值;对于处于eding位置的棋盘(这是游戏树的一个叶子),如果玩家1赢了,则值为1,如果玩家2赢了则为-1,而对于平局则为0游戏。通过执行该移动并递归地评估该值来确定移动的值。然后,选择最大(对于玩家一)或最小(对于玩家二)的移动;在递归评估中,该值是当前位置的子树根的所有叶子的最大(或最小)值。这显然是原始问题中提到的功能应该是什么。

here所述,Alpha-beta-pruning是对这种方法的改进。由于最佳值已知(它们为1-1),因此只要找到具有所需值的移动,就可以停止评估。

这种方法独立于实际游戏。但是,我建议第一步,将更简单的游戏(例如Tic-Tac-Toe)用作玩具示例,这可能更容易调试。

答案 1 :(得分:0)

我设法弄清楚最大和最小节点是什么,在这种情况下,Max_Node(pos)检查这是否是播放器,它返回true,因为这应该最大化,Min_Node(pos)检查是否它的对手,如果是真的,那么它应该被最小化。