如何让AI教机器自己玩俄罗斯方块?

人工智能大火的今天,如果还是自己玩俄罗斯方块未免显得太 low,为什么不对游戏升级,让机器自己去玩俄罗斯方块呢?有了这个想法之后,我用了两天时间去搜集了大量资料,在电脑死机好多次之后终于将 ai 俄罗斯方块实现了。
程序介绍
所谓让机器自己去玩俄罗斯方块,就是让机器计算当前方块的所有形态可放置的所有位置,然后根据统一的评价标准,计算出最优的位置进行放置。这个评价的标准简单的来说就是:板块放置的位置越靠下越好,方块之间越紧密越好,自身对消除行的方块贡献数量越多越好,但是这里还要注意的是不可为了追求消除行数,而去造成过多的空洞,这样也是不合理的。
关于 ai 算法主要有两种:一种是经典的 pierre dellacherie 算法,一种基于基于深度搜索的算法。深度搜索需要优化的地方很多,假如计算的层数不够、没有高效剪枝,一不小心容易写成人工智障,时间复杂度也不好。pierre dellacherie 算法更加清晰,复杂度更低。但是该算法只考虑当前,不对未来的情况进行计算,注重的是“不死性”,追求方块的“密集”,有时就算可以一次性消除 3 行,却会使全局方块更加“疏”,即过多的空洞。
代码由tetris.py、ai.py和utils.py三部分组成,游戏的主要逻辑由 tetis 控制,utils 定义了方块的样式,ai 顾名思义实现了主要的 ai算法。
具体介绍
pierre dellacherie 算法
只考虑当前方块,不对未来的情况进行计算,注重的是“不死性”,算法每次生成一个方块,便穷举该方块所有旋转的落点。一种方块最多有 4 种旋转,并且由于游戏界面是 10*20 的,所以对于每个旋转形状,只需要考虑 10 种落点。算法的核心是一个评估函数,对穷举出的每一种下落情况,计算 6 个参数值,用评估函数加权求和得到一个值,该值最大的情况便是目前方块的最优下落位置,六个参数分别是:
1. 下落高度(landing height)
当前方块落下去之后,方块中点距底部的方格数(事实上,不求中点也是可以的)。
2. 消行数(rows eliminated)
消行层数与当前方块贡献出的方格数乘积。
3. 行变换(row transitions)
从左到右(或者反过来)检测一行,当该行中某个方格从有方块到无方块(或无方块到有方块),视为一次变换。游戏池边界算作有方块。行变换从一定程度上反映出一行的平整程度,越平整值越小;
该指标为所有行的变换数之和;
如图:■ 表示有方块,□ 表示空格(游戏池边界未画出)
■■□□■■□□■■□□ 变换数为 6
□□□□□■□■□■□■ 变换数为 9
■■■■□□□□□□■■ 变换数为 2
■■■■■■■■■■■■ 变换数为 0
4. 列变换(column transitions)
大意同上,列变换从一定程度上反映出一列中空洞的集中程度,空洞越集中值越小。
5. 空洞数(number of holes)
6. 井的总和(well sums)
井指两边皆有方块的空列。该指标为所有井的深度连加到 1 再求总和。
注意一列中可能有多个井,如图:
■□□
■□■
■□■
■■■
■□■
■□■
■□■
中间一列为井,深度连加到一的和为 (2+1)+(3+2+1)=9
评估函数如下 (首字母简写):
关于方块形态
这里对 ai 俄罗斯方块的形态做一下特别说明,各个方块都是根据中心点的坐标来生成的,以(0,0)为中心点,在 x、y 轴加减 1 则是其他方格的坐标,这样的好处就是只要确定中心点坐标,其他的方格位置就能随即生成。
看图就懂:
1#每种块包含的四个小方块相对坐标分布 2self.shapes_relative_coords=[ 3[[0,0],[0,0],[0,0],[0,0]], 4[[0,-1],[0,0],[0,1],[0,2]], 5[[0,-1],[0,0],[0,1],[1,1]], 6[[0,-1],[0,0],[0,1],[-1,1]], 7[[0,-1],[0,0],[0,1],[1,0]], 8[[0,0],[0,-1],[1,0],[1,-1]], 9[[0,0],[0,-1],[-1,0],[1,-1]],10[[0,0],[0,-1],[1,0],[-1,-1]]11]
基于深度搜索的方法暂不介绍。
收获成果
以上,感兴趣的同学可通过网盘获取源代码:https://pan.baidu.com/s/1gc6sf62pz5d6rh6eicozuw,提取码: k17b。

如何实现一种基于FPGA的横向FIR滤波器设计?
不可思议的结合,3D打印技术在服装上的应用
基于IC555的水位传感器/探测器报警电路
到底快充对电池有没有损害?
无线会议麦克风1拖2方案如何选择|天惠微科技
如何让AI教机器自己玩俄罗斯方块?
苹果13运行内存
苹果iOS14.3自动解锁 Mac 的可靠性
什么是边缘计算通过实际案例解析详细的解读介绍
韦乐平:5G的竞争正演变为一场光纤基础设施的竞争
智能照明系统的简单原理应用
OPPO携伙伴共同推动5G网络部署,年底首发高通双模5G手机
三星宣布将停止为 4 款中端机型提供安全更新
中国机器人现状:唯一的优势就是说中文
“互联网+”加快规范化仓储管理和智能仓储建设
晨日科技与聚飞光电的合作有望升级
【解决方案】Acrel-EIOT能源物联网云平台解决方案
碱性高能电池与普通碳性电池比较有何区别?
叶片图像分析仪的产品组成结构是怎样的
米家空气净化器Pro H的性能与净化速度评测