评估国际象棋位置的准确方法是什么?


13

我有一段时间对像Minimax这样的计算机国际象棋AI算法感兴趣(并且有机会在某个时候工作),而作为这些算法的核心组件的就是所谓的评估函数,以确定什么是好的电路板配置,什么是坏的

换句话说,给定国际象棋棋盘的配置,您如何确定它对自己有利,并以何种程度的信心?

例如:

  • 如果您拥有中心,这是非常有利的。
  • 如果您的棋子比对手多,那将是非常有利的。
  • 如果您失去了女王,那将是不利的。
  • 如果您的典当行将升迁,那将是有利的。
  • ...

因此,我想根据有关国际象棋游戏的一些专家知识,就如何创建良好的评估功能寻求一些建议。并且,如果可能的话,还可以选择一个程度(例如,介于1到非常不满意之间,到100到非常不满意之间)。

最终的想法是能够创建一种算法,该算法将在可能性树中查找到特定深度,并根据什么评估下一步的最有利配置(考虑到将来的几次移动)。对玩家有利,对对手不利。但是,如果没有良好的评估功能,该算法将一无所获。


我认为这个问题在StackOverflow上会做得很好。有很多已经关于国际象棋AI上存在问题
xaisoft

3
我曾想过将其发布在SO上,但是我几乎可以肯定它会因为没有建设性或真正的问题而被关闭。也许,如果我需要更多地强调代码本身,但是我认为对于评估功能,它需要有关国际象棋的知识,而不是有关代码或算法的知识。
查尔斯·蒙圭

多么准确。唯一完全准确的方法是您输赢还是平局。
edwina Oliver

Answers:




5

我有一个迟到的感觉,但是-我也在制造引擎。源代码使用Python(即使您不知道,也相当容易阅读),如果您想阅读,可以在这里使用。当前活跃的“启发式”列表(发布时):

  • 越发达(靠近另一侧)的片越好
  • 接近晋升的棋子很好
  • 国王根据游戏所处的阶段(开场,中局,残局)分别得分
  • 如果玩家有两个主教,则将获得奖金
  • 如果玩家有城堡防御,则可获得奖励
  • 孤立的棋子(周围没有东西的棋子)不好
  • 双重典当(同一文件上的两个典当之间没有间隙)并不好
  • 拥有全部8个棋子并不是一件好事,并且会受到惩罚(它们会使董事会混乱并妨碍他人)
  • 看看这个伟大的评价函数里面也使用
  • 与主教在同一个颜色方块上具有更多棋子的主教会受到惩罚(在拥挤的情况下,它们的表现不佳)
  • 尚未实施,但已计划:在更加拥挤的情况下,骑士会获得奖励

在这些观点之一中,我提到了游戏的“阶段”(例如,开场,中间游戏,残局),如果您希望将其包含在引擎中,则可能会遇到与我相同的问题:没有分隔清楚的线。我的决定游戏进入哪个阶段的函数使用了一些东西:

  • 棋盘上的材料量(一旦杀死任何一块,就表示游戏不在开场状态)
  • 动作数(无论什么动作,少于6动作)
  • 皇后的移动(如果两个皇后都已移动,则将游戏标记为中间游戏)

这个答案可能很长,很晚并且没有主题,但是我希望无论如何它都会有所帮助。


4

令人惊讶的是,事实证明,当评估函数是随机的时,Minimax引擎将表现得相当好;这就是所谓的“比尔效应”(Beale effect),其产生原理是有利于您提供更多选择权而对手减少选择权的头寸。持续有效地产生随机评估的一种合理方法是针对该位置生成Zobrist哈希(使用在游戏开始时随机选择的系数),然后直接从哈希中得出随机评估。

在量表的另一端,AlphaZero和Leela使用大型神经网络对搜索到的每个位置进行了极其复杂的评估。用人类的话来描述该网络有效实现的功能是不切实际的,但无疑比Stockfish的评估功能更有效。AlphaZero研究论文表明,这种方法最适合蒙特卡洛树搜索而不是Minimax。

另一方面,如果您想开发一个分析引擎来帮助人类参与者或评论员理解某个职位的细微差别,那么可能有必要使用既定的材料价值和职位理论来实施常规评估功能。EdSchröder的Inside Rebel就是一个很好的例子,记录了在Mephisto的几台国际象棋计算机中使用的备受赞誉的引擎的主要设计特征。您可能希望使用某种程度的机器学习来确定评估功能每个元素的相对重要性,并且还可以单独分解这些元素以在GUI中呈现。


