国际象棋评估功能的培养

时间:2016-10-19 16:47:20

标签: machine-learning evaluation chess reinforcement-learning reward

我准备写一个基于强化学习的国际象棋引擎。 我想培训评估功能,并找出董事会最重要的功能的重量。

我不是机器学习专家,我试图从书本和教程中学习。在每个教程中,奖励都非常简单,通常为1,0,可能为-1,但在国际象棋中没有这种明显的奖励(无论是检查配对位置)。 例如,假设我在董事会中有一个情况。我做10次(随机)动作,此时我应该计算起始位置和当前位置之间的奖励,差异(或误差)。当我的唯一评估功能正在接受培训时,如何做到这一点?

我想避免使用其他引擎'评分系统,因为我觉得宁愿被监督学习,这不是我的目标。

2 个答案:

答案 0 :(得分:1)

你不能直接这样做。

我可以建议一些方法:

  • 使用来自外部源的评分对于至少启动算法并不错。 Algos评估一个给定的位置是非常有限的,你的AI将不会单独使用它来达到主级别。
  • 探索使用另一个国际象棋AI(理想的开源)评估位置的可能性。假设你有一个“老师”AI。您启动它的2个实例并从您要评估的位置开始游戏。让他们从那里互相对战直到比赛结束。这一举措是否成功?给出结果奖励你自己的AI。
  • 要添加一些可变性(您不希望比单个AI更好),对其他AI执行相同操作。或者甚至,你自己的AI与自己对抗。对于后者来说,它可能需要在国际象棋中发挥得体,而不是完全随机玩。你可以多次重播相同的动作并完成游戏,让你的AI随机探索新的动作和策略(例如:尝试第二个最好的动作)。
  • 使用真实玩家之间的游戏数据集来输入您的ML。因此,赢家和输家的每一步都可以“加强”
  • 让你的AI通过与真实玩家对战来学习。加强你的AI动作(失败和获胜)以及玩家的动作。

答案 1 :(得分:0)

我不确定有什么好的方法可以做到这一点,但由于我正在编写自己的国际象棋引擎,并带有调整功能,因此我可以告诉您我是如何做到的。 我正在使用遗传算法来调整评估参数,但是如果您没有评估模型的适应度的方法,那么调整的方法就毫无用处。

我这样做的方法是玩大约 5 到 10 场随机开书动作的游戏。这样做是为了使模型不会过度拟合,因为它分析了相同类型的位置。然后我收集游戏的结果和引擎搜索到的所有位置的评估。游戏结果表示为 -1 表示黑方获胜,0 表示平局,+1 表示白方获胜,因此需要一些函数将评估缩小到 -1 到 +1 的范围内。这里我使用了 tanh(0.5*Eval(pos))。

然后,对于每个位置,我计算评估和比赛结果之间的平方差,并将所有这些相加得到评估成本。