Q_learning简介与实例

1、算法思想

QLearning是强化学习算法中value-based的算法,Q即为在某一环境下,Q(state,action)在某一时刻的 s 状态下(s∈S),采取 动作a (a∈A)动作能够获得收益的期望,环境会根据agent的动作反馈相应的回报reward r(分数)。

所以算法的主要思想就是将State与Action构建成一张Q-table来存储Q值,然后根据Q值来选取能够获得最大的收益的动作。

在这里插入图片描述

2、实例与核心公式

在这里插入图片描述
实例:从起点出发到达终点圆圈为胜利——加分,碰到三角为失败——扣分。第一轮是随机走,直到有了得分就会高概率按照高分走。

  • 智能体(Agent)——正方体
  • 环境状态(environment)——这里以tk窗体模拟
  • 奖励(reward)——对动作的奖惩分数
  • 动作(action)——上下左右

可以将问题抽象成一个马尔科夫决策过程。

在每个格子都算是一个状态s
q(a | s)是在s状态下采取动作a策略
p(s’ | s,a)为在s状态下选择a动作转换到下一个状态s’的概率
R(s’ | s,a)表示在s状态下采取a动作转移到s’的奖励reward

目标就是找到一条能够到达终点获得最大奖赏的策略,获取最大奖赏公式:
在这里插入图片描述

Qlearning的主要优势就是使用了时间差分法TD(融合了蒙特卡洛和动态规划)能够进行离线学习, 使用贝尔曼(bellman)方程可以对马尔科夫过程求解最优策略。
详见:时间差分法

核心公式
在这里插入图片描述

更新公式
在这里插入图片描述

核心代码:

import numpy as np
import random
from environment import Env
from collections import defaultdictclass QLearningAgent:def __init__(self, actions):# actions = [0, 1, 2, 3]self.actions = actions      # 动作self.learning_rate = 0.01   # 学习率self.discount_factor = 0.9  # 折扣因子self.epsilon = 0.1          # [ˈepsɪlɒn]self.q_table = defaultdict(lambda: [0.0, 0.0, 0.0, 0.0])# 采样 <s, a, r, s'>def learn(self, state, action, reward, next_state):current_q = self.q_table[state][action]# 贝尔曼方程更新new_q = reward + self.discount_factor * max(self.q_table[next_state])self.q_table[state][action] += self.learning_rate * (new_q - current_q)# 从Q-table中选取动作def get_action(self, state):if np.random.rand() < self.epsilon:# 贪婪策略随机探索动作action = np.random.choice(self.actions)else:# 从q表中选择state_action = self.q_table[state]action = self.arg_max(state_action)  # 选组最大效益动作return action# 选取最大分数@staticmethoddef arg_max(state_action):max_index_list = []max_value = state_action[0]for index, value in enumerate(state_action):if value > max_value:max_index_list.clear()max_value = valuemax_index_list.append(index)elif value == max_value:max_index_list.append(index)return random.choice(max_index_list)if __name__ == "__main__":env = Env()     # 初始化tk窗口agent = QLearningAgent(actions=list(range(env.n_actions)))  # 初始化物体实例for episode in range(1000):state = env.reset()while True:env.render()# agent产生动作action = agent.get_action(str(state))next_state, reward, done = env.step(action)# 更新Q表 -- 核心更新公式agent.learn(str(state), action, reward, str(next_state))state = next_stateenv.print_value_all(agent.q_table)# 当到达终点就终止游戏开始新一轮训练if done:break

另一Q learning 实例:Flappy Bird(飞扬的小鸟 )
Q learning实例:Flappy Bird
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/278746.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

吴颖二:12.27 午评 地缘政治一波未平一波又起,千三可到?

前言&#xff1a;圣诞节后首个交易日&#xff0c;金银油均走出了大行情。美国因导弹项目制裁朝鲜两名官员&#xff0c;地缘局势再升温黄金本周能否突破1300关口&#xff1f;油价刷新两年半高位后&#xff0c;一个重要指标却已暗示短期内或面临风险…… 朝鲜局势进一步恶化的同时…

2-1 gradle安装

因为Gradle是基于JVM的&#xff0c;所以一定要确保本机已经安装了JDK&#xff0c;我们可以通过java -version来验证一下是否已经安装了JDK。 bin目录里面是两个可执行文件&#xff0c;一个是Windows下面的可执行文件&#xff0c;还有一个就是类Unix文件系统的可执行文件。所有的…

Django中session和cookie简单的使用

一、简单的理解 session和cookie是request下的两个对象&#xff0c;操作他们的值就是在操作字典&#xff0c;设置他们的属性就是调用方法。 会话&#xff08;Session&#xff09;跟踪是Web程序中常用的技术&#xff0c;用来跟踪用户的整个会话。Web应用程序是使用HTTP协议传输…

摄影中的曝光补偿是什么?

When you use your camera in some automatic modes like Program—or one of the semi-manual modes like Aperture Priority or Shutter Speed Priority—you don’t give up total control over everything: you can still control the exposure using exposure compensatio…

ajax回调打开新窗体防止浏览器拦截方法

2019独角兽企业重金招聘Python工程师标准>>> 问题剖析&#xff1a; function click_fun(){ window.open("www.baidu.com");//能打开 $.ajax({ url: ${pageContext.request.contextPath}/activity/savePrizes.htm, type: post, dataType: json, data: data…

ES6学习--对象属性的遍历

