2

我即将写一个基于强化学习的国际象棋引擎。我想训练一个评估函数,并找出电路板最重要特征的权重。

我不是机器学习专家,我正在尝试从书籍和教程中学习。在每个教程中,奖励都非常简单,通常是 1、0,也许是 -1,但在国际象棋中并没有如此明显的奖励(无论将棋位置如何)。例如,假设我在板上有一个情况。我做了 10 次(随机)移动,此时我应该计算奖励,即起始位置和当前位置之间的差异(或误差)。当我唯一的评估功能正在训练时,该怎么做?

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

4

2 回答 2

1

你不能直接这样做。

我可以建议的一些方法:

  • 使用来自外部来源的评分至少可以启动您的算法。不过,评估给定职位的算法非常有限,并且您的 AI 仅使用它不会达到大师级别。
  • 探索使用另一种国际象棋人工智能(理想情况下是开源的)评估位置的可能性。假设你有一个“老师”人工智能。您启动它的 2 个实例并从您要评估的位置开始游戏。让他们从那里互相对抗直到比赛结束。这个动作成功了吗?根据结果​​奖励您自己的 AI。
  • 要添加一些可变性(您不想比单个 AI 更好),请对其他 AI 执行相同操作。甚至,你自己的 AI 与自己对抗。不过,要让后者发挥作用,它可能需要已经在国际象棋上表现得很好,而不是完全随机下棋。你可以多次重复相同的动作并完成游戏,让你的 AI 随机探索新的动作和策略(例如:尝试第二个最好的动作)。
  • 使用真实玩家之间的游戏数据集为您的 ML 提供数据。输赢玩家的一举一动都可以因此得到“强化”
  • 让您的 AI 通过与真实玩家对战来学习。加强你的 AI 动作(输和赢)和玩家的动作。
于 2016-10-19T17:35:57.993 回答
0

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

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

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

于 2020-12-29T16:16:54.947 回答