原标题:俄罗斯方块进阶--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

■■■■■■■■■■■■ 变换数为04.列变换(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]

基于深度搜索

暂时不对此方法作介绍。

收获成果

责任编辑:

ai俄罗斯方块java_俄罗斯方块进阶--AI俄罗斯方块相关推荐

  1. python俄罗斯方块教程_python tkinter实现俄罗斯方块 基础版

    本项目最终效果见本人b站投稿av81480858 简介部分 本项目最终代码已上传github: https://github.com/BigShuang/Tetris 的1_BASIC文件夹 .其中1 ...

  2. 虹软android工程师,虹软人脸识别技术公开课开讲!AI工程师如何快速进阶

    原标题:虹软人脸识别技术公开课开讲!AI工程师如何快速进阶 随着刷脸乘坐公交.公租房人脸识别管理系统.景区人证核验入园等创新应用的加速普及,人脸识别技术已经在广泛的行业.领域中得到使用.在见证人脸识别 ...

  3. AI之循环神经网络进阶

    AI之循环神经网络进阶 GRU 从零实现GNU 载入数据集 初始化参数 GRU模型 训练模型 简洁实现 LSTM 初始化参数 建立LSTM模型 训练模型 简洁实现 深度循环神经网络 双向循环神经网络 ...

  4. c语言程序设计俄罗斯方块PPT,C语言实现俄罗斯方块.ppt

    C语言实现俄罗斯方块.ppt C语言实现俄罗斯方块 邓友明 胡文峰 李乐 李博 具体内容 1俄罗斯方块简介. 2功能简介. 3所用知识 4模块分析. 5数据结构. 6算法设计. 一. 俄罗斯方块简介: ...

  5. 50+企业合作入驻、1000+算法,钛灵AI算法市场的进阶之路

    全球市场洞察公司(Global Market Insights)报告显示,2019年 AI芯片市场规模超过80亿美元,预计到2026年增长至700亿美元.AI芯片对应AI算法的需求比例约为1:1~1: ...

  6. 全新语音 AI 芯片、两大 AI 开发者平台重磅推出,全方位解读科大讯飞全球 1024 开发者节!...

    10月24日,第二届世界声博会暨2019科大讯飞全球1024开发者节在合肥召开.本次大会以"AI前进·拼世界"为主题,重磅推出家电产业专用语音AI芯片CSK400X系列:两大AI开 ...

  7. 阿里披露AI完整布局,飞天AI平台首次亮相

    作者 | 夕颜 编辑 | 唐小引 出品 | AI 科技大本营(ID:rgznai100) 9 月 26 日上午,在云栖大会阿里云飞天智能主论坛上,年轻的阿里巴巴副总裁.阿里云智能计算平台事业部总经理. ...

  8. AI一分钟|腾讯AI绝艺让二子,仍战胜柯洁;Google与腾讯达成专利交叉授权许可协议

    一分钟AI 腾讯又入医疗AI科学家,郑冶枫博士加盟腾讯优图实验室 Google与腾讯达成专利交叉授权许可协议,在科技领域为用户带来更好的产品和服务 百度研究院完成调整,新增两个实验室,三位人工智能领域 ...

  9. 369亿估值的AI市场下,中国AI学习者的野心与实力

    微信公众号 关键字全网搜索最新排名 [机器学习算法]:排名第一 [机器学习]:排名第一 [Python]:排名第三 [算法]:排名第四 最近几天,在 2018 CES科技盛会上,百度无人驾驶系统 Ap ...

最新文章

  1. Android之ksoap2-android详解与调用天气预报Webservice完整实例
  2. BUUCTF(pwn)jarvisoj_fm --格式化字符串漏洞
  3. VTK:绘图之PlotLine3D
  4. python格式化字符串_阿博的Python之路详解String数据类型
  5. 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
  6. CMMI3组织级文档列表清单
  7. html设置顶部对齐,HTML / CSS文本从div顶部对齐
  8. html文档基本结构由哪三对,第3章 网页制作及HTML语言基本结构简介.ppt
  9. Linux操作系统RedHat6.5安装
  10. 快速设置XMind中的设置联系
  11. 喷水装置2(nyoj12)
  12. Python 为何能成最强编程语言?!
  13. lucky的时光助理-2017.02
  14. Phycharm下载并安装
  15. android屏幕适配无效_Android 屏幕适配终结者
  16. 20000本当当豆瓣畅销书电子书免费领取,免费送
  17. Jemalloc安装
  18. 如何创建一个facebook账户
  19. 2022年西式面点师(中级)考试题及模拟考试
  20. APK打包、安装流程

热门文章

  1. 固态硬盘开卡维修教程,MAP1202、IG5236、SM2259XT2等主控均适用
  2. 康耐视visionpro控件中文说明
  3. android gridview日历,Android使用GridView实现日历的方法
  4. html img 圆头像_纯CSS3炫酷圆形头像图片过滤特效
  5. LoadRunner性能测试关注指标及结果分析
  6. Sea-thru: A Method For Removing Water From Underwater Images论文研读
  7. 随机漫步模拟及概率分析
  8. C++ STL之set详解
  9. 信息奥赛一本通1312:【例3.4】昆虫繁殖
  10. 从0开始小程序云开发-实现指定用户小程序端操作云数据库,云存储