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

【Introduction to Reinforcement Learning】翻译解读5

4 核心算法

我们将算法分为三类:基于价值的方法、基于策略的方法和混合算法。

4.1 基于价值的方法Value-based

一个重要的突破是Q-learning的引入,它是一种无模型算法,被视为off-policy时间差分(TD)学习。TD学习无疑是最基础和创新的概念之一。结合蒙特卡罗(MC)方法和动态规划(DP)方法在这一方法中得到了应用。一方面,类似于MC方法,TD学习可以用于从未经处理的经验中学习,而不需要环境模型。另一方面,TD算法也类似于DP方法,因为它们通过使用先前学到的价值估计来进行预测,而不需要为了进行预测而要求得到确定的结果(这一过程被称为引导(bootstrapping))。Q-learning使得智能体能够从经验中学习状态动作对的价值,而不需要环境模型。它基于以下原则进行工作:学习动作价值函数,期望在每个状态下采取一个给定动作,并在之后遵循一个固定策略。Q-learning算法的核心是更新Q值(状态-动作对的价值),学习到的动作价值函数,记作 Q Q Q,近似了 q ∗ q^* q,即最优动作价值函数。通过这种方式,算法的分析得到了简化,但策略仍然会影响这一过程,即决定了哪些状态-动作对被访问并随后更新。

Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ max ⁡ a Q ( S t + 1 , a ) − Q ( S t , A t ) ] (34) Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha \left[ R_{t+1} + \gamma \max_a Q(S_{t+1}, a) - Q(S_t, A_t) \right] \tag{34} Q(St,At)Q(St,At)+α[Rt+1+γamaxQ(St+1,a)Q(St,At)](34)
文献中还介绍了其他类型的Q-learning,具有一些小的变化和改进,如:双Q-learning,它解决了Q-learning中的过度估计偏差,分布式Q-learning,它通过模型返回分布而不是估计均值Q值,提供了更丰富的决策信息,以及更多类型。

另一个广泛使用的基于价值的算法是Deep Q-Networks深度Q网络(DQN),它将Q-learning与神经网络结合,直接从原始像素输入中学习控制策略。它使用卷积神经网络(CNN)处理这些输入,并通过经验重放机制来稳定学习,打破连续经验之间的相关性。目标网络(target network),更新较少,帮助稳定训练。DQN在各种Atari 2600游戏中达到了最新的最优表现,超越了之前的方法,并且在某些情况下,比专家更优秀,使用一致的网络架构和超参数跨不同游戏。DQN将引入的贝尔曼方程与深度学习方法(如损失函数和梯度下降)相结合,找到最优策略,如下所示:

