当前位置: 首页 > news >正文

机器学习:强化学习的epsilon贪心算法

强化学习(Reinforcement Learning, RL)是一种机器学习方法,旨在通过与环境交互,使智能体(Agent)学习如何采取最优行动,以最大化某种累积奖励。它与监督学习和无监督学习不同,强调试错探索(Exploration-Exploitation)以及基于奖励信号的学习。

在这里插入图片描述

强化学习任务通常用马尔可夫决策过程来描述:机器处于环境 E E E中,状态空间 X X X,其中每个状态 x ∈ X x \in X xX是机器感知到的环境的描述,机器能采取的动作构成了动作空间 A A A,若某个动作 a ∈ A a \in A aA作用在当前状态 x x x上,则潜在的转移函数 P P P将使得环境从当前状态按照某种概率转移到另一个状态,在转移到另一个状态的同时,环境会根据潜在的“奖赏”函数 R R R反馈给机器一个奖赏。

在环境中状态的转移、奖赏的返回是不受机器控制的,机器只能通过选择要执行的动作来影响环境,也只能通过观察转移后的状态和返回的奖赏来感知环境。

机器要做的是通过在环境中不断地尝试而学得一个“策略”,根据这个“策略”在状态 x x x下就能知道要执行得动作。

在强化学习任务中,学习的目的就是要找到能使长期累积奖赏最大化的策略。

强化学习与监督学习来说,强化学习是没有人直接告诉机器在什么状态下应该做什么动作,只有等到最终结果揭晓,才能通过“反思”之前的动作是否正确来进行学习,因此,强化学习在某种意义上可看作具有“延迟标记信息”的监督学习问题。

强化学习任务的最终奖赏是在多步动作之后才能观察到,这里考虑简单情形:最大化单步奖赏,即仅考虑一步操作。单步强化学习任务对应了一个理论模型:k-摇臂赌博机。

k- 摇臂赌博机:有k个摇臂,赌徒在投入一个硬币后可选择按下其中一个摇臂,每个摇臂以一定的概率吐出硬币,但这个概率赌徒并不知道。赌徒的目标是通过一定的策略最大化自己的奖赏,即获得最多的硬币。

若仅为获知每个摇臂的期望奖赏,则可采用“仅探索”法:将所有的尝试机会平均分配给每个摇臂,最后以每个摇臂各自的平均吐币概率作为其奖赏的近似评估。若仅为执行奖赏最大的动作,则可采用“仅利用”法:按下目前最优的摇臂。“仅探索”法会失去很多选择最优摇臂的机会;“仅利用”法可能经常选不到最优摇臂。

ϵ \epsilon ϵ贪心法是基于一个概率来对探索和利用进行折中:每次尝试时,以 ϵ \epsilon ϵ的概率进行探索,以 1 − ϵ 1 - \epsilon 1ϵ的概率进行利用。

则平均奖赏为:
Q ( k ) = 1 n ∑ i = 1 n v i Q(k) = \frac{1}{n} \sum_{i=1}^nv_i Q(k)=n1i=1nvi
可以改成增量计算:
Q n ( k ) = 1 n ( ( n − 1 ) × Q n − 1 ( k ) + v n ) = Q n − 1 ( k ) + 1 n ( v n − Q n − 1 ( k ) ) Q_n(k) = \frac {1}{n} ( (n - 1) \times Q_{n-1}(k) + v_n) \\ = Q_{n-1}(k) + \frac{1}{n}(v_n - Q_{n-1}(k)) Qn(k)=n1((n1)×Qn1(k)+vn)=Qn1(k)+n1(vnQn1(k))

代码

k-摇臂赌博机实现:

import numpy as npclass KArmedBandit:def __init__(self, k=10, true_reward_mean=0, true_reward_std=1):"""k: 摇臂数量true_reward_mean: 奖励均值的均值true_reward_std: 奖励均值的标准差"""self.k = kself.q_true = np.random.normal(true_reward_mean, true_reward_std, k)  # 每个摇臂的真实均值def step(self, action):"""执行动作(拉某个摇臂),返回奖励"""reward = np.random.normal(self.q_true[action], 1)  # 以 q*(a) 为均值的正态分布return reward

ϵ \epsilon ϵ贪心实现:

