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,一经查实,立即删除!

相关文章

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…

多点认证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联盟已…

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.…

如何使用卡巴斯基急救盘清理感染的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. 当您要处理一台完全…

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;您阅读本文是因为您想知道…

linux压缩和解压缩_Linux QuickTip:一步下载和解压缩

linux压缩和解压缩Most of the time, when I download something it’s a file archive of some kind – usually a tarball or a zip file. This could be some source code for an app that isn’t included in Gentoo’s Portage tree, some documentation for an internal …

Spark架构与作业执行流程简介

2019独角兽企业重金招聘Python工程师标准>>> Spark架构与作业执行流程简介 博客分类&#xff1a; spark Local模式 运行Spark最简单的方法是通过Local模式&#xff08;即伪分布式模式&#xff09;。 运行命令为&#xff1a;./bin/run-example org.apache.spark.exam…

Spring boot整合Mongodb

最近的项目用了Mongodb&#xff0c;网上的用法大多都是七零八落的没有一个统一性&#xff0c;自己大概整理了下&#xff0c;项目中的相关配置就不叙述了&#xff0c;由于spring boot的快捷开发方式&#xff0c;所以spring boot项目中要使用Mongodb&#xff0c;只需要添加依赖和…

nodejs和Vue和Idea

文章目录Vue环境搭建Idea安装Idea中配置Vue环境Node.js介绍npm介绍Vue.js介绍[^3]Idea介绍Vue环境搭建 概述&#xff1a;vue环境搭建&#xff1a;需要npm&#xff08;cnpm&#xff09;&#xff0c;而npm内嵌于Node.js&#xff0c;所以需要下载Node.js。 下载Node.js&#xff1…

Spring MVC上下文父子容器

2019独角兽企业重金招聘Python工程师标准>>> Spring MVC上下文父子容器 博客分类&#xff1a; java spring 在Spring MVC的启动依赖Spring框架&#xff0c;有时候我们在启动Spring MVC环境的时候&#xff0c;如果配置不当的话会造成一些不可预知的结果。下面主要介绍…

12.7 Test

目录 2018.12.7 TestA 序列sequence(迭代加深搜索)B 轰炸bomb(Tarjan DP)C 字符串string(AC自动机 状压DP)考试代码AC2018.12.7 Test题目为2018.1.4雅礼集训。 时间&#xff1a;4.5h期望得分&#xff1a;010010实际得分&#xff1a;010010 A 序列sequence(迭代加深搜索) 显然可…

word文档中统计总页数_如何在Google文档中查找页数和字数统计

word文档中统计总页数Whether you’ve been given an assignment with a strict limit or you just like knowing how many words you’ve written, Google Docs has your back. Here’s how to see exactly how many words or pages you’ve typed in your document. 无论您是…

vue 入门notes

文章目录vue一、js基础二、封装缓存三、组件1、组件创建、引入、挂载、使用2、组件间的传值- 父组件主动获取子组件的数据和方法&#xff08;子组件给父组件传值&#xff09;&#xff1a;- 子组件主动获取父组件的数据和方法&#xff08;父组件给子组件传值&#xff09;&#x…