ai俄罗斯方块java_俄罗斯方块进阶--AI俄罗斯方块
原标题:俄罗斯方块进阶--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俄罗斯方块相关推荐
- python俄罗斯方块教程_python tkinter实现俄罗斯方块 基础版
本项目最终效果见本人b站投稿av81480858 简介部分 本项目最终代码已上传github: https://github.com/BigShuang/Tetris 的1_BASIC文件夹 .其中1 ...
- 虹软android工程师,虹软人脸识别技术公开课开讲!AI工程师如何快速进阶
原标题:虹软人脸识别技术公开课开讲!AI工程师如何快速进阶 随着刷脸乘坐公交.公租房人脸识别管理系统.景区人证核验入园等创新应用的加速普及,人脸识别技术已经在广泛的行业.领域中得到使用.在见证人脸识别 ...
- AI之循环神经网络进阶
AI之循环神经网络进阶 GRU 从零实现GNU 载入数据集 初始化参数 GRU模型 训练模型 简洁实现 LSTM 初始化参数 建立LSTM模型 训练模型 简洁实现 深度循环神经网络 双向循环神经网络 ...
- c语言程序设计俄罗斯方块PPT,C语言实现俄罗斯方块.ppt
C语言实现俄罗斯方块.ppt C语言实现俄罗斯方块 邓友明 胡文峰 李乐 李博 具体内容 1俄罗斯方块简介. 2功能简介. 3所用知识 4模块分析. 5数据结构. 6算法设计. 一. 俄罗斯方块简介: ...
- 50+企业合作入驻、1000+算法,钛灵AI算法市场的进阶之路
全球市场洞察公司(Global Market Insights)报告显示,2019年 AI芯片市场规模超过80亿美元,预计到2026年增长至700亿美元.AI芯片对应AI算法的需求比例约为1:1~1: ...
- 全新语音 AI 芯片、两大 AI 开发者平台重磅推出,全方位解读科大讯飞全球 1024 开发者节!...
10月24日,第二届世界声博会暨2019科大讯飞全球1024开发者节在合肥召开.本次大会以"AI前进·拼世界"为主题,重磅推出家电产业专用语音AI芯片CSK400X系列:两大AI开 ...
- 阿里披露AI完整布局,飞天AI平台首次亮相
作者 | 夕颜 编辑 | 唐小引 出品 | AI 科技大本营(ID:rgznai100) 9 月 26 日上午,在云栖大会阿里云飞天智能主论坛上,年轻的阿里巴巴副总裁.阿里云智能计算平台事业部总经理. ...
- AI一分钟|腾讯AI绝艺让二子,仍战胜柯洁;Google与腾讯达成专利交叉授权许可协议
一分钟AI 腾讯又入医疗AI科学家,郑冶枫博士加盟腾讯优图实验室 Google与腾讯达成专利交叉授权许可协议,在科技领域为用户带来更好的产品和服务 百度研究院完成调整,新增两个实验室,三位人工智能领域 ...
- 369亿估值的AI市场下,中国AI学习者的野心与实力
微信公众号 关键字全网搜索最新排名 [机器学习算法]:排名第一 [机器学习]:排名第一 [Python]:排名第三 [算法]:排名第四 最近几天,在 2018 CES科技盛会上,百度无人驾驶系统 Ap ...
最新文章
- Android之ksoap2-android详解与调用天气预报Webservice完整实例
- BUUCTF(pwn)jarvisoj_fm --格式化字符串漏洞
- VTK:绘图之PlotLine3D
- python格式化字符串_阿博的Python之路详解String数据类型
- 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
- CMMI3组织级文档列表清单
- html设置顶部对齐,HTML / CSS文本从div顶部对齐
- html文档基本结构由哪三对,第3章 网页制作及HTML语言基本结构简介.ppt
- Linux操作系统RedHat6.5安装
- 快速设置XMind中的设置联系
- 喷水装置2(nyoj12)
- Python 为何能成最强编程语言?!
- lucky的时光助理-2017.02
- Phycharm下载并安装
- android屏幕适配无效_Android 屏幕适配终结者
- 20000本当当豆瓣畅销书电子书免费领取,免费送
- Jemalloc安装
- 如何创建一个facebook账户
- 2022年西式面点师(中级)考试题及模拟考试
- APK打包、安装流程
热门文章
- 固态硬盘开卡维修教程,MAP1202、IG5236、SM2259XT2等主控均适用
- 康耐视visionpro控件中文说明
- android gridview日历,Android使用GridView实现日历的方法
- html img 圆头像_纯CSS3炫酷圆形头像图片过滤特效
- LoadRunner性能测试关注指标及结果分析
- Sea-thru: A Method For Removing Water From Underwater Images论文研读
- 随机漫步模拟及概率分析
- C++ STL之set详解
- 信息奥赛一本通1312:【例3.4】昆虫繁殖
- 从0开始小程序云开发-实现指定用户小程序端操作云数据库,云存储