from data_processing import KArmedBandit
import numpy as np
import matplotlib.pyplot as pltdef select_action(epsilon:float, q_estimates:np.ndarray):"""根据 epsilon-greedy 策略选择动作"""if np.random.rand() < epsilon: # 随机选择return np.random.choice(len(q_estimates))  # else:return np.argmax(q_estimates)  # 选择估计奖励最高的动作
def update_estimates(q_estimates:np.ndarray, action:int, reward:float, action_counts:np.ndarray):"""更新动作的估计奖励"""action_counts[action] += 1q_estimates[action] += (reward - q_estimates[action]) / action_counts[action]return q_estimates, action_countsdef start(k:int, epsilon:float, epochs:int, stps:int):"""开始运行 epsilon-greedy 算法"""q_estimates = np.zeros(k)  # 每个摇臂的估计奖励action_counts = np.zeros(k)  # 每个摇臂被选择的次数avg_rewards = np.zeros(stps)  # 记录每次拉摇臂的奖励for epoch in range(epochs):bandit = KArmedBandit(k)rewards = []for step in range(stps):action = select_action(epsilon, q_estimates)reward = bandit.step(action)q_estimates, action_counts = update_estimates(q_estimates, action, reward, action_counts)rewards.append(reward) # 记录奖励avg_rewards += np.array(rewards) # 记录每次拉摇臂的奖励avg_rewards /= epochsreturn avg_rewardsif __name__ == '__main__':k = 10epsilon = 0.1epochs = 2000stps = 1000avg_rewards = start(k, epsilon, epochs, stps)plt.plot(avg_rewards)plt.xlabel('Steps')plt.ylabel('Average reward')plt.title('RL: epsilon-greedy Performance')plt.show()

在这里插入图片描述

深入理解强化学习(一)- 概念和术语 - 知乎 (zhihu.com)

相关文章:

机器学习:强化学习的epsilon贪心算法

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是一种机器学习方法&#xff0c;旨在通过与环境交互&#xff0c;使智能体&#xff08;Agent&#xff09;学习如何采取最优行动&#xff0c;以最大化某种累积奖励。它与监督学习和无监督学习不同&#xff0c;强调试错…...

MongoDB—(一主、一从、一仲裁)副本集搭建

MongoDB集群介绍&#xff1a; MongoDB 副本集是由多个MongoDB实例组成的集群&#xff0c;其中包含一个主节点&#xff08;Primary&#xff09;和多个从节点&#xff08;Secondary&#xff09;&#xff0c;用于提供数据冗余和高可用性。以下是搭建 MongoDB 副本集的详细步骤&am…...

MyBatis TypeHandler 详解与实战:FastJson 实现字符串转 List

在 MyBatis 中&#xff0c;TypeHandler 是实现 Java 类型与数据库类型双向转换 的核心组件。无论是处理基础数据类型还是复杂的 JSON、枚举或自定义对象&#xff0c;它都能通过灵活的扩展机制满足开发需求。本文将通过一个 将数据库 JSON 字符串转换为 List<User> 的案例…...

第二十八:5.5.【storeToRefs】5.6.【getters】

LoveTalk.vue: 调用&#xff1a; // 方法 const talkStore useTalkStore() function getLoveTalk(){ talkStore.getATalk() } 如果是要简短的形式调用&#xff1a; const talkStore useTalkStore() // user hooks 的形式调用 const {schoole,local} talkStore // …...

APISIX Dashboard上的配置操作

文章目录 登录配置路由配置消费者创建后端服务项目配置上游再创建一个路由测试 登录 http://192.168.10.101:9000/user/login?redirect%2Fdashboard 根据docker 容器里的指定端口&#xff1a; 配置路由 通过apisix 的API管理接口来创建&#xff08;此路由&#xff0c;直接…...

MinIO在 Docker中修改登录账号和密码

MinIO在 Docker中修改登录账号和密码 随着云计算和大数据技术的快速发展&#xff0c;对象存储服务逐渐成为企业数据管理的重要组成部分。MinIO 作为一种高性能、分布式的对象存储系统&#xff0c;因其简单易用、高效可靠的特点而备受开发者青睐。然而&#xff0c;在实际应用中…...

英文论文查重,Turnitin和IThenticate两个系统哪个更合适?

Turnitin系统和IThenticate系统都是检测英文论文的查重系统&#xff0c;但是两者之间还是有一些不一样的。 下面针对这两个系统给大家具体分析一下。 一、Turnitin系统 Turnitin检测系统&#xff1a; https://truth-turnitin.similarity-check.com Turnitin是世界上主流的…...

pnpm的基本用法

以下是 pnpm 的核心命令和使用指南&#xff0c;涵盖从安装依赖到项目管理的常见操作&#xff1a; 1. 基础命令 (1) 安装依赖 pnpm install # 安装 package.json 中的所有依赖 pnpm install <包名> # 安装指定包&#xff08;自动添加到 dependencies&#xf…...

【实战中提升自己】防火墙篇之双ISP切换与VRRP切换对于用户的体验

