关注:决策智能与机器学习,深耕AI脱水干货

作者 | 长风

来源 |  机器学习与数据挖掘实践

强化学习任务通常使用马尔可夫决策过程(Markov Decision Process,简称MDP)来描述,包含五大关键要素:agent(智能体),reward(奖励),action(行为),state(状态),environment(环境)。具体而言:agent处在一个环境中,每个状态为机器对当前环境的感知;agent只能通过动作来影响环境,当agent执行一个动作后,会使得环境按某种概率转移到另一个状态;同时,环境会根据潜在的奖赏函数反馈给机器一个奖赏。

1. 强化学习简介

agent:主要涉及到:策略(Policy),价值函数(Value Function)和模型(Model)。Policy,可以理解为行动指南,让agent执行什么动作,在数学上可以理解为从状态state到动作action的映射,可分为确定性策略(Deterministic policy)和随机性策略(Stochastic policy),前者是指在某特定状态下执行某个特定动作,后者是根据概率来执行某个动作。Value Function,对未来总Reward的一个预测。Model,一个对环境的认知框架,可以预测采取动作后的下一个状态是什么,很多情况下是没有模型的,agent只能通过与环境互动来提升策略。

state:可以细分为三种,Environment State,Agent State和Information State。Environment State是agent所处环境包含的信息,简单理解就是很多特征数据,也包含了无用的数据。Agent State是输入给agent的信息,也就是特征数据。Information State是一个概念,即当前状态包含了对未来预测所需要的有用信息,过去信息对未来预测不重要,该状态就满足马尔科夫性(Markov Property)。Environment State,Agent State都可以是Markov Property。

environment:可以分为完全可观测环境(Fully Observable Environment)和部分可观测环境(Partially Observable Environment)。Fully Observable Environment就是agent了解了整个环境,显然是一个理想情况。Partially Observable Environment是agent了解部分环境的情况,剩下的需要靠agent去探索。

2.项目框架和简介

AlphaGo 将AI和围棋强势的摆到大众面前,围棋作为人类的娱乐游戏中复杂度最高的一个,它横竖各有 19 条线,共有 361 个落子点,状态空间高达 10^171,对于新手和强化学习入门不是特友好,而五子棋是博弈游戏当中较简单的一种玩法,规则、赢法都很简单,故此项目初期先对五子棋进行实现,根据进展,后期再逐渐深入。

该项目涉及到的知识主要是强化学习,随着项目进行,我们需要并行的解决相关理论知识:1.强化学习的主要挑战是什么?2.如何用数学术语表示强化学习?3.如何制定长期策略?4.如何估计未来的报酬?5.如何解决状态空间太大的问题?6.如何让强化学习稳定发挥作用?同时阅读 Key Papers in Deep RL

  1. Model-Free RL

  2. Exploration

  3. Transfer and Multitask RL

  4. Hierarchy

  5. Memory

  6. Model-Based RL

  7. Meta-RL

  8. Scaling RL

  9. RL in the Real World

  10. Safety

  11. Imitation Learning and Inverse Reinforcement Learning

  12. Reproducibility, Analysis, and Critique

  13. Bonus: Classic Papers in RL Theory or Review

项目框架

  • Env: 利用PyQt5编写界面,对棋盘环境进行进行封装

  • Agent: 处理与环境的交互,并保存历史转移状态等信息

  • Model: 实现不同的policy,来实现具体的一步下法

具体目录结构如下所示:

3. 功能实现框架

3.1 Environment可视化

Junior AlphaGo实现的棋盘可视化如上图所示,主要利用PyQt5实现以下功能:棋盘初始化,鼠标移动监听,agent调用,落子画图,胜负判断。

