当前位置: 首页 > 知识库问答 >
问题:

国际象棋棋盘位置的自动特征提取

拓拔君博
2023-03-14

我正在做一个项目,在那里我采取一个象棋棋盘位置(FEN字符串转换成二进制)&它的评估分数,并将它馈送给一个神经网络。我的目的是让神经网络区分好的和坏的仓位。

我是如何编码位置的:国际象棋中有12个独特的棋子,即棋子,棋子,骑士,主教,王后和国王,白棋和黑棋一样。我使用4位编码每一个片段,其中0000表示一个空的正方形。所以64个方块被编码成256位,我用另外6位来表示游戏状态,比如轮到谁移动,国王-城堡状态等等。

问题:由于棋位的输入空间既不是平滑的,也不是单模态的(棋盘位置的一个小变化就会导致评估分数的巨大变化),神经网络学习不好。现在,下一个合乎逻辑的事情是以某种方式提取有用的特征(如材料差异、中心控制等)并将其提供给网络。

我不想手工选择功能,因为我希望网络自己学习一切。因此,我正在考虑使用自动编码器自动提取特征。有什么更好的方法来完成这件事吗?

总结:从棋盘位置自动提取特征,让它馈入神经网络,最好的方法是什么?

更新:为了生成训练数据,我修改了Stockfish以将其评估过程转储到日志文件中。因此,它考虑的每一个新移动(位置)都作为一个FEN字符串连同它的eval分数一起写入到一个文件中

共有1个答案

谢豪
2023-03-14

神经网络可以给出任何函数的近似。唯一需要考虑的是搜索空间的维数,它给出了获取良好近似所需的数据量的约束条件。

对于一个有监督的网络(你使用自动编码器,然后我认为你使用反向传播的一些变体),我很难想象你认为如何使用单一位置来进行训练,因为你需要在你的训练集中使用相似的位置。也许您的方法不同,但我确信第二种策略(使用特性)更有前途。我认为使用职位需要大量的数据训练才能得到好的效果。

关于功能,请看这里和香农的经典作品。

我还从Crafty的源代码中获得了有用的信息。

但您必须从FEN字符串中提取这些信息。

自动编码器是一种减少数据的方法(很好,因为提高了性能)。它似乎是更好的使用针成分易观,如报告在这里。

希望这能帮到你。

 类似资料:
  • 我已经有一个Board对象,包含一个碎片列表。Piece是一个抽象类,有一个位置(x,y)和一个颜色(黑色或白色)。然后是King、Queen、Knight这三个类,实现了Piece类。 谢谢

  • 我正在下国际象棋,除了一件事,我几乎得到了所有的东西:我需要使棋手不可能将棋子移动到棋盘上。我很难解决这个问题。 我现在用伪代码生成的有效移动是:类getMoveLocations(我定义了一个位置为国际象棋中的一个方块):如果这个位置在边界内,这个位置的棋子是敌人的棋子,并且模拟的移动不会导致棋盘被检查,然后将该位置添加到工件可以移动到的可能位置。 问题是我如何检查棋盘是否“在检查中”。在我的代

  • DreamChess 是一款开放源码、跨平台(可在 Windows、Mac OS X 及 Linux 上运行)的 3D 国际象棋游戏。该游戏包含自身的引擎 Dreamer,提供各种国际象棋棋盘,并具有背景音乐及声效等其他附属功能。

  • 上面的代码显示了一个可以上下移动的部分的示例。这不是一个有效的棋步。所以,如果我要移动一个皇后,我该怎么做呢?我们只是假设我们已经有了一个矩阵(x,y)8×8的板。

  • 本文向大家介绍python输出国际象棋棋盘的实例分享,包括了python输出国际象棋棋盘的实例分享的使用技巧和注意事项,需要的朋友参考一下 国际象棋是当今国际上最流行的智力体育运动项目。青年人下棋可以锻炼思维、增强记忆力和培养坚强的意志;中年人下棋可以享受美学;老年下棋可以很好的休息娱乐。国际象棋游戏有自己的规则,需要两个人将棋子落在棋盘上。 棋子落在棋盘上事件,在计算机看来,是一段程序,而这些程

  • 我正在使用在固定深度工作的alpha-beta修剪算法对Chess AI进行编程。我相当惊讶地看到,通过将AI设置为更高的深度,它玩得更糟。但我认为我想通了为什么会这样。 它目前是这样工作的:所有的职位都被列出来了,对于每个职位,其他的职位都会被列出来,以此类推。。。直到达到固定深度:通过检查存在哪些工件,并为每种工件类型设置一个值来评估电路板。然后,使用带有alpha-beta的minimax算