我正在使用在固定深度工作的alpha-beta修剪算法对Chess AI进行编程。我相当惊讶地看到,通过将AI设置为更高的深度,它玩得更糟。但我认为我想通了为什么会这样。
它目前是这样工作的:所有的职位都被列出来了,对于每个职位,其他的职位都会被列出来,以此类推。。。直到达到固定深度:通过检查存在哪些工件,并为每种工件类型设置一个值来评估电路板。然后,使用带有alpha-beta的minimax算法将值冒泡到根。但我需要解释一下搬家的顺序。例如,有两个选项,一个是两步将死,另一个是七步将死,然后必须选择第一个选项。同样的道理也适用于三步或六步中的皇后。但因为我只在最深的节点上评估棋盘,并且我只检查棋盘作为评估结果,所以它不知道之前的动作是什么。
我相信有更好的方法来评估游戏,它可以解释碎片在搜索中移动的方式。
编辑:我弄明白了为什么它玩得很奇怪。当我搜索移动(深度5)时,它以AI移动(最大节点级别)结束。通过这样做,它计算了一些动作,比如用一辆车带走一名骑士,即使这会让后者变得脆弱(算法无法看到它,因为它不会搜索得更深)。所以我改变了它,把深度设置为6,所以它以最小节点级别结束。它的举动现在更有意义了,因为它在受到攻击时实际上是在报复(它有时没有这样做,而是采取了愚蠢的举动)。
然而,它现在比以往任何时候都更具防守性,并且不再打球:它移动自己的骑士,然后将其移回原来的位置,因此,它最终输了。我的评估非常标准,只有片段的存在对节点值很重要,所以它可以自由选择它想要的策略,而不必强迫它做它不需要做的事情。因此,这是我的算法的正常行为吗?这是我的alpha-beta算法执行得不好的迹象,还是使用这种评估函数完全正常?
为了让程序选择最短的校对,标准方法是给更接近根的配对一个更高的值。当然,您必须检测校对,并给它们一些分数。
此外,根据你的描述,你需要一个安静的搜索。
所有这些(以及更多)都在国际象棋编程维基中进行了解释。你应该看看:https://chessprogramming.wikispaces.com/Checkmate#MateScore https://chessprogramming.wikispaces.com/Quiescence搜索
如果你想选择最短的获胜路径,你可能也想选择最长的失败路径。如果你想在评估函数中考虑这一点,你必须将路径长度与分数一起考虑,并为最小值和最大值分别设置评估函数。这是一个非常复杂和令人困惑的开销。
解决这个问题的标准方法是采用迭代深化方法进行评估。首先,你搜索所有玩家的1步,然后再次运行整个搜索,为每个玩家搜索2步,以此类推,直到时间用完。如果你在2步中找到一个胜利,你就停止搜索,你永远不会遇到7步的情况。这也解决了你搜索奇怪深度和得到奇怪评估的问题。它还有很多其他的好处,比如当你的时间用完的时候,总是有一个移动准备就绪,以及一些重要的算法改进,因为你不需要跟踪访问状态的开销。
至于防守打法,那就是一点点地平线效应和一点点评估函数。如果你有一个完美的评估函数,算法只需要看到一招深。如果它不完美(也不完美),那么你需要深入得多的搜索。上次我检查过,可以在你的笔记本电脑上运行并看到大约8层深(一个层是每个玩家1步)的算法可以与强大的人类竞争。
我已经有一个Board对象,包含一个碎片列表。Piece是一个抽象类,有一个位置(x,y)和一个颜色(黑色或白色)。然后是King、Queen、Knight这三个类,实现了Piece类。 谢谢
上面的代码显示了一个可以上下移动的部分的示例。这不是一个有效的棋步。所以,如果我要移动一个皇后,我该怎么做呢?我们只是假设我们已经有了一个矩阵(x,y)8×8的板。
本文向大家介绍c# 绘制中国象棋棋盘与棋子,包括了c# 绘制中国象棋棋盘与棋子的使用技巧和注意事项,需要的朋友参考一下 本文是利用C# 实现中国象棋的棋盘绘制,以及初始化布局,并不实现中国象棋的对弈逻辑。仅供学习参考使用。 思路: 绘制中国象棋棋盘,竖线九条,横线十条。再中间绘制‘楚河',‘汉界' 。 绘制棋子,然后将棋子布局在棋盘上即可。 涉及知识点: 用户控件:用于实现棋盘的绘制,重写 OnP
DreamChess 是一款开放源码、跨平台(可在 Windows、Mac OS X 及 Linux 上运行)的 3D 国际象棋游戏。该游戏包含自身的引擎 Dreamer,提供各种国际象棋棋盘,并具有背景音乐及声效等其他附属功能。
本文向大家介绍python输出国际象棋棋盘的实例分享,包括了python输出国际象棋棋盘的实例分享的使用技巧和注意事项,需要的朋友参考一下 国际象棋是当今国际上最流行的智力体育运动项目。青年人下棋可以锻炼思维、增强记忆力和培养坚强的意志;中年人下棋可以享受美学;老年下棋可以很好的休息娱乐。国际象棋游戏有自己的规则,需要两个人将棋子落在棋盘上。 棋子落在棋盘上事件,在计算机看来,是一段程序,而这些程
我对我的象棋游戏的最小极大算法的实现有问题。它的大部分似乎都起作用了,但它要么从来没有做出好的动作,要么对它们的评估(基于两个玩家的活动棋子的分数)出了问题。例如,如果我设置了check(例如,傻瓜的伴侣),ai会做一些随机的事情,而不是杀死国王。我真的找不出我做错了什么。 评估电路板的类StandardBoardEvaluator在经过一些测试后似乎可以工作,因此问题很可能出现在MiniMax实