class GoBang(QWidget):def __init__(self):super().__init__()self.init_ui()def init_ui(self):self.chessboard = ChessState()  # 棋盘类palette1 = QPalette()  # 设置棋盘背景palette1.setBrush(self.backgroundRole(), QtGui.QBrush(QtGui.QPixmap('img/chessboard.jpg')))self.setPalette(palette1)self.setCursor(Qt.PointingHandCursor)  # 鼠标变成手指形状self.resize(WIDTH, HEIGHT)  # 固定大小 540*540self.setMinimumSize(QtCore.QSize(WIDTH, HEIGHT))self.setMaximumSize(QtCore.QSize(WIDTH, HEIGHT))self.setWindowTitle("Junior-AlphaGo")  # 窗口名称self.setWindowIcon(QIcon('img/black.png'))  # 窗口图标self.black = QPixmap('img/black.png')self.white = QPixmap('img/white.png')self.turn = Color.BLACKself.pre_x, self.pre_y = 1, 1000self.mouse_point = LaBel(self)  # 将鼠标图片改为棋子self.mouse_point.setScaledContents(True)tmp = self.black if HUMAN_FIRST else self.whiteself.mouse_point.setPixmap(tmp)  # 加载黑棋self.mouse_point.setGeometry(270, 270, PIECE, PIECE)self.pieces = [LaBel(self) for i in range(225)]  # 新建棋子标签,准备在棋盘上绘制棋子for piece in self.pieces:piece.setVisible(True)  # 图片可视piece.setScaledContents(True)  # 图片大小根据标签大小可变self.mouse_point.raise_()  # 鼠标始终在最上层self.ai_down = True  # AI已下棋,主要是为了加锁,当值是False的时候说明AI正在思考,这时候玩家鼠标点击失效,要忽略掉 mousePressEventself.setMouseTracking(True)self.show()if not HUMAN_FIRST:self.call_ai()

3.2 agent 和 Environment交互

上文中的启动界面的线程暂称为UI线程,界面执行命令时都在自己的UI线程中。如果我们在UI线程中执行比较复杂的操作(网络计算,大计算量),如果在UI线程中执行网络连接和数据库操作等耗时的操作,界面会被卡住,Windows下有可能会出现“无响应”的警告。阻塞UI线程会降低用户体验和应用稳定性。因此我们可以把agent的计算操作放在线程中去执行,继承PyQt中的线程类

QtCore.QThread ,我们可以复写run函数来执行我们要的操作。

QThread可以使用 QtCore.pyqtSignal 来与environment交互和传输数据,将当前的棋盘信息(state)传入,然后将当前策略计算的结果(在哪个点位落子)返回,并在环境中画出。

class AI(QtCore.QThread):
"""定义线程类执行AI的算法"""finishSignal = QtCore.pyqtSignal(int, int)def __init__(self, state, role, parent=None):super(AI, self).__init__(parent)self.agent = NaiveAgent(15, 15, role)
#self.agent = SarsaAgent(15, 15, role, False, 'model/sarsa_default_2019-11-21_17:54:09.ckpt-226184')self.x, self.y, _ = self.agent.interact(None, state, False, True)def run(self):self.finishSignal.emit(self.x, self.y)

3.3 agent 和 用户相互落子

def mousePressEvent(self, e):  # 玩家下棋
if e.button() == Qt.LeftButton and self.ai_down:x, y = e.x(), e.y()  # 鼠标坐标i, j = self.pixel2coordinate(x, y)  # 对应棋盘坐标
if i is not None and j is not None:  # 棋子落在棋盘上,排除边缘
if self.chessboard._state[i][j] == Color.EMPTY:  # 棋子落在空白处
if self.draw(i, j):
self.call_ai()

4. 总结

本文完成agent框架和environment的实现,并将environment可视化,后续强化学习的相关算法只需要在agent进行迭代即OK。

交流合作

请加微信号:yan_kylin_phenix注明姓名+单位+从业方向+地点,非诚勿扰。

