【RL】强化学习入门:从基础到应用

        本篇文章是博主强化学习RL领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章强化学习:

       强化学习(1)---《【RL】强化学习入门:从基础到应用》

【RL】强化学习入门:从基础到应用

目录

1. 引言

2. 强化学习的基本概念

采用猫抓老鼠来简单介绍一下

2.1 代理(Agent)与环境(Environment)

2.2 状态(State)、动作(Action)与奖励(Reward)

3. 强化学习的目标

4. 马尔可夫决策过程(MDP)

4.1 MDP定义

4.2 状态转移与奖励函数

5. 值函数与策略

5.1 值函数(Value Function)

5.2 策略(Policy)

5.3 Q值(Q-value)

6. 强化学习算法

6.1 动态规划

6.2 蒙特卡罗方法

6.3 时序差分学习

[Python] Q-learning实现

[Results] 运行结果

[Notice]  注意事项


1. 引言

        强化学习(Reinforcement Learning, RL)是机器学习的一个重要分支,它使得智能体通过与环境的互动来学习如何选择最优动作,以最大化累积奖励。近年来,随着深度学习技术的发展,强化学习取得了显著的进展,尤其在复杂任务中的表现令人瞩目。

2. 强化学习的基本概念

采用猫抓老鼠来简单介绍一下

        想象一下,有一只猫在一个房间里追逐老鼠。猫可以在房间内移动(例如,上、下、左、右),并试图捕捉到老鼠。每当猫靠近老鼠时,它会得到正反馈(奖励),而如果猫远离老鼠,则会受到负反馈(惩罚)。猫通过这种方式不断调整自己的策略,以便更有效地捕捉老鼠。

2.1 代理(Agent)与环境(Environment)

        在强化学习中,代理是执行动作的实体,而环境则是代理所处的外部系统。代理通过观察环境的状态并采取行动,与环境进行交互。

2.2 状态(State)、动作(Action)与奖励(Reward)

  • 状态(S):环境在某一时刻的描述。
  • 动作(A):代理在当前状态下可以采取的行为。
  • 奖励(R):代理执行动作后,环境返回给代理的反馈,用于衡量动作的好坏。

3. 强化学习的目标

        强化学习的目标是学习一个策略,使得代理在长期内获得的累积奖励最大化。

强化学习流程图如下:

4. 马尔可夫决策过程(MDP)

4.1 MDP定义

