如何在棋盘评估中考虑移动次序
我正在使用在固定深度工作的alpha-beta修剪算法编程一个国际象棋AI。 我很惊讶地看到,通过将AI设置到更高的深度,它的表现更加糟糕。 但我想我是这么想的。
它目前的工作方式是:列出所有职位,并为每个职位列出该行动中的其他职位,等等......在达到固定深度之前:董事会通过检查哪些部分存在以及通过为每件作品类型设置一个值。 然后,使用具有alpha-beta的极小极大值算法将值冒泡到根。 但我需要考虑移动顺序。 例如,有两种选择,一种是两步移动,另一种移动七步,然后选择第一种。 同样的事情是在3或6次移动中采取女王。 但是由于我只评估最深的节点上的董事会,而且我只是将董事会作为评估结果,所以它不知道以前的举措是什么。
我相信有一种更好的方式来评估游戏,可以说明这些作品在整个搜索过程中的移动方式。
编辑:我想出了它为什么玩奇怪。 当我搜索移动(深度5)时,它以AI移动(MAX节点级别)结束。 通过这样做,它可以计算出一些动作,比如让一名骑士坐在一辆车上,即使后者容易受到攻击(该算法看不到它,因为它没有深入搜索)。 所以我改变了这一点,我将深度设置为6,所以它以MIN节点级别结束。 它的动作现在变得更有意义,因为它在攻击时实际上需要复仇(它有时不会做,而是发挥愚蠢的举动)。
然而,它现在比以往更具防御性,并且不会发挥作用:它移动骑士,然后将其移回原来的位置,因此最终失败。 我的评估是非常标准的,只有存在的部分对节点价值很重要,所以它可以自由选择它想要的策略,而不用强迫它做它不需要的东西。 扼要说明,这是我的算法的正常行为? 这是否表明我的alpha-beta算法执行得不好或者对于这样的评估函数是否完全正常?
如果你想选择获胜的最短路径,你可能也想选择最长的路径。 如果你想在评估函数中解释这一点,你将不得不将路径长度与分数一起分开,并且对于最小值和最大值具有单独的评估函数。 这是一个复杂而混乱的开销。
解决这个问题的标准方法是通过反复深化的方法来评估。 首先搜索足够深度的所有球员1次移动,然后再次搜索整个搜索,搜索每个球员2次移动等,直到时间用完。 如果你在2步中找到胜利,你将停止搜索,并且你永远不会遇到7步移动的情况。 这也解决了你搜索奇怪的深度和获得奇怪的评价的问题。 它还有许多其他的好处,比如随时准备出发,以及一些重要的算法改进,因为您不需要跟踪访问状态的开销。
至于防守方面,这只是一小部分的视野效应和一点评价功能。 如果您拥有完美的评估功能,则算法只需要深入观察一步。 如果它不完美(而不是),那么你需要更深入地搜索。 最后我检查了一下,可以在你的笔记本电脑上运行的算法,并且可以看到大约8层的深度(每个玩家一层厚度是1层)可以与强壮的人竞争。
为了让程序选择最短的同胞,标准方法是给与更接近根的配偶提供更高的价值。 当然,你必须检测被检者,并给他们一些分数。
另外,从你所描述的,你需要一个静止搜索。
所有这些(以及更多)都在国际象棋程序设计wiki中解释。 你应该检查它:https://chessprogramming.wikispaces.com/Checkmate#MateScore https://chessprogramming.wikispaces.com/Quiescence+Search
链接地址: http://www.djcxy.com/p/56319.html上一篇: How to account for move order in chess board evaluation