# [0705] Task06 DDPG 算法、PPO 算法、SAC 算法【理论 only】

  • easy-rl PDF版本 笔记整理 P5、P10 - P12
  • joyrl 比对 补充 P11 - P13
  • OpenAI 文档整理 ⭐ https://spinningup.openai.com/en/latest/index.html

在这里插入图片描述

在这里插入图片描述

最新版PDF下载
地址:https://github.com/datawhalechina/easy-rl/releases
国内地址(推荐国内读者使用)
链接: https://pan.baidu.com/s/1isqQnpVRWbb3yh83Vs0kbw 提取码: us6a

easy-rl 在线版本链接 (用于 copy 代码)
参考链接 2:https://datawhalechina.github.io/joyrl-book/

其它:
【勘误记录 链接】
——————
5、深度强化学习基础 ⭐️
开源内容:https://linklearner.com/learn/summary/11
——————————

在这里插入图片描述
图片来源

近端策略优化(proximal policy optimization,PPO)

同策略:要学习的智能体 和 与环境交互的智能体 是相同的。
异策略:要学习的智能体 和 与环境交互的智能体 不相同

策略梯度: 需要很多时间采样数据

同策略 ⟹ 重要性采样 ~~~\overset{重要性采样}{\Longrightarrow}~~~    重要性采样    异策略

PPO: 避免两个分布相差太多。 同策略算法
1、本来的优化项 J ( θ , θ ′ ) J(\theta,\theta^\prime) J(θ,θ)
2、约束项: θ \theta θ θ ′ \theta^\prime θ 输出动作的 KL 散度 ( θ \theta θ θ ′ \theta^\prime θ 越相似越好)

PPO 有一个前身:信任区域策略优化(trust region policy optimization,TRPO)
TRPO 很难处理,因为它把 KL 散度约束当作一个额外的约束,没有放在目标函数里,所以很难计算。因此我们一般就用 PPO,而不使用 TRPO 。PPO 与 TRPO 的性能差不多,但 PPO 在实现上比 TRPO 容易得多。

KL 散度:动作的距离。执行某个动作的概率分布 的距离。

PPO 算法有两个主要的变种:近端策略优化惩罚(PPO-penalty)和近端策略优化裁剪(PPO-clip)。

在这里插入图片描述