! 拓扑与说明 某公司的网络架构&#xff0c;这样的架构在目前的网络中是在常见的&#xff0c;假设您接收一个这样的网络&#xff0c;应该如何部署&#xff0c;该实战系列&#xff0c;就是一步一步讲解&#xff0c;如何规划、设计、部署这样一个环境&#xff0c;这…...

Go在1.22版本修复for循环陷阱

记录 前段时间升级Go版本碰到一个大坑&#xff0c;先记录。 先上代码案例&#xff1a; func main() {testClosure() }func testClosure() {for i : 0; i < 5; i {defer func() {fmt.Println(i)}()} }在1.22之下&#xff08;不包括1.22&#xff09;版本&#xff1a; 输出的…...

Nginx+PHP+MYSQL-Ubuntu在线安装

在 Ubuntu 上配置 Nginx、PHP 和 MySQL 的步骤如下&#xff1a; 1. 更新系统包 首先&#xff0c;确保系统包是最新的&#xff1a; sudo apt update sudo apt upgrade2. 安装 Nginx 安装 Nginx&#xff1a; sudo apt install nginx启动并启用 Nginx 服务&#xff1a; sudo…...

SpringDataJPA使用deleteAllInBatch方法逻辑删除失效

概述 在使用Spring Boot JPA时&#xff0c;执行批量删除操作时&#xff0c;遇到逻辑删除失效的问题。具体而言&#xff0c;当使用deleteAllInBatch方法时&#xff0c;数据会被物理删除&#xff0c;而不是进行逻辑删除&#xff1b;但是当使用deleteAll时&#xff0c;逻辑删除操…...

DOM Node

DOM Node 引言 在Web开发中,DOM(Document Object Model)节点是构建网页和交互式应用程序的核心。DOM节点是文档的构建块,可以用来表示HTML和XML文档中的任何部分。本文将详细介绍DOM节点的基本概念、类型、操作方法以及在实际开发中的应用。 什么是DOM节点? DOM节点是…...

基于STM32的智能家居能源管理系统

1. 引言 传统家庭能源管理存在能耗监控粗放、设备联动不足等问题&#xff0c;难以适应绿色低碳发展需求。本文设计了一款基于STM32的智能家居能源管理系统&#xff0c;通过多源能耗监测、负荷预测与优化调度技术&#xff0c;实现家庭能源的精细化管理与智能优化&#xff0c;提…...

智慧园区后勤单位消防安全管理:安全运营和安全巡检

//智慧园区消防管理困境大曝光 智慧园区&#xff0c;听起来高大上&#xff0c;但消防管理却让人头疼不已。各消防子系统各自为政&#xff0c;像一座座孤岛&#xff0c;信息不共享、不协同。 消防设施管理分散&#xff0c;不同区域、企业的设备标准不一样&#xff0c;维护情况…...

HTML 日常开发常用标签

文章目录 HTML 日常开发常用标签1、基本结构标签2、内容标签3、多媒体标签4、表单标签5、列表和定义标签6、表格标签7、链接和图像8、元数据9、语义化标签&#xff08;HTML5新增&#xff09;10、框架和内联11、交互12、过时或不推荐使用的标签 HTML 日常开发常用标签 1、基本结…...

Spring事务失效六大场景

引言 Spring事务一般我们采用注解实现&#xff0c;但是我们构造事务实现的时候常常没察觉失效的情况&#xff0c;本篇文章总结事务失效的六大情况&#xff0c;帮助我们深刻理解事务失效的边界概念 1. 方法自调用 这个主要是针对声明式事务的&#xff0c;经过前面的介绍&…...

【缓冲区】数据库备份的衍生问题,缓冲区在哪里?JVMor操作系统?(二)

【缓冲区】数据库备份的衍生问题&#xff0c;缓冲区在哪里&#xff1f;JVMor操作系统&#xff1f;&#xff08;二 完结&#xff09; 缓冲区既属于操作系统&#xff0c;也属于 JVM&#xff0c;具体取决于你讨论的是哪个层面的缓冲区。下面我会详细解释这两者的区别和联系。 1. …...

如何免费使用稳定的deepseek

0、背景&#xff1a; 在AI辅助工作中&#xff0c;除了使用cursor做编程外&#xff0c;使用deepseek R1进行问题分析、数据分析、代码分析效果非常好。现在我经常会去拿行业信息、遇到的问题等去咨询R1&#xff0c;也给了自己不少启示。但是由于官网稳定性很差&#xff0c;很多…...

钉钉小程序(企业内部应用)开发--钉钉小程序web-view嵌套H5与小程序之间的通信(H5跳转钉钉小程序小程序postMessage)

