Q_learing算法入门

WY2851型Q表说明书 1.Q表的组成及工作原理2 测量电感3 测量电容4 Q表实例及使用方法;谐振法又称Q表法,是以LC谐振回路谐振特性为基础而进行测量的方法。在高频段,谐振法受杂散耦合等的影响较小,且比较符合电感、电容的实际工作情况,因此,谐振法高频段测量结果比较可靠,是测量高频元件的常用方法。 立即下载

1. 原理讲解

Q-learning算法实际上相当简单,仅仅维护一个Q值表即可,表的维数为(所有状态S,所有动作A),表的内容称为Q值,体现该状态下采取当前动作的未来奖励期望。智能体每次选择动作时都会查询Q值表在当前状态下采取何种动作得到的未来奖励可能最多,当然也会添加一些随机性,使智能体可能选择别的可能当前认为未来奖励并不多的动作,以便跳出局部最优解,尽量得到全局最优解。

2.Q表更新公式

Q-learning算法的核心是通过不断更新Q表来学习最优策略。Q表是一个二维数组,其中Q(s, a)表示在状态s下采取动作a的预期回报(或价值)。更新公式如下:
Q(s,a) ← Q(s,a) + α * [r + γ * max(Q(s’,a’)) - Q(s,a)]

 Q(s,a):当前状态s下采取动作a的价值估计(来自Q-table)
 α:学习率(0 < α ≤ 1),学习率 α 的作用是控制Q值更新的幅度。具体来说:
    如果 α=1,Q值会完全更新为新的目标值,即 Q(s,a)=TD Target。
    如果 α=0,Q值不会更新,即 Q(s,a) 保持不变。
    对于 0<α<1,Q值会部分更新为新的目标值,即 Q(s,a) 会逐渐向目标值靠拢。
 r:执行动作a后获得的即时奖励
 γ:折扣因子(0 ≤ γ < 1),衡量未来奖励的重要性
 max(Q(s',a')):在新状态s'下所有可能动作中的最大Q值

这个公式实际上是在说:“新的Q值 = 旧的Q值 + 学习率 × (目标值 - 旧Q值)”,其中:目标值 = 即时奖励r+ 未来奖励的折现(γ * max(Q(s’,a’)))
(目标值 - 旧Q值) 是所谓的"时序差分误差"(Temporal Difference Error)

TD Error(时间差分误差):
这个误差表示当前Q值与目标值之间的差距。
如果TD误差为正,说明当前Q值低估了实际回报,需要增加。
如果TD误差为负,说明当前Q值高估了实际回报,需要减少。

3.代码实现部分:
在CartPole环境中,状态由4个连续值组成:
Q-learning传统实现需要有限的状态空间(即状态是可数的),但连续状态有无限可能,所以需要把连续值"分桶"变成离散值。
什么是bins?
想象把连续的数值范围切成若干个"桶"(bins):
温度计例子:

[0°C - 10°C) → 低温桶
[10°C - 20°C) → 中温桶
[20°C - 30°C] → 高温桶
`# 把-2.4到2.4的范围切成20个等分区间
position_bins = np.linspace(-2.4, 2.4, 20)`

离散化代码:

def discretize_state(state, bins):
    """将连续状态转换为离散索引"""
    discretized = []
    for i in range(4):  # CartPole有4个状态维度
        # 将值限制在bin范围内
        clipped = np.clip(state[i], bins[i][0], bins[i][-1])
        # 找到最近的bin索引
        discretized.append(np.digitize(clipped, bins[i]) - 1)  # -1使索引从0开始
    return tuple(discretized)

在这里插入图片描述

4.训练过程:
在这里插入图片描述

ε-贪婪策略:
是Q-learning中平衡探索(Exploration)和利用(Exploitation)的核心机制。
1. 基本概念
什么是ε-贪婪策略?以概率 ε 随机选择动作(探索新可能),以概率 1-ε 选择当前已知最优动作(利用已有知识)。纯贪婪策略(总是选最优)可能导致陷入局部最优,纯随机策略(总是随机选)学习效率低下,ε-贪婪策略在两者间取得平衡

简单例子:1. 想象你在选择午餐
假设你每天都要选择午餐:
A餐厅:你知道很好吃(已知最优选择)
B餐厅:你没吃过(未知选择)