性能差不多,更易实现
信任区域策略优化(trust region policy optimization,TRPO)
近端策略优化(proximal policy optimization, PPO
近端策略优化惩罚(PPO-penalty)
近端策略优化裁剪(PPO-clip)

——————————
P10 稀疏奖励 问题
1、设计奖励。 需要领域知识
把 最终奖励 分配到 每个相关动作上, 如何呢?

2、好奇心
内在好奇心模块(intrinsic curiosity module,ICM)
输入: a t , s t a_t,s_t at,st
输出: s ^ t + 1 \hat s_{t+1} s^t+1
网络的预测值 s ^ t + 1 \hat s_{t+1} s^t+1 与真实值 s t + 1 s_{t+1} st+1 越不相似, r t i r_t^i rti 越大

r t i r_t^i rti : 未来的状态越难以被预测,动作的奖励越大。鼓励 冒险 和 探索。

  • 指标过于单一,可能 只学到无用的

特征提取器 (feature extractor)

网络 2:
输入: 向量 ϕ ( s t ) {\bm \phi}(s_{t}) ϕ(st) ϕ ( s t + 1 ) {\bm \phi}(s_{t+1}) ϕ(st+1)

预测动作 a ^ \hat a a^ 与 真正动作 越接近越好。

在这里插入图片描述

3、课程学习

简单 ——> 困难

逆课程学习(reverse curriculum learning):
从最终最理想的状态 [我们称之为黄金状态(gold state)] 开始,依次去寻找距离黄金状态最近的状态作为想让智能体达到的阶段性的“理想”状态。当然,我们会在此过程中有意地去掉一些极端的状态,即太简单、太难的状态。

4、分层强化学习(hierarchical reinforcement learning,HRL)
将智能体的策略分为高层次策略和低层次策略,高层次策略根据当前状态决定如何执行低层次策略。

————————
P11 模仿学习
不清楚 奖励 的场景

模仿学习(imitation learning,IL)
示范学习(learning from demonstration)
学徒学习(apprenticeship learning)
观察学习(learning by watching)

有明确的奖励:棋类游戏、电玩
无法给出明确的奖励: 聊天机器人

收集专家示范:人类开车的记录、人的对话

反推,专家是因为什么样的奖励函数才会采取这些行为。
逆强化学习是先找出奖励函数,找出奖励函数以后,再用强化学习找出最优演员。

第三人称视角模仿学习(third person imitation learning)技术

————————
P12 深度确定性策略梯度(deep deterministic policy gradient,DDPG)

在这里插入图片描述

使用了经验回放 异策略

消融实验 【控制变量法】分析每一个约束条件对于对战结果的影响。


joyrl:

DDPG_连续

在需要确定性策略且连续动作空间的前提下,这类算法将是比较稳定的基线算法

连续动作空间 的 DQN

深度确定性策略梯度算法 (deep deterministic policy gradient, DDPG)

经验回放机制可以减少样本之间的相关性,提高样本的有效利用率,并且增加训练的稳定性。

缺点:
1、无法用于 离散动作空间
2、高度依赖超参数
3、高度敏感的初始条件。 影响算法的收敛性和性能
4、易陷入局部最优。

  • 由于采用了确定性策略,可能会导致算法陷入局部最优,难以找到全局最优策略。为了增加探索性,需要采取一些措施,如加入噪声策略或使用其他的探索方法。

软更新的好处是更加平滑缓慢,可以避免因权重更新过于迅速而导致的震荡,同时降低训练发散的风险。

双延迟 确定性策略梯度算法 (twin delayed DDPG, TD3)

双延迟确定性策略梯度算法

三点改进:双 Q 网络、延迟更新、躁声正则
双 Q 网络:两个 Q 网络, 取 Q 值较小的。 应对 Q 值的过估计问题, 提高算法的稳定性 和 收敛性。

延迟更新:让 actor 的更新频率低于 critic 的更新频率

  • 三思而后行

噪声更像是一种正则化的方式,使得值函数更新更加平滑

OpenAI Gym 库_摆杆直立 Pendulum_TD3

OpenAI 关于 TD3 的文档界面链接

TD3 论文PDF 链接

PPO_连续/离散动作空间 【OpenAI 201708】

强化学习中最为泛用的 PPO 算法
离散 + 连续
快速稳定, 调参简单
基线算法

遇事不决 PPO

在实践中一般用 clip 约束,因为它更简单,计算成本较低,而且效果也更好。

off-policy 算法由于可以利用历史经验,一般使用经验回放来存储和重复利用之前的经验,数据利用效率较高

PPO 是 on-policy 算法

  • 虽然 重要性采样部分 使用了 旧的 actor 采样的样本,但我们并没有直接使用这些样本去更新策略,而是使用重要性采样先将数据分布不同导致的误差进行了修正,即使两者样本分布之间的差异尽可能地缩小。换句话说,就可以理解为重要性采样之后的样本虽然是由旧策略采样得到的,但可以近似为从更新后的策略中得到的,即我们要优化的 actor 和采样的 actor 是同一个。

——————————————————

—— OpenAI 文档_PPO

OpenAI 文档
论文 arXiv 界面链接: Proximal Policy Optimization Algorithms

PPO: on-policy 算法、适用于 离散或 连续动作空间。可能局部最优

PPO 的动机与 TRPO 一样:如何利用现有的数据在策略上采取最大可能的改进 step,而不会改动过大而意外导致性能崩溃?
TRPO 试图用一种复杂的二阶方法来解决这个问题,PPO 则是一种一阶方法,它使用了一些其他技巧来保持新策略与旧策略的接近。
PPO方法的实现要简单得多,而且从经验上看,其执行效果至少与 TRPO 一样好。

PPO 有两种主要的变体:PPO-Penalty 和 PPO-Clip。

  • PPO-Penalty 近似地解决了像 TRPO 这样的 KL 约束更新,但在目标函数中惩罚了 KL-divergence,而不是使其成为硬约束,并在训练过程中自动调整惩罚系数,使其适当缩放。
  • PPO-Clip 在目标函数中没有 KL-divergence,也没有约束。而是依靠对目标函数的特定裁剪来去除 新策略远离旧策略 的激励。
    PPO-Clip (OpenAl 使用的主要变体)。

在这里插入图片描述

PPO-Clip 算法伪码

在这里插入图片描述

算法: PPO-Clip
1:输入:初始策略参数 θ 0 \theta_0 θ0,初始值函数参数 ϕ 0 \phi_0 ϕ0
2: f o r k = 0 , 1 , 2 , … d o {\bf for} ~ k=0,1,2,\dots~ {\bf do} for k=0,1,2, do
3: ~~~~~~       通过在环境中运行策略 π k = π ( θ k ) \pi_k=\pi(\theta_k) πk=π(θk) 收集轨迹集 D k = { τ i } {\cal D}_k=\{\tau_i\} Dk={τi}
4: ~~~~~~       计算奖励 (rewards-to-go) R ^ t \hat R_t~~~~~ R^t      R ^ t \hat R_t R^t 的计算规则
5: ~~~~~~       计算优势估计,基于当前值函数 V ϕ k V_{\phi_k} Vϕk A ^ t \hat A_t A^t (使用任何优势估计方法) ~~~~~       ▢ 当前有哪些优势估计方法?
6: ~~~~~~       通过最大化 PPO-Clip 目标函数 更新策略:
~~~~~~~~~~~            
θ k + 1 = arg ⁡ max ⁡ θ 1 ∣ D k ∣ T ∑ τ ∈ D k ∑ t = 0 T min ⁡ ( π θ ( a t ∣ s t ) π θ k ( a t ∣ s t ) A π θ k ( s t , a t ) , g ( ϵ , A π θ k ( s t , a t ) ) ) ~~~~~~~~~~~\theta_{k+1}=\arg\max\limits_\theta\frac{1}{|{\cal D}_k|T}\sum\limits_{\tau\in{\cal D}_k}\sum\limits_{t=0}^T\min\Big(\frac{\pi_{\theta} (a_t|s_t)}{\pi_{\theta_k}(a_t|s_t)}A^{\pi_{\theta_k}}(s_t,a_t),g(\epsilon,A^{\pi_{\theta_k}}(s_t,a_t))\Big)            θk+1=argθmaxDkT1τDkt=0Tmin(πθk(atst)πθ(atst)Aπθk(st,at),g(ϵ,Aπθk(st,at))) ~~~~~       ▢ 策略更新公式 如何确定?
~~~~~~~~~~~            
~~~~~~~~~~~             π θ k \pi_{\theta_k} πθk:更新前的策略参数向量。 重要性采样。从旧的策略采样。
~~~~~~~~~~~            
~~~~~~~~~~~            一般 随机梯度上升 + Adam
7: ~~~~~~       均方误差回归 拟合 值函数:
~~~~~~~~~~~            
ϕ k + 1 = arg ⁡ min ⁡ ϕ 1 ∣ D k ∣ T ∑ τ ∈ D k ∑ t = 0 T ( V ϕ ( s t ) − R ^ t ) 2 ~~~~~~~~~~~\phi_{k+1}=\arg \min\limits_\phi\frac{1}{|{\cal D}_k|T}\sum\limits_{\tau\in{\cal D}_k}\sum\limits_{t=0}^T\Big(V_\phi(s_t)-\hat R_t\Big)^2            ϕk+1=argϕminDkT1τDkt=0T(Vϕ(st)R^t)2
~~~~~~~~~~~            
~~~~~~~~~~~            一般 梯度下降
8: e n d f o r \bf end ~for end for
~~~~~~~~~~~~             

$\dots$ … ~~~\dots    

g ( ϵ , A ) = { ( 1 + ϵ ) A A ≥ 0 ( 1 − ϵ ) A A < 0 g(\epsilon,A)=\left\{\begin{aligned}&(1+\epsilon)A ~~~~&A\geq0\\ &(1-\epsilon)A&A<0\end{aligned}\right. g(ϵ,A)={(1+ϵ)A    (1ϵ)AA0A<0

在这里插入图片描述

论文里的优势估计:

A ^ t = − V ( s t ) + r t + γ r t + 1 + ⋯ + γ T − t + 1 r T − 1 + γ T − t V ( s T ) ⏟ R ^ t ? ? ? \hat A_t=-V(s_t)+\underbrace{r_t+\gamma r_{t+1}+\cdots+\gamma^{T-t+1}r_{T-1}+\gamma^{T-t}V(s_T)}_{\textcolor{blue}{\hat R_t???}} A^t=V(st)+R^t??? rt+γrt+1++γTt+1rT1+γTtV(sT)

在这里插入图片描述

Δ t = r t + γ V ( s t + 1 ) − V ( s t ) \Delta_t =r_t+\gamma V(s_{t+1})-V(s_t) Δt=rt+γV(st+1)V(st)
r t = Δ t − γ V ( s t + 1 ) + V ( s t ) r_t=\Delta_t - \gamma V(s_{t+1})+V(s_t) rt=ΔtγV(st+1)+V(st)

代入 A ^ t \hat A_t A^t 表达式

A ^ t = − V ( s t ) + r t + γ r t + 1 + γ 2 r t + 2 + ⋯ + γ T − t r T − 2 + γ T − t + 1 r T − 1 + γ T − t V ( s T ) = − V ( s t ) + r t + γ r t + 1 + ⋯ + γ T − t + 1 r T − 1 + γ T − t V ( s T ) = − V ( s t ) + Δ t − γ V ( s t + 1 ) + V ( s t ) + γ ( Δ t + 1 − γ V ( s t + 2 ) + V ( s t + 1 ) ) + γ 2 ( Δ t + 2 − γ V ( s t + 3 ) + V ( s t + 1 ) ) + ⋯ + γ T − t ( Δ T − t − γ V ( s T − t + 1 ) + V ( s T − t ) ) + γ T − t + 1 ( Δ T − 1 − γ V ( s T ) + V ( s T − 1 ) ) + γ T − t V ( s T ) = Δ t + γ Δ t + 1 + γ 2 Δ t + 2 + ⋯ + γ T − t Δ T − t + γ T − t + 1 Δ T − 1 \begin{aligned}\hat A_t&=-V(s_t)+r_t+\gamma r_{t+1}+\gamma^2 r_{t+2}+\cdots+\gamma^{T-t}r_{T-2}+\gamma^{T-t+1}r_{T-1}+\gamma^{T-t}V(s_T)\\ &=-V(s_t)+r_t+\gamma r_{t+1}+\cdots+\gamma^{T-t+1}r_{T-1}+\gamma^{T-t}V(s_T)\\ &=-V(s_t)+\\ & ~~~~~~~\Delta_t - \gamma V(s_{t+1})+V(s_t)+\\ & ~~~~~~~\gamma (\Delta_{t+1} - \gamma V(s_{t+2})+V(s_{t+1}))+\\ & ~~~~~~~\gamma^2(\Delta_{t+2} - \gamma V(s_{t+3})+V(s_{t+1}))+\\ & ~~~~~~~\cdots+\\ & ~~~~~~~\gamma^{T-t}(\Delta_{T-t} - \gamma V(s_{T-t+1})+V(s_{T-t}))+\\ & ~~~~~~~\gamma^{T-t+1}(\Delta_{T-1} - \gamma V(s_T)+V(s_{T-1}))+\\ & ~~~~~~~\gamma^{T-t}V(s_T)\\ &=\Delta_t+\gamma\Delta_{t+1}+\gamma^2\Delta_{t+2}+\cdots+\gamma^{T-t}\Delta_{T-t}+\gamma^{T-t+1}\Delta_{T-1}\end{aligned} A^t=V(st)+rt+γrt+1+γ2rt+2++γTtrT2+γTt+1rT1+γTtV(sT)=V(st)+rt+γrt+1++γTt+1rT1+γTtV(sT)=V(st)+       ΔtγV(st+1)+V(st)+       γ(Δt+1γV(st+2)+V(st+1))+       γ2(Δt+2γV(st+3)+V(st+1))+       +       γTt(ΔTtγV(sTt+1)+V(sTt))+       γTt+1(ΔT1γV(sT)+V(sT1))+       γTtV(sT)=Δt+γΔt+1+γ2Δt+2++γTtΔTt+γTt+1ΔT1

在这里插入图片描述

通过消除 策略大幅改变的诱因,clipping 起到了正则化的作用。超参数 ϵ \epsilon ϵ 对应于新策略与旧策略之间的距离

这种 clipping 最终仍有可能得到一个与旧策略相去甚远的新策略,在这里的实现中,我们使用了一个特别简单的方法:提前停止。如果新策略与旧策略的平均 KL -散度超过一个阈值,我们就停止执行梯度步骤。

PPO 目标函数简单推导 链接
PPO-Clip 的目标函数为:
~  
L θ k C L I P ( θ ) = E s , a ∼ θ k [ min ⁡ ( π θ ( a ∣ s ) π θ k ( a ∣ s ) A θ k ( s , a ) , c l i p ( π θ ( a ∣ s ) π θ k ( a ∣ s ) , 1 − ϵ , 1 + ϵ ) A θ k ( s , a ) ) ] L^{\rm CLIP}_{\theta_k}(\theta)=\underset{s, a\sim\theta_k}{\rm E}\Bigg[\min\Bigg(\frac{\pi_\theta(a|s)}{\pi_{\theta_k}(a|s)}A^{\theta_k}(s, a), {\rm clip}\Big(\frac{\pi_\theta(a|s)}{\pi_{\theta_k}(a|s)},1-\epsilon, 1+\epsilon\Big)A^{\theta_k}(s, a)\Bigg)\Bigg] LθkCLIP(θ)=s,aθkE[min(πθk(as)πθ(as)Aθk(s,a),clip(πθk(as)πθ(as),1ϵ,1+ϵ)Aθk(s,a))]
~  
$\underset{s, a\sim\theta_k}{\rm E}$ E s , a ∼ θ k ~~~\underset{s, a\sim\theta_k}{\rm E}    s,aθkE
~  
k k k 次迭代 的策略参数 θ k \theta_k θk ϵ \epsilon ϵ 为 小的超参数。
ϵ ∈ ( 0 , 1 ) \epsilon\in(0,1) ϵ(0,1), 定义
F ( r , A , ϵ ) ≐ min ⁡ ( r A , c l i p ( r , 1 − ϵ , 1 + ϵ ) A ) F(r,A,\epsilon)\doteq\min\Bigg(rA,{\rm clip}(r,1-\epsilon,1+\epsilon)A\Bigg) F(r,A,ϵ)min(rA,clip(r,1ϵ,1+ϵ)A)
A ≥ 0 A\geq0 A0
F ( r , A , ϵ ) = min ⁡ ( r A , c l i p ( r , 1 − ϵ , 1 + ϵ ) A ) = A min ⁡ ( r , c l i p ( r , 1 − ϵ , 1 + ϵ ) ) = A min ⁡ ( r , { 1 + ϵ r ≥ 1 + ϵ r r ∈ ( 1 − ϵ , 1 + ϵ ) 1 − ϵ r ≤ 1 − ϵ } ) = A { min ⁡ ( r , 1 + ϵ ) r ≥ 1 + ϵ min ⁡ ( r , r ) r ∈ ( 1 − ϵ , 1 + ϵ ) min ⁡ ( r , 1 − ϵ ) r ≤ 1 − ϵ } = A { 1 + ϵ r ≥ 1 + ϵ r r ∈ ( 1 − ϵ , 1 + ϵ ) r r ≤ 1 − ϵ } 根据右侧的范围 = A min ⁡ ( r , 1 + ϵ ) = min ⁡ ( r A , ( 1 + ϵ ) A ) \begin{aligned}F(r,A,\epsilon)&=\min\Bigg(rA,{\rm clip}(r,1-\epsilon,1+\epsilon)A\Bigg)\\ &=A\min\Bigg(r,{\rm clip}(r,1-\epsilon,1+\epsilon)\Bigg)\\ &=A\min\Bigg(r,\left\{\begin{aligned}&1+\epsilon~~&r\geq1+\epsilon\\ &r &r\in(1-\epsilon,1+\epsilon)\\ &1-\epsilon &r\leq1-\epsilon\\ \end{aligned}\right\}\Bigg)\\ &=A\left\{\begin{aligned}&\min(r,1+\epsilon)~~&r\geq1+\epsilon\\ &\min(r,r) &r\in(1-\epsilon,1+\epsilon)\\ &\min(r,1-\epsilon) &r\leq1-\epsilon\\ \end{aligned}\right\}\\ &=A\left\{\begin{aligned}&1+\epsilon~~&r\geq1+\epsilon\\ &r &r\in(1-\epsilon,1+\epsilon)\\ &r &r\leq1-\epsilon\\ \end{aligned}\right\}~~~~~\textcolor{blue}{根据右侧的范围}\\ &=A\min(r, 1+\epsilon)\\ &=\min\Bigg(rA, (1+\epsilon)A\Bigg) \end{aligned} F(r,A,ϵ)=min(rA,clip(r,1ϵ,1+ϵ)A)=Amin(r,clip(r,1ϵ,1+ϵ))=Amin(r, 1+ϵ  r1ϵr1+ϵr(1ϵ,1+ϵ)r1ϵ )=A min(r,1+ϵ)  min(r,r)min(r,1ϵ)r1+ϵr(1ϵ,1+ϵ)r1ϵ =A 1+ϵ  rrr1+ϵr(1ϵ,1+ϵ)r1ϵ      根据右侧的范围=Amin(r,1+ϵ)=min(rA,(1+ϵ)A)
~  
A < 0 A<0 A<0
F ( r , A , ϵ ) = min ⁡ ( r A , c l i p ( r , 1 − ϵ , 1 + ϵ ) A ) = A max ⁡ ( r , c l i p ( r , 1 − ϵ , 1 + ϵ ) ) = A max ⁡ ( r , { 1 + ϵ r ≥ 1 + ϵ r r ∈ ( 1 − ϵ , 1 + ϵ ) 1 − ϵ r ≤ 1 − ϵ } ) = A { max ⁡ ( r , 1 + ϵ ) r ≥ 1 + ϵ max ⁡ ( r , r ) r ∈ ( 1 − ϵ , 1 + ϵ ) max ⁡ ( r , 1 − ϵ ) r ≤ 1 − ϵ } = A { r r ≥ 1 + ϵ r r ∈ ( 1 − ϵ , 1 + ϵ ) 1 − ϵ r ≤ 1 − ϵ } 根据右侧的范围 = A max ⁡ ( r , 1 − ϵ ) = min ⁡ ( r A , ( 1 − ϵ ) A ) \begin{aligned}F(r,A,\epsilon)&=\min\Bigg(rA,{\rm clip}(r,1-\epsilon,1+\epsilon)A\Bigg)\\ &=A\textcolor{blue}{\max}\Bigg(r,{\rm clip}(r,1-\epsilon,1+\epsilon)\Bigg)\\ &=A\max\Bigg(r,\left\{\begin{aligned}&1+\epsilon~~&r\geq1+\epsilon\\ &r &r\in(1-\epsilon,1+\epsilon)\\ &1-\epsilon &r\leq1-\epsilon\\ \end{aligned}\right\}\Bigg)\\ &=A\left\{\begin{aligned}&\max(r,1+\epsilon)~~&r\geq1+\epsilon\\ &\max(r,r) &r\in(1-\epsilon,1+\epsilon)\\ &\max(r,1-\epsilon) &r\leq1-\epsilon\\ \end{aligned}\right\}\\ &=A\left\{\begin{aligned}&r~~&r\geq1+\epsilon\\ &r &r\in(1-\epsilon,1+\epsilon)\\ &1-\epsilon &r\leq1-\epsilon\\ \end{aligned}\right\}~~~~~\textcolor{blue}{根据右侧的范围}\\ &=A\max(r, 1-\epsilon)\\ &=\textcolor{blue}{\min}\Bigg(rA,(1-\epsilon)A\Bigg) \end{aligned} F(r,A,ϵ)=min(rA,clip(r,1ϵ,1+ϵ)A)=Amax(r,clip(r,1ϵ,1+ϵ))=Amax(r, 1+ϵ  r1ϵr1+ϵr(1ϵ,1+ϵ)r1ϵ )=A max(r,1+ϵ)  max(r,r)max(r,1ϵ)r1+ϵr(1ϵ,1+ϵ)r1ϵ =A r  r1ϵr1+ϵr(1ϵ,1+ϵ)r1ϵ      根据右侧的范围=Amax(r,1ϵ)=min(rA,(1ϵ)A)
~  
综上:可定义 g ( ϵ , A ) g(\epsilon,A) g(ϵ,A)
g ( ϵ , A ) = { ( 1 + ϵ ) A A ≥ 0 ( 1 − ϵ ) A A < 0 g(\epsilon,A)=\left\{\begin{aligned}&(1+\epsilon)A ~~~~&A\geq0\\ &(1-\epsilon)A&A<0\end{aligned}\right. g(ϵ,A)={(1+ϵ)A    (1ϵ)AA0A<0
在这里插入图片描述

为什么这样定义就可以让 新策略 不至于 离 旧策略 过远?
重要性采样方法有效 要求 新策略 π θ ( a ∣ s ) \pi_\theta(a|s) πθ(as) 和 旧策略 π θ k ( a ∣ s ) \pi_{\theta_k}(a|s) πθk(as) 两个分布不能差距过大

1、当 advantage 优势为正

L ( s , a , θ k , θ ) = min ⁡ ( π θ ( a ∣ s ) π θ k ( a ∣ s ) , 1 + ϵ ) A π θ k ( s , a ) L(s,a,\theta_k, \theta)=\min\Bigg(\frac{\pi_\theta(a|s)}{\pi_{\theta_k}(a|s)}, 1+\epsilon\Bigg)A^{\pi_{\theta_k}}(s, a) L(s,a,θk,θ)=min(πθk(as)πθ(as),1+ϵ)Aπθk(s,a)
优势函数: 发现某个 状态-动作对 奖励多 ——> 增大 该 状态-动作对 的权重。

当 状态-行动对 ( s , a ) (s, a) (s,a) 的优势是正的,则如果行动 a a a 更有可能执行,即如果 π θ ( a ∣ s ) \pi_\theta(a|s) πθ(as) 增加,目标就会增加。
该项中的 min 限制了 目标函数只能增大到某个值
一旦 π θ ( a ∣ s ) > ( 1 + ϵ ) π θ k ( a ∣ s ) \pi_\theta(a|s)>(1+\epsilon)\pi_{\theta_k}(a|s) πθ(as)>(1+ϵ)πθk(as), min 触发,限制该项值为 ( 1 + ϵ ) π θ k ( a ∣ s ) (1+\epsilon)\pi_{\theta_k}(a|s) (1+ϵ)πθk(as)
the new policy does not benefit by going far away from the old policy.
新策略 不会因远离 旧策略而受益。

2、当 advantage 优势为负

L ( s , a , θ k , θ ) = max ⁡ ( π θ ( a ∣ s ) π θ k ( a ∣ s ) , 1 − ϵ ) A π θ k ( s , a ) L(s,a,\theta_k, \theta)=\max\Bigg(\frac{\pi_\theta(a|s)}{\pi_{\theta_k}(a|s)}, 1-\epsilon\Bigg)A^{\pi_{\theta_k}}(s, a) L(s,a,θk,θ)=max(πθk(as)πθ(as),1ϵ)Aπθk(s,a)

当 某个状态-行动对 ( s , a ) (s, a) (s,a) 的优势是负的,则如果执行行动 a a a 的可能性更小 ,即如果 π θ ( a ∣ s ) π_\theta(a|s) πθ(as) 减小,目标函数就会增加。但是该项中的 max 限制了目标函数可以增加到多少。
一旦 π θ ( a ∣ s ) < ( 1 − ϵ ) π θ k ( a ∣ s ) \pi_\theta(a|s)<(1-\epsilon)\pi_{\theta_k}(a|s) πθ(as)<(1ϵ)πθk(as), max 触发,限制该项值为 ( 1 − ϵ ) π θ k ( a ∣ s ) (1-\epsilon)\pi_{\theta_k}(a|s) (1ϵ)πθk(as)

再次说明:the new policy does not benefit by going far away from the old policy.
新策略 不会因远离 旧策略而受益。

TD3_仅连续: Twin Delayed Deep Deterministic Policy Gradient 【ICML 2018 (加拿大)麦吉尔大学】

在这里插入图片描述
图片来源

OpenAI 文档_TD3
论文链接

虽然 DDPG 有时可以实现出色的性能,但在超参数和其他类型的调优方面,它通常是不稳定的。
一个常见的 DDPG 失败模式是,学习到的 Q 函数开始显著高估 Q 值,然后导致策略中断,因为它利用了 Q 函数中的误差。
双延迟 DDPG (Twin Delayed DDPG, TD3) 是一种通过引入三个关键技巧来解决此问题的算法:
1、截断的双 Q 学习

  • TD3 学习两个 Q 函数而不是一个(因此是 “twin”),并使用两个 Q 值中较小的一个来形成 Bellman 误差损失函数中的目标。

2、策略更新延迟

  • TD3 更新策略(和 目标网络) 的频率低于 Q 函数。论文建议 Q 函数每更新两次, 更新一次策略。

3、目标策略平滑。

  • TD3 在目标动作中添加噪声,通过平滑动作变化中的 Q 使策略更难利用 Q 函数的误差。

TD3 是一个 off-policy 算法;只能用于具有连续行动空间的环境。

TD3 算法伪码

在这里插入图片描述

算法: TD3
用随机参数 θ 1 , θ 2 , ϕ \theta_1, \theta_2, \phi θ1,θ2,ϕ 初始化 critic 网络 Q θ 1 , Q θ 2 Q_{\theta_1},Q_{\theta_2} Qθ1,Qθ2, 和 actor 网络 π ϕ \pi_\phi πϕ
初始化 目标网络 θ 1 ′ ← θ 1 , θ 2 ′ ← θ 2 , ϕ ′ ← ϕ \theta_1^\prime\leftarrow\theta_1, \theta_2^\prime\leftarrow\theta_2, \phi^\prime\leftarrow \phi θ1θ1,θ2θ2,ϕϕ
初始化 回放缓冲集 B \cal B B
f o r t = 1 t o T {\bf for}~t=1 ~{\bf to} ~T for t=1 to T
~~~~~~       选择 带探索噪声的动作 a ∼ π ϕ ( s ) + ϵ , ϵ ∼ N ( 0 , σ ) a\sim\pi_\phi(s)+\epsilon,~~\epsilon\sim {\cal N}(0,\sigma) aπϕ(s)+ϵ,  ϵN(0,σ), 观测 奖励 r r r 和新的状态 s ′ s^\prime s
~~~~~~       将 transition 元组 ( s , a , r , s ′ ) (s, a,r, s^\prime) (s,a,r,s) 存到 B \cal B B
~~~~~~        B \cal B B 中抽样 小批次的 N N N 个 transitions ( s , a , r , s ′ ) (s, a, r, s^\prime) (s,a,r,s)
a ~ ← π ϕ ′ ( s ′ ) + ϵ , ϵ ∼ c l i p ( N ( 0 , σ ~ ) , − c , c ) ~~~~~~\widetilde a\leftarrow \pi_{\phi^\prime}(s^\prime)+\epsilon,~~\epsilon\sim{\rm clip}({\cal N}(0,\widetilde \sigma),-c,c)       a πϕ(s)+ϵ,  ϵclip(N(0,σ ),c,c)
y ← r + γ min ⁡ i = 1 , 2 Q θ i ′ ( s ′ , a ~ ) ~~~~~~y\leftarrow r+\gamma \min\limits_{i=1,2}Q_{\theta_i^\prime}(s^\prime,\widetilde a)       yr+γi=1,2minQθi(s,a )
~~~~~~       更新 critics θ i ← arg ⁡ min ⁡ θ i N − 1 ∑ ( y − Q θ i ( s , a ) ) 2 \theta_i\leftarrow\arg\min\limits_{\theta_i}N^{-1}\sum(y-Q_{\theta_i}(s, a))^2 θiargθiminN1(yQθi(s,a))2
~~~~~~        i f t % d {\bf if}~t~ \% ~d if t % d
~~~~~~~~~~~            通过 确定性策略梯度 更新 ϕ \phi ϕ
∇ ϕ J ( ϕ ) = N − 1 ∑ ∇ a Q θ 1 ( s , a ) ∣ a = π ϕ ( s ) ∇ ϕ π ϕ ( s ) ~~~~~~~~~~~~~~~~~\nabla _\phi J(\phi)=N^{-1}\sum\nabla_aQ_{\theta_1}(s, a)|_{a=\pi_\phi(s)}\nabla_\phi\pi_\phi(s)                  ϕJ(ϕ)=N1aQθ1(s,a)a=πϕ(s)ϕπϕ(s)
~~~~~~~~~~~            更新 目标网络:
θ i ′ ← τ θ i + ( 1 − τ ) θ i ′ ~~~~~~~~~~~~~~~~~\theta_i^\prime\leftarrow\tau\theta_i+(1-\tau)\theta_i^\prime~~~~~                  θiτθi+(1τ)θi      τ \tau τ: 目标更新率
ϕ ′ ← τ ϕ + ( 1 − τ ) ϕ ′ ~~~~~~~~~~~~~~~~~\phi^\prime\leftarrow\tau\phi+(1-\tau)\phi^\prime                  ϕτϕ+(1τ)ϕ
e n d i f ~~~~~~{\bf end ~if}       end if
e n d f o r {\bf end ~for} end for

Soft Actor-Critic:SAC_连续/离散动作空间 【Google Brain 最新版本 201906】

在这里插入图片描述

图片来源

最大化策略的熵,从而使得策略更加鲁棒。

确定性策略 是指在给定相同状态下,总是选择相同的动作
随机性策略 则是在给定状态下可以选择多种可能的动作

确定性策略随机性策略
定义同样的状态,执行同样的动作同样的状态,可能执行不同的动作
优点稳定、可重复避免陷入局部最优解,提高全局搜索的能力
缺点缺乏探索性、易被对手抓到可能会导致策略的收敛速度较慢,影响效率和性能。

实际应用中,如果有条件的话,我们会尽量使用随机性策略,诸如 A2C、PPO 等等,因为它更加灵活,更加鲁棒,更加稳定。

最大熵强化学习认为,即使我们目前有了成熟的随机性策略,即 AC 一类的算法,但是还是没有达到最优的随机。因此,它引入了一个信息熵的概念,在最大化累积奖励的同时最大化策略的熵,使得策略更加鲁棒,从而达到最优的随机性策略。

——————————————————

—— OpenAI 文档_SAC

OpenAI 文档_SAC 界面链接
~  
Soft Actor-Critic: Off-Policy Maximum Entropy Deep Reinforcement Learning with a Stochastic Actor, Haarnoja et al, 201808 ICML 2018
Soft Actor-Critic Algorithms and Applications, Haarnoja et al, 201901
Learning to Walk via Deep Reinforcement Learning, Haarnoja et al, 201906 RSS2019

Soft Actor Critic (SAC) 以 off-policy 方式优化 随机策略。

DDPG + 随机策略优化

不是 TD3 的直接继承者 (几乎同时发表)。

它包含了 clipped double-Q 技巧,并且由于 SAC 的策略的固有随机性,它也最终受益于目标策略平滑

SAC 的一个核心特征是 entropy regularization 熵正则化
该策略被训练为 最大化 期望回报 和 熵 之间的权衡,熵 是 策略随机性 的度量
这 与探索和利用之间的权衡 有密切的联系:熵的增加导致更多的探索,这可以加速后续的学习。它还可以防止策略过早收敛到一个坏的局部最优

既可用于连续动作空间,也可用于离散动作空间。

熵-正则化 强化学习中,智能体在每个时间步获得与该时间步策略的熵成正比的奖励。
此时 RL 问题描述为:

π ∗ = arg ⁡ max ⁡ π E τ ∼ π [ ∑ t = 0 ∞ γ t ( R ( s t , a t , s t + 1 ) + α H ( π ( ⋅ ∣ s t ) ) ) ] \pi^*=\arg\max\limits_\pi \underset{\tau\sim\pi}{\rm E}\Big[\sum\limits_{t=0}^\infty\gamma^t\Big(R(s_t,a_t,s_{t+1})\textcolor{blue}{+\alpha H(\pi(·|s_t))}\Big)\Big] π=argπmaxτπE[t=0γt(R(st,at,st+1)+αH(π(st)))]

其中 α > 0 \alpha > 0 α>0 为权衡系数。
包括每个时间步的熵奖励的状态值函数 V π V^\pi Vπ 为:

V π ( s ) = E τ ∼ π [ ∑ t = 0 ∞ γ t ( R ( s t , a t , s t + 1 ) + α H ( π ( ⋅ ∣ s t ) ) ) ∣ s 0 = s ] V^\pi(s)=\underset{\tau\sim\pi}{\rm E}\Big[\sum\limits_{t=0}^\infty\gamma^t\Big(R(s_t,a_t,s_{t+1})+\alpha H(\pi(·|s_t))\Big)\Big|s_0=s\Big] Vπ(s)=τπE[t=0γt(R(st,at,st+1)+αH(π(st))) s0=s]

包括除了第一个时间步以外的每个时间步的熵奖励 的 动作值函数 Q π Q^\pi Qπ:

Q π ( s , a ) = E τ ∼ π [ ∑ t = 0 ∞ γ t ( R ( s t , a t , s t + 1 ) + α ∑ t = 1 ∞ H ( π ( ⋅ ∣ s t ) ) ) ∣ s 0 = s , a 0 = a ] Q^\pi(s,a)=\underset{\tau\sim\pi}{\rm E}\Big[\sum\limits_{t=0}^\infty\gamma^t\Big(R(s_t,a_t,s_{t+1})+\alpha \sum\limits_{t=1}^\infty H(\pi(·|s_t))\Big)\Big|s_0=s,a_0=a\Big] Qπ(s,a)=τπE[t=0γt(R(st,at,st+1)+αt=1H(π(st))) s0=s,a0=a]

  • 有些论文 的 Q π Q^\pi Qπ 包含第一个时间步的熵奖励

V π V^\pi Vπ Q π Q^\pi Qπ 间的关系为:

V π ( s ) = E a ∼ π [ Q π ( s , a ) ] + α H ( π ( ⋅ ∣ s ) ) V^\pi(s)=\underset{a\sim\pi}{\rm E}[Q^\pi(s, a)]+\alpha H(\pi(·|s)) Vπ(s)=aπE[Qπ(s,a)]+αH(π(s))

关于 Q π Q^\pi Qπ 的贝尔曼公式为:

Q π ( s , a ) = E s ′ ∼ P a ′ ∼ π [ R ( s , a , s ′ ) + γ ( Q π ( s ′ , a ′ ) + α H ( π ( ⋅ ∣ s ′ ) ) ) ] = E s ′ ∼ P [ R ( s , a , s ′ ) + γ V π ( s ′ ) ] \begin{aligned}Q^\pi(s, a)&=\underset{s^\prime \sim P \atop a^\prime\sim \pi}{\rm E}[R(s,a,s^\prime)+\gamma\big(Q^\pi(s^\prime,a^\prime)+\alpha H(\pi(·|s^\prime))\big)]\\ &=\underset{s^\prime \sim P}{\rm E}[R(s,a,s^\prime)+\gamma V^\pi(s^\prime)]\end{aligned} Qπ(s,a)=aπsPE[R(s,a,s)+γ(Qπ(s,a)+αH(π(s)))]=sPE[R(s,a,s)+γVπ(s)]

SAC 同时学习一个策略 π θ π_\theta πθ 和两个 Q Q Q 函数 Q ϕ 1 , Q ϕ 2 Q_{\phi_1}, Q_{\phi_2} Qϕ1,Qϕ2
目前标准的 SAC 有两种变体:一种使用固定的熵正则化系数 α \alpha α,另一种通过在训练过程中改变 α \alpha α 来强制熵约束。
OpenAI 的文档使用具有固定熵正则化系数的版本,但实践中通常更喜欢熵约束的变体。

如下图,在 α \alpha α 固定版本中, 除了最后一个图有较明显的优势,其它只是略有优势,基本和 α \alpha α 学习版本持平;而在 α \alpha α 学习版本有优势的中间两图,优势较明显。

在这里插入图片描述
图片来源

SAC VS TD3:
~  
相同点:
1、两个 Q 函数都是通过回归到单个共享目标的 MSBE (Mean Squared Bellman Error) 最小化来学习的。
2、利用目标 Q-网络计算共享目标,并对训练过程中的 Q-网络参数进行 polyak 平均得到 目标 Q-网络。
3、共享目标使用了被截断的双 Q 技巧。
~  
不同点:
1、SAC 包含 熵正则化 项
2、SAC 的目标中使用的下一状态 的动作来自当前策略,而不是目标策略。
3、没有明确的目标策略平滑。TD3 训练一个确定性策略,它通过向下一状态的动作添加随机噪声来实现平滑。SAC 训练的是一个随机策略, 来自随机性的噪声足以获得类似的效果。

SAC 算法伪码

在这里插入图片描述

算法: Soft Actor-Critic SAC
输入: θ 1 , θ 2 , ϕ \theta_1,\theta_2,\phi~~~~~ θ1,θ2,ϕ      初始化参数
参数初始化:
~~~~~~       初始化目标网络权重: θ ˉ 1 ← θ 1 , θ ˉ 2 ← θ 2 \bar \theta_1\leftarrow\theta_1, \bar \theta_2\leftarrow\theta_2 θˉ1θ1,θˉ2θ2
~~~~~~       回放池 初始化为空: D ← ∅ {\cal D}\leftarrow\emptyset D
f o r {\bf for} for 每次迭代 d o {\bf do} do
~~~~~~        f o r {\bf for} for 每个环境 step d o {\bf do} do
~~~~~~~~~~~            从策略中抽样动作: a t ∼ π ϕ ( a t ∣ s t ) a_t\sim\pi_\phi(a_t|s_t)~~~~~ atπϕ(atst)      ▢ 这里的 π ϕ ( a t ∣ s t ) \pi_\phi(a_t|s_t) πϕ(atst) 如何定义?
~~~~~~~~~~~            从环境中抽样 transition: s t + 1 ∼ p ( s t + 1 ∣ s t , a t ) s_{t+1}\sim p(s_{t+1}|s_t,a_t) st+1p(st+1st,at)
~~~~~~~~~~~            将 transition 存到 回放池: D ← D ∪ { ( s t , a t , r ( s t , a t ) , s t + 1 ) } {\cal D}\leftarrow{\cal D}~\cup~\{(s_t,a_t,r(s_t,a_t),s_{t+1})\} DD  {(st,at,r(st,at),st+1)}
~~~~~~        e n d f o r {\bf end ~for} end for
~~~~~~        f o r {\bf for} for 每个梯度 step d o {\bf do} do
~~~~~~~~~~~            更新 Q Q Q 函数参数: 对于 i ∈ { 1 , 2 } i\in\{1,2\} i{1,2} θ i ← θ i − λ Q ∇ ^ θ i J Q ( θ i ) \theta_i\leftarrow\theta_i-\lambda_Q\hat \nabla_{\theta_i}J_Q(\theta_i)~~~~~ θiθiλQ^θiJQ(θi)      ▢ 这里的 J Q ( θ i ) J_Q(\theta_i) JQ(θi) 如何定义?
~~~~~~~~~~~            更新 策略权重: ϕ ← ϕ − λ π ∇ ^ ϕ J π ( ϕ ) \phi\leftarrow\phi-\lambda_\pi\hat \nabla_\phi J_\pi (\phi)~~~~~ ϕϕλπ^ϕJπ(ϕ)      ▢ 这里的 J π ( ϕ ) J_\pi (\phi) Jπ(ϕ) 如何定义?
~~~~~~~~~~~            调温度: α ← α − λ ∇ ^ α J ( α ) \alpha\leftarrow\alpha-\lambda\hat\nabla_\alpha J(\alpha)~~~~~ ααλ^αJ(α)      ▢ 这里的 J ( α ) J(\alpha) J(α) 如何定义?如何理解 这里的 temperature 温度
~~~~~~~~~~~             更新 目标网络 权重:对于 i ∈ { 1 , 2 } i\in\{1,2\} i{1,2} θ ˉ i ← τ θ i − ( 1 − τ ) θ ˉ i \bar \theta_i\leftarrow \tau \theta_i-(1-\tau)\bar \theta_i~~~~~ θˉiτθi(1τ)θˉi      ▢ 如何理解这里的 τ \tau τ? ——> 目标平滑系数
~~~~~~        e n d f o r {\bf end ~for} end for
e n d f o r {\bf end ~for} end for
输出: θ 1 , θ 1 , ϕ \theta_1,\theta_1,\phi~~~~~ θ1,θ1,ϕ     优化好的参数

∇ ^ \hat \nabla ^: 随机梯度

$\emptyset$ ∅ ~~~~\emptyset     

在这里插入图片描述

在这里插入图片描述

Learning to Walk via Deep Reinforcement Learning 中的版本:
~  
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

α α α 是温度参数,它决定了熵项与奖励的相对重要性,从而控制了最优策略的随机性。
α \alpha α 大: 探索
α \alpha α 小: 利用

J ( α ) = E a t ∼ π t [ − α log ⁡ π t ( a t ∣ s t ) − α H ˉ ] J(\alpha)=\underset{a_t\sim\pi_t}{\mathbb E}[-\alpha\log \pi_t(a_t|s_t)-\alpha\bar{\cal H}] J(α)=atπtE[αlogπt(atst)αHˉ]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/42482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[机器学习]-4 Transformer介绍和ChatGPT本质

Transformer Transformer是由Vaswani等人在2017年提出的一种深度学习模型架构&#xff0c;最初用于自然语言处理&#xff08;NLP&#xff09;任务&#xff0c;特别是机器翻译。Transformer通过自注意机制和完全基于注意力的架构&#xff0c;核心思想是通过注意力来捕捉输入序列…

CosyVoice多语言、音色和情感控制模型,one-shot零样本语音克隆模型本地部署(Win/Mac),通义实验室开源

近日&#xff0c;阿里通义实验室开源了CosyVoice语音模型&#xff0c;它支持自然语音生成&#xff0c;支持多语言、音色和情感控制&#xff0c;在多语言语音生成、零样本语音生成、跨语言声音合成和指令执行能力方面表现卓越。 CosyVoice采用了总共超15万小时的数据训练&#…

【2024_CUMCM】时间序列算法ARMA

目录 2023-c-问题二 问题分析 介绍 单位根检验 白噪声检验 自相关和偏自相关图 利用信息准则定阶 构建AMIMA模型 D-W检验 预测 代码 2023-c-问题二 问题分析 ARMA适合多个领域的时间序列分析&#xff0c;不同时间的定价策略属于这类问题。 介绍 ARMA模型&…

C++入门7——string类详解

目录 1.什么是string类&#xff1f; 2.string类对象的常见构造 2.1 string(); 2.2 string (const char* s); 2.3 string (const string& str); 2.4 string (const string& str, size_t pos, size_t len npos); 2.5 string (const char* s, size_t n); 2.7 验证…

【机器学习】基于线性回归的医疗费用预测模型

文章目录 一、线性回归定义和工作原理假设表示 二、导入库和数据集矩阵表示可视化 三、成本函数向量的内积 四、正态方程五、探索性数据分析描述性统计检查缺失值数据分布图相关性热图保险费用分布保险费用与性别和吸烟情况的关系保险费用与子女数量的关系保险费用与地区和性别…

GDP播放器 驱动视频播放器 PHP 系统源码 v4.4.3

最重要的是我们自己开发了源代码&#xff0c;因此无论您在使用此工具时遇到什么问题&#xff0c;我们都会快速解决。这个版本演示 分别支持PHP7.4/8.1/8.2三个版本 演示地址

轻松驾驭开发之旅:Maven配置阿里云CodeUp远程私有仓库全攻略

文章目录 引言一、为什么选择阿里云CodeUp作为远程私有仓库&#xff1f;二、Maven配置阿里云CodeUp远程私有仓库的步骤准备工作配置Maven的settings.xml文件配置项目的pom.xml文件验证配置是否成功 三、使用阿里云CodeUp远程私有仓库的注意事项 引言 在软件开发的世界里&#…

CosyVoice - 阿里最新开源语音克隆、文本转语音项目 支持情感控制及粤语 本地一键整合包下载

近日&#xff0c;阿里通义实验室发布开源语音大模型项目FunAudioLLM&#xff0c;而且一次包含两个模型&#xff1a;SenseVoice和CosyVoice。 CosyVoice专注自然语音生成&#xff0c;支持多语言、音色和情感控制&#xff0c;支持中英日粤韩5种语言的生成&#xff0c;效果显著优于…

分子AI预测赛Task4笔记(结束)

话不多说&#xff0c;直接上官方链接&#xff1a;‌​​​‍&#xfeff;​⁠​‌​‍​​&#xfeff;​‌​⁠‬​&#xfeff;‬​​‌​​​​‬‬​​​​‍⁠‍‌​&#xfeff;⁠Task3&#xff1a;进阶baseline详解 - 飞书云文档 (feishu.cn)Task4&#xff1a;持续尝试&…

C++左值右值

在C中&#xff0c;左值&#xff08;lvalue&#xff09;和右值&#xff08;rvalue&#xff09;是表达式分类的关键概念&#xff0c;它们主要影响表达式的赋值、函数调用以及操作符的使用方式。这些概念在C11及以后的版本中变得更加重要&#xff0c;因为引入了移动语义和右值引用…

妈妈带女儿美在心里

在这个充满温情与惊喜的午后&#xff0c;阳光温柔地洒落在每一个角落&#xff0c;仿佛连空气弥漫着幸福的味道。就在这样一个平凡的时刻&#xff0c;一段关于爱与成长的温馨画面&#xff0c;悄然在网络上绽放&#xff0c;引爆了无数人的心弦——#奚梦瑶2岁女儿身高#&#xff0c…

【Linux进程】命令行参数 环境变量(详解)

目录 前言 1. 命令行参数 什么是命令行参数? 2. 环境变量 常见的环境变量 如何修改环境变量? 获取环境变量 环境变量的组织方式 拓展问题 导入环境变量 3. 本地变量* 总结 前言 在使用Linux指令的时候, 都是指令后边根命令行参数, 每个指令本质都是一个一个的可执行程…

【UE5.1 角色练习】13-枪械射击——拿出与收起武器

目录 效果 步骤 一、安装射击武器 二、拿武器和收武器 效果 步骤 一、安装射击武器 1. 在虚幻商城中将“FPS Weapon Bundle”添加到工程中&#xff0c;由于我们使用的是5.1版本&#xff0c;我们可以先将该资产放入UE4工程中&#xff0c;然后迁移到5.1版本的工程 2. 打开角…

一.2.(4)放大电路静态工作点的稳定;(未完待续)

1.Rb对Q点及Au的影响 输入特性曲线&#xff1a;Rb减少&#xff0c;IBQ&#xff0c;UBEQ增大 输出特性曲线&#xff1a;ICQ增大&#xff0c;UCEQ减少 AUUO/Ui分子减少&#xff0c;分母增大&#xff0c;但由于分子带负号&#xff0c;所以|Au|减少 2.Rc对Q点及Au的影响 输入特性曲…

【JavaSE复习】数据结构、集合

JavaSE 复习 1.数据结构1.1 查找1.1.1 基本查找1.1.2 二分查找1.1.3 插值查找1.1.4 斐波那契查找1.1.5 分块查找1.1.6 分块查找的扩展&#xff08;无规律数据&#xff09; 1.2 排序1.2.1 冒泡排序1.2.2 选择排序1.2.3 插入排序1.2.4 快速排序 2. 集合2.1 基础集合2.1.1 集合和数…

爱了!8款超好用的PC端办公软件!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 你电脑中用的最久的软件是哪些&#xff1f;以下是否有你曾经使用过的软件呢&#xff1f;工欲善其事&#xff0c;必先利其器&#xff0c;今天继续…

无人机便携式侦测干扰设备(定全向)技术详解

无人机便携式侦测干扰设备&#xff08;定全向&#xff09;是一种专门针对无人机进行侦测和干扰的设备。它具备定向和全向两种工作模式&#xff0c;能够覆盖较宽的频率范围&#xff0c;有效侦测并干扰无人机与遥控器之间的通信信号&#xff0c;从而达到控制或驱离无人机的目的。…

验证回文串-string题目

用双指针&#xff0c;left right从两头往中间对比&#xff0c;不是字母的都略过&#xff0c;比的时候化成小写字母 125. 验证回文串 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool isPalindrome(string s) {if(s.size() < 1)return true;int left …

论文复现-基于决策树算法构建银行贷款审批预测模型(金融风控场景)

作者Toby&#xff0c;来源公众号&#xff1a;Python风控模型&#xff0c;基于决策树算法构建银行贷款审批预测模型 目录 1.金融风控论文复现 2.项目背景介绍 3.决策树介绍 4.数据集介绍 5.合规风险提醒 6.技术工具 7.实验过程 7.1导入数据 7.2数据预处理 7.3数据可…

SpringBoot3+Vue3开发园区管理系统

介绍 在当今快速发展的城市化进程中&#xff0c;高效、智能的园区管理成为了提升居民生活品质、优化企业运营环境的关键。为此&#xff0c;我们精心打造了全方位、一体化的园区综合管理系统&#xff0c;该系统深度融合了园区管理、楼栋管理、楼层管理、房间管理以及车位管理等…