从“人机大战”谈NumPy模块的妙用

2016年3月15日,谷歌公司开发的人工智能机器AlphaGo以总比分4:1战胜围棋世界冠军李世石,轰动世界的“人机大战”落下帷幕这让机器学习得到了受关注的“砝码”,但事实上,早在20世纪50年代,人工智能便开始向人类发起挑战。当时来自IBM工程研究组的萨缪尔 (Samuel) 开发出一款跳棋程序,该程序能够在与人对弈的过程中,不断累积经验以提升棋艺。但不管是跳棋,还是围棋的“人机大战”,人工智能发展的核心动力一机器学习一直被推动着向前迈进。为了让读者更好地理解机器学习,这里就从棋类入手介绍一下机器学习需要什么样的思维方式
中国象棋有着悠久的历史,由于用具简单、趣味性强,成为流传极为广泛的棋类游戏。对中国象棋的“人机大战”的分析在这里拉开了序幕。

记一个棋子已被移动。比如这里把棋子“炮”移动了一下,如图2.2所示。
其实这张棋盘有点像二维坐标系,有x轴和y轴。”炮”的移动就是“炮”的坐标由某一个值变成了另一个值。如果把棋盘的左下角作为坐标原点,“车”“马”等棋子在横轴的每一个单位点上,“炮”的移动就可以表示为从坐标点(7,2)移动到坐标点(4,2)。

接下来可以观察在二维坐标系上的每个棋子,它们都可以用两个数值构成的元组来标记,这两个数值分别代表x轴坐标和轴坐标,同
时又是从0开始的。这类似于Python数据类型中的列表的元素,由两个索引数字决定元素的位置,可以将之理解成二维列表。那么现在就有一个问题,如果把初始棋盘定义成一个二维列表,有棋子的地方定义成1。

个列表相对应位置的数值直接进行相减操作,由移动后的列表减去移动前的列表后出现这样的结果? 相减后变成1的部分就是棋子移动后的位置,相减后变成-1的部分就是棋了移动前的位置,形如下面的列表结果。

从列表中的数值来看,这种对应位置做减法的列表中只有0、1和-1,分析问题的方法也变得简单。这需要一种新的数据类型来实现这样的运算。NumPy中的数组就是用来解决这一类问题的,可以将两个数组中对应位置的值进行相减操作,这样棋类游戏就可以用数组来表征了。

”炮”,是“车”,还是“马”等棋子。因为NumPy数组是用来运算的运算是发生在数值之间的,这样对棋子的表征就可以用数值来进行不同的数值表征不同的棋子。如8可以表示“车”这个棋子,“7”可以表示“马”这个棋子,依次类推。这样如果相减为-8或者8就表示车”的移动,相减为“7”或者“-7”则表示“马”的移动。

wechat

扫码咨询,领取88折扣