本文将从 5 个方面进行介绍:
Board 表示;
Board 评估;
移动选择;
测试 AI;
接口测试。
在开始之前,你只需要提前安装 Python3。
Board 表示
首先,你需要对棋子背后的逻辑进行编码,即为每个棋子分配每一次可能的合法移动。
python-chess 库为我们提供了棋子的移动生成和验证,简化了工作,安装方式如下:
!pip install python-chess
python-chess 库安装好后,导入 chess 模块并进行初始化:
importchessboard = chess.Board()board
在 notebook 中的输出如下所示:
board 对象是一个完整的 board 表示,该对象为我们提供了一些重要的函数,例如,board.is_checkmate() 函数检查是否存在将杀(checkmate),board.push() 函数附加一个移动,board.pop() 函数撤销最后一次移动等。阅读完整的文档请参阅:https://python-chess.readthedocs.io/en/latest/
Board 评败弊估
为了对 board 进行初步评估,必须考虑一位大师在各自比赛中的想法。
我们应该想到的一些要点是:
避免用一个小棋子换三个兵;
象总是成对出现;
避免用两个小棋子换一辆车和一个兵。
将上述要点以方程形式进行表达:
象 >3 个兵 &马 >3 个兵;
象 >马;
象 + 马 >车 + 兵。
通过化简上述方程,可以得到:象 >马 >3 个兵。同样,第三个方程可以改写成:象 + 马 = 车 + 1.5 个兵,因为两个小棋子相当于一巧棚个车和两个兵。
使用 piece square table 来评估棋子,在 8x8 的矩阵中设置值,例如在国际察宽族象棋中,在有利的位置设置较高的值,在不利的位置设置较低的值。
例如,白色国王越过中线的概率将小于 20%,因此我们将在该矩阵中将数值设置为负值。
再举一个例子,假设皇后希望自己被放在中间位置,因为这样可以控制更多的位置,因此我们将在中心设置更高的值,其他棋子也一样,因为国际象棋都是为了保卫国王和控制中心。
理论就讲这些,现在我们来初始化 piece square table:
pawntable=[0,0,0,0,0,0,0,0,5,10,10,-20,-20,10,10,5,5,-5,-10,0,0,-10,-5,5,0,0,0,20,20,0,0,0,5,5,10,25,25,10,5,5,10,10,20,30,30,20,10,10,50,50,50,50,50,50,50,50,0,0,0,0,0,0,0,0]knightstable=[-50,-40,-30,-30,-30,-30,-40,-50,-40,-20,0,5,5,0,-20,-40,-30,5,10,15,15,10,5,-30,-30,0,15,20,20,15,0,-30,-30,5,15,20,20,15,5,-30,-30,0,10,15,15,10,0,-30,-40,-20,0,0,0,0,-20,-40,-50,-40,-30,-30,-30,-30,-40,-50]bishopstable=[-20,-10,-10,-10,-10,-10,-10,-20,-10,5,0,0,0,0,5,-10,-10,10,10,10,10,10,10,-10,-10,0,10,10,10,10,0,-10,-10,5,5,10,10,5,5,-10,-10,0,5,10,10,5,0,-10,-10,0,0,0,0,0,0,-10,-20,-10,-10,-10,-10,-10,-10,-20]rookstable=[0,0,0,5,5,0,0,0,-5,0,0,0,0,0,0,-5,-5,0,0,0,0,0,0,-5,-5,0,0,0,0,0,0,-5,-5,0,0,0,0,0,0,-5,-5,0,0,0,0,0,0,-5,5,10,10,10,10,10,10,5,0,0,0,0,0,0,0,0]queenstable=[-20,-10,-10,-5,-5,-10,-10,-20,-10,0,0,0,0,0,0,-10,-10,5,5,5,5,5,0,-10,0,0,5,5,5,5,0,-5,-5,0,5,5,5,5,0,-5,-10,0,5,5,5,5,0,-10,-10,0,0,0,0,0,0,-10,-20,-10,-10,-5,-5,-10,-10,-20]kingstable=[20,30,10,0,0,10,30,20,20,20,0,0,0,0,20,20,-10,-20,-20,-20,-20,-20,-20,-10,-20,-30,-30,-40,-40,-30,-30,-20,-30,-40,-40,-50,-50,-40,-40,-30,-30,-40,-40,-50,-50,-40,-40,-30,-30,-40,-40,-50,-50,-40,-40,-30,-30,-40,-40,-50,-50,-40,-40,-30]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)