首先上源码:

一.概要
使用了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. CodeForces 716A Crazy Computer

    题目链接:http://codeforces.com/problemset/problem/716/A 题目大意: 输入 n c, 第二行 n 个整数,c表示时间间隔 秒. 每个整数代表是第几秒.如果 ...

  2. One Night Ultimate Werewolf Daybreak

    http://beziergames.com/products/replacement-tiles-tokens-for-one-night-ultimate-werewolf http://www. ...

  3. css input checkbox和radio样式美化

    参考:https://segmentfault.com/a/1190000004553258 http://www.haorooms.com/post/css_mh_ck_radio 思路都一样的,先 ...

  4. Swift学习二

    // 定义枚举方式一 enum Season { // 每个case定义一个实例 case Spring case Summer case Fall case Winter } // 定义枚举方式二 ...

  5. 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进

    关于在spring  容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 第二 ...

  6. WebGrid Helper with Check All Checkboxes

    WebGrid Helper with Check All Checkboxes myEvernote Link Tuesday, September 13, 2011ASP.NET ASP.NET ...

  7. C# 协变out 、逆变 in

    需求:泛型使用多态性 备注:协变逆变只能修饰 接口和委托 简单理解: 1.使用 in 修饰后为逆变,只能用作形参使用 ,参考 public delegate void Action<in T&g ...

  8. Gradle笔记——Gradle的简介与安装

    本博客对Gradle进行一个简单的介绍,以及它的安装. Gradle介绍 Gradle是一个基于JVM的构建工具,它提供了: 像Ant一样,通用灵活的构建工具 可以切换的,基于约定的构建框架 强大的多 ...

  9. [慢查优化]联表查询注意谁是驱动表 & 你搞不清楚谁join谁更好时请放手让mysql自行判定

    写在前面的话: 不要求每个人一定理解 联表查询(join/left join/inner join等)时的mysql运算过程: 不要求每个人一定知道线上(现在或未来)哪张表数据量大,哪张表数据量小: ...

  10. java 练手 谁是最好的Coder

    Problem A 谁是最好的Coder 时间限制:1000 ms  |  内存限制:65535 KB   描述 计科班有很多Coder,帅帅想知道自己是不是综合实力最强的coder. 帅帅喜欢帅,所 ...