L i ( θ i ) = E ( s , a , s ′ ) ∼ D [ ( y i − Q ( s , a ; θ i ) ) 2 ] (35) L_i(\theta_i) = \mathbb{E}_{(s,a,s')\sim D} \left[ (y_i - Q(s, a; \theta_i))^2 \right] \tag{35} Li(θi)=E(s,a,s)D[(yiQ(s,a;θi))2](35)

y i = r + γ max ⁡ a ′ Q ( s ′ , a ′ ; θ − ) (36) y_i = r + \gamma \max_{a'} Q(s', a'; \theta^-) \tag{36} yi=r+γamaxQ(s,a;θ)(36)

∇ θ L i ( θ i ) = E ( s , a , s ′ ) ∼ D [ ( ( r + γ max ⁡ a ′ Q ( s ′ , a ′ ; θ − ) − Q ( s , a ; θ ) ) ) ∇ θ Q ( s , a ; θ ) ] (37) \nabla_{\theta} L_i(\theta_i) = \mathbb{E}_{(s,a,s')\sim D} \left[ \left( (r + \gamma \max_{a'} Q(s', a'; \theta^-) - Q(s, a; \theta)) \right) \nabla_{\theta} Q(s, a; \theta) \right] \tag{37} θLi(θi)=E(s,a,s)D[((r+γamaxQ(s,a;θ)Q(s,a;θ)))θQ(s,a;θ)](37)

与Q-learning类似,DQN也进行了更新。

表1: 核心强化学习算法

算法类型
1 Q-Learning无模型、离线、基于价值
2 SARSA (State-Action-Reward-State-Action)无模型、在线、基于价值
3 Expected SARSA无模型、在线、基于价值
4 REINFORCE无模型、在线、基于策略
5 Dyna-Q基于模型、离线、混合方法
6 DQN无模型、离线、基于价值
7 TRPO无模型、在线、基于策略
8 PPO无模型、在线、基于策略
9 SAC (Soft Actor-Critic)无模型、离线、混合方法
**10 A3C **无模型、在线、混合方法
11 A2C无模型、在线、混合方法
12 DDPG (Deep Deterministic Policy Gradient)无模型、离线、基于策略
13 TD3 (Twin Delayed Deep Deterministic Policy Gradient)无模型、离线、基于策略

4.2 基于策略的方法Policy-based

本节分析一些基于策略的方法。基于策略的方法 是RL的另一种基础方法,它更强调直接优化策略以选择智能体的动作。与基于价值的方法通过搜索隐含在任务中的价值函数再推导出最优策略不同,基于策略的方法直接对策略进行参数化和优化。这种方法在处理具有挑战性的环境(例如高维动作空间或策略本身具有随机性的场景)方面具备明显优势。基于策略的方法通过策略的参数化进行工作,通常表示为 π ( a ∣ s ; θ ) \pi(a|s; \theta) π(as;θ)。这里, θ \theta θ 表示策略的参数, s s s 表示状态, a a a 表示动作。换句话说,它寻找能最大化期望累积奖励的最优参数 θ ∗ \theta^* θ。显然,这通常通过梯度上升方法,特别是显式计算期望奖励相对于策略参数的梯度的方法来实现,从而向奖励增加的方向调整参数 。

REINFORCE算法 是一种广泛使用的基于策略的算法。REINFORCE算法对RL做出了重要贡献,尤其在策略梯度方法的背景下。该算法通过沿期望奖励的梯度方向调整策略参数来优化期望累积奖励。它植根于随机策略框架,其中策略由参数 θ \theta θ定义,在给定当前状态的情况下提供动作的概率分布。REINFORCE算法的关键思想是利用对数似然梯度估计器更新策略参数 。期望奖励相对于策略参数 θ \theta θ的梯度表示为:

∇ θ J ( θ ) = E π [ ∇ θ log ⁡ π θ ( a ∣ s ) G t ] (38) \nabla_{\theta} J(\theta) = \mathbb{E}_{\pi}\left[ \nabla_{\theta} \log \pi_{\theta}(a|s) G_t \right] \tag{38} θJ(θ)=Eπ[θlogπθ(as)Gt](38)

其中, π θ ( a ∣ s ) \pi_{\theta}(a|s) πθ(as) 是参数为 θ \theta θ的策略在状态 s s s下采取动作 a a a的概率, G t G_t Gt 是从时间步 t t t开始获得的回报(即未来的累积奖励)。这个梯度估计成为参数更新规则的基础:

θ ← θ + α ∇ θ log ⁡ π θ ( a ∣ s ) G t (39) \theta \leftarrow \theta + \alpha \nabla_{\theta}\log \pi_{\theta}(a|s) G_t \tag{39} θθ+αθlogπθ(as)Gt(39)

其中 α \alpha α 是学习率。

另一种已被广泛应用于多种领域的算法是近端策略优化(Proximal Policy Optimization, PPO)。PPO是策略梯度方法中的一个显著进展。PPO旨在实现可靠的性能和更高的样本效率,解决了之前的策略优化算法(如Vanilla Policy Gradient (VPG)方法和Trust Region Policy Optimization (TRPO))的一些不足。使用策略梯度方法,策略参数通过估计策略的梯度来使用随机梯度上升法进行优化。常用的策略梯度估计器之一如下:

g ^ = E ^ t [ ∇ θ log ⁡ π θ ( a t ∣ s t ) A ^ t ] (40) \hat{g} = \hat{\mathbb{E}}_t\left[\nabla_{\theta}\log \pi_{\theta}(a_t|s_t)\hat{A}_t\right] \tag{40} g^=E^t[θlogπθ(atst)A^t](40)

其中 π θ \pi_{\theta} πθ表示由 θ \theta θ参数化的策略,而 A ^ t \hat{A}_t A^t表示时间步 t t t处优势函数(Advantage function)的估计值。该估计器用于构建一个目标函数,其梯度对应于策略梯度估计器:

L P G ( θ ) = E ^ t [ log ⁡ π θ ( a t ∣ s t ) A ^ t ] (41) L_{PG}(\theta) = \hat{\mathbb{E}}_t\left[\log \pi_{\theta}(a_t|s_t)\hat{A}_t\right] \tag{41} LPG(θ)=E^t[logπθ(atst)A^t](41)

PPO通过使用带有裁剪概率比率(clipped probability ratio)的替代目标(surrogate objective)简化了TRPO,允许对小批量数据进行多轮更新(multiple epochs of mini-batch updates)。为了保持学习稳定,应避免大的策略更新。

4.3 混合方法(演员-评论家方法)

在最后一组算法中,混合方法包括**异步优势演员-评论家(A3C)优势演员-评论家(A2C)**方法。演员-评论家方法结合了基于价值的方法和基于策略的方法。实际上,这些方法由两个组成部分组成:演员(Actor),它基于策略选择动作;以及评论家(Critic),它基于价值函数评估动作。通过提供对所采取动作质量的反馈,评论家指导演员更新策略。因此,利用这种协同作用,学习变得更加稳定和高效,解决了纯策略或基于价值的方法的一些局限性。

A2C算法是A3C算法的同步变种.A2C保持了A3C的关键原则,通过同步多个智能体的更新简化了训练过程,从而有效地利用了两者的优点。演员-评论家架构结合了两大主要组成部分:演员,负责选择动作;以及评论家,负责评估动作,通过估计价值函数来进行反馈。演员根据计算的TD误差更新策略参数。评论家提供反馈,允许更稳定和高效的学习,相较于仅使用演员或评论家的方法。

优势估计是一种技术,旨在减少策略梯度更新的方差。优势函数 A ( s , a ) A(s,a) A(s,a)表示动作价值函数 Q ( s , a ) Q(s,a) Q(s,a)和价值函数 V ( s ) V(s) V(s)之间的差异。
优势函数定义如下:

A ( s , a ) = Q ( s , a ) − V ( s ) . (42) \mathcal{A}(s,a) = Q(s,a) - V(s). \tag{42} A(s,a)=Q(s,a)V(s).(42)

通过使用优势函数,A2C关注于能够产生高于平均回报的动作,从而帮助更有效地更新策略。与A3C不同的是,A3C的多个智能体异步更新全局模型,而A2C同步了这些更新。多个智能体在并行环境中运行,收集经验并计算梯度,这些梯度随后被聚合并用于同步更新全局模型。这种同步机制减少了实现的复杂性,避免了异步更新中可能出现的问题,例如非确定性行为和梯度的潜在覆盖。

参考文献:https://arxiv.org/pdf/2408.07712
仅供学习使用,如有侵权,联系删除

相关文章:

【Introduction to Reinforcement Learning】翻译解读5

4 核心算法 我们将算法分为三类:基于价值的方法、基于策略的方法和混合算法。 4.1 基于价值的方法Value-based 一个重要的突破是Q-learning的引入,它是一种无模型算法,被视为off-policy时间差分(TD)学习。TD学习无疑…...

Jmeter中的bzm-concurrency thread group 与普通线程组的区别

在 JMeter 中,bzm - Concurrency Thread Group(由 BlazeMeter 提供)和标准的 Thread Group 是两种不同的线程组实现,主要区别在于 并发控制模型 和 负载调节方式。以下是详细对比: 1. 核心区别 特性bzm - Concurrency Thread Group标准 Thread Group负载模型基于并发数(C…...

VBA将Word文档内容逐行写入Excel

如果你需要将Word文档的内容导入Excel工作表来进行数据加工,使用下面的代码可以实现: Sub ImportWordToExcel()Dim wordApp As Word.ApplicationDim wordDoc As Word.DocumentDim excelSheet As WorksheetDim filePath As VariantDim i As LongDim para…...

ubuntu22部署 3d-tiles-tools

安装fnm curl -fsSL https://fnm.vercel.app/install | bash安装nodejs 20.17.0LTS版本 https://nodejs.org/zh-cn/download/package-manager安装依赖包 # Download and install nvm: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash# in…...

WebStrom关闭模板字符串自动转换

WebStrom关闭模板字符串自动转换 Editor > General > smart Keys > JavaScript > Automatically replace string literal with template string on typing "${"...

【零基础入门unity游戏开发——动画篇】新动画Animator的使用 —— AnimatorController和Animator的使用

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、…...

npx vite 可以成功运行,但 npm run dev 仍然报错 Missing script: “dev“

npx vite 可以成功运行,但 npm run dev 仍然报错 Missing script: "dev",说明问题可能出在 npm 的脚本解析 或 项目配置 上。以下是具体解决方案: 1. 检查 package.json 的物理位置 可能原因: 你当前运行的目录下可能有一个 无效的 package.json,而真正的 packa…...

Java 泛型的逆变与协变:深入理解类型安全与灵活性

泛型是 Java 中强大的特性之一,它提供了类型安全的集合操作。然而,泛型的类型关系(如逆变与协变)常常让人感到困惑。 本文将深入探讨 Java 泛型中的逆变与协变,帮助你更好地理解其原理和应用场景。 一、什么是协变与…...

C语言核心知识点整理:结构体对齐、预处理、文件操作与Makefile

目录 结构体的字节对齐预处理指令详解文件操作基础Makefile自动化构建总结 1. 结构体的字节对齐 字节对齐原理 内存对齐:CPU访问内存时,对齐的地址能提高效率。操作系统要求变量按类型大小对齐。对齐规则: 每个成员的起始地址必须是min(成…...

深度学习|注意力机制

一、注意力提示 随意:跟随主观意识,也就是指有意识。 注意力机制:考虑“随意线索”,有一个注意力池化层,将会最终选择考虑到“随意线索”的那个值 二、注意力汇聚 这一部分也就是讲第一大点中“注意力汇聚”那个池化…...

特权FPGA之乘法器

完整代码如下: timescale 1ns / 1ps// Company: // Engineer: // // Create Date: 23:08:36 04/21/08 // Design Name: // Module Name: mux_16bit // Project Name: // Target Device: // Tool versions: // Description: // // Dependencies: …...

安全的企业局域网聊天工具哪个好用?

在当今数字化时代,企业对于局域网聊天工具的需求日益增长,尤其是在对数据安全和定制化服务有较高要求的大中型政企单位中。安全的企业局域网聊天工具哪个好用?虽然市面上有很多即时通讯软件,今天来介绍一下已经拥有十年行业经验的…...

如何应对客户频繁变更需求

如何应对客户频繁变更需求?要点包括: 快速响应、深入沟通、灵活规划、过程记录、风险管控。这些策略既能降低项目失控风险,也能帮助团队在变动环境中保持高效率。其中深入沟通尤为关键,它不仅能够让团队第一时间了解客户意图&…...

R语言进行聚类分析

目录 简述6种系统聚类法 实验实例和数据资料: 上机实验步骤: 进行最短距离聚类: 进行最长距离聚类: 进行中间距离聚类: 进行类平均法聚类: 进行重心法聚类: 进行ward.D聚类:…...

1.6-抓包技术(Burp Suite\Yakit抓包\Web、APP、小程序)

1.6-抓包技术(Burp Suite\Yakit抓包\Web、APP、小程序) 如果要使用抓包软件,基本上第一步都是要安装证书的。原因如下: 客户端(浏览器或应用)会检测到证书不受信任,并弹出 证书错误&#xff0…...

DAPP实战篇:使用web3.js连接合约

说明 本系列内容目录:专栏:区块链入门到放弃查看目录 如果你还没有创建好项目请先查看:《DApp实战篇:先用前端起个项目》,如果你还不知道web3.js是什么请先查看:《DApp实战篇:前端技术栈一览》。 安装 点此查看web3.js官方文档 打开项目根目录,并唤起终端: 键入w…...

用 Python 构建一个简单的本地视频流媒体服务器

你是否曾经想过在本地网络上轻松地将电脑上的视频分享给手机或平板电脑观看?也许你下载了一部电影,想在客厅的智能电视上播放,却不想费力地拷贝文件。今天,我们将深入分析一个 Python 脚本,它使用 wxPython 创建图形用…...

汇丰xxx

1. Spring Boot 的了解,解决什么问题? 我的理解: Spring Boot 是一个基于 Spring 框架的快速开发脚手架,它简化了 Spring 应用的初始搭建和开发过程。解决的问题: 简化配置: 传统的 Spring 应用需要大量的…...

ruby基础语法

以下是 Ruby 基础语法的简明总结,适合快速入门: 一、变量与常量 局部变量 小写字母或下划线开头,作用域为当前代码块。 name "Alice" _age 20实例变量 以 开头,属于对象实例。 name "Bob"类变量 以 开头…...

智体OS-V3.1版:新增了rt-datalink底层数据链通讯,实现【无网络】本机使用

##智体OS-V3.1版本发布 更新简介 dtns.os智体OS-V3.1版:新增了rt-datalink底层数据链通讯(使用本地局域网的websocket端口通讯),解决了本机【无网络】正常使用的问题。 更新内容 dtns.connector支持使用新的rt-datalink与智体…...

Windows系统安装Git以及Git常用命令介绍

本文主要介绍Windows系统安装Git的方法,以及Git常用命令介绍。 一、下载Git 官网: Git - Downloads (git-scm.com) 根据自己的系统选择 我的是64位的Windows系统,选择对应的安装包,点击后开始下载 等待下载完成 二、安装Git 双…...

HTML 开发者的智能助手:通义灵码在 VSCode 中的应用

引言 在 HTML 开发领域,提高编码效率和质量是每位开发者追求的目标。通义灵码,作为一款由阿里云技术团队开发的智能编码助手,能够通过其强大的 AI 能力,为 HTML 开发者提供包括代码自动补全、智能注释、代码优化等多方面的支持。…...

MySQL随机获取记录之方法(The Method of Randomly Obtaining Records in MySQL)

MySQL中如何随机获取一条记录 随机获取一条记录是在数据库查询中常见的需求,特别在需要展示随机内容或者随机推荐的场景下。在 MySQL 中,有多种方法可以实现随机获取一条记录,每种方法都有其适用的情况和性能特点。在本文中,我们将…...

ngx_core_module 的 create_conf

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_core_module-CSDN博客 定义在 src\core\nginx.c ngx_module_t ngx_core_module {NGX_MODULE_V1,&ngx_core_module_ctx, /* module context */ngx_core_commands, /* module directives */…...

41--华为IPSec主备链路实验:当加密隧道遇上“双保险“

🚦 华为IPSec主备链路实验:当加密隧道遇上"双保险" “如果你的IPSec隧道只有一条路,那就像走钢丝不系安全带——刺激但危险!” —— 本文将用华为设备打造主备双加密通道,结合IP-link智能检测,让…...

Reactive编程框架与工具

文章目录 6.2 后端 Reactive 框架6.2.1 Spring WebFlux核心架构核心组件实际应用高级特性性能优化适用场景与限制 6.2.2 Akka(Actor模型)Actor模型基础基本用法高级特性响应式特性实现性能优化实际应用场景优势与挑战 6.2.3 Vert.x(事件驱动&…...

vi/vim常用快捷键

那么今天我们继续昨天没有介绍完的vi编辑器,来看看常用的一些快捷键,方便我们对文件的编辑. 1.拷贝当前行yy,拷贝当前行向下的5行5yy,并粘贴(输入p) 2.删除当前行dd,删除当前行向下的5行5d 3.在文件中查找某个单词[命令模式/关键字,回车查找,输入n就是查找下一个] ⭐️&…...

初始JavaEE篇 —— SpringBoot 统一功能处理

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏:JavaEE 目录 前言 拦截器 基本使用 拦截器的路径配置 统一数据返回格式 统一异常处理 前言 在实际开发中,某些功能需要强…...

Spring AI Alibaba 文档检索使用

一、文档检索 (Document Retriever)简介 1、核心概念 文档检索(DocumentRetriever)是一种信息检索技术,旨在从大量未结构化或半结构化文档中快速找到与特定查询相关的文档或信息。文档检索通常以在线(online)方式运行。 DocumentRetriever通…...

遍历算法及其应用详解

李升伟 整理 什么是遍历? 遍历是指按照某种规则或顺序,系统地访问数据结构(如树、图等)中的每个节点一次且仅一次的过程。遍历是算法设计中的基本操作,用于访问、检查或修改数据结构中的所有元素。 主要遍历算法 1…...

.NET-EFCore基础知识

.NET EF Core(Entity Framework Core)是微软开发的一款开源的对象关系映射(ORM)框架,用于在.NET 应用程序中与数据库进行交互。以下是一些.NET EF Core 的基础知识: 1. 什么是 EF Core EF Core 是.NET 平…...

R语言基础包可视化(一:axis函数)

R语言基础包可视化(一:axis函数) 背景axis函数(坐标轴函数)各参数的图片示例hadj和padjline和poslty,lwd,lwd.ticksgap.axis总结背景 之前在介绍正态Q-Q图的过程中,画过标准正态分布的随机数、分数数、分布函数、密度函数的图像,相关的文章连接参考此处:R语言正态Q-Q图…...

Axure疑难杂症:垂直菜单折叠与展开(玩转垂直菜单)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:垂直菜单折叠与展开 主要内容:折叠与展开效果 应用场景:PC后台菜单、动态下拉菜单、商品分类选择等折叠与展开场景 案例展示: 案例视频: 垂直菜单折叠与展开效果 正文内容: 关于垂直菜单的折叠与…...

docker 中跑faster-whisper 教程(1050显卡)

之前我本地机器运行faster-whisper 会报错类似 Could not load library libcudnn_ops_infer.so.8github 上也有类似的情况 :https://github.com/SYSTRAN/faster-whisper/issues/516#issuecomment-2785038635 缺少.so.8 文件,我通过以下方式,…...

MySQL 在 CentOS 7 环境安装完整步骤

1. 卸载已有环境(MariaDB/旧版MySQL) 1.停止 MariaDB 服务 systemctl stop mariadb.service 2.检查并卸载 MariaDB/MySQL 安装包 rpm -qa | grep mariadb # 检查 MariaDB 相关包 rpm -qa | grep mysql # 检查 MySQL 相关包 sudo yum remo…...

下一代智能爬虫框架:ScrapeGraphAI 详解

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、ScrapeGraphAI 概述1.1 ScrapeGraphAI介绍1.2 核心特点1.3 工作流程1.4 关键模块1.5 对比传统爬虫框架1.6 安装二、基础操作2.1 自定义解析规则2.2 数据后处理2.3 分布式爬取三、高级功能3.1 多步骤交互采集3.2 动态…...

C++-ffmpeg-2-3-工厂模式封装SDL-9-7

1.接口设计 2.窗口渲染器和材质初始化 3.渲染Draw并测试渲染YUV 4.渲染画面随窗口大小自动缩放并抗锯齿 5.清理接口和接收窗口退出事件 1.接口设计:原则 主要的实现步骤: main的流程: 1打开文件 yuv_file.open("400_300_25.yuv&quo…...

下载极客漫画——Beautiful Soup实用案例

文章目录 一、背景介绍 二、实现思路 三、效果图 四、构思 五、实现细节 1. 第一步下载网页 2. 寻找和下载漫画图像 3. 保存图像,找到前⼀张漫画 六、完整代码 七、程序输出 八、附录 九、总结 一、背景介绍 XKCD网站是一个关于浪漫、隐喻、数字、以及…...

【大模型理论篇】SWIFT: 可扩展轻量级的大模型微调基础设施

1. 背景 大模型(LLM)和多模态大模型(MLLM)利用基于Transformer的架构获得了很迅速的发展。为满足对这些模型的训练和轻量级微调需求,目前已有一些开源框架,如LLaMA-Factory、Firefly、FastChat、Axolotl和LMFlow等。但这些框架在支持的模型、技术和功能上…...

利用 schedule 模块在每日上午每 3 秒执行任务

一、schedule 模块基础原理与功能概述 schedule 模块维护了一个任务队列,每个任务都关联着一个特定的时间触发器和对应的执行函数。当系统时间到达任务设定的触发时间时,模块会从队列中取出相应的任务并执行其关联的函数。这种设 计模式使得开发者无需过多关注底层的时间处理…...

ruby超高级语法

以下是 Ruby 中一些 极度硬核 的语法和底层特性,涉及元编程的深渊、虚拟机原理、语法黑魔法等,适用于追求极限的 Ruby 开发者: 一、语法核弹级操作 1. 动态修改继承链 class A; def foo; "A"; end end class B; def foo; "B…...

Java Stream API:现代化集合处理的艺术

Java Stream API:现代化集合处理的艺术 引言 在Java 8中引入的Stream API彻底改变了我们处理集合数据的方式。它不仅仅是一个新的工具集,更代表了一种声明式、函数式的编程范式。本文将深入探讨Java Stream的核心概念、使用场景和最佳实践。 一、什么是Stream? Stream(…...

ruby高级语法

以下是 Ruby 高级语法的详细总结,涵盖元编程、模式匹配、闭包、并发模型等核心主题: 一、元编程(Metaprogramming) 1. 动态定义方法 class DynamicClass# 使用 define_method 动态定义方法["foo", "bar"].e…...

特权FPGA之UART串口

0.简介 通用异步收发器(Universal Asynchronous Receiver/Transmitter,UART)可以和各种标准串行接口,如RS 232和RS 485等进行全双工异步通信,具有传输距离远、成本低、可靠性高等优点。一般UART由专用芯片如8250,1645…...

oracle 索引失效

在 Oracle 11g 中,索引失效的常见原因包括函数修改列、隐式类型转换、统计信息过时等,解决方法需结合版本特性(如虚拟列、索引跳跃扫描)。通过执行计划分析、统计信息维护和合理使用提示(Hints)&#xff0c…...

MySQL查看binlog执行情况

因数据丢失,被要求使用binlog查看 执行SQL的具体情况。 拿到数据库压缩包,解压缩获得文件和文件夹若干。 如图,有17个binlog文件,目标数据库名应为corr。 已知这个数据库是安装在windows下,版本8.0. 先下载一个mysq…...

kotlin,Android,jetpack compose,日期时间设置

AI生成,调试出来学习,这些小组件会用了,就可以组合一个大点的程序了。 package com.example.mydatetimeimport android.app.AlertDialog import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.co…...

sql-labs靶场 less-2

文章目录 sqli-labs靶场less 2 联合注入 sqli-labs靶场 每道题都从以下模板讲解,并且每个步骤都有图片,清晰明了,便于复盘。 sql注入的基本步骤 注入点注入类型 字符型:判断闭合方式 (‘、"、’、“”&#xf…...

ssh密钥连接远程服务器并用scp传输文件

ssh密钥连接远程服务器 私钥的权限必须是600chmod 600 id_rsa连接时在命令中加上私钥的地址ssh -i PATH_to_id_rsa usernameip -p port scp -P port -i PATH_to_id_rsa file usernameip:PATH...

【锂电池SOH预测】PSO-BP锂电池健康状态预测,锂电池SOH预测(Matlab完整源码和数据)

预测效果 基于PSO-BP算法的锂电池健康状态预测研究 一、引言 1.1 研究背景与意义 在当今社会,锂电池凭借其高能量密度、长寿命及环境友好等特性,在现代能源系统中占据着举足轻重的地位。从消费电子领域如智能手机、笔记本电脑,到动力领域中…...