手把手带撸Junior AlphaGo算法「AI工程论」相关推荐

  1. 复杂环境下的高精度定位「自动驾驶」「AI工程落地」

    关注:决策智能与机器学习,深耕AI脱水干货 作者:DataFun&小马智行  来源:焉知自动驾驶 转载请联系作者 首先,定位(Location)和导航(Navigation)技术是负责实时提供 ...

  2. 自动驾驶 | 全面解读小马智驾的解决方案「AI工程落地」

    关注:耕智能,深耕AI脱水干货 作者:Pony.ai  来源:汽车电子与软件 转载请联系作者 "我们相信保持谨慎.严谨的理念与做法是通往未来的唯一正途,没有捷径.这种信仰正是指引我们研发.测 ...

  3. 「重磅」轮式机器人自平衡+足式机器人走梅花桩「腾讯AI」「AI工程落地」

    关注:决策智能与机器学习,深耕AI脱水干货 作者:腾讯AI实验室 来源:腾讯AI实验室 转载请联系作者 近日,腾讯公布了其在移动机器人研究方面的新进展:四足移动机器人 Jamoca 和自平衡轮式移动机 ...

  4. 「谷歌等」四足机器人2020重要研究进展+宇树狗舞蹈放送「AI工程落地」

    作者:小A  来源:Unitree宇树科技   转载请联系作者 舞蹈时间-来自宇树科技的A1小狗 2020重要研究进展 一.谷歌和加利福尼亚大学伯克利分校(Berkeley)深入研究了四足生物的运动姿 ...

  5. 全流程设计自动驾驶「AI工程落地」

    关注:决策智能与机器学习,深耕AI脱水干货 作者:Aimee  来源:焉知自动驾驶 转载请联系作者 提要:面向自动驾驶,本文用基于模型的系统工程思维梳理了从需求到产品.从逻辑架构到物理架构的设计全过程 ...

  6. CLAHE算法实现图像增强「AI工程论」

    关注:决策智能与机器学习,深耕AI脱水干货 作者 |  机器学习炼丹术 来源 |  机器学习炼丹术 1 基本概述 CLAHE是一个比较有意思的图像增强的方法,主要用在医学图像上面.之前的比赛中,用到了 ...

  7. 腾讯 | 自动驾驶仿真平台TAD Sim 2.0「AI工程论」

    关注:决策智能与机器学习,深耕AI脱水干货 作者 | 易车 来源 |  自动驾驶测试验证技术创新论坛 报道 |  GRCC 随着自动驾驶领域硬件.算法等方面的快速发展,虚拟仿真技术在自动驾驶研发和测试 ...

  8. DEMO | AI预测股票短期走势「AI工程论」

    关注:决策智能与机器学习,深耕AI脱水干货 作者 | Mat Steininger 来源 |  Towards data science 前言 你有没有听人说过,他们多么希望能回到过去,投资苹果或亚马 ...

  9. 低成本高精度导航定位技术 | 自动驾驶「AI工程论」

    关注:决策智能与机器学习,深耕AI脱水干货 作者 |  子路 来源 |  高德技术 导读 地图软件现在已成为人们出行必备的重要辅助工具.为了实现准确的导航,首先必须准确确定人或车的当前位置.因此,定位 ...

  10. 手把手带你拆解 LRU 算法

    手把手带你拆解 LRU 算法 文章目录 手把手带你拆解 LRU 算法 概述 [146. LRU 缓存](https://leetcode-cn.com/problems/lru-cache/) LRU ...

最新文章

  1. 忍不住要发感慨,我的这个罗技鼠真好用...
  2. LSTM输入输出结构
  3. JavaScript技术篇 - js的null值判断,js的undefined的判断,js的null与undefined的2种区分方法
  4. C# WinForm中 获得当前鼠标所在控件 或 将窗体中鼠标所在控件名显示在窗体标题上...
  5. 日期函数:取过去或者将来多少天的日期
  6. hbase集群重启后异常删除zookeeper中的元数据
  7. 转:【图文教程】创建Xcode自定义模板
  8. C++入门经典-例4.1-声明、定义和使用函数
  9. android客户端和服务器实现传图片和文件
  10. Mac 上 Sublime Text3-Package control-console安装失败解决方案
  11. Courses hdu 1083(匹配)
  12. c语言 勒让德多项式,2406: C语言习题 求n阶勒让德多项式(示例代码)
  13. 浙江计算机三级考试单片机试题,历年浙江省计算机三级单片机
  14. 实话实说?基金公司“存量时代”的创新
  15. 4、Hive数据仓库——加载数据
  16. 2021-09-06
  17. 基础复习——TextView——文本显示——字体颜色——背景颜色——字体大小——@color/teal_200——@string/hello...
  18. 弥散张量成像(diffusion tensor imaging,DTI)常用指标
  19. SCAU程序设计在线实训平台_考试_计算智能_ 最小的特殊数字
  20. TcaplusDB君 · 行业新闻汇编(四

热门文章

  1. 业内最小体积SOP8封装,带UART输出,高精度免校准计量芯片HLW8110
  2. 图像处理库 FreeImage的简述
  3. 深度森林(gcforest)原理讲解以及代码实现
  4. PHP在线预览word文档的功能
  5. 基于微信小程序的竞赛管理系统
  6. Cisco packe tracer 6.2安装教程
  7. 怎么在局域网中设置共享文件夹?
  8. glnxa64 matlab 什么版本_Matlab 2014a 免费版-Matlab2014 Mac版下载 V2014b免费版-PC6苹果网...
  9. 小程序 | 如何清除手机上小程序缓存
  10. css规则、选择器(基础、复合)/选择器优先级