ES6一共有5种方法可以遍历对象的属性。 &#xff08;1&#xff09;for...in for...in循环遍历对象自身的和继承的可枚举属性&#xff08;不含Symbol属性&#xff09;。 &#xff08;2&#xff09;Object.keys(obj) Object.keys返回一个数组&#xff0c;包括对象自身的&#xff…

多点认证wi-fi_准备使用Wi-Fi 6:认证将于2019年第三季度启动

多点认证wi-fiThe Wi-Fi Alliance already announced Wi-Fi 6 back in October. Today, it’s announcing the details of the Wi-Fi 6 certification process, which will launch in the third quarter of 2019. Expect many new Wi-Fi 6 devices later this year. Wi-Fi联盟已…

jQuery初识和常用事件(一)

文章目录一、jQuery二、入口函数三、选择器选择器小结 ★全部选择器参考 ☆四、常用的 jQuery 事件方法事件写法鼠标事件元素事件键盘事件文档/窗口事件全部事件方法参考 ☆五、效果事件显示与隐藏&#xff1a;hide&#xff0c;show&#xff0c;toggle淡入和淡出&#xff1a;fa…

nginx内嵌变量

FORWARD:http://tengine.taobao.org/nginx_docs/cn/docs/http/ngx_http_core_module.html#variables ngx_http_core_module模块支持内嵌变量&#xff0c;变量名与Apache服务器对应。 首先&#xff0c;这些变量可以表示客户端的请求头字段&#xff0c;诸如$http_user_agent、$ht…

pdf文档遇到了共享冲突_如何将链接共享为PDF格式的Google文档链接

pdf文档遇到了共享冲突Using Google Docs is a great way to collaborate on and share documents. Sometimes, though, you want to provide somebody with a PDF instead of an editable document. Google Docs now lets you edit your sharing link to provide a PDF. Best …

Visual Studio 2019 preview中体验C# 8.0新语法

准备工作&#xff1a; Visual Studio 2019 Preview版本中并没有包含所有的C# 8.0的新功能&#xff0c;但目前也有一些可以试用了。在开始之前&#xff0c;需要进行入两项设置&#xff1a; 将Framework设置为.net core 3.0 将C#语法设置为8.0 也可以直接编辑.csproj文件&#x…

jQuery 对HTML的操作(二)

文章目录一、jQuery获取、设置HTML标签的内容和属性获得内容 - text()、html() 以及 val()获取属性 - attr()&#xff0c;prop()二、增删 HTML 的内容增加删除三、操作CSSaddClass 添加removeClass 删除toggleClass 切换css 获取与设置所有操作html、css方法参考 ☆四、操作元素…

roku能不能安装软件_如何在Roku中使用Google Assistant

roku能不能安装软件As more of our devices connect to each other, it’s always nice to know that different products from different companies work together. A Chromecast isn’t expensive, but being able to use your TV directly with Google Assistant is better.…

在线建立或重做mysql主从复制架构方法(传统模式和GTID模式)【转】

mysql主从复制架构,是mysql数据库主要特色之一&#xff0c;绝大多数公司都有用到。 而GTID模式是基于事务的复制模式的意思&#xff0c;发展到现在也是越来越多人用。 以前很多文章&#xff0c;介绍搭建mysql主从复制架构&#xff0c;是需要停止应用服务来做的,对于生产环境&am…

面试学习资料

1 Java面试资料总结 &#xff08;github推荐指数高&#xff09; 2 后端架构师 1. 综合 《Java 面试题 —— 老梁 Java 面试通关要点汇总集》《Java 面试题 —— 老徐 Java 初中级准备的面试题》《Java 面试题 —— 零度 Java 面试题系列》《Java 面试题 —— 东黄的学习方法和面…

jQuery对Ajax的封装应用(三)

文章目录一、Ajax二、load三、ajax&#xff08;参数&#xff09;&#xff0c;get&#xff0c;set$.ajax$.ajax的get、post简写形式四、ajax全部方法参考 ☆一、Ajax AJAX 是与服务器交换数据的技术&#xff0c;它在不重载全部页面的情况下&#xff0c;实现了对部分网页的更新。…

如何使用卡巴斯基急救盘清理感染的PC

When you’re dealing with a PC that is completely infected in viruses, sometimes the best thing to do is reboot into a rescue disk and run a full virus scan from there. Here’s how to use the Kaspersky Rescue Disk to clean an infected PC. 当您要处理一台完全…

2018.12.08 codeforces 946D. Timetable(背包)

传送门 题意简述&#xff1a;有一个人上n天课&#xff0c;每天有m个小时的时间安排表&#xff08;一个01串&#xff09;&#xff0c;为1表示要上课&#xff0c;否则不上课&#xff0c;求出如果可以最多翘kkk节课这nnn天在校待的总时间的最小值&#xff08;一天必须在所有课上完…

jQuery杂项进阶(四)

文章目录一、$ 的替换二、使用JSONP实现跨域三、jQuery 杂项方法、实用工具、回调对象、延迟对象参考 ☆四、jQuery 自身属性参考 ☆五、jQuery 插件介绍和参考 ☆jQuery 树型菜单插件(Treeview)jQuery Validate表单验证&#xff0c;jQuery Password Validation&#xff08;密码…

什么是WLIDSVC.EXE和WLIDSVCM.EXE,它们为什么运行?

You’re no doubt reading this article because you’re wondering what those two processes are doing cluttering up Task Manager, and also wondering why they are in capital letters. You’ve come to the right place. 毫无疑问&#xff0c;您阅读本文是因为您想知道…