QLearning

QLearning并没有直接将这个Q值(q_target是估计值)直接赋予新的Q,而是采用渐进的方式类似梯度下降,朝target迈近一小步,取决于α,这就能够减少估计误差造成的影响。类似随机梯度下降,最后可以收敛到最优的Q值。

一、QLearning算法思维

二、QLearning算法更新思维

1.导入模块

from maze_env import Maze                #环境模块
from RL_brain import QLearningTable      #思考模块

2.更新迭代

def update():#---------------------------------------------------------------------------------#Reapeat(episode):学习100次for episode in range(100):#----------------------------------------------------------------------------------# 初始化 state 的观测值;并开始内循环observation = env.reset()        while True:# 更新可视化环境env.render()#----------------------------------------------------------------------------------# 1°Actionaction = RL.choose_action(str(observation))# 2°获得反馈S'(下一步观测值)和R(当前步奖励)和done (是否是掉下地狱或者升上天堂)observation_, reward, done = env.step(action)# 3°更新Q表:RL 从这个序列 (state, action, reward, state_) 中学习RL.learn(str(observation), action, reward, str(observation_))# 4°S'→state的观测值observation = observation_#------------------------------------------------------------------------------------# 如果掉下地狱或者升上天堂, 这回合就结束了if done:break# 结束游戏并关闭窗口print('game over')env.destroy()if __name__ == "__main__":# 定义环境 env 和 RL 方式env = Maze()RL = QLearningTable(actions=list(range(env.n_actions)))# 开始可视化环境 envenv.after(100, update)env.mainloop()

三、思维决策

1.思维构架

import numpy as np
import pandas as pdclass QLearningTable:# 初始化def __init__(self, actions, learning_rate=0.01, reward_decay=0.9, e_greedy=0.9):# 选行为def choose_action(self, observation):# 学习更新参数def learn(self, s, a, r, s_):# 检测 state 是否存在def check_state_exist(self, state):

2、函数实现

2.1.初始化

  • actions: 所有行为
  • epsilon: 贪婪率e_greesy
  • lr:          学习率α
  • gamma:  奖励衰减γ
  • q_table: Q表
  def __init__(self, actions, learning_rate=0.01, reward_decay=0.9, e_greedy=0.9):self.actions = actions  # a listself.lr = learning_rate # 学习率self.gamma = reward_decay   # 奖励衰减self.epsilon = e_greedy     # 贪婪度self.q_table = pd.DataFrame(columns=self.actions, dtype=np.float64)   # 初始 q_table

2.选行为choose_action

  • if:在贪婪率内则选择最大(防止数值相同 choice乱序)
  • else:随机选择
 def choose_action(self, observation):self.check_state_exist(observation) # 检测本 state 是否在 q_table 中存在# 选择 actionif np.random.uniform() < self.epsilon:  # 选择 Q value 最高的 actionstate_action = self.q_table.loc[observation, :]# 同一个 state, 可能会有多个相同的 Q action value, 所以我们乱序一下action = np.random.choice(state_action[state_action == np.max(state_action)].index)else:   # 随机选择 actionaction = np.random.choice(self.actions)return action

3.学习更新参数(更新Q表)

  def learn(self, s, a, r, s_):self.check_state_exist(s_)  # 检测 q_table 中是否存在 s_ q_predict = self.q_table.loc[s, a]    # 获取Q预测值if s_ != 'terminal':                  # 获取真实值q_target = r + self.gamma * self.q_table.loc[s_, :].max()  # 下个state不是终止符else:q_target = r  # 下个 state 是终止符# 更新Q表:更新对应的state-action 值self.q_table.loc[s, a] += self.lr * (q_target - q_predict)

4.检测Q表中有无当前state—action值

如果还没有当前 state, 那我我们就插入一组全 0 数据, 当做这个 state 的所有 action 初始 values.

def check_state_exist(self, state):if state not in self.q_table.index:# append new state to q tableself.q_table = self.q_table.append(pd.Series([0]*len(self.actions),index=self.q_table.columns,name=state,))

