本文转载自微信公众号《智彬的python笔记》,作者安可。转载本文请联系志斌python笔记公众号。大家好,我是志斌~志斌现在手上有一盘残局,黑棋只剩一王,白棋一兵一王。现在志斌知道它有两种可能的结局,即白将死黑胜,或者平局。那么结局是什么?下面就让我们用深度学习的人工神经网络算法来给大家解答吧~1.规则介绍在编写程序之前,我们需要先简单了解一下国际象棋的规则。规则如下:棋盘大小为8*8,每格有16颗黑白棋子,分别是王:1,后:1,车:2,象:2,马:2,兵:8。兵:只能一直往前走(不能后退,类似于中国象棋),一次只能走一格。但是,国际象棋棋子在迈出第一步时可以移动一格或两格。士兵的吃子方法和象棋的方向不同。是直走斜走,即兵前一格内若有对方棋子,则可将其吃掉,从而占据该格的位置。王:你可以横走、竖走、斜走,但一次只能走一步。不过与中国象棋相比,王不能送粮,即任何被敌方控制的格子,己方王都不能进入。否则,视为“送王”犯规。总共犯规三次将导致失败。结局:当对方的最高统帅“国王”被俘时,则获胜;当对手被迫停止比赛时,这是平局。2、方案1Readthetrainingset读取krkopt.data训练集,代码如下:withopen('krkopt.data','r')asf:lines=f.readlines()data=np.zeros((28056,6),dtype=float)label=np.zeros((28056,2),dtype=float)读取结果展示:上面每一行数据都是一个训练样本,我们以第一行数据为例分析一下,如下图:a1,b3,c2给出了三颗棋子的坐标,黑王在a1的位置,白王在b3的位置,白兵在a1的位置图c2。此时的黑王已经是无路可退的状态,打成平局。因此,最终的平局意味着平局。假设数据中的最后一个标签是六,这意味着白方最多可以用6步将死黑方。2开始训练首先安装训练需要调用的Python库,pipinstallnumpypipinstallsklearnpipinstallmatplotlib然后将整个数据集分成三部分,代码如下:ratioTraining=0.4#Trainingdataset40%:使用训练数据集来调整神经网络的参数ratioValidation=0.1#验证数据集10%:用来验证调整的好坏,从而判断程序是否退出ratioTesting=0.5#测试数据集50%:训练后是over,用来衡量神经网络整体的训练效果。接下来,使用Scikit-learn中的Scaler类使用减去均值除以方差的方法对标准进行归一化。代码如下:scaler.transform(xTraining)scaler.transform(xTexting)scaler.transform(xValidation)创建一个神经网络,代码如下:其中:layer=[6,20,20,20,2]输入为6维,输出为2维,一共3层神经网络,每层20个神经元active_function='relu'神经网络的激活函数learning_rate=0.01学习率αbatch_normalization=1归一化操作objective_function='CrossEntropy'目标函数训练开始后,我们发现COST损失函数持续下降,而识别率Accuracy却在缓慢上升,无限接近1。代码如下:经过上面的分析,我们发现概率白棋胜率很高,几乎接近1。三、总结1、本文以一盘棋的残局为例,向大家展示人工神经网络算法。我希望你能回去多练习。2.本文仅供学习参考,不作其他用途。专栏作者:安科,研究生,研究方向为强化学习和多智能体协作。喜欢学习,爱学习,乐于分享,最重要的是有美女~