马尔可夫决策过程是正式描述强化学习问题的工具。它由五个元素组成:

  • 状态集 ( S )
  • 动作集 ( A )
  • 状态转移概率 ( P(s'|s,a) )
  • 奖励函数 ( R(s,a) )
  • 折扣因子 ( \gamma )

4.2 状态转移与奖励函数

        ( V(s) )状态转移概率描述了在状态 ( s ) 下执行动作 ( a ) 后转移到新状态 ( s' ) 的概率。而奖励函数则返回执行该动作后获得的即时奖励。

5. 值函数与策略

5.1 值函数(Value Function)

        值函数用于评估状态或状态-动作对的“好坏”。我们定义一个状态值函数 ( V(s) ) 和一个动作值函数 ( Q(s, a) )。

[ V(s) = \mathbb{E} \left[ \sum_{t=0}^{\infty} \gamma^t R_t | S_0 = s \right] ]

[ Q(s, a) = \mathbb{E} \left[ \sum_{t=0}^{\infty} \gamma^t R_t | S_0 = s, A_0 = a \right] ]

5.2 策略(Policy)

        策略是从状态到动作的映射,可以是确定性的(每个状态对应一个动作)或随机性的(每个状态对应一个动作概率分布)。

5.3 Q值(Q-value)

        Q值表示在状态 ( s ) 下执行动作 ( a ) 后,未来可能获得的累积奖励。通过优化Q值,我们可以找到最优策略,使得在每个状态下选择的动作能最大化预期奖励。

[ Q(s, a) = R(s, a) + \gamma \sum_{s'} P(s'|s,a) V(s') ]

其中:

  • ( R(s, a) ) 是在状态 ( s ) 下执行动作 ( a ) 得到的即时奖励。
  • ( \gamma ) 是折扣因子,用于权衡当前奖励与未来奖励的重要性。
  • ( P(s'|s,a) ) 是从状态 ( s ) 执行动作 ( a ) 转移到状态 ( s' ) 的概率。

6. 强化学习算法

        强化学习有多种算法,这里我们介绍几种主要的方法:

6.1 动态规划

        动态规划方法依赖于环境模型,适用于已知状态转移和奖励函数的情况。动态规划的基本思想是利用已知的状态值估计来更新其他状态值,常用的方法包括价值迭代和策略迭代。

价值迭代

        价值迭代通过反复更新所有状态的值,直到收敛:

[ V_{k+1}(s) = \max_a \left( R(s,a) + \gamma \sum_{s'} P(s'|s,a)V_k(s') \right) ]

策略迭代

        策略迭代则交替进行策略评估和策略改进,直到策略不再改变。

6.2 蒙特卡罗方法

        蒙特卡罗方法基于实际经验进行学习,不需要环境模型。它通过多次模拟来估计状态值或动作值,利用历史数据计算平均奖励。

[ V(s) = \frac{1}{N} \sum_{i=1}^{N} G_i ]

其中 ( G_i ) 是从状态 ( s ) 开始的回报,( N ) 是经历过的样本数。

6.3 时序差分学习

        时序差分学习结合了动态规划和蒙特卡罗方法,在每一步更新中利用当前估计来调整值函数。主要的两种方法是Q学习和SARSA。

6.3.1 Q学习

        Q学习是一种无模型的离线学习算法,通过不断更新Q值表来学习最优策略。其更新公式为:

[ Q(s, a) \leftarrow Q(s, a) + \alpha \left( R + \gamma \max_{a'} Q(s', a') - Q(s, a) \right) ]

其中 ( \alpha ) 是学习率。

6.3.2 SARSA

SARSA(State-Action-Reward-State-Action)是一种在线学习方法,更新过程考虑了代理所采取的具体动作。其更新公式为:

[ Q(s, a) \leftarrow Q(s, a) + \alpha \left( R + \gamma Q(s', a') - Q(s, a) \right) ]


[Python] Q-learning实现

""" Q-learning实现时间:2024.07.27环境:gym-taxi作者:不去幼儿园
"""
import numpy as np  # 导入NumPy库,用于数值计算
import random  # 导入random库,用于随机数生成
import gym  # 导入OpenAI Gym库# 创建Taxi环境并指定渲染模式为人类可视化
env = gym.make("Taxi-v3", render_mode="human")# 超参数设置
num_episodes = 1000  # 训练的总轮数
learning_rate = 0.1  # Q学习的学习率
discount_factor = 0.99  # 折扣因子,用于未来奖励计算
exploration_prob = 1.0  # 初始探索概率
exploration_decay = 0.995  # 探索概率衰减率
min_exploration_prob = 0.01  # 最小探索概率# 初始化Q表,行表示状态,列表示动作,初始值为0
q_table = np.zeros([env.observation_space.n, env.action_space.n])# 开始Q-learning算法的主循环
for episode in range(num_episodes):state, _ = env.reset()  # 重置环境并获取初始状态done = False  # 设置done标志,表示当前回合未结束while not done:  # 当回合未结束时循环# 根据探索策略选择动作if random.uniform(0, 1) < exploration_prob:action = env.action_space.sample()  # 随机选择一个动作(探索)else:action = np.argmax(q_table[state])  # 选择Q值最大的动作(利用)# 执行动作并获取反馈next_state, reward, done, truncated, info = env.step(action)  # 解包五个返回值# 更新Q值q_table[state][action] += learning_rate * (reward + discount_factor * np.max(q_table[next_state]) - q_table[state][action])# 打印当前获得的奖励print(f'Episode {episode}, Step Reward: {reward}')# 更新当前状态state = next_state# 衰减探索概率exploration_prob = max(min_exploration_prob, exploration_prob * exploration_decay)# 测试学习效果
total_reward = 0  # 总奖励初始化为0
state, _ = env.reset()  # 重置环境以开始测试
done = False  # 设置done标志,表示测试回合未结束while not done:  # 当测试回合未结束时循环action = np.argmax(q_table[state])  # 选择Q值最大的动作next_state, reward, done, truncated, info = env.step(action)  # 执行动作并解包返回值total_reward += reward  # 累加总奖励# 渲染当前状态以进行可视化env.render()# 打印每一步获得的奖励print(f'Step Reward: {reward}')# 输出测试的总奖励
print(f'Total reward: {total_reward}')
env.close()  # 关闭环境

[Results] 运行结果


[Notice]  注意事项

        在Gym 0.26.2版本中,env.reset()env.step(action)的返回值都发生了变化。具体来说:

  • env.reset()现在返回一个包含状态和额外信息的元组。
  • env.step(action)函数只返回四个值:next_state, reward, done, info
  • 在其他版本可能step()方法返回的内容是一个包含五个元素的元组:(next_state, reward, done, info)


    出现错误:AssertionError: Something went wrong with pygame. This should never happen.
  • 表明在调用 render 方法时出现了问题,主要是因为需要指定渲染模式。Gym 在某些版本中要求在创建环境时明确指定渲染模式,以便正确地显示图形。

解决办法:

  • 1.指定渲染模式:当您创建环境时,使用 render_mode 参数来确定所需的渲染方式。例如:
env = gym.make("Taxi-v3", render_mode="human")  # 使用人类可视化的方式

 常见的 render_mode 选项包括:

  "human":以用户友好的方式显示环境。如果运行在没有图形界面的服务器上,可能会失败。"rgb_array":返回一个 RGB 数组,可以用于绘图或其他处理

  • 2.确保 Pygame 安装正常:由于 Taxi 环境使用 Pygame 进行渲染,请确保您的系统上已正确安装 Pygame。在 Anaconda 环境中安装 Pygame 的命令为:
  • pip install pygame
    

        文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者私信联系作者。

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

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

相关文章

JDBC介绍及使用

目录 JDBC概述 JDBC概念 JDBC本质 JDBC好处 JDBC快速入门 JDBC API详解 DriverManager Connection Statement ResultSet PreparedStatement 数据库连接池 数据库连接池简介 数据库连接池实现 Driud使用 JDBC练习 JDBC概述 JDBC概念 JDBC 就是使用Java语言操作…

Docker Compose V2 安装 ClickHouse v20.6.8.5 经验分享

前言 ClickHouse 是一款开源的分布式列式数据库管理系统,专门设计用于高性能的大数据分析和查询。 目前项目中用到的一个场景是将mongo的数据同步到clickhouse,使用clickhouse做报表,后续也将分享同步和使用方案 使用 Docker Compose 部署单机版,小项目和自己测试够用了,生…

海外短剧CPS系统,平台短剧出海推广方案

随着国内短剧市场的蓬勃发展与国际化趋势的加速&#xff0c;海外观众对于高质量、富有创意的短剧内容需求日益增长。在此背景下&#xff0c;搭建一个高效、便捷的海外短剧CPS&#xff08;Cost Per Sales&#xff0c;按销售分润&#xff09;分销系统平台&#xff0c;能为内容创作…

实战内测-某内测项目站点FUZZ到Sql注入

0x1 前言 下面给师傅们分享的案例呢是前段时间实战的一个站点&#xff0c;也是我朋友前段时间让我测的一个站点。整体的测试流程也还算ok&#xff0c;然后里面有些细节要是对师傅们有帮助可以收藏下&#xff0c;后面主要是利用FUZZ打了一个sql注入漏洞上去。 0x2 fuzz和sql结…

Halcon Blob分析

斑点分析的思路&#xff1a;在图像中&#xff0c;相关对象的像素可以通过其灰度值来识别。例如下图的组织颗粒。这些颗粒是凉的&#xff0c;而液体是暗的&#xff0c;通过选择明亮像素(阈值)&#xff0c;可以很容易地检测到颗粒。在需要应用中&#xff0c;这种简单的暗像素和亮…

HarmonyOS持久化存储数据Preference

Preference首选项 首选项&#xff1a;首选项为应用提供Key-Value键值型的数据处理能力&#xff0c;支持应用持久化轻量级数据&#xff0c;并对其修改和查询。数据存储形式为键值对&#xff0c;键的类型为字符串型&#xff0c;值的存储数据类型包括数字型、字符型、布尔型以及这…

【优秀python web设计】基于Python flask的猫眼电影可视化系统,可视化用echart,前端Layui,数据库用MySQL,包括爬虫

1 绪论 1.1 设计背景及目的 猫眼电影作为国内知名的电影信息网站&#xff0c;拥有海量的电影信息、票房数据和用户评价数据。这些数据对于电影市场的研究和分析具有重要意义。然而&#xff0c;由于数据的复杂性和数据来源的多样性&#xff0c;如何有效地采集、存储和展示这些数…

复现波恩大学的“LiDiff:基于扩散模型实现3D LiDAR场景补全!”(点云补全)项目

本文的主要工作就是复现下述论文中的算法。 该论文全称&#xff1a;Scaling Diffusion Models to Real-World 3D LiDAR Scene Completion 一、准备工作 首先通读readme.md文件的内容&#xff0c;了解所需要的相关依赖和数据等内容。 一定要多读几遍&#xff0c;不要扫一眼就…

[Linux安全运维] LAMP 环境搭建保姆级教学(Apache + MySQL + PHP) ~~

LAMP LAMP 是一种网站技术&#xff0c;可以实现动态的网站页面部署。 1. LAMP概述 1 .1构成 Linux: 简介: Linux 是一种开源的操作系统&#xff0c;以其稳定性和安全性而著称。在 LAMP 堆栈中&#xff0c;它作为服务器操作系统运行。作用: 为应用程序提供一个稳定、安全的运…

【linux】在多核CPU下,好像看到不同进程在不同CPU调度

在2353这行打印的情况来看&#xff0c;操作系统好像给不同的进程分配不同的CPU&#xff0c;从上图来看&#xff0c;同一个进程好像基本使用的相同的CPU&#xff1a; 其实摸索syscall文件系统操作&#xff0c;本意是想找到内核文件系统中文件的创建&#xff0c;写入&#xff0c;…

3DMAX神经网络插件Neuron使用方法详解

3DMAX神经网络插件Neuron使用方法 3DMAX神经网络插件Neuron&#xff0c;从一系列样条曲线创建具有分支结构的几何体。适用于如神经网络、血管、树枝等形状的3D建模。 【适用版本】 3dMax2016及更高&#xff08;不仅限于此范围&#xff09; 【安装方法】 Neuron插件无需安装&a…

windows 暂停更新

使用windows 系统的伙伴都深受其扰&#xff0c;动不动就要强制更新&#xff0c;并且无法长时间关闭更新。这里推荐一个工具来禁止更新。越来越多的工程师可能会逐渐放弃windows ,真的太冗杂了&#xff0c;linux 的桌面和命令行越来越好用。 下载地址 https://github.com/WereD…

Renesa Version Board开发RT-Thread 之I2C驱动应用(SHT20)

目录 概述 1 硬件接口介绍 1.1 Version Board上的I2C硬件接口 1.2 SHT20 1.2.1 SHT20简介 1.2.2 SHT-20模块电路 2 软件实现 2.1 软件版本信息 2.2 RT-Thread Studio创建项目 2.3 FSP配置I2C接口 2.4 使能Sensor驱动 3 RT-Thread驱动架构 3.1 接口函数 3.1.1 …

增量学习中Task incremental、Domain incremental、Class incremental 三种学习模式的概念及代表性数据集?

1 概念 在持续学习领域&#xff0c;Task incremental、Domain incremental、Class incremental 是三种主要的学习模式&#xff0c;它们分别关注不同类型的任务序列和数据分布变化。 1.1 Task Incremental Learning (Task-incremental) 任务增量学习&#xff0c;也称为任务增…

spring 中包自动扫描之 component-scan 解析

在 spring 中&#xff0c;为简化 bean 的配置&#xff0c;在 spring-context 模块下提供了包的自动扫描功能&#xff0c;将配置的包及其子包下的所有符合条件的类都注册到 BeanFactory 中。下面来看下具体是怎么实现的。 配置 <context:component-scan base-package"…

.NET 一款获取主流浏览器存储密码的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

27.jdk源码阅读之ConcurrentLinkedDeque

1. 写在前面 ConcurrentLinkedDeque 是 Java 中一个高效、线程安全的双端队列&#xff08;Deque&#xff09;&#xff0c;使用无锁算法&#xff08;CAS 操作&#xff09;来保证线程安全性。由于其复杂的实现和广泛的应用场景&#xff0c;它常常成为面试中的重点考察对象。不知道…

【C++题解】1069. 字符图形5-星号梯形

问题&#xff1a;1069. 字符图形5-星号梯形 类型&#xff1a;嵌套循环、图形输出 题目描述&#xff1a; 打印字符图形。 输入&#xff1a; 一个整数&#xff08; 0<n<10 &#xff09;。 输出&#xff1a; 一个字符图形。 样例&#xff1a; 输入&#xff1a; 3输…

C#体检系统源码,医院健康体检系统PEIS,C#+VS2016+SQLSERVER

体检中心/医院体检科PEIS系统源码&#xff0c;C#健康体检信息系统源码&#xff0c;PEIS源码 开发环境&#xff1a;C/S架构C#VS2016SQLSERVER 2008 检前&#xff1a; 多种预约方式网站预约、电话预约、微信平台预约及检前沟通&#xff0c;提前制作套餐&#xff0c;客人到达体检…

机器学习(二十三):决策树和决策树学习过程

一、决策树 下面是数据集&#xff0c;输入特征是耳朵形状、脸形状、是否有胡子&#xff0c;输出结果是是否为猫 下图是决策树&#xff0c;根据耳朵形状、脸形状、是否有胡子这几个特征&#xff0c;建立决策树&#xff0c;从根节点一步步预测结果。 上图中&#xff0c;每一个椭…