当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何为国际象棋编程神经网络?》经验,为你挑选了3个好方法。

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

我的方法是建立一个由385个神经元构成的网络:棋盘上有六个独特的棋子和64个场.因此,对于每个场,我们采取6个神经元(每个1个).如果有白色片段,则输入值为1.如果有黑色片段,则值为-1.如果那个场上没有那种,那么值就是0.除此之外,玩家应该有1个神经元移动.如果是白色,则输入值为1,如果是黑色,则值为-1.

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

因此,如果您可以帮助我将神经网络实现为编码语言(最好的是Delphi,否则是伪代码)会很棒.提前致谢!



1> siemanko..:

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



2> Silas S. Bro..:

如果您还使用alpha-beta修剪做一些经典的mini-max预测,我不明白为什么你不能为静态评估器提供神经网络.很多国际象棋引擎都使用minimax和一个脑static静态评估器,只是将这些东西加起来; 如果你有足够的极小极大程度,这并不重要.我不知道网络会有多大的改进,但没有什么可失去的.训练它会很棘手.我建议使用一个向前看很多动作的引擎(并且需要大量的CPU等)来训练评估者一个向前看较少动作的引擎.这样你就得到了一个不占用太多CPU的引擎(希望如此).


@AtillaFiliz No.手册(由程序员编写)评估器+深度搜索用于训练NN,希望NN +浅搜索优于手动评估器+浅搜索.如果它有效,则NN优于手动评估器.

3> Varkhan..:

去过也做过。由于您的问题没有连续性(一个位置的值与一个位置的值并不紧密相关,而一个输入的值只有1个变化),因此NN起作用的可能性很小。而且在我的实验中从未如此。

我宁愿看到具有临时启发式(其中有很多)的模拟退火系统来评估位置的值...

但是,如果您开始使用NN,则表示起来相对容易。一般的NN只是一个图,每个节点都是一个神经元。每个神经元都有一个当前激活值,以及一个基于输入值(即与之链接的所有节点的激活值)来计算下一个激活值的转换公式。

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


但是TD-Gammon也学会了仅使用神经网络玩西洋双陆棋。所以它必须以某种方式起作用,不是吗?
推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有