如何为国际象棋编程一个神经网络?

我想要编制一个象棋引擎,学习如何做出好动作并赢得其他玩家。 我已经编写了一个棋盘的代表和一个输出所有可能动作的函数。 所以我只需要一个评估函数,说明董事会的特定情况有多好。 因此,我想使用一个人工神经网络,然后评估一个给定的位置。 输出应该是一个数值。 价值越高,白人球员的位置就越好。

我的方法是建立一个包含385个神经元的网络:棋盘上有六个独特的棋子和64个场。 因此,对于每个领域我们采取6个神经元(每一块1)。 如果有白色块,输入值为1.如果有黑色块,则值为-1。 如果在该领域没有那种类型,那么值为0.除此之外,玩家应该有1个神经元移动。 如果轮到白方,则输入值为1,如果轮到黑方,则值为-1。

我认为神经网络的配置非常好。 但是缺少主要部分:如何将这个神经网络实现为编码语言(如Delphi)? 我认为每个神经元的权重在开始时应该是相同的。 根据比赛结果,应该调整权重。 但是如何? 我想我应该让两个电脑玩家(都使用我的引擎)互相对抗。 如果白方获胜,黑方得到的反馈是其权重不好。

所以,如果你能帮助我将神经网络实现为一种编码语言(最好是Delphi,否则是伪代码),这将是非常好的。 提前致谢!


去过也做过。 由于你的问题没有连续性(一个职位的价值与其他职位并不紧密相关,而一个投入的价值只有一个变化),NN几乎不可能工作。 而且它在我的实验中从未做过。

我宁愿看到一个模拟退火系统,用一个特设的启发式(其中有很多)来评估这个位置的价值......

但是,如果您使用的是NN,则相对容易表示。 一般的NN只是一个图,每个节点都是一个神经元。 每个神经元都有一个当前激活值和一个转换公式,用于根据输入值计算下一个激活值,即所有节点的激活值都与它有链接。

一个更经典的神经网络,即输入层,输出层,每层相同的神经元,并且没有时间依赖性,因此可以由一组输入节点,一组输出节点和连接这些的节点。 每个节点拥有一个当前的激活值,以及它转发的节点列表。 计算输出值只需将输入神经元的激活设置为输入值,然后依次迭代每个后续图层,然后使用转换公式计算上一图层的激活值。 当你到达最后(输出)层时,你就得到了结果。


我不明白为什么你不能有一个静态评估器的神经网络,如果你也做一些alpha-beta修剪的经典迷你最大超前观察。 许多国际象棋引擎使用minimax与braindead静态评估器,只是加起来件或什么; 如果你有足够的极小极小值,这并不重要。 我不知道网络会有多大的改进,但几乎没有什么损失。 培训它会很棘手。 我会建议使用一个引擎,展望许多动作(并且需要大量的CPU等)来训练评估者,看看引擎看起来更少的动作。 这样你最终会得到一个不占用CPU太多的引擎(希望)。


万一有人随机找到这个页面。 鉴于我们现在所知道的,OP提出的几乎肯定是可能的。 实际上,我们设法为具有更大状态空间的游戏 - Go(https://deepmind.com/alpha-go)做到这一点。

链接地址: http://www.djcxy.com/p/84691.html

上一篇: How to program a neural network for chess?

下一篇: Chess AI with alpha beta algorithm