纯贪婪策略(总是选最优)
👉 每天都去A餐厅
优点:永远不会吃到难吃的
缺点:可能错过更好吃的B餐厅

纯随机策略
👉 抛硬币决定去A或B
优点:可能发现新美食
缺点:经常吃到难吃的

ε-贪婪策略(聪明人的选择)
👉 大多数时候(比如90%)去A餐厅,偶尔(10%)尝试B餐厅
平衡了"吃得好"和"发现新选择"`
可视化理解
训练过程:
[随机][随机][随机]... (初期完全随机探索)
↓
[最优][随机][最优][最优][随机]... (中期混合)
↓
[最优][最优][最优][最优][最优]... (后期基本固定)

ε是个概率值(0-1之间)
算法会生成一个随机数跟ε比较
随机数 < ε → 探索(随机选)
随机数 ≥ ε → 利用(选已知最优)
ε会随着训练逐渐减小
动态调整参数:
epsilon = 1.0  # 初始值(100%探索)
for 每次训练:
    epsilon = max(0.01, epsilon*0.995)  # 每次衰减0.5%


代码理解:
import random
# 设置ε=0.1(10%概率随机探索)
epsilon = 0.1  
if random.random() < epsilon:  # 10%的情况
    action = 随机选左或右  # 探索新动作
else:  # 90%的情况
    action = 当前已知最好的动作  # 用已知最好的


完整代码

import gym
import numpy as np

# 初始化环境
env = gym.make('CartPole-v1', render_mode="human")
print("动作空间:", env.action_space)  # 0:左, 1:右
print("状态空间:", env.observation_space)  # 4个值: [车位置, 车速度, 杆角度, 杆角速度]

# 离散化设置
num_bins = 20
# 手动设置合理的边界值(避免过大值)
pos_bins = np.linspace(-2.4, 2.4, num_bins)
vel_bins = np.linspace(-3.0, 3.0, num_bins)
angle_bins = np.linspace(-0.5, 0.5, num_bins)
ang_vel_bins = np.linspace(-2.0, 2.0, num_bins)
bins = [pos_bins, vel_bins, angle_bins, ang_vel_bins]

def discretize_state(state, bins):
    """将连续状态转换为离散索引"""
    discretized = []
    for i in range(4):  # CartPole有4个状态维度
        # 将值限制在bin范围内
        clipped = np.clip(state[i], bins[i][0], bins[i][-1])
        # 找到最近的bin索引
        discretized.append(np.digitize(clipped, bins[i]) - 1)  # -1使索引从0开始
    return tuple(discretized)

# 初始化Q表
q_table = np.zeros((num_bins, num_bins, num_bins, num_bins, env.action_space.n))

# 训练参数
episodes = 5000
epsilon = 1.0  # 初始探索率
epsilon_min = 0.01
epsilon_decay = 0.995
alpha = 0.1  # 学习率
gamma = 0.99  # 折扣因子(应该接近1)

# 测试训练结果
for episode in range(episodes):
    state, _ = env.reset()
    state = discretize_state(state, bins)
    done = False
    total_reward = 0

    while not done:
        # ε-贪婪策略
        if np.random.random() < epsilon:
            action = env.action_space.sample()  # 随机探索
        else:
            action = np.argmax(q_table[state])  # 利用已知最优

        # 执行动作
        next_state, reward, terminated, truncated, _ = env.step(action)
        done = terminated or truncated
        next_state = discretize_state(next_state, bins)
        total_reward += reward

        # Q-learning更新
        current_q = q_table[state][action]
        max_next_q = np.max(q_table[next_state])
        # 如果游戏结束,没有下一个状态的最大Q值
        target_q = reward if done else reward + gamma * max_next_q
        q_table[state][action] = current_q + alpha * (target_q - current_q)

        state = next_state

        # 衰减探索率
    epsilon = max(epsilon_min, epsilon * epsilon_decay)

    print(f"测试回合 {episode}, 奖励 {total_reward},贪心:{epsilon}")

env.close()

使用 Vosk 实现语音识别 在近两年里,如果说想要在本地部署离线语音识别模型,那么和肯定是首选项。所以为什么要使用呢? 阅读详情

相关推荐

DELL服务器BIOS下配置RAID阵列

dell服务器配置raid阵列

weixin_58250887的博客 1万+

深度学习入门问答

Q_Learning 顾名思义就是学习Q表,Q表指的是由状态空间S 和 行动空间A形成的“笛卡尔积”表。对于每个状态s,每个行动a都对应着一个价值导向。其作用就是在和环境交互中学到Q表后对行动决策给予指导。

qq_32851223的博客 250

RK3568平台 麦克风PDM接口录音_rk pdm配置

在RK平台,Android的Audio HAL层中一般会都会有导出录音播放数据的功能。如播放的,是会直接送到声卡中的,对于播放出现问题的情况,可以从分析导出的音频数据是否正常,可以基本知道,是在应用、解码出现的问题,还是送到声卡过程中出现问题。当点开app进行录音的时候会调用到static int start_input_stream(struct stream_in *in)。音频在PDM接口输入,不经过编解码芯片直接到RK主芯片,RK主芯片自带PCM编解码功能。以下软件能播放保存下来的pdm文件。

2401_83817122的博客 2343

Q learning 的一些问题

其核心是Q表(Q-Table),这是一个表格,用于存储每个状态-动作对的Q值(即预期回报)。总的来说,Q表和Q值提供了一种机制,使智能体能够通过与环境的交互来学习最佳行为策略,从而在长期中最大化其获得的总奖励。在Q学习,一种强化学习算法中,Q表和Q值是核心概念,用于帮助智能体(如机器人或软件代理)学习在给定状态下采取最佳动作的策略。Q值是Q表中的元素,表示在给定状态下采取某一动作所预期的总回报(即未来奖励的折现总和)。更新Q值是Q学习中的核心步骤,它使得智能体能够从经验中学习,并逐渐完善其行动策略。

qq_51780963的博客 2440

BOE CHPI协议解析:高速显示驱动的核心技术

本文深入解析了BOE CHPI协议,这是一种为高分辨率、高刷新率显示面板设计的时钟嵌入式高速点对点接口技术。文章详细阐述了其三层架构(物理层、链路层、协议层)、核心机制(如链路训练与BCC通道)以及如何通过高速串行差分传输解决大尺寸屏幕内部数据传输的带宽与干扰难题,是驱动8K、窄边框等高端显示应用的关键核心技术。

m9n0o的博客 543

Nginx配置Cookie安全属性:HttpOnly、Secure、SameSite实战指南

Cookie是Web应用中维持用户状态的核心机制,其安全配置直接关系到会话管理与身份认证的可靠性。从原理上讲,HttpOnly属性可防止XSS攻击窃取Cookie,Secure属性确保Cookie仅在HTTPS加密连接中传输,而SameSite属性则用于控制跨站请求时Cookie的发送行为,能有效防御CSRF攻击。这些安全属性的技术价值在于构建纵深防御体系,提升应用的整体安全性。在现代浏览器(如Chrome 80+)默认将未明确声明的Cookie视为SameSite=Lax的背景下,正确配置这些属性变得尤为

weixin_33783283的博客 319

强化学习:Q表格方法(Qlearning and Sarsa)

无需要快乐

weixin_43968987的博客 1万+

对称式目镜设计实例

对称式目镜设计实例

weixin_72050316的博客 1163

强化学习(二):Q learning 算法

强化学习(一):基础知识 强化学习(二):Q learning算法 Q learning 算法是一种value-based的强化学习算法,Q是quality的缩写,Q函数 Q(state,action)表示在状态state下执行动作action的quality, 也就是能获得的Q value是多少。算法的目标是最大化Q值,通过在状态state下所有可能的动作中选择最好的动作来达到最大化期望re...

zhm2229的专栏 2万+

Python爬虫实战:股票历史数据抓取与量化回测全流程详解

我们以**东方财富网(eastmoney.com)和雪球网(xueqiu.com)**为主要目标,演示如何爬取A股历史行情。最常用的HTTP请求库,简单易用,适合静态页面数据请求。本文详细介绍了从股票历史数据抓取到简单回测的完整流程,代码示例基于最新技术,结构清晰,适合初学者和进阶者学习量化投资实战。希望对你入门Python爬虫和量化交易有所帮助!

2201_76125261的博客 1778

python批量调用大模型API:多线程和异步协程

本文介绍了利用多线程技术批量调用大模型API的实现方法。核心是通过并发请求提高处理效率,主要采用线程池管理并发数量、结果聚合等技术。文章提供了一个完整的Python实现示例,包含APIBatchCaller类及其single_api_call和batch_call方法,详细解析了并发控制、错误处理等关键点,并给出了使用注意事项,包括并发数设置、重试策略和超时处理等。该方案特别适合IO密集型任务,能显著提升批量API调用的效率。

Cachel Wood的博客 759

Q Learning概念、更新、代码实现

学习过程来自莫烦大神的视频: https://www.bilibili.com/video/BV13W411Y75P?p=5 Q Learning概念、更新、代码实现1. 什么是Q Learning?2. Q表是如何更新的?3. Q Learning伪代码4. Q Learning简单实现:1维探索者例子 1. 什么是Q Learning? Q Learning 是一种决策过程 Q Learning 是一个offline学习过程 存在以下的概念: 当前智能体的状态:S(state) 动作行为:A(act

志远的博客 4158

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

q-learing

强化学习是一种机器学习方法,强调通过与环境的互动来学习行为策略,以最大化累积奖励。Q-learning 是一种无模型(model-free)的强化学习算法,它通过学习一个 Q 函数来估计每个状态-动作对的期望回报。

weixin_43949898的博客 1907

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Q-learing

一.概述 Q-Learning是强化学习算法中value-based的算法,Q即为Q(s,a)就是在某一时刻的 s 状态下(s∈S),采取 动作a (a∈A)动作能够获得收益的期望,环境会根据agent的动作反馈相应的回报reward r,所以算法的主要思想就是将State与Action构建成一张Q-table来存储Q值,然后根据Q值来选取能够获得最大的收益的动作。 二. 引例 下图,是一个迷宫游戏 游戏规则如下: 按步积分系统来评估。 你在每一步都会失去 1 分(每一步失...

weixin_42143378的博客 446

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【路径规划】基于Q-Learing算法求解简单迷宫附matlab代码

摘要: 本文探讨了利用强化学习算法Q-Learning求解简单迷宫路径规划问题。首先,对Q-Learning算法的原理、流程以及关键参数进行详细阐述,并分析其收敛性与优缺点。随后,将Q-Learning算法应用于一个具体的简单迷宫环境,详细描述了状态空间、动作空间以及奖励函数的设计。通过Python编程实现,并对实验结果进行分析,验证了Q-Learning算法在求解迷宫路径规划问题上的有效性,同时讨论了算法参数选择对结果的影响以及进一步优化的可能性。

qq_59747472的博客 879

Q-learing算法与Sarsas算法区别

原文链接:https://www.jianshu.com/p/8eda52d51ae9 1、Q-learning Q-learning算法的过程可以根据下面的步骤: 首先,我们会初始化一个Q-table,可以是全0或者是其他的数值,一般都是全0,然后我们设定训练的轮数episodes,这里从初始状态直到终止状态算作一轮。那么在每一轮中,我们会有一个初始状态,然后会不断的采取动作,这里...

rocking_struggling的博客 351

强化学习-Q-learing算法原理与实现

文章目录Q-learing 算法思想Q-learing算法的python实现结论 Q-learing 算法思想 21世纪20年代的第一个春节快到了,给大家拜个早年,祝大家春节快乐。虽然对已经没有寒假的我来说,过年的期盼没有之前那么大,但是还是有所期待的,因为还有那么一丢丢年终奖值得期待。在一年的工作中,有过奋斗,有过彷徨,有过摸鱼,这一切都会在年终有所体现。这一年经过努力,经过懒惰变换了很多的状态...

weixin_45690272的博客 1921

Q-Learing and Sarsa算法区别

Q-Learing and Sarsa算法区别Q-Learning算法Sarsa算法 Q-Learning算法 Sarsa算法 Q-Learning: Off-Policy,update state Sarsa : On-Policy,update state and action

szj_jojoli的博客 5417

Q-learing算法

想总结一下Q-learning算法,但是发现已经有不错的总结了,转载一下,供以后参考。 英文原文地址:http://mnemstudio.org/path-finding-q-learning-tutorial.htm 转载地址:https://blog.youkuaiyun.com/itplus/article/details/9361915 第一部分:中文翻译 ...

haoshan4783的博客 349
上一篇: 带头结点单链表的基本操作
下一篇: 安装mujoco和依赖
VegetablesDoog
博客等级 码龄7年 8粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值