首先上源码:

一.概要
使用了2种AI算法:
一种是经典的Pierre Dellacherie算法
一种基于基于深度搜索的算法:

由于时间因,只测试了一次Pierre Dellacherie算法
消行数13W+


第2种算法没有花时间去测试,理论上消行数应该比较可观

下面简单介绍2种AI算法实现思路


二.Pierre Dellacherie算法:(只考虑当前方块) 
Pierre Dellacherie官网:

AI算法主要是评分函数: 所以只介绍评分函数
<1>、尝试着对当前落子的每一种旋转变换、从左到右地摆放,产生所有摆法。 
<2>、对每一种摆法进行评价。评价包含如下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 
 
    各项指标权重经验值: 
    1   -4.500158825082766 
    2   3.4181268101392694 
    3   -3.2178882868487753 
    4   -9.348695305445199 
    5   -7.899265427351652 
    6   -3.3855972247263626 

    最后的评分函数:
    private void ******;;;i++) {
                // 检测当前坐标是否能移动

                // 模拟下落 (类似与人类在大脑思考某种行为的后果如何)

                // 设置当前状态
                
                // 消行
                
                // 遍历下一个方块 (遍历下一个方块函数功能和本函数类似,只是该调用变成了评价函数)
                
                // 恢复背景数组状态(最高点向下copy)
            }
        }
        
        // 找到一个最佳点
        setFind(true);

}  



2.评价函数
再次强调一遍,AI的关键在于评价函数

a. 脑残评价策略
    只考虑2次消行数,  和2次游戏后最终局面的高度
    这样会造成大量空洞,游戏很快死掉

b. 简单评价策略
    在脑残策略的基础上增加了每列的空洞数量
    实现方法也很简单,从最高点向下找空洞
    
    有所改善,但是还是很快死掉

c. 高端策略
    在简单策略的基础上增加:
    a. 高度差之和
    b. 高山数量 (当前列高于临近列)
    c  深坑数量 (当前列低于临近列)
    d  平均高度 
    上面的一些权值反映游戏局面地势的平缓程度
    然后每种取不同权值,权值不同AI效果不同 (经验主义)





Android俄罗斯方块AI设计文档的更多相关文章

  1. Android APP开发需求文档范本

    Android  APP开发需求文档范本 软件需求文档格式的标准写法 1.引言 1.1 编写目的 • 阐明开发本软件的目的: 1.2 项目背景 • 标识待开发软件产品的名称.代码: • 列出本项目的任 ...

  2. DDD领域驱动设计 - 设计文档模板

    设计文档模板: 系统背景和定位 业务需求描述 系统用例图 关键业务流程图 领域语言整理,主要是整理领域中的各种术语的定义,名词解释 领域划分(分析出子域.核心域.支撑域) 每个子域的领域模型设计(实体 ...

  3. Atitit.atiagent  agent分销系统 代理系统 设计文档

    Atitit.atiagent  agent分销系统 代理系统 设计文档 1. 启动项目1 2. 首也2 3. 登录功能2 4. 用户中心2 5. 充值查询3 6. 授权下级代理4 7. 我的提成5 ...

  4. Net 通用权限管理系统源码 带数据库设计文档,部署说明文档

    Net 通用权限管理系统源码 带数据库设计文档,部署说明文档 包括数据库设计文档部署安装文档源码数据库文件 下载地址:http://www.mallhd.com/archives/1389

  5. 基于Apriori算法的Nginx+Lua+ELK异常流量拦截方案 郑昀 基于杨海波的设计文档(转)

    郑昀 基于杨海波的设计文档 创建于2015/8/13 最后更新于2015/8/25 关键词:异常流量.rate limiting.Nginx.Apriori.频繁项集.先验算法.Lua.ELK 本文档 ...

  6. Access数据库自动生成设计文档

    在做Access数据库设计时,常常直接在access文件中建表,建字段,然后写设计文档时,又得重新再写一遍字段和表间关系.其实access数据库自己就支持自动生成数据库文档. 操作方法如下: 数据库工 ...

  7. 朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素

    朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素 [下载文本PDF进行阅读] 本文我会来说说我认为架构评审中应该看的一些点,以及我写设计文档的一些心得.助你在架构评审中过五关斩六将,助 ...

  8. 找回Android studio的帮助文档

    对于业余写点小程序,自娱自乐的我来说,写程序过程的帮助文档非常重要,毕竟不是专业人士.用Visual Studio时,习惯于光标一移到一个类或对象上面,马上出现相应的帮助文档(如图) studio的帮 ...

  9. 厨娘ui设计文档

    厨娘ui设计文档 一.概述 中国的饮食文化从古到今源远流长.在生活日益丰富的今天,人们对饮食的要求不仅仅是温饱,更讲究健康和美味.近年来,饮食甚至成为娱乐的一部分,关于吃的流行用语层出不穷,可见在当今 ...

随机推荐

  1. ajava包的命名

    2. Package的命名 Package名的第一部分应是小写ASCII字符,并且是顶级域名之一,通常是com.edu.gov.mil.net.org或由ISO标准3166.1981定义的国家唯一标志 ...

  2. 推荐近期15个 Node.js 开发工具

    近来Node.js 越来月流行了,这个基于Google V8 引擎建立的平台, 用于方便地搭建响应速度快.易于扩展的网络应用.在本文中,我们列出了2015年最佳的15个 Node.js 开发工具.这些 ...

  3. Linux鲜为人知的安全漏洞:不要将输出内容管道给你的shell

    将wget或curl输出的内容管道给bash或者sh是一件非常愚蠢的事,例如像下面这样: wget -O - http://example.com/install.sh | sudo sh 命令解释: ...

  4. 2015年12月12 Node.js实战(一)使用Express+MongoDB搭建多人博客

    序,Node是基于V8引擎的服务器端脚本语言. 基础准备 Node.js: Express:本文用的是3.21.2版本,目前最新版本为4.13.3,Express4和Express3还是有较大区别,可 ...

  5. substr — 详解

    substr — 返回字符串的子串 举例说明: string substr ( string $string , int $start , int $length ) 返回字符串 string 由 s ...

  6. superF12

    superF12是开发内嵌ie内核的桌面客户端时的一个调试工具

  7. 微信事业群WXG成立 致力于打造微信大平台

    今天,微信之父张小龙带领微信团队成立微信事业群(WeiXin Group,简称WXG),致力于打造微信大平台,由他们负责微信基础平台.微信开放平台.微信支付拓展.O2O等微信延伸业务的发展,并包括邮箱 ...

  8. 大数据之sqoopCDH 备份

    Sqoop课程笔记 一.概述 1.什么是sqoop? Hadoop的优势在于对数据的存储和处理,相比以前传统的数据库,在处理较较多的数据时,传统数据行业通过提升单机性能以提高处理性能,而且性价比随着性 ...

  9. 大数据之sqoop

    一.安装: 1 解压然后把mysql的驱动放在$SQOOP_HOME/lib 目录中2. conf/sqoop-en.sh export HADOOP_COMMON_HOME=/home/hadoop ...

  10. mysql数据库性能调优总结积累

    mysql数据库的调优大概可以分为四大块 0 架构调优 ---根据业务 读写分库分表   ---主从 读写分离 1 配置的调优 ---开启缓存查询  设置缓存大小 ---最大连接数设置 ---数据库引 ...