一、智能体强化学习——强化学习基础
1.1 强化学习与深度学习的基本概念
1.1.1 强化学习的核心思想
什么是强化学习?
-
强化学习(Reinforcement Learning, RL):指在与环境(Environment)的反复交互中,智能体(Agent)通过“试错”获取经验,并依据获得的奖励(Reward)学习出最优策略(Policy),以期在未来的决策中取得最大化的累积回报(Return)。
-
核心要素
- 智能体(Agent):在环境中执行动作的主体;
- 环境(Environment):Agent 与之交互的外部世界;
- 状态(State):环境在某一时刻的刻画,Agent 能观测到或部分观测到;
- 动作(Action):Agent 针对所处状态执行的操作;
- 奖励(Reward):环境对 Agent 所执行动作的反馈信号,用来衡量动作的好坏;
- 策略(Policy):Agent 在任意给定状态下选择动作的规则或函数 $ π ( a ∣ s ) \pi(a|s) π(a∣s));
- 目标:在整个交互过程中累积尽可能多的奖励(或最大化期望折扣累积奖励)。
强化学习与监督/无监督学习的区别
-
监督学习(Supervised Learning)
- 有“正确标签”作为监督信息;
- 训练目标是最小化预测与标签之间的损失(如分类错误率、回归均方差)。
-
无监督学习(Unsupervised Learning)
- 无任何标签信息,尝试从数据中发现分布结构或聚类模式;
- 常见应用:聚类、降维、异常检测等。
-
强化学习(Reinforcement Learning)
- 没有直接的“正确动作”标签,只有环境给出的奖励信号;
- 学习是通过“试错”来迭代地调整策略,以期获得最大累计回报;
- 当前动作会影响未来的状态和奖励,存在时间与序列上的依赖。
强化学习的基本流程
- Agent 根据某种策略 π \pi π 选择动作 a t a_t at;
- 环境执行该动作并返回下一状态 s t + 1 s_{t+1} st+1 与即时奖励 r t r_t rt;
- Agent 更新自己的策略或价值函数;
- 重复交互直到任务结束(或达到最大时间步数)。
这个反复交互与决策-反馈的过程是强化学习最突出的特点。不断从环境中“试错”并更新策略,以适应不确定或动态的外界。
1.1.2 深度学习基础回顾
为了将强化学习扩展到高维、复杂的状态空间(如图像、文本),往往需要借助 深度神经网络 来进行函数逼近。此时就进入了 深度强化学习(Deep Reinforcement Learning, DRL) 的范畴。以下是深度学习的几个关键概念:
-
神经网络结构
- 通常由多层线性或卷积、循环等结构堆叠,加上激活函数(ReLU、Sigmoid、Tanh 等)构成;
- 可以视为一个可微分的函数 f θ ( x ) f_\theta(x) fθ(x),其中 θ \theta θ 表示模型参数(权重和偏置)。
-
梯度下降与损失函数
- 损失函数(Loss Function):衡量预测与目标之间差异的函数,常见如均方误差、交叉熵;
- 梯度下降(Gradient Descent):利用目标函数相对于参数的梯度来迭代更新参数;
- 优化器(Optimizer):SGD、Adam、RMSProp 等都是常用的梯度下降算法变体,用于加速收敛、提升稳定性。
-
深度学习在强化学习中的角色
- 函数逼近器:将状态作为输入,输出价值(Q 值)或动作的概率分布;
- 特征提取:通过卷积网络或其他结构,从原始高维数据(如图像)中提取有用的特征。
结合深度学习后,强化学习能够应对高维连续状态、复杂的感知和控制任务,如 Atari 游戏、机器人操控、自动驾驶等场景。
1.2 马尔可夫决策过程(MDP)
1.2.1 MDP 基本定义
强化学习通常用 马尔可夫决策过程(Markov Decision Process, MDP) 来建模。MDP 是一个五元组 ⟨ S , A , P , R , γ ⟩ \langle \mathcal{S}, \mathcal{A}, P, R, \gamma \rangle ⟨S,A,P,R,γ⟩:
-
状态空间 S \mathcal{S} S
- 系统可能处于的所有状态的集合(离散或连续)。
-
动作空间 A \mathcal{A} A
- Agent 可执行的所有动作集合(离散或连续)。
-
转移概率 P ( s t + 1 ∣ s t , a t ) P(s_{t+1} | s_t, a_t) P(st+1∣st,at)
- 从状态 s t s_t st 执行动作 a t a_t at 后进入下一状态 s t + 1 s_{t+1} st+1 的概率分布。
- “马尔可夫性质”表示:下一状态只与当前状态和当前动作有关,与过去的历史无关。
-
奖励函数 R ( s t , a t , s t + 1 ) R(s_t, a_t, s_{t+1}) R(st,at,st+1)
- 执行动作后得到的奖励,可简化成 R ( s , a ) R(s,a) R(s,a) 或 R ( s ) R(s) R(s) 等形式。
-
折扣因子 γ ∈ [ 0 , 1 ] \gamma \in [0,1] γ∈[0,1]
- 用于平衡短期奖励和长期奖励的权重;
- 越接近 1,越重视长期效益;越接近 0,越重视眼前奖励。
累计奖励
- 目标:最大化期望折扣累计回报
E [ ∑ t = 0 ∞ γ t r t ] \LARGE \mathbb{E}\left[\sum_{t=0}^{\infty} \gamma^t r_t \right] E t=0∑∞γtrt
, 其中 r t r_t rt 是智能体在时间步 t t t 获得的即时奖励。
1.2.2 价值函数与 Q 函数
策略 π \pi π
- 策略 π \pi π 定义在每个状态 s s s 下,选择动作 a a a 的分布: π ( a ∣ s ) \pi(a|s) π(a∣s)。
- 确定性策略: π ( s ) = a \pi(s) = a π(s)=a,即在状态 s s s 下必然选择动作 a a a;
- 随机策略: π ( a ∣ s ) \pi(a|s) π(a∣s) 是一个概率分布,在状态 s s s 下选择动作 a a a 的概率。
状态价值函数 V π ( s ) V^\pi(s) Vπ(s)
- 在策略 π \pi π 下,从状态 s s s 出发所能获得的期望折扣累计奖励:
V π ( s ) = E π [ ∑ k = 0 ∞ γ k r t + k | s t = s ] \LARGE V^\pi(s) = \mathbb{E}_\pi \left[ \sum_{k=0}^\infty \gamma^k r_{t+k} \,\middle|\, s_t = s \right] Vπ(s)=Eπ k=0∑∞γkrt+k st=s - 这表示如果我们始终遵循策略 π \pi π,在状态 s s s 时的预期收益。
动作价值函数 Q π ( s , a ) Q^\pi(s,a) Qπ(s,a)
- 在策略 π \pi π 下,从状态 s s s 执行动作 a a a 后,所能获得的期望折扣累计奖励:
Q π ( s , a ) = E π [ ∑ k = 0 ∞ γ k r t + k | s t = s , a t = a ] \LARGE Q^\pi(s,a) = \mathbb{E}_\pi \left[ \sum_{k=0}^\infty \gamma^k r_{t+k} \,\middle|\, s_t = s, a_t=a \right] Qπ(s,a)=Eπ k=0∑∞γkrt+k st=s,at=a - 也称作 Q 函数 或 动作价值函数。
价值函数与策略之间的关系
-
状态价值函数与 Q 函数
V π ( s ) = ∑ a ∈ A π ( a ∣ s ) Q π ( s , a ) \LARGE V^\pi(s) = \sum_{a \in \mathcal{A}} \pi(a|s) \, Q^\pi(s,a) Vπ(s)=a∈A∑π(a∣s)Qπ(s,a)- 状态价值是动作价值的加权期望,权重为策略在该状态下选择各动作的概率。
-
Bellman 期望方程:在策略 π \pi π 下,
Q π ( s , a ) = R ( s , a ) + γ ∑ s ′ P ( s ′ ∣ s , a ) V π ( s ′ ) \LARGE Q^\pi(s,a) = R(s,a) + \gamma \sum_{s'} P(s'|s,a) V^\pi(s') Qπ(s,a)=R(s,a)+γs′∑P(s′∣s,a)Vπ(s′)
也可写成
V π ( s ) = ∑ a π ( a ∣ s ) [ R ( s , a ) + γ ∑ s ′ P ( s ′ ∣ s , a ) V π ( s ′ ) ] \LARGE V^\pi(s) = \sum_{a} \pi(a|s) \big[R(s,a) + \gamma \sum_{s'}P(s'|s,a)V^\pi(s')\big] Vπ(s)=a∑π(a∣s)[R(s,a)+γs′∑P(s′∣s,a)Vπ(s′)]
最优价值函数
- 最优状态价值函数
V ∗ ( s ) = max π V π ( s ) \LARGE V^*(s) = \max_\pi V^\pi(s) V∗(s)=πmaxVπ(s)
即在状态 s s s 下能获得的最高期望回报。 - 最优 Q 函数
Q ∗ ( s , a ) = max π Q π ( s , a ) \LARGE Q^*(s,a) = \max_\pi Q^\pi(s,a) Q∗(s,a)=πmaxQπ(s,a)
即在状态 s s s 执行动作 a a a 后,所能获得的最高期望回报。 - 对于任何 MDP,都存在一个或多个最优策略 π ∗ \pi^* π∗,其满足
Q ∗ ( s , a ) = Q π ∗ ( s , a ) , V ∗ ( s ) = V π ∗ ( s ) \LARGE Q^*(s,a) = Q^{\pi^*}(s,a), \quad V^*(s) = V^{\pi^*}(s) Q∗(s,a)=Qπ∗(s,a),V∗(s)=Vπ∗(s)
1.3 经典强化学习方法
在传统强化学习领域(未结合深度学习之前),有一些基本且重要的方法,如动态规划、价值迭代、策略迭代,以及以 Q-Learning / SARSA 为代表的时序差分(TD)方法等。这些算法主要针对离散、规模相对较小的状态空间。
1.3.1 动态规划 (Dynamic Programming, DP)
动态规划方法通常要求我们可以完全访问环境的动态模型(即知道转移概率和奖励函数),来进行 规划(planning)。两种典型的 DP 算法为:
1.3.1.1 价值迭代(Value Iteration)
- Bellman 最优方程:对最优价值函数 V ∗ ( s ) V^*(s) V∗(s) 有
V ∗ ( s ) = max a [ R ( s , a ) + γ ∑ s ′ P ( s ′ ∣ s , a ) V ∗ ( s ′ ) ] \LARGE V^*(s) = \max_a \Big[ R(s,a) + \gamma \sum_{s'} P(s'|s,a)\, V^*(s') \Big] V∗(s)=amax[R(s,a)+γs′∑P(s′∣s,a)V∗(s′)] - 价值迭代算法:从一个初始 V V V 开始,在每次迭代对所有状态执行:
V ( s ) ← max a [ R ( s , a ) + γ ∑ s ′ P ( s ′ ∣ s , a ) V ( s ′ ) ] . \LARGE V(s) \leftarrow \max_a \Big[ R(s,a) + \gamma \sum_{s'} P(s'|s,a)\, V(s') \Big]. V(s)←amax[R(s,a)+γs′∑P(s′∣s,a)V(s′)]. - 当 V ( s ) V(s) V(s) 收敛后,即得到近似的最优价值函数 V ∗ V^* V∗。进而可推得最优策略:
π ∗ ( s ) = arg max a [ R ( s , a ) + γ ∑ s ′ P ( s ′ ∣ s , a ) V ( s ′ ) ] \LARGE \pi^*(s) = \arg\max_a \Big[ R(s,a) + \gamma \sum_{s'} P(s'|s,a)\, V(s') \Big] π∗(s)=argamax[R(s,a)+γs′∑P(s′∣s,a)V(s′)]
1.3.1.2 策略迭代(Policy Iteration)
- 分为两个阶段的交替:
- 策略评估(Policy Evaluation):在当前策略 π \pi π 下,计算得到 V π V^\pi Vπ;
- 策略提升(Policy Improvement):基于 V π V^\pi Vπ 来更新得到新策略 π ′ \pi' π′,使得期望收益更高。
- 反复迭代,直到策略不再改变,得到最优策略 π ∗ \pi^* π∗。
动态规划主要缺点在于:它通常需要我们显式知道环境的转移概率 P P P,且状态空间不宜过大,否则枚举计算的开销很大。
1.3.2 Q-Learning 和 SARSA
当环境模型未知或者难以获得时,可以采用**时序差分(Temporal Difference, TD)**的学习方法,直接通过与环境交互的样本来更新价值函数。其中最经典的两个算法是 Q-Learning 和 SARSA。它们都更新 动作价值函数 Q ( s , a ) Q(s,a) Q(s,a),但有一些差异。
1.3.2.1 Q-Learning
- 目标:学得最优 Q 函数 Q ∗ ( s , a ) Q^*(s,a) Q∗(s,a),在任意状态下选择 max a Q ( s , a ) \max_a Q(s,a) maxaQ(s,a) 即可得到最优动作。
- 更新规则:
Q ( s t , a t ) ← Q ( s t , a t ) + α [ r t + γ max a ′ Q ( s t + 1 , a ′ ) − Q ( s t , a t ) ] \LARGE Q(s_t,a_t) \leftarrow Q(s_t,a_t) + \alpha \Big[r_t + \gamma \max_{a'}Q(s_{t+1},a') - Q(s_t,a_t)\Big] Q(st,at)←Q(st,at)+α[rt+γa′maxQ(st+1,a′)−Q(st,at)]
其中 α \alpha α 为学习率。 - 离策略(Off-policy)
- 在实际执行中,Agent 会采用 ϵ \epsilon ϵ-贪心等探索策略选动作,但更新时使用的是 max a ′ Q \max_{a'}Q maxa′Q 的估计来逼近最优策略。
- 这种“行为策略”与“目标策略”分离的方式,称为 Off-policy。
1.3.2.2 SARSA
- 目标:学得“当前策略”本身的 Q 值,而不是最优策略;
- 更新规则:
Q ( s t , a t ) ← Q ( s t , a t ) + α [ r t + γ Q ( s t + 1 , a t + 1 ) − Q ( s t , a t ) ] \LARGE Q(s_t,a_t) \leftarrow Q(s_t,a_t) + \alpha \Big[r_t + \gamma Q(s_{t+1}, a_{t+1}) - Q(s_t,a_t)\Big] Q(st,at)←Q(st,at)+α[rt+γQ(st+1,at+1)−Q(st,at)]
与 Q-Learning 的区别在于,TD 目标中用的动作是实际执行的动作 a t + 1 a_{t+1} at+1,而非 max a ′ Q ( s t + 1 , a ′ ) \max_{a'} Q(s_{t+1},a') maxa′Q(st+1,a′)。 - 同策略(On-policy)
- SARSA 所学习的策略与行为策略一致,也就是说它估计的是“ ϵ \epsilon ϵ-贪心策略自己”的价值函数。
1.3.2.3 比较
- Q-Learning 更常用于学习最优策略(若能充分探索),但在某些噪声较大或者需要更保守策略的场景,SARSA 也有其价值,例如在 CliffWalking 环境中,SARSA 往往会学得更保守的路线。
1.3.3 策略梯度(Policy Gradient)概念(概述)
在上述 Q-Learning / SARSA / 动态规划 等方法中,核心思想是先估计价值函数(如 Q ( s , a ) Q(s,a) Q(s,a) 或 V ( s ) V(s) V(s)),然后再通过贪心方式派生或改进策略。
而 策略梯度 方法则是从直接对策略 π θ ( a ∣ s ) \pi_\theta(a|s) πθ(a∣s) 本身进行参数化和梯度优化的角度出发:
- 参数化策略: π θ ( a ∣ s ) \pi_\theta(a|s) πθ(a∣s),其参数为 θ \theta θ(可用神经网络表示)。
- 目标:最大化期望回报 J ( θ ) = E π θ [ ∑ γ t r t ] J(\theta) = \mathbb{E}_{\pi_\theta}\left[\sum \gamma^t r_t\right] J(θ)=Eπθ[∑γtrt]。
- 思想:基于梯度上升,通过 ∇ θ J ( θ ) \nabla_\theta J(\theta) ∇θJ(θ) 的估计来更新 θ \theta θ。
这种方法适用于连续动作空间或高维动作空间等场景,并且在先进的算法(如 PPO、SAC)中广泛使用。我们在后续章节会深入展开 Policy Gradient 与 Actor-Critic 算法的完整推导和实现。
总结
在这一阶段,我们系统地介绍了强化学习的 概念基础、MDP 理论框架以及 经典强化学习方法(动态规划、Q-Learning、SARSA、策略梯度基础)。核心要点包括:
- 强化学习与监督/无监督学习的区别:无正确标签,通过试错最大化累积奖励;
- 深度学习在 RL 中的角色:使用神经网络对价值函数或策略函数进行逼近,提高模型对高维复杂数据的处理能力;
- MDP 基本要素:状态、动作、转移概率、奖励、折扣因子,重点理解马尔可夫性质;
- 价值函数与 Q 函数:状态价值和动作价值是衡量某个策略在不同状态/动作组合下的未来收益预估;
- 经典强化学习:
- 动态规划:价值迭代、策略迭代(要求已知环境模型);
- Q-Learning & SARSA:时序差分方法,通过与环境的交互样本在线学习;
- 策略梯度概念:直接对策略进行参数化、对期望回报进行梯度优化。
以上内容构成强化学习的“底层框架”,为后续的**深度强化学习(DQN、DDPG、PPO、SAC 等)**打下扎实基础。在后面的学习中,我们会进一步讨论如何利用神经网络来逼近 Q Q Q 函数或策略,并解决各种复杂场景下的控制与决策问题。
相关文章:
一、智能体强化学习——强化学习基础
1.1 强化学习与深度学习的基本概念 1.1.1 强化学习的核心思想 什么是强化学习? 强化学习(Reinforcement Learning, RL):指在与环境(Environment)的反复交互中,智能体(Agent&#x…...
USB学习——基本概念
文章目录 USB(Universal Serial Bus)概述USB系统的描述USB总线传输方式USB的拓扑结构 USB的连接模型USB控制器及分类USB描述符USB 端点USB枚举过程USB 四种传输类型USB 事务批量传输(Bulk)中断传输(Interrupt)等时传输(Isochronous)控制传输(Control)端点…...
vue3 初体验
git代码git clone https://github.com/kailong321200875/vue-element-plus-admin.git 后端自己写python,Django架构 1.报错:跨域,代理的方式解决 server: {port:4000, ##前端启动端口proxy: {// 选项写法/api: {target: http://127.0.0.1…...
CAPL语法基础
CAPL语法基础 目录 CAPL语法基础1. 引言2. 数据类型、变量与常量2.1 数据类型2.2 变量2.3 常量2.4 案例1:使用变量和常量计算圆的面积 3. 运算符与表达式3.1 算术运算符3.2 关系运算符3.3 逻辑运算符3.4 位运算符3.5 案例2:使用运算符实现简单的逻辑判断…...
代码的形状:重构的方向
大概2周前写了一篇《代码的形状:从外到内的探索与实践》 涵树:代码的形状:从外到内的探索与实践 觉得这个话题还可以继续,它是一个从无形到有形的过程,而这个过程感觉就是王阳明先生说的“心即理”的探寻过程。 我讨论代码的形状ÿ…...
144.《在 macOS 上安装 Redis》
文章目录 在 macOS 上安装 Redis先决条件安装在前台启动和停止 Redis使用 launchd 启动和停止 Redis连接到 Redis后续步骤Next steps redis 官方安装教程是英文,本文只是将英文文档翻译成中文,方便大家阅读 redis官方安装教程:download redis…...
使用mysql报Communications link failure异常解决
背景 线上使用polarDB,基于mysql(5.7),架构为springbootmybatisplusdurid连接池,部分业务场景涉及大表更新和查询操作,在查询慢sql且超过一定时间时就会报出"Communications link failure"异常,主要体现在界…...
搭建一个fastapi的项目,调用ollama服务
1. 项目结构 my_project/ │ ├── app/ │ ├── main.py # FastAPI应用的入口 │ ├── services/ # 包含服务逻辑 │ │ └── ollama_service.py │ ├── models/ # 定义数据模型 │ │ └── response.py │ ├─…...
【update 更新数据语法合集】.NET开源ORM框架 SqlSugar 系列
系列文章目录 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀 文章目录 系列文章目录前言 🍃一、实体对象更新1.1 单条与批量1.2 不更新某列1.3 只更新某列1.4 NULL列不更新1.5 无主键/指定列…...
Elasticsearch—索引库操作(增删查改)
Elasticsearch中Index就相当于MySQL中的数据库表 Mapping映射就类似表的结构。 因此我们想要向Elasticsearch中存储数据,必须先创建Index和Mapping 1. Mapping映射属性 Mapping是对索引库中文档的约束,常见的Mapping属性包括: type:字段数据类…...
C#进阶-在Ubuntu上部署ASP.NET Core Web API应用
随着云计算和容器化技术的普及,Linux 服务器已成为部署 Web 应用程序的主流平台之一。ASP.NET Core 作为一个跨平台、高性能的框架,非常适合在 Linux 环境中运行。本篇博客将详细介绍如何在 Linux 服务器上部署 ASP.NET Core Web API 应用,包…...
执行这个composer require topthink/think-mongo 报错
安装tp5 mongodb扩展 执行这个composer require topthink/think-mongo 报错 解决方法: 1 把composer.json里的"overtrue/wechat": "4.2.11",注释掉再执行 2 composer require topthink/think-mongo1.* 安装mongo的1版本...
大语言模型训练数据集格式
1. SFT(有监督微调)的数据集格式 对于大语言模型的训练中,SFT(Supervised Fine-Tuning)的数据集格式可以采用以下方式: 输入数据:输入数据是一个文本序列,通常是一个句子或者一个段…...
stringRedisTemplate.execute执行lua脚本
stringRedisTemplate.execute执行lua脚本 1. 引入必要依赖 确保项目中已经引入了Spring Data Redis相关依赖,例如在 Maven 项目中,一般会有如下依赖(版本号根据实际情况调整): <dependency><groupId>or…...
鸿蒙UI(ArkUI-方舟UI框架)
参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/arkts-layout-development-overview-V13 ArkUI简介 ArkUI(方舟UI框架)为应用的UI开发提供了完整的基础设施,包括简洁的UI语法、丰富的UI功能ÿ…...
Linux-蓝牙协议
SPP (Serial Port Profile): 串口协议(SPP)是一个蓝牙配置文件,允许设备通过蓝牙模拟传统的串行端口通信。它通常用于无线串口连接,允许设备如计算机和外设(例如打印机或条形码扫描器)之间进行数据传输。A…...
CES Asia 2025:科技盛宴即将开启,续写辉煌篇章
随着2025年国际消费类电子产品展览会(CES)在美国拉斯维加斯盛大开幕并展现出诸多令人瞩目的发展趋势,亚洲科技界也对即将到来的CES Asia 2025充满期待,一场科技盛宴即将在亚洲大陆续写辉煌。 在刚刚拉开帷幕的CES 2025上ÿ…...
tutorial3.c
这个教程程序展示了如何使用 libxlsxwriter 库向 Excel 文件中写入不同类型的数据,包括字符串、数字和日期。以下是程序的主要步骤和功能: 定义数据结构: 定义了一个 expense 结构体,包含三个成员:item(项…...
C# 获取当前运行路径的6种实用方法
C# 获取当前运行路径的多种方法 在C#中,获取当前运行路径(即程序的工作目录)是常见的需求,尤其在处理文件读写、日志记录和配置文件时。不同的场景可能需要使用不同的方法来获取路径。本文将介绍几种常用的获取当前运行路径的方法…...
龙蜥Linux系统部署docker21.1.3版本
龙蜥系统配置docker环境 更新yum源 更新软件源中的包。 yum update安装底层工具 yum install -y yum-utils device-mapper-persistent-data lvm2添加阿里云仓库 # 添加阿里云的docker镜像仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/c…...
.NET中的框架和运行环境
在.NET生态系统中,框架和运行环境是两个不同的概念,它们各自扮演着重要的角色。 下面我将分别介绍.NET中的框架和运行环境,并解释它们之间的区别。 .NET 框架(Frameworks) 框架提供了一套预定义的类库、工具和服务&…...
STM32的存储结构
STM32F103 芯片是基于 ARM Cortex-M3 内核的微控制器,它集成了多种类型的存储器,每种存储器都有其特定的作用和存储对象。以下是关于 STM32F103 中 Flash、ROM 和 SRAM 的详细介绍: 1. Flash Memory (闪存) 作用:Flash 是非易失性…...
微信小程序
一、小程序文件结构 1.目录结构 pages文件夹:存放【页面文件夹】,一个【页面文件夹】就是一个页面,存放着小程序页面文件。即pages中的每一个文件夹都存放着一个小程序页面的文件(js、wxml、json、wxss) 页面文件夹…...
《CPython Internals》阅读笔记:p76-p95
《CPython Internals》学习第 5 天,p76-p95 总结,总计 20 页。 一、技术总结 无。 二、英语总结(生词:1) 1.check vi/vt. to exam sth to ensure it is correct, true, or in good condition.示例: (1)After I’d finished …...
HOW - Form 表单 label 和 wrapper 对齐场景
一、背景 在日常使用 表单 时,我们一般有如下布局: 可以通过 Form 表单提供的配置直接设置: <Formform{form}labelCol{{ span: 4 }}wrapperCol{{ span: 20 }}onFinish{handleSubmit}><Form.Itemlabel"输入框"name"…...
Js的回调函数
一、什么是回调函数(Callback)? 回调函数(Callback Function)是指一个函数被作为参数传递给另一个函数,并在特定事件发生或操作完成时执行。 可以通俗地理解为一种“委托”机制。 在JavaScript中࿰…...
FairGuard游戏安全2024年度报告
导 读:2024年,国内游戏市场实际销售收入3257.83亿元,同比增长7.53%,游戏用户规模6.74亿人,同比增长0.94%,市场收入与用户规模双双实现突破,迎来了历史新高点。但游戏黑灰产规模也在迅速扩大&…...
ant-design-vue 1.X 通过id获取a-input组件失败
1.ant-design-vue 1.X 问题描述 当我在a-form组件中,以v-decorator指令绑定表单组件时,无法根据我设置的verify-code-input获取元素 <a-input type"text" id"verify-code-input" class"paIpt":placeholder"$t(…...
JS爬虫实战演练
在这个小红书私信通里面进行一个js的爬虫 文字发送 async function sendChatMessage(content) {const url https://pro.xiaohongshu.com/api/edith/ads/pro/chat/chatline/msg;const params new URLSearchParams({porch_user_id: 677e116404ee000000000001});const messageD…...
JVM vs JDK vs JRE
JVM是Java虚拟机的缩写, 用于实现Java的一次编译,处处运行。 Java代码写成.class后,由本地的虚拟机运行。 JDK(Java Development Kit)是一个功能齐全的 Java 开发工具包,供开发者使用。 JDK包含了JRE。…...
OpenCV相机标定与3D重建(47)从两幅图像中的一组匹配点恢复相机的姿态(旋转和平移)函数recoverPose()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 从两幅不同相机拍摄的图像中对应的点恢复相对相机旋转和平移,使用手性检查。返回通过该检查的内点数量。 cv::recoverPose 是 OpenCV…...
代码随想录算法训练营day27
代码随想录算法训练营 —day27 文章目录 代码随想录算法训练营前言一、贪心算法理论基础二、455.分发饼干三、376. 摆动序列53. 最大子数组和总结 前言 今天是算法营的第27天,希望自己能够坚持下来! 今日任务: ● 贪心算法理论基础 ● 455.…...
基于华为ENSP的OSPF状态机、工作过程、配置保姆级别详解(2)
本篇技术博文摘要 🌟 基于华为enspOSPF状态机、OSPF工作过程、.OSPF基本配置等保姆级别具体详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法 引言 📘 在这个快速发展的技术时代,与时俱进是每个IT人的必修课。我…...
【数据结构】链表
目录 编辑 1.2链表 1.2.1 链表的特性 1.2.2 单向链表 遍历无头单向链表 遍历有头单向链表 链表尾插法练习 1.2.3 单向链表的函数操作 单向链表的特点: 1.2链表 链表又称单链表、链式存储结构,用于存储逻辑关系为“一对一”的数据。 和顺序表…...
RabbitMQ解决消息积压的方法
目录 减少发送mq的消息体内容 增加消费者数量 批量消费消息 临时队列转移 监控和预警机制 分阶段实施 最后还有一个方法就是开启队列的懒加载 这篇文章总结一下自己知道的解决消息积压得方法。 减少发送mq的消息体内容 像我们没有必要知道一个的中间状态,只需…...
机器学习是?
机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科; 是人工智能(AI)的一个分支,也是AI的核心领域,它专注于开发算法和模型&#…...
jupyter出现“.ipynb appears to have died. It will restart automatically.”解决方法
原因 解决方法:更新jupyter的版本 1.打开anaconda prompt 2、更新jupyter版本 在anaconda prompt输入以下指令 conda update jupyter如图:...
计算机毕业设计PyHive+Hadoop深圳共享单车预测系统 共享单车数据分析可视化大屏 共享单车爬虫 共享单车数据仓库 机器学习 深度学习
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
c++开源协程库libgo介绍及使用,srs协程,boost协程 Boost::fiber
https://www.cnblogs.com/qwsdcv/p/9115364.html Boost - 从Coroutine2 到Fiber - 开学五年级了 - 博客园 协程就是由程序员控制跑在线程里的“微线程”。它可以由程序员调度,切换协程时代价小(切换根据实现不同,消耗的CPU周期从几十到几百不等)&#x…...
微服务实现高并发 秒杀系统,前后端实现
一、前端实现 前端项目初始化 首先,我们需要创建一个新的 Vue 3 项目。你可以使用 Vue CLI 来快速搭建项目。 安装 Vue CLI(如果尚未安装) bash npm install -g vue/cli 创建 Vue 项目 bash vue create seckill-frontend cd seckill-f…...
Eureka缓存机制
一、Eureka的CAP特性 Eureka是一个AP系统,它优先保证可用性(A)和分区容错性(P),而不保证强一致性(C)。这种设计使得Eureka在分布式系统中能够应对各种故障和分区情况,保…...
PHP语言的学习路线
PHP语言的学习路线 PHP(Hypertext Preprocessor)是一种广泛使用的开源服务器端脚本语言,尤其适用于Web开发。由于其易学易用、功能强大,PHP成为了许多动态网站和Web应用程序开发的首选语言。随着Web3.0和云计算的兴起,…...
python学opencv|读取图像(二十八)使用cv2.warpAffine()函数平移图像
【1】引言 前序已经对图像操作进行了广泛的学习,包括读取、放大缩小,改变BGR通道值等,相关链接包括且不限于: python学opencv|读取图像-CSDN博客 python学opencv|读取图像(三)放大和缩小图像_python(1)使…...
[Linux]Mysql9.0.1服务端脱机安装配置教程(redhat)
前言 本教程适用于在yum源不可用的LInux主机上安装Mysql的场景。 以redhat系主机做操作示例,debian系主机可参照步骤,将对应的rpm -ivh命令换成dpkg -i。 1. 官网下载安装包 https://dev.mysql.com/downloads/mysql/ 1.1 版本分类 MySQL Enterprise…...
个人 ALL IN ONE 方案搭建方案分享(从硬件到软件)及内网穿透方案
这里只做大概方案分享,每个虚拟机的部署细节滤过。 个人 ALL IN ONE 方案搭建方案分享 本指南将详细介绍如何基于现有硬件搭建一体化家庭/个人服务器解决方案,涵盖从软硬件配置、系统安装到功能实现以及性能优化的全过程。实现集 软路由、旁路由、NAS 网…...
TrustRAG:增强RAG系统鲁棒性与可信度的创新框架
在人工智能飞速发展的今天,大语言模型(LLMs)凭借其强大的语言处理能力在诸多领域大放异彩。检索增强生成(RAG)系统(面向企业RAG(Retrieval Augmented Generation)系统的多维检索框架…...
使用证件照制作软件的常见问题及解决方案
在数字化时代,证件照的制作变得越来越简单。借助各种证件照制作软件,我们可以轻松在家中制作出符合要求的证件照。然而,用户在使用这些软件时,可能会遇到一些常见问题。为了帮助您顺利制作出满意的证件照,我们整理了一…...
通过gradle发布aar或jar携带sources-jar到maven nexus
找了很久,没有找到满意的。终于找到一个好的办法。 gradle7.x适用。比以前的写法简洁。 发布传统的jar工程 比如okhttp,fastjson等项目,纯java工程。 直接创建新文件publish.gradle: apply plugin: maven-publishProperties properties …...
SAP推出云端ERP解决方案,加速零售行业数字化转型
2025年1月9日,SAP发布了一款专为零售行业设计的云端ERP行业解决方案——S/4HANA Cloud Public Edition,进一步推动企业向云端迁移。这款解决方案旨在集中运营数据,整合财务、采购和商品管理流程,以帮助零售企业优化运营效率。 核…...
RK3568 Android 13 内置搜狗输入法小计
问:为什么写? 答:网上搜出来的都试过了,不行!下面直接上代码和注意事项! 首先到这个目录(/RK3568/Rockchip_Android13_SDK_Release/device/rockchip/rk356x/tl3568_evm/preinstall)…...