最近在接触深度强化学习的概念,特地也实现了一个基于深度强化学习的俄罗斯方块游戏,这个游戏是完全基于AI自动的,自动学习一个最佳策略,来代替我们完成每一步的选择,还是蛮有意思的。先上个效果图吧,如下所示:

自从20世纪80年代以来,游戏AI产生巨大的变化,诞生了“自主思考型AI”,游戏中的NPC会在游戏中观察及分析,根据玩家的行为做出针对性的应对,不再只是按照一个目标一直走下去,而是更加灵活多样。

自主思考性的AI是基于有限状态机与行为树,也就是多个if-else的组合。有限状态机是以电脑AI的当前状态为主体,通过编写不同的状态之间的转换条件来控制电脑AI,不同的状态下拥有不同的目标、策略与行动。

目前来看的话,强化学习,尤其是深度强化学习是现在游戏的一个火热发展方向,比如围棋里面的阿尔法狗,已经是在围棋界乱杀了,逼得很多围棋手都来学习机器人的围棋策略。

1. 什么是DQN?

DQN(Deep Q-Learning)可谓是深度强化学习(Deep Reinforcement Learning,DRL)的开山之作,是将深度学习与强化学习结合起来从而实现从感知(Perception)到动作( Action )的端对端(End-to-end)学习的一种全新的算法。

2. DQN是如何运算的?

(1)通过Q-Learning使用reward来构造标签

(2)通过experience replay(经验池)的方法来解决相关性及非静态分布问题

(3)使用一个CNN(MainNet)产生当前Q值,使用另外一个CNN(Target)产生Target Q值

3、DQN的网络模型?

4. 以下是本项目的一些配置环境

OS: Windows10
Python: Python3.8(have installed necessary dependencies)
PyQT:PyQt5是Qt v5的Python版本,功能强大复杂,提供QT Designer设计UI(版本无限制)

5. 核心代码展示

5.1 获取下一步的行动

'''获得下一步的行动'''
def getNextAction(self):if self.inner_board.current_tetris == tetrisShape().shape_empty:return Noneaction = None# 当前可操作的俄罗斯方块的direction范围if self.inner_board.current_tetris.shape in [tetrisShape().shape_O]:current_direction_range = [0]elif self.inner_board.current_tetris.shape in [tetrisShape().shape_I, tetrisShape().shape_Z, tetrisShape().shape_S]:current_direction_range = [0, 1]else:current_direction_range = [0, 1, 2, 3]# 下一个可操作的俄罗斯方块的direction范围if self.inner_board.next_tetris.shape in [tetrisShape().shape_O]:next_direction_range = [0]elif self.inner_board.next_tetris.shape in [tetrisShape().shape_I, tetrisShape().shape_Z, tetrisShape().shape_S]:next_direction_range = [0, 1]else:next_direction_range = [0, 1, 2, 3]# 简单的AI算法for d_now in current_direction_range:x_now_min, x_now_max, _, _ = self.inner_board.current_tetris.getRelativeBoundary(d_now)for x_now in range(-x_now_min, self.inner_board.width - x_now_max):board = self.getFinalBoardData(d_now, x_now)for d_next in next_direction_range:x_next_min, x_next_max, _, _ = self.inner_board.next_tetris.getRelativeBoundary(d_next)distances = self.getDropDistances(board, d_next, range(-x_next_min, self.inner_board.width-x_next_max))for x_next in range(-x_next_min, self.inner_board.width-x_next_max):score = self.calcScore(copy.deepcopy(board), d_next, x_next, distances)if not action or action[2] < score:action = [d_now, x_now, score]return action

5.2 计算某一方案的得分

def calcScore(self, board, d_next, x_next, distances):# 下个俄罗斯方块以某种方式模拟到达底部board = self.imitateDropDown(board, self.inner_board.next_tetris, d_next, x_next, distances[x_next])width, height = self.inner_board.width, self.inner_board.height# 下一个俄罗斯方块以某方案行动到达底部后的得分(可消除的行数)removed_lines = 0# 空位统计hole_statistic_0 = [0] * widthhole_statistic_1 = [0] * width# 方块数量num_blocks = 0# 空位数量num_holes = 0# 每个x位置堆积俄罗斯方块的最高点roof_y = [0] * widthfor y in range(height-1, -1, -1):# 是否有空位has_hole = False# 是否有方块has_block = Falsefor x in range(width):if board[x + y * width] == tetrisShape().shape_empty:has_hole = Truehole_statistic_0[x] += 1else:has_block = Trueroof_y[x] = height - yif hole_statistic_0[x] > 0:hole_statistic_1[x] += hole_statistic_0[x]hole_statistic_0[x] = 0if hole_statistic_1[x] > 0:num_blocks += 1if not has_block:breakif not has_hole and has_block:removed_lines += 1# 数据^0.7之和num_holes = sum([i ** .7 for i in hole_statistic_1])# 最高点max_height = max(roof_y) - removed_lines# roof_y做差分运算roof_dy = [roof_y[i]-roof_y[i+1] for i in range(len(roof_y)-1)]# 计算标准差E(x^2) - E(x)^2if len(roof_y) <= 0:roof_y_std = 0else:roof_y_std = math.sqrt(sum([y**2 for y in roof_y]) / len(roof_y) - (sum(roof_y) / len(roof_y)) ** 2)if len(roof_dy) <= 0:roof_dy_std = 0else:roof_dy_std = math.sqrt(sum([dy**2 for dy in roof_dy]) / len(roof_dy) - (sum(roof_dy) / len(roof_dy)) ** 2)# roof_dy绝对值之和abs_dy = sum([abs(dy) for dy in roof_dy])# 最大值与最小值之差max_dy = max(roof_y) - min(roof_y)# 计算得分score = removed_lines * 1.8 - num_holes * 1.0 - num_blocks * 0.5 - max_height ** 1.5 * 0.02 - roof_y_std * 1e-5 - roof_dy_std * 0.01 - abs_dy * 0.2 - max_dy * 0.3return score