3

我认为国际象棋程序员在设计评估功能时往往不依赖于强大的国际象棋棋手的知识,而是尝试不同的元素,然后在游戏中针对其他引擎进行测试,然后决定保留哪些内容。拉里·考夫曼(Larry Kaufman)谈到了他对人类的理解是什么的看法,但听起来拉吉利希(Rajlich)和戴利(Dailey)都非常注重结果,并且没有完全接受考夫曼的思想。

我发现有趣的一篇文章是Zach Wegner,比较了Rybka和Fruit的评估功能。Rybka可以代表前进的领域之一是根据零件的特定组合并入物料失衡表。考夫曼也为此写了一篇文章。

http://www.top-5000.nl/ZW_Rybka_Fruit.pdf http://danheisman.home.comcast.net/~danheisman/Articles/evaluation_of_material_imbalance.htm



0

简而言之,调整国际象棋引擎参数的标准方法是:

  1. 定义参数
  2. 给出参数标称(起始)值
  3. 运行引擎以查看其性能
  4. 调整参数值以尝试改善其性能

然后重复步骤3和4,直到达到性能目标为止。

这样做的通常方法是建立一个实验室,让引擎在引擎比赛中对抗。引擎使用两种颜色进行多种游戏。感兴趣的主要比赛涉及将参数值设置为A的引擎与参数值设置为B的同一引擎运行。

您可能会猜到,这种方法的结果在很大程度上取决于:

  • 选择的参数
  • 如何指定参数
  • 在整个测试过程中如何改变参数值
  • 引擎的运行方式(有限的层深度,有限的时间,灵敏度等)

这种方法也消耗大量时间。

研究人员于2010年使用遗传算法技术开发了一种最新(创新的方法),用于:a)指定参数,b)调整参数值。研究人员首先针对一组大师级游戏运行了带有初始,名义上一组参数值的引擎,以查看其是否可以有效地选择“最佳动作”。“最佳举动”定义为大师级举动*。记录失败的地方。然后,尝试另一个参数值集,并确定相对性能与先前运行的对比。

然后,以编程方式组合参数值使用遗传算法的“适者生存”原理尝试。在这里,“最适合”是指产生最接近理想值的输出的那个。(它也恰好是“最小二乘拟合”回归的统计技术的一种双关语,该技术用于判断近似质量。)

只有找到了可以很好地模仿GM的发动机参数后,实际的发动机比赛阶段才开始。在这个阶段,不同的参数值集再次相互抵制,这一次是直接的。应用遗传算法改进技术来连续生成更好的引擎。

在该研究项目中,使用了36个参数,包括部件的所有材料值以及许多更常见的战略评估标准,例如后向典当,弱方,主教对等。但是,研究人员添加了一些新参数,例如每种碎片的“国王压力”,“机动性”值,在与国王相邻的文件上滚动,在半打开文件上的规则,在箭头上攻击国王的规则。 -/ b- / g- / h-文件,经过的棋子与后卫国王之间的分隔等等。

不幸的是,研究人员没有详细说明他们如何提出这组参数,以及他们可能测试并拒绝了哪些替代参数。可以合理地假设它们以更大的集合开头,并(通过反复试验)确定哪些对性能有最大的影响,哪些无关紧要或微不足道,因此可以删除。

如果这听起来可能有用,您可以在这里找到相关研究。

*关于研究人员使用的方法的一个阶段的警告是有序的。约翰·纳恩(John Nunn)在他的《理解棋棋步法简介》中,选择了“……强大的宗师之间的艰苦比赛……”来说明他的主题。然后,他补充说:

读者可能会很惊讶地看到本书中装饰游戏的问号数量。当然,您可能会认为,只有30款游戏可供选择,所以找到一些有声游戏应该很容易。但是,我可以向您保证不是。……几乎可以在任何复杂的,艰苦的比赛中发现缺点……我从来没有觉得自己的比赛是完全准确的,所以我个人并不觉得这些启示令人困扰。但是,有些人可能会发现很难接受人类下象棋的准确性不如以前想像的那样。

Nunn博士提出的观点表明,研究人员最初通过要求他们模仿大师的动作来设置发动机参数的最初方法可能是有缺陷的,因为人的行为是有缺陷的。事实上,引擎已经比人类更好地发挥了作用

因此,设置初始参数的更好方法可能是使新发动机与现有的高级发动机匹配。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.