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

Artificial intelligence 如何为国际象棋编程一个神经网络?,artificial-intelligence,neural-network,chess,Artificial Intelligence,Neural Network,Chess,我想编程一个国际象棋引擎,它可以学习如何做出好的动作,并战胜其他玩家。我已经编写了一个棋盘的表示和一个输出所有可能动作的函数。因此,我只需要一个评估函数,该函数表示董事会的特定情况有多好。因此,我想用一个人工神经网络来评估一个给定的位置。输出应该是一个数值。值越高,白人玩家的位置越好 我的方法是建立一个由385个神经元组成的网络:棋盘上有6个独特的棋子和64个字段。因此,对于每个区域,我们取6个神经元(每片1个)。如果有白色块,则输入值为1。如果有黑色块,则值为-1。如果该字段上没有类似的内容,

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

我的方法是建立一个由385个神经元组成的网络:棋盘上有6个独特的棋子和64个字段。因此,对于每个区域,我们取6个神经元(每片1个)。如果有白色块,则输入值为1。如果有黑色块,则值为-1。如果该字段上没有类似的内容,则值为0。除此之外,玩家还应该有一个神经元来移动。如果轮到白色,则输入值为1;如果轮到黑色,则输入值为-1

我认为神经网络的配置相当好。但主要的部分是缺失的:如何将这种神经网络实现为编码语言(如Delphi)?我认为每个神经元的权重在开始时应该是相同的。然后根据比赛结果调整重量。但是怎么做呢?我想我应该让两个电脑玩家(都用我的引擎)互相玩。如果白人获胜,黑人得到的反馈是,他们的体重不好


所以,如果你能帮我把神经网络实现成一种编码语言,那就太好了(最好是Delphi,否则就是伪代码)。提前谢谢

训练一个ANN所需要的要么是某种形式的a。但国际象棋是一个如此复杂的游戏,一个简单的人工神经网络很难学会下棋——如果学习过程没有监督的话,情况会更糟

此外,您的问题没有说明层的数量。你想用385个输入神经元来编码当前的情况。但是你想如何决定该做什么呢?每场神经元数?最高激励获胜?但可能的举措往往不止一个

此外,您还需要几个隐藏层-可以用输入层和输出层表示的功能实际上是有限的,而不需要隐藏层

所以我不想阻止你们尝试,但在一年左右的时间内成功实施和培训的机会几乎为零


当我16岁左右的时候,我试着建造和训练一个安玩井字游戏。。。我失败了。我建议先试试这样一个简单的游戏。

去过那里,就这么做了。由于您的问题没有连续性(一个位置的值与另一个位置没有密切关系,一个输入的值只有一个变化),因此NN工作的可能性很小。在我的实验中从来没有

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

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


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

我在这里看到的主要问题是培训。你说你想让你的ANN担任目前的董事会职位,并评估它对一名球员有多好。(我假设你会为一名玩家采取所有可能的行动,将其应用到当前的棋盘状态,通过ANN进行评估,然后采取输出最高的行动——即:爬山)

在我看来,您的选择是:

  • 开发一些启发式函数来评估电路板状态并训练网络脱离该状态。但这就引出了一个问题,为什么要使用人工神经网络,而你只能使用启发式算法

  • 使用一些统计度量,例如“此棋盘配置中白人或黑人赢得多少场比赛?”,这将为您提供介于白人或黑人之间的适合度值。这方面的困难在于问题空间大小所需的训练数据量

有了第二个选项,你可以随时从grandmaster游戏中输入棋盘序列,并希望有足够的覆盖率供ANN开发解决方案


由于问题的复杂性,我希望尽可能地使用最大的网络(即:许多内部节点),而不必太慢地进行训练。

我不明白,如果你还使用alpha-beta修剪进行一些经典的mini-max前瞻,为什么不能使用神经网络作为静态评估器。许多国际象棋引擎使用minimax和一个死气沉沉的静态计算器,它只是将棋子或其他东西相加;如果你有足够的极大极小值,这并不重要。我不知道网队会有多大的进步,但几乎没有什么损失。不过,训练会很棘手。我建议使用一个能够预见很多动作(并且需要CPU负载等)的引擎来训练评估者,使其能够预见更少的动作。这样的话,你的引擎就不用花那么多时间了