在国际象棋中实现时间差异


10

我一直在开发一个国际象棋程序,该程序使用alpha-beta修剪算法和一个评估功能,该功能使用以下功能来评估位置:材料,国王安全性,移动性,典当结构和被困件等..我的评估功能是源自

Fp=w1个材料+w2国王安全+w3流动性+w4典当结构+w5被困的碎片

其中是分配给每个特征的权重。在这一点上,我想使用时间差异来调整评估函数的权重,在此情况下,代理会与自己竞争,并在此过程中从其环境中收集训练数据(这是强化学习的一种形式)。我阅读了一些书籍和文章,以期了解如何在Java中实现此功能,但它们似乎是理论性的,而不是实用的。我需要有关如何根据以前的游戏自动调整评估功能权重的详细说明和伪代码。w

Answers:


4

我建议感兴趣的话题有人看一看的文件,结合TDL和深学习。

大致来说,您需要使引擎彼此对战。记录每个位置的极小极大值评估。在游戏结束时,您将获得奖励,即国际象棋的奖励{0,1,-1}。然后,您需要使用以下命令调整参数:

在此处输入图片说明

这个方程式告诉我们,我们应该通过时间差异来调整权重,并根据应该执行的距离加权。如果您有一个完美的评估,您的时间差异将始终为零,因此您无需进行任何调整。

接下来,您需要使用新参数来玩新游戏。重复进行直到您可以负担得起的游戏数量达到极限或收敛为止。

几句话:

  1. 我引用的论文适用折扣系数。这是针对神经网络的反向比例算法完成的。不用了
  2. 您需要尝试最佳的学习率(方程式中的alpha)。太大会导致学习不稳定,太少会花费较长的时间才能收敛。我见过人们使用0.70。我引用的论文使用1.0。

嗨,我很喜欢您的回答,但是您能不能修正本文的链接?
padura '16

@padura固定。请阅读。对于数据科学来说,这是一本好书。
HelloWorld

(+1)个好答案。也喜欢这篇论文:)
Dawny33

那是一篇很棒的文章,可惜在我自己的象棋引擎上工作时我还不知道这一点;)我想知道是否可以通过结合以下技术来进行改进:bjmc.lu.lv/fileadmin/user_upload/lu_portal/ projekti / bjmc /…
padura '16

2

首先,您应该观看“ Wargames”以了解自己的兴趣。

您想要的是f(p),以使f(p)尽可能接近位置强度。

使用遗传算法的一个非常简单的解决方案是设置10000个具有不同权重的玩家,并查看哪个获胜。然后保持前1000名获胜者的体重,将其复制10次,稍作改动以探索体重空间,然后再次运行模拟。给定功能形式的那就是标准GA,最适合的系数是多少。

另一种解决方案是提取头寸,因此您有一张表格“((材料,国王安全,机动性,当兵结构,被困物)->头寸好”),其中头寸好坏是一些客观因素(使用上述模拟计算得出的胜负)或已知的匹配项,可用树的深度,树下的移动次数(其中5个因素之一变得更好),然后可以尝试针对f(p),回归,svm使用不同的函数形式。


这没有任何意义。
HelloWorld
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.