钉钉小程序代码&#xff1a;嵌套H5 pages/login/index.axml <web-view src"{{urlH5}}" onMessage"test"></web-view> H5向小程序发送信息&#xff1a; H5代码&#xff1a; 通过以下代码我一直报错dd没有被定义 if (navigator.userAgent.to…...

5分钟让Windows 11焕然一新:极速系统加速与性能优化终极指南

5分钟让Windows 11焕然一新&#xff1a;极速系统加速与性能优化终极指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter …...

Phi-3-mini-128k-instruct对比测试:与主流轻量模型性能横评

Phi-3-mini-128k-instruct对比测试&#xff1a;与主流轻量模型性能横评 最近轻量级大模型的热度一直没降下来&#xff0c;各家都在推出自己的“小钢炮”。微软前段时间发布的Phi-3-mini系列&#xff0c;尤其是那个128k超长上下文版本&#xff0c;吸引了不少眼球。参数不大&…...

如何在5分钟内掌握FlicFlac:Windows音频格式转换的轻量级解决方案

如何在5分钟内掌握FlicFlac&#xff1a;Windows音频格式转换的轻量级解决方案 【免费下载链接】FlicFlac Tiny portable audio converter for Windows (WAV FLAC MP3 OGG APE M4A AAC) 项目地址: https://gitcode.com/gh_mirrors/fl/FlicFlac FlicFlac是一款专为Window…...

go语言Windows安装教程(安装go安装Golang安装)(GOPATH、Go Modules)

文章目录Go 在 Windows 上的安装与环境配置指南一、简介二、下载安装 Go1. 下载 Go 安装包2. 运行安装程序三、验证安装四、配置环境变量1. 配置 GOROOT&#xff08;通常不需要手动设置&#xff09;2. 配置 GOPATH&#xff08;推荐设置&#xff09;设置方法&#xff1a;3. 配置…...

Win11系统虚拟化性能优化指南:VBS关闭与配置全解析

1. 为什么需要关闭VBS虚拟化功能&#xff1f; 很多朋友升级到Win11后会发现电脑变卡了&#xff0c;尤其是玩游戏或者运行大型软件时帧数明显下降。这很可能是因为系统默认开启了VBS&#xff08;Virtualization-Based Security&#xff09;虚拟化安全功能。我去年刚换新电脑时就…...

3步掌握ModTheSpire:Slay the Spire模组加载终极指南

3步掌握ModTheSpire&#xff1a;Slay the Spire模组加载终极指南 【免费下载链接】ModTheSpire External mod loader for Slay The Spire 项目地址: https://gitcode.com/gh_mirrors/mo/ModTheSpire ModTheSpire是《Slay the Spire》最强大的外部模组加载器&#xff0c;…...

Steam版《极限竞速:地平线5》总闪退?试试关闭这个容易被忽略的控制器设置

Steam版《极限竞速&#xff1a;地平线5》频繁闪退&#xff1f;可能是控制器设置惹的祸 最近在Steam社区和各大游戏论坛上&#xff0c;不少玩家反映《极限竞速&#xff1a;地平线5》在启动时频繁闪退&#xff0c;尤其是在使用外设控制器的情况下。这个问题困扰了许多热爱赛车游戏…...

日期字段不连续,还能正确计算同环比吗?

——PowerBI、Datafor、FineBI三大平台专业对比分析 数据分析在企业经营、决策制定中扮演着越来越核心的角色。环比、同比是数据分析中最常见的两个指标&#xff0c;能清晰表现业务的发展趋势。然而&#xff0c;现实业务数据中&#xff0c;日期字段不连续&#xff08;如自然日…...

Terminator进阶技巧:如何为特定命令定制自动补全规则(Ubuntu环境)

Terminator进阶技巧&#xff1a;如何为特定命令定制自动补全规则&#xff08;Ubuntu环境&#xff09; 在终端操作中&#xff0c;自动补全功能就像一位默契的助手&#xff0c;能显著提升命令行效率。对于经常与Terminator打交道的开发者而言&#xff0c;系统默认的补全规则往往无…...

Ubuntu16.04下MINIGUI 3.2.0开发环境搭建全攻略

1. MINIGUI开发环境搭建概述 第一次接触MINIGUI的朋友可能会好奇&#xff0c;这个看起来像嵌入式系统专用的小型GUI框架&#xff0c;为什么在Ubuntu16.04上安装会这么复杂&#xff1f;其实MINIGUI作为国内自主研发的轻量级图形界面系统&#xff0c;在工业控制、医疗设备、智能家…...