至于后面如果有心得了会进一步补充的!

基于深度强化学习的完全AI自动的俄罗斯方块游戏相关推荐

  1. 论文研读——基于深度强化学习的自动驾驶汽车运动规划研究综述

    论文研读--Survey of Deep Reinforcement Learning for Motion Planning of Autonomous V ehicles 此篇文章为论文的学习笔记 ...

  2. 基于深度强化学习训练《街头霸王·二:冠军特别版》通关关底 BOSS -智能 AI 代理项目上手

    文章目录 SFighterAI项目简介 实现软件环境 项目文件结构 运行指南 环境配置 验证及调整gym环境: gym-retro 游戏文件夹 错误提示及解决 Could not initialize ...

  3. 商简智能学术成果|基于深度强化学习的联想电脑制造调度(Lenovo Schedules Laptop Manufacturing Using Deep Reinforcement Learning)

    获取更多资讯,赶快关注上面的公众号吧! 文章目录 摘要 背景介绍 传统方法无法解决现有挑战 解决方案 提升模型表达能力 针对复杂约束的掩码机制 快速模型训练 配置多目标调度优化 结论   本篇论文作为 ...

  4. 谣言止于智者:基于深度强化学习的谣言早期检测模型

    「论文访谈间」是由 PaperWeekly 和中国中文信息学会社会媒体处理专委会(SMP)联合发起的论文报道栏目,旨在让国内优质论文得到更多关注和认可. 谣言一般是指未经核实的陈述或说明,它往往与某一 ...

  5. 基于深度强化学习的区域化视觉导航方法​​

    基于深度强化学习的区域化视觉导航方法 ​​人工智能技术与咨询​​ 本文来自<上海交通大学学报>,作者李鹏等 在环境中高效导航是智能行为的基础,也是机器人控制领域研究的热点之一.实现自主导航 ...

  6. 基于深度强化学习的智能船舶航迹跟踪控制

    基于深度强化学习的智能船舶航迹跟踪控制 人工智能技术与咨询 昨天 本文来自<中国舰船研究> ,作者祝亢等 关注微信公众号:人工智能技术与咨询.了解更多咨询! 0.   引 言 目前,国内外 ...

  7. 基于深度强化学习的机器人运动控制研究进展 | 无模型强化学习 | 元学习

    1.基于深度强化学习的机器人运动控制研究进展 1.1 深度强化学习 1.1.1 强化学习简介: 强化学习(Reinforcement Learning, RL)利用试错机制与环境进行交互,旨在通过最大 ...

  8. 基于深度强化学习的室内场景目标驱动视觉导航

    基于深度强化学习的室内场景目标驱动视觉导航 摘要 介绍 相关工作 AI2-THOR框架 目标驱动导航模型 A.问题陈述 B.公式问题 C.学习设置 D.模型 E.训练协议 F.网络架构 实验 A.导航 ...

  9. 基于深度强化学习的组合优化方法在工业应用中的实践

    <统筹方法平话>中有一个例子曾被收录到语文课本中,讲"烧水泡茶"有五道工序:1.烧开水,2.洗茶壶,3.洗茶杯,4.拿茶叶,5.泡茶,其中前四道工序是泡茶的前提,且各道 ...

  10. 基于深度强化学习的车道线检测和定位(Deep reinforcement learning based lane detection and localization) 论文解读+代码复现

    之前读过这篇论文,导师说要复现,这里记录一下.废话不多说,再重读一下论文. 注:非一字一句翻译.个人理解,一定偏颇. 基于深度强化学习的车道检测和定位 官方源码下载:https://github.co ...

最新文章

  1. 允许root远程登录Solaris
  2. 【Flutter】打开第三方 Flutter 项目
  3. 团队软件库_新环节!新设备!新软件! ——天津市物流大赛创新大揭秘!
  4. 算法导论笔记:06堆排序
  5. [置顶] Java面试题全集(中)
  6. 跟几个程序员聊了聊他们的每月薪资收入
  7. C#中将DLL文件打包到EXE文件
  8. 支付宝牵手全球最大公募基金 上线“帮你投” 800元起投
  9. java基础练习 2
  10. 浅谈FTP服务的几个知识点
  11. STL源码剖析-vector
  12. 8.修改、扩展、重写Magento代码
  13. 得到jar包运行时所在的目录
  14. jmeter录制脚本_jmeter(二)Badboy录制脚本
  15. Java爬虫入门教程 开篇
  16. vscode如何设置大小写转换的快捷键
  17. 做小说网站运营需要注意的要素
  18. 卫星导航系统的发展历史
  19. 硬盘内部硬件结构和工作原理详解
  20. 用html5做心,HTML5 Canvas实现玫瑰曲线和心形图案的代码实例

热门文章

  1. 中国大学排行榜网站的爬取
  2. 【老罗笔记】关于成就的那些事
  3. 如何将图片做成内外边框HTML,如何用html给图片加边框
  4. CC2530看门狗定时器实现1秒定时
  5. 以太网帧各字段的含义_车载以太网(上)
  6. 百家姓中国心头像大全
  7. VR眼镜连接android设备,华为VR眼镜连接电脑教程
  8. linux中firewalld之direct rules和rich rules(转发,伪装)
  9. 基于SSM的手机销售商城设计与实现 文档+项目源码及数据库文件
  10. python社交网络图