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

相关文章

深入解析Kylin的元数据管理:架构与实践

引言 在大数据时代&#xff0c;元数据管理对于数据仓库的效率和可维护性至关重要。Apache Kylin&#xff0c;作为一个开源的分布式分析引擎&#xff0c;专门设计用于支持大数据的快速分析。Kylin 的元数据管理是其核心功能之一&#xff0c;它不仅支撑着数据模型的构建&#xf…

JDBC介绍及使用

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

关于“毒药水式“色彩搭配的概念

关于"毒药水式"色彩搭配 历时63天&#xff0c;我精心打造了一个全方位型网站模板&#xff0c;其包含&#xff08;录音、留言、可视化图表及源码显示、音乐播放、多种游戏、相册图片展示、日历等多种功能&#xff09;。我将其命名为“常温”&#xff0c;我将于8月13日…

基因克隆技术在医学领域的应用实例有哪些?

基因克隆技术在医学领域的应用实例有哪些&#xff1f; 李升伟 基因克隆技术在医学领域有众多应用实例&#xff0c;以下为您列举一些常见的&#xff1a; 1. 胰岛素的生产&#xff1a;通过基因克隆技术&#xff0c;将人类胰岛素基因插入到细菌或酵母的基因组中&#xff0c;使…

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

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

String Functions(字符串函数)

String Functions&#xff08;字符串函数&#xff09;是一组用于操作字符串数据的函数&#xff0c;它们在多种编程语言、数据库查询语言以及特定工具中都有广泛的应用。这些函数允许用户执行诸如字符串的创建、修改、查询、比较、转换和格式化等操作。以下是对String Functions…

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

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

vue2中手动关闭el-dropdown组件下拉菜单

主要实现代码 this.$refs.dropdown.hide(); 在el-dropdown组件上设置ref属性为"dropdown"&#xff0c;在关闭时获取el-dropdown组件实例&#xff0c;调用实例上的hide()方法即可。

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

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

C# 代码适配 Python

C# if obj is Type obj_1Python if isinstance(obj, Type):

python怎样去除长字符串中多处存在的‘[]{}’?

要去除长字符串中多处存在的特定字符&#xff08;例如[]和{}&#xff09;&#xff0c;可以使用str.replace()方法。 下面是一个示例代码&#xff1a; def remove_chars(string):# 要去除的字符chars_to_remove ["[", "]", "{", "}"…

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

算法笔记|Day7字符串

算法笔记|Day7字符串 ☆☆☆☆☆leetcode 344.反转字符串题目分析代码 ☆☆☆☆☆leetcode 541. 反转字符串II题目分析代码 ☆☆☆☆kamacoder 54. 替换数字&#xff08;待补充&#xff09;题目分析代码 ☆☆☆☆☆leetcode 344.反转字符串 题目链接&#xff1a;leetcode 344.…

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

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

Linux初学基本命令

linux文件目录 1、bin->usr/bin binary存放命令 所有账户可以使用 Linux可以执行的文件&#xff0c;我们称之为命令command 2、boot 存放系统启动文件 3、dev device存放设备文件 4、etc 存放配置文件的目录 configration files 5、home home家目录 存…