【问题标题】:Chess position evaluation using neural network使用神经网络的国际象棋位置评估
【发布时间】:2020-05-18 04:04:25
【问题描述】:

我正在开发一个应该能够下棋的 AI。我想利用keras 神经网络来评估板上的位置。我想通过在 AI 和 AI 之间玩大量游戏来教 NN。我已经实现了 alpha-beta 修剪

我的想法是创建一个 csv 文件,其中包含 AI 玩过的每场比赛的位置。我会选择我想存储在那里的变量。很简单的例子:

"white_pawns","black_pawns","white_queens","black_queens","white_pawns_on_side","white_won"
3,7,1,2,0,False
3,5,3,0,1,True

我想用这些值训练一个模型,然后用它来评估当前的棋盘位置。所以主要的问题是:

如何让神经网络在给定这些变量的情况下输出位置值? 例如。 0 平局时或1 时我们是一个棋子。 keras 首选,但我对任何其他 python 库开放。

如果您能消除我的其他几个疑虑,我也将不胜感激。 这种方法有什么缺陷吗?单个游戏中的每个位置不会使神经网络过度拟合吗?也许我应该从每场比赛中只选择几个位置?

【问题讨论】:

  • 您使用的所有数据点是什么?每个单独的棋子根据其在棋盘上的位置(例如棋子)和其他棋子的位置(例如白色主教在白色瓷砖上的棋子数量)具有不同的价值
  • @Krish 所有这些都将存储在 csv 中。我想让示例保持简单,但它会存储更多数据,包括典当结构等。
  • 从纯粹的统计方法中,您需要尽可能多地获得数据点的差异。我不确定每场比赛只用一个数据点获得足够的数据点在计算上是否可行,所以我建议创建一个算法,每场比赛最多选择 2 个合理分布的数据点。更好的做法是使用国际象棋游戏数据集:kaggle.com/datasnaek/chess 并从超过 20,000 场比赛中抓取数据。
  • @Krish 好主意。你可能知道,如何实现一个神经网络,以便它从这个输入中产生一个评估数字?例如。平局时为 0,还是我们 1 兵时为 1?
  • 查找强化学习(这是一个大量的主题,书籍已经写过),看看如何从自我对弈数据中进行学习,而不像在监督下那样提前获得预期的输出学习。

标签: python keras neural-network


【解决方案1】:

我想你知道这一点,但是当一个人评估棋盘时,他不仅在看材料,还看棋子的位置。其次,有了这个 csv,如果你看到的只是对或错,你无法决定什么是更好的电影。这就是为什么引擎的评估是数字的。或者你想让它输出一个从-1到1的数字,然后就是分数?想要做同样的事情,但为白赢做 1,为黑赢做 -1 或为平局做 0(在数据集文件中)。如果你想和我一起做,请联系我(是否有堆栈溢出的消息服务?)。

结论

在我看来,输入应该是棋盘的数字表示,目标不应该是分类器,而是数字分类器。它实际上更简单。

我正在开发一个 python 引擎,这是一个结识对我感兴趣的新朋友的机会。

只是说,这是我的第一个答案,所以如果有不清楚的地方,请发表评论,我会尽力提供帮助!

另外,就像 krish 所说,这可以通过强化学习来实现。但首先你需要创建一个 dqn(深度 q 网络(q 学习是一种非常流行的强化学习算法)),为此你需要另一个网络。因为如果没有,这将花费大量时间来训练。

【讨论】:

    猜你喜欢
    • 2022-01-04
    • 2010-10-19
    • 1970-01-01
    • 2018-04-30
    • 2013-06-30
    • 2016-11-04
    • 2017-04-13
    • 2017-12-05
    • 1970-01-01
    相关资源
    最近更新 更多