【发布时间】: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