强化学习学习总结(二)——QLearning算法更新和思维决策相关推荐

  1. Boost库学习笔记(二)算法模块-C++11标准

    Boost库学习笔记(二)算法模块-C++11标准 一.综述 Boost.Algorithm是一系列人通用推荐算法的集合,虽然有用的通用算法很多,但是为了保证质量和体积,并不会将太多通用算法通过审查测 ...

  2. 增强式学习:如何使用Q-Learning算法训练围棋机器人

    上一节我们构造出如下结构的神经网络: 本节我们看看如何使用该网络训练围棋机器人.我们在标题中提到Q-Learning,它实际上是一种使用上面网络进行训练的算法流程.首先我们先定义执行Q-Learnin ...

  3. Python学习心得(二) : 更新列表

    今天写程序的时候发现列表的更新有些需要主要的地方. ls=['a','b'] for i in ls: i=i.upper() print(ls) 这样输出的结果ls仍然是['a','b'],若想更新 ...

  4. Mysql学习宝典(二) -- 从更新语句执行流程引出的Mysql各种日志

    三.一条更新SQL 是如何执行的? ​ 在数据库里面,我们说的 update 操作其实包括了更新.插入和删除.更新流程和查询流程有什么不同呢? ​ 基本流程也是一致的,也就是说,它也要经过解析器.优化 ...

  5. 第九篇:强化学习Q-learning算法 通俗介绍

    你好,我是郭震(zhenguo) 今天介绍强化学习第九篇:Q-learning算法 前面我们介绍强化学习基本概念,马尔科夫决策过程,策略迭代和值迭代,这些组成强化学习的基础. 从今天开始逐步介绍常用强 ...

  6. Deep QLearning算法详解(强化学习 Reinforcement Learning)

    一.算法详解 文章最后附有博主自己实现的深度qlearning玩space invader游戏 本文介绍的是基于神经网络的qlearning算法.我们知道传统的qlearning算法只能处理状态和动作 ...

  7. 【强化学习】Q-Learning算法详解

    1 Q-Learning算法简介 1.1 行为准则 我们做很多事情都有自己的行为准则,比如小时候爸妈常说:不写完作业就不准看电视.所以我们在写作业这种状态下,写的好的行为就是继续写作业,知道写完他,我 ...

  8. 【莫烦强化学习】笔记之Q-Learning(一)

    Q-learning简介 行动准则:好的行为能够获得奖励,不好的行为会获得惩罚. 假设你有两个选择:写作业和看电视.你选择连续看电视,被爸妈发现打屁股.你吸取了惨痛的教训,第二次持续认真的写作业. Q ...

  9. 强化学习用 Sarsa 算法与 Q-learning 算法实现FrozenLake-v0

    基础知识 关于Q-learning 和 Sarsa 算法, 详情参见博客 强化学习(Q-Learning,Sarsa) Sarsa 算法框架为 Q-learning 算法框架为 关于FrozenLak ...

  10. Python手写强化学习Q-learning算法玩井字棋

    Q-learning 是强化学习中的一种常见的算法,近年来由于深度学习革命而取得了很大的成功.本教程不会解释什么是深度 Q-learning,但我们将通过 Q-learning 算法来使得代理学习如何 ...

最新文章

  1. php http面向对象编程实例,PHP面向对象编程——PHP对象引用实例代码
  2. c++ qt 编译问题求解答
  3. 机房服务器虚拟化,服务器虚拟化在数据中心机房中的应用
  4. python getchar功能_getchar函数
  5. 通过jconsole监控tomcat JVM 内存、线程、CPU
  6. Hostiko v54.0 – WordPress WHMCS-云服务器VPS主机销售模板源码
  7. 个人博客系统毕业设计开题报告
  8. linux界面唤醒,Linux计算机实现自动唤醒和关闭的方法步骤详解
  9. safari无法调试iphone提示“无可检查的应用程序”的解决方法
  10. 从零到无学单片机——画原理图、PCB
  11. 3分钟快速了解,如何一次通过CISSP考试?
  12. 电商指标之用户留存率
  13. Arduino介绍_硬件
  14. Split过程源码分析
  15. onenote同步问题
  16. STM32中 利用PWM控制步进电机,ARR与PSC值的设定
  17. 哪款视频压缩软件比较好用?
  18. 汇编程序设计:钟表显示
  19. 设置div高度等于屏幕高度
  20. mac电脑开机进入grub界面

热门文章

  1. Android自定义T9拨号键盘,Android拨号盘 支持T9搜索和号码搜索等拨号盘案例
  2. Tomcat8的下载、安装、配置
  3. python中使用什么表示代码块、不需要使用大括号_PYTHON基础语法
  4. 销傲销售过程GSP管理系统功能概述
  5. YOLO系列目标检测后处理-非极大值抑制
  6. 计算机在材料科学领域有哪些应用,计算机在材料科学中的应用分析
  7. 荣耀总裁赵明揭秘华为薪酬制度:不看资历,只看贡献
  8. window 清理maven本地仓库
  9. linux环境下使用logrotate工具实现nginx日志切割
  10. PS抠发丝简单详细方法