【强化学习】09——价值和策略近似逼近方法

news2024/10/6 21:27:54

文章目录

  • 前言
  • 对状态/动作进行离散化
  • 参数化值函数近似
    • 值函数近似的主要形式
    • Incremental Methods
      • Gradient Descent
      • Linear Value Function Approximation
        • Feature Vectors特征化状态
        • Table Lookup Features
      • Incremental Prediction Algorithms
        • Monte-Carlo with Value Function Approximation
        • TD Learning with Value Function Approximation
        • TD(λ) with Value Function Approximation
      • Incremental Control Algorithms
        • Control with Value Function Approximation
        • Action-Value Function Approximation
        • Linear Action-Value Function Approximation
        • Incremental Control Algorithms
    • Example1 Mountain Car
    • Example2 DQN

前言

之前所有模型的做法都是基于创建一个查询表,在表中维护状态值函数 V ( s ) V(s) V(s)或状态-动作值函数 Q ( s , a ) Q(s,a) Q(s,a)。但对于大规模的MDP时,为每一个状态维护 V ( s ) V(s) V(s)或为每个状态-动作对维护 Q ( s , a ) Q(s,a) Q(s,a) 则需要面临以下问题:

  • 存储状态或动作需要大量的存储空间
  • 对于每一个状态去学习相应的价值需要耗费大量时间

大规模问题

  • 状态或者状态-动作空间非常大
  • 连续的状态或动作空间
  • 围棋博弈( 1 0 170 10^{170} 10170的状态空间)
  • 直升机,自动驾驶汽车(连续的状态空间)

因此,传统的方法不再适用。针对arge MDPs问题的主要解决方案有:

  • 对状态/动作进行离散化或分桶
  • 构建参数化的值函数估计

对状态/动作进行离散化

对于连续状态马尔可夫决策过程,我们可以对状态空间进行离散化。例如,如果用2维连续值 𝑠1, 𝑠2 表示状态,可以使用网格对状态空间进行切分从而转化为离散的状态值。在这里插入图片描述
记离散的状态值为 s ˉ \bar{s} sˉ,离散化的马尔可夫决策过程可以表示为: ( S ˉ , A , { P S ˉ a } , γ , R ) (\bar{S},A,\{P_{\bar{S}a}\},\gamma,R) (Sˉ,A,{PSˉa},γ,R),这样一来,就能够使用前述方法求解马尔可夫决策过程。

对于一个大型的离散状态马尔可夫决策过程,我们可以对状态值进一步分桶以进行采样聚合,使用先验知识将相似的离散状态归类到一起。在这里插入图片描述

离散化的方式优点
• 操作简洁直观
• 高效
• 在处理许多问题时能够达到较好效果
缺点
• 过于简单地表示价值函数𝑉,可能部分灵敏区域会被忽略
• 可能为每个离散区间假设一个常数值
• 维度灾难

参数化值函数近似

构建参数化(可学习的)函数来近似值函数
V ^ ( s , w ) ≈ V π ( s ) Q ^ ( s , a , w ) ≈ Q π ( s , a ) \begin{aligned}\hat{V}(s,\mathbf{w})&\approx V_\pi(s)\\\hat{Q}(s,a,\mathbf{w})&\approx Q_\pi(s,a)\end{aligned} V^(s,w)Q^(s,a,w)Vπ(s)Qπ(s,a) w \mathbf{w} w是近似函数的参数,可以通过强化学习进行更新
• 参数化的方法将现有可见的状态泛化到没有见过的状态上

值函数近似的主要形式

在这里插入图片描述

  • 一些函数近似
    • (一般的)线性模型
    • 神经网络
    • 决策树
    • 最近邻
    • 傅立叶/小波基底
  • 可微函数
    • (一般的)线性模型
    • 神经网络

我们希望模型适合在非稳态的(non-stationary),非独立同分布(non-iid)的数据上训练,因此参数化模型比树模型更适合。

Incremental Methods

Gradient Descent

在这里插入图片描述
梯度下降被广泛用于优化模型的参数。设 J ( w ) J(\mathbf{w}) J(w)是对参数 w \mathbf{w} w可微的函数。则 J ( w ) J(\mathbf{w}) J(w)的梯度可被定义为: ∇ w J ( w ) = ( ∂ J ( w ) ∂ w 1 ⋮ ∂ J ( w ) ∂ w n ) \nabla_{\mathbf{w}}J(\mathbf{w})=\begin{pmatrix}\frac{\partial J(\mathbf{w})}{\partial\mathbf{w}_1}\\\vdots\\\frac{\partial J(\mathbf{w})}{\partial\mathbf{w}_n}\end{pmatrix} wJ(w)= w1J(w)wnJ(w) 为了达到损失函数 J ( w ) J(\mathbf{w}) J(w)的局部最小值,调整权重向量 w \mathbf{w} w的方向以使其朝着负梯度方向进行更新。
Δ w = − 1 2 α ∇ w J ( w ) \Delta\mathbf{w}=-\frac12\alpha\nabla_\mathbf{w}J(\mathbf{w}) Δw=21αwJ(w)
其中, α \alpha α是学习率(一个正的标量值),控制每次更新的步长.

基于随机梯度下降(SGD)的值函数近似
目标:找到参数向量 w \mathbf{w} w最小化值函数近似值与真实值之间的均方误差 J ( w ) = E π [ ( V π ( s ) − V ^ ( s , w ) ) 2 ] J(\mathbf{w})=\mathbb{E}_\pi\left[(V_\pi(s)-\hat{V}(s,\mathbf{w}))^2\right] J(w)=Eπ[(Vπ(s)V^(s,w))2]误差减小的梯度方向 Δ w = − 1 2 α ∇ w J ( w ) = α E π [ ( V π ( s ) − V ^ ( s , w ) ) ∇ w V ^ ( s , w ) ] \begin{aligned} \Delta \mathbf{w}& =-\frac12\alpha\nabla_{\mathbf{w}}J(\mathbf{w}) \\ &=\alpha\mathbb{E}_\pi\left[(V_\pi(s)-\hat{V}(s,\mathbf{w}))\nabla_\mathbf{w}\hat{V}(s,\mathbf{w})\right] \end{aligned} Δw=21αwJ(w)=αEπ[(Vπ(s)V^(s,w))wV^(s,w)]单次采样进行随机梯度下降 Δ w = α ( V π ( s ) − V ^ ( s , w ) ) ∇ w V ^ ( s , w ) \Delta\mathbf{w}=\alpha(V_\pi(s)-\hat{V}(s,\mathbf{w}))\nabla_\mathbf{w}\hat{V}(s,\mathbf{w}) Δw=α(Vπ(s)V^(s,w))wV^(s,w)

Linear Value Function Approximation

Feature Vectors特征化状态

用一个特征向量表示状态
x ( s ) = [ x 1 ( s ) ⋮ x k ( s ) ] x(s)=\begin{bmatrix}x_1(s)\\\varvdots\\x_k(s)\end{bmatrix} x(s)= x1(s)xk(s)
以直升机控制问题为例
• 3D位置
• 3D速度(位置的变化量)
• 3D加速度(速度的变化量)
用特征的线性组合表示价值函数 V ^ ( s , w ) = x ( s ) ⊤ w = ∑ j = 1 n x j ( s ) w j \hat{V}(s,\mathbf{w})=\mathbf{x}(s)^\top\mathbf{w}=\sum_{j=1}^n\mathbf{x}_j(s)\mathbf{w}_j V^(s,w)=x(s)w=j=1nxj(s)wj
目标函数是参数 w \mathbf{w} w的二次函数 J ( w ) = E π [ ( V π ( s ) − x ( s ) ⊤ w ) 2 ] J(\mathbf{w})=\mathbb{E}_\pi\left[(V_\pi(s)-\mathbf{x}(s)^\top\mathbf{w})^2\right] J(w)=Eπ[(Vπ(s)x(s)w)2]

因而随机梯度下降能够收敛到全局最优解上 ∇ w V ^ ( s , w ) = x ( s ) Δ w = α ( V π ( s ) − V ^ ( s , w ) ) x ( s ) \begin{aligned} \nabla_\mathbf{w}\hat{V}(s,\mathbf{w})& =\mathbf{x}(\mathcal{s}) \\ \Delta \mathbf{w}& =\alpha(V_\pi(s)-\hat{V}(s,\mathbf{w}))\mathbf{x}(s) \end{aligned} wV^(s,w)Δw=x(s)=α(Vπ(s)V^(s,w))x(s)Update = step-size × prediction error × feature value

Table Lookup Features

之前基于表去查找的方法其实是线性状态值函数近似的一种特殊形式。
Table Lookup的Features(只有 s = s i s=s_i s=si时才会是1,其他都是0):
x t a b l e ( s ) = ( 1 ( s = s 1 ) ⋮ 1 ( s = s n ) ) \mathbf{x}^{table}(s)=\begin{pmatrix}\mathbf{1}(s=s_1)\\\varvdots\\\mathbf{1}(s=s_n)\end{pmatrix} xtable(s)= 1(s=s1)1(s=sn)
值函数则是向量于权重的乘积 V ^ ( s , w ) = ( 1 ( s = s 1 ) ⋮ 1 ( s = s n ) ) ⋅ ( w 1 ⋮ w n ) \hat{V}(s,\mathbf{w})=\begin{pmatrix}\mathbf{1}(s=s_1)\\\varvdots\\\mathbf{1}(s=s_n)\end{pmatrix}\cdot\begin{pmatrix}\mathbf{w}_1\\\varvdots\\\mathbf{w}_n\end{pmatrix} V^(s,w)= 1(s=s1)1(s=sn) w1wn

Incremental Prediction Algorithms

在之前的描述中,我们假定 V π ( s ) V_\pi(s) Vπ(s)类似于监督学习中的label,是被给定的。但在RL是无监督学习,只有奖励。因此可以做如下替换:

  • 对于 MC,用 G t \textcolor{red}{G_t} Gt替换 V π ( s ) V_\pi(s) Vπ(s) Δ w = α ( G t − V ^ ( s t , w ) ) ∇ w V ^ ( s t , w ) \Delta\mathbf{w}=\alpha(\textcolor{red}{G_t}-\hat{V}(s_t,\mathbf{w}))\nabla_\mathbf{w}\hat{V}(s_t,\mathbf{w}) Δw=α(GtV^(st,w))wV^(st,w)
  • 对于TD(0),用 R t + 1 + γ V ^ ( s t + 1 , w ) \textcolor{red}{R_{t+1}+\gamma\hat{V}(s_{t+1},\mathbf{w})} Rt+1+γV^(st+1,w)替换 V π ( s ) V_\pi(s) Vπ(s): Δ w = α ( R t + 1 + γ V ^ ( s t + 1 , w ) − V ^ ( s t , w ) ) ∇ w V ^ ( s t , w ) \Delta\mathbf{w}=\alpha(\textcolor{red}{R_{t+1}+\gamma\hat{V}(s_{t+1},\mathbf{w})}-\hat{V}(s_t,\mathbf{w}))\nabla_\mathbf{w}\hat{V}(s_t,\mathbf{w}) Δw=α(Rt+1+γV^(st+1,w)V^(st,w))wV^(st,w)
  • 对于TD(λ),用 G t λ \textcolor{red}{G_t^λ} Gtλ替换 V π ( s ) V_\pi(s) Vπ(s): Δ w = α ( G t λ − V ^ ( s t , w ) ) ∇ w V ^ ( s t , w ) \Delta\mathbf{w}=\alpha(\textcolor{red}{G_t^λ}-\hat{V}(s_t,\mathbf{w}))\nabla_\mathbf{w}\hat{V}(s_t,\mathbf{w}) Δw=α(GtλV^(st,w))wV^(st,w)
Monte-Carlo with Value Function Approximation
  • G t G_t Gt是对 V π ( s t ) V_\pi(s_t) Vπ(st)无偏但有噪声的采样
  • 可以在“训练数据”上运用监督学习对价值函数进行预测 ⟨ s 1 , G 1 ⟩ , ⟨ s 2 , G 2 ⟩ , . . . , ⟨ s T , G T ⟩ \langle s_1,G_1\rangle,\langle s_2,G_2\rangle,...,\langle s_T,G_T\rangle s1,G1,s2,G2,...,sT,GT
  • 对于每个数据样本 ⟨ s t , G t ⟩ \langle s_t,G_t\rangle st,Gt(linear Monte-Carlo policy evaluation) Δ w = α ( G t − V ^ ( S t , w ) ) ∇ w V ^ ( s t , w ) = α ( G t − V ^ ( s t , w ) ) x ( s t ) \begin{gathered} \Delta \mathbf{w} =\alpha(\textcolor{red}{G_t}-\hat{V}(S_t,\mathbf{w}))\nabla_\mathbf{w}\hat{V}(s_t,\mathbf{w}) \\ =\alpha(G_t-\hat{V}(s_t,\mathbf{w}))\mathbf{x}(s_t) \end{gathered} Δw=α(GtV^(St,w))wV^(st,w)=α(GtV^(st,w))x(st)

蒙特卡洛预测至少能收敛到一个局部最优解
• 在价值函数为线性的情况下可以收敛到全局最优

TD Learning with Value Function Approximation
  • R t + 1 + γ V ^ ( s t + 1 , w ) {R_{t+1}+\gamma\hat{V}(s_{t+1},\mathbf{w})} Rt+1+γV^(st+1,w)是对 V π ( s t ) V_\pi(s_t) Vπ(st)的有偏采样
  • 同样可以在“训练数据”上运用监督学习对价值函数进行预测 ⟨ S 1 , R 2 + γ v ^ ( S 2 , w ) ⟩ , ⟨ S 2 , R 3 + γ v ^ ( S 3 , w ) ⟩ , . . . , ⟨ S T − 1 , R T ⟩ \langle S_1,R_2+\gamma\hat{v}(S_2,\mathbf{w})\rangle,\langle S_2,R_3+\gamma\hat{v}(S_3,\mathbf{w})\rangle,...,\langle S_{T-1},R_T\rangle S1,R2+γv^(S2,w)⟩,S2,R3+γv^(S3,w)⟩,...,ST1,RT
  • linear TD(0) Δ w = α ( R + γ V ^ ( s ′ , w ) − V ^ ( s , w ) ) ∇ w V ^ ( s , w ) = α δ x ( s ) \begin{aligned} \Delta \mathbf{w}& =\alpha(\textcolor{red}{R+\gamma\hat{V}(s^{\prime},\mathbf{w})}-\hat{V}(s,\mathbf{w}))\nabla_{\mathbf{w}}\hat{V}(s,\mathbf{w}) \\ &=\alpha\delta\mathbf{x}(s) \end{aligned} Δw=α(R+γV^(s,w)V^(s,w))wV^(s,w)=αδx(s)
  • 线性情况下时序差分学习(接近)收敛到全局最优解
TD(λ) with Value Function Approximation
  • G t λ {G_t^λ} Gtλ是对 V π ( s t ) V_\pi(s_t) Vπ(st)的有偏采样
  • 可以在“训练数据”上运用监督学习对价值函数进行预测 ⟨ S 1 , G 1 λ ⟩ , ⟨ S 2 , G 2 λ ⟩ , . . . , ⟨ S T − 1 , G T − 1 λ ⟩ \left\langle S_1,G_1^\lambda\right\rangle,\left\langle S_2,G_2^\lambda\right\rangle,...,\left\langle S_{T-1},G_{T-1}^\lambda\right\rangle S1,G1λ,S2,G2λ,...,ST1,GT1λ
  • Forward view linear TD(λ) Δ w = α ( G t λ − V ^ ( S t , w ) ) ∇ w V ^ ( s t , w ) = α ( G t λ − V ^ ( s t , w ) ) x ( s t ) \begin{gathered} \Delta \mathbf{w} =\alpha(\textcolor{red}{G_t^\lambda}-\hat{V}(S_t,\mathbf{w}))\nabla_\mathbf{w}\hat{V}(s_t,\mathbf{w}) \\ =\alpha(\textcolor{red}{G_t^\lambda}-\hat{V}(s_t,\mathbf{w}))\mathbf{x}(s_t) \end{gathered} Δw=α(GtλV^(St,w))wV^(st,w)=α(GtλV^(st,w))x(st)
  • Backward view linear TD(λ) δ t = R t + 1 + γ V ^ ( s t + 1 , w ) − V ^ ( s t , w ) E t = γ λ E t − 1 + x ( s t ) Δ w = α δ t E t \begin{aligned} \delta_{t}& =R_{t+1}+\gamma\hat{V}(s_{t+1},\mathbf{w})-\hat{V}(s_t,\mathbf{w}) \\ E_{t}& =\gamma\lambda E_{t-1}+\mathbf{x}(s_t) \\ \Delta \mathbf{w}& =\alpha\delta_tE_t \end{aligned} δtEtΔw=Rt+1+γV^(st+1,w)V^(st,w)=γλEt1+x(st)=αδtEt
  • Backward view linear TD(λ)和Forward view linear TD(λ)是等效的

Incremental Control Algorithms

Control with Value Function Approximation

在这里插入图片描述

  • 策略评估:近似策略评估 Q w ≈ Q π Q_\mathbf{w}\approx Q_\pi QwQπ
  • 策略改进:𝜖-贪心策略提升
Action-Value Function Approximation

对动作-状态值函数进行近似 Q ^ ( s , a , w ) ≈ Q π ( s , a ) \hat{Q}(s,a,\mathbf{w})\approx Q_\pi(s,a) Q^(s,a,w)Qπ(s,a)
最小均方误差 J ( w ) = E π [ ( Q π ( s , a ) − Q ^ ( s , a , w ) ) 2 ] J(\mathbf{w})=\mathbb{E}_\pi\left[(Q_\pi(s,a)-\hat{Q}(s,a,\mathbf{w}))^2\right] J(w)=Eπ[(Qπ(s,a)Q^(s,a,w))2]
在单个样本上进行随机梯度下降 − 1 2 ∇ w J ( w ) = ( Q π ( s , a ) − Q ^ ( s , a , w ) ) ∇ w Q ^ ( s , a , w ) Δ w = α ( Q π ( s , a ) − Q ^ ( s , a , w ) ) ∇ w Q ^ ( s , a , w ) \begin{aligned} -\frac12\nabla_\mathbf{w}J(\mathbf{w})& =(Q_\pi(s,a)-\hat{Q}(s,a,\mathbf{w}))\nabla_\mathbf{w}\hat{Q}(s,a,\mathbf{w}) \\ \Delta w& =\alpha(Q_\pi(s,a)-\hat{Q}(s,a,\mathbf{w}))\nabla_\mathbf{w}\hat{Q}(s,a,\mathbf{w}) \end{aligned} 21wJ(w)Δw=(Qπ(s,a)Q^(s,a,w))wQ^(s,a,w)=α(Qπ(s,a)Q^(s,a,w))wQ^(s,a,w)

Linear Action-Value Function Approximation

用特征向量表示状态-动作对 x ( s , a ) = [ x 1 ( s , a ) ⋮ x k ( s , a ) ] x(s,a)=\begin{bmatrix}x_1(s,a)\\\varvdots\\x_k(s,a)\end{bmatrix} x(s,a)= x1(s,a)xk(s,a)
线性情况下,参数化后𝑄函数 Q ^ ( s , a , w ) = x ( s , a ) ⊤ w = ∑ j = 1 n x j ( s , a ) w j \hat{Q}(s,a,\mathbf{w})=\mathbf{x}(s,a)^\top\mathbf{w}=\sum_{j=1}^n\mathbf{x}_j(s,a)\mathbf{w}_j Q^(s,a,w)=x(s,a)w=j=1nxj(s,a)wj
利用随机梯度下降更新 ∇ w Q ^ ( s , a , w ) = x ( s , a ) Δ w = α ( Q π ( s , a ) − Q ^ ( s , a , w ) ) x ( s , a ) \begin{aligned} \nabla_\mathbf{w}\hat{Q}(s,a,\mathbf{w})& =\mathbf{x}(s,a) \\ \Delta \mathbf{w}& =\alpha(Q_\pi(s,a)-\hat{Q}(s,a,\mathbf{w}))\mathbf{x}(s,a) \end{aligned} wQ^(s,a,w)Δw=x(s,a)=α(Qπ(s,a)Q^(s,a,w))x(s,a)

Incremental Control Algorithms

类似于Prediction的方法做如下替换:

  • 对于 MC,用 G t \textcolor{red}{G_t} Gt替换 Q π ( s , a ) Q_\pi(s,a) Qπ(s,a) Δ w = α ( G t − Q ^ ( s t , a t , w ) ) ∇ w Q ^ ( s t , a t , w ) \Delta\mathbf{w}=\alpha(\textcolor{red}{G_t}-\hat{Q}(s_t,a_t,\mathbf{w}))\nabla_\mathbf{w}\hat{Q}(s_t,a_t,\mathbf{w}) Δw=α(GtQ^(st,at,w))wQ^(st,at,w)
  • 对于TD(0),用 R t + 1 + γ Q ^ ( s t + 1 , a t + 1 , w ) \textcolor{red}{R_{t+1}+\gamma\hat{Q}(s_{t+1},a_{t+1},\mathbf{w})} Rt+1+γQ^(st+1,at+1,w)替换 Q π ( s , a ) Q_\pi(s,a) Qπ(s,a): Δ w = α ( R t + 1 + γ Q ^ ( s t + 1 , a t + 1 , w ) − Q ^ ( s t , a t , w ) ) ∇ w Q ^ ( s t , a t , w ) \Delta\mathbf{w}=\alpha(\textcolor{red}{R_{t+1}+\gamma\hat{Q}(s_{t+1},a_{t+1},\mathbf{w})}-\hat{Q}(s_t,a_t,\mathbf{w}))\nabla_\mathbf{w}\hat{Q}(s_t,a_t,\mathbf{w}) Δw=α(Rt+1+γQ^(st+1,at+1,w)Q^(st,at,w))wQ^(st,at,w)
  • 对于TD(λ),用 G t λ \textcolor{red}{G_t^λ} Gtλ替换 Q π ( s , a ) Q_\pi(s,a) Qπ(s,a): Δ w = α ( G t λ − Q ^ ( s t , a t , w ) ) ∇ w Q ^ ( s t , a t , w ) \Delta\mathbf{w}=\alpha(\textcolor{red}{G_t^λ}-\hat{Q}(s_t,a_t,\mathbf{w}))\nabla_\mathbf{w}\hat{Q}(s_t,a_t,\mathbf{w}) Δw=α(GtλQ^(st,at,w))wQ^(st,at,w)

虽然 w \mathbf{w} w在时序差分学习的目标中出现,但是我们并不需要计算目标函数的梯度。因为目标值不是可学习的,就是单纯固定的一个值。如果同时学习,会造成训练不稳定。

Example1 Mountain Car

在这里插入图片描述

Example2 DQN

使用深度神经网络表示Q函数。输入s,输出n+1个a(多一个no input),选出最大的a作为实际输出。
在这里插入图片描述
DQN 使用经验回放(experience replay)和 固定的目标Q值

L i ( θ i ) = E ( s , a , r , s ′ ) ∼ U ( D ) [ ( r + γ max ⁡ a ′ Q ( s ′ , a ′ ; θ i − ) ⏟ 目标Q值 − Q ( s , a ; θ i ) ⏟ 预测Q值 ) 2 ] \begin{aligned}L_i(\theta_i)=\mathbb{E}_{(s,a,r,s')\sim U(D)}&\left[\left(\underbrace{r+\gamma\max_{a′}Q(s',a';\theta_i^-)}_\text{目标Q值}-\underbrace{Q(s,a;\theta_i)}_\text{预测Q值}\right)^2\right]\end{aligned} Li(θi)=E(s,a,r,s)U(D) 目标Q r+γamaxQ(s,a;θi)预测Q Q(s,a;θi) 2

• 𝜃𝑖是第𝑖轮迭代中将要更新的网络参数
• 通过标准的反向传播算法进行更新
• 𝜃𝑖−是目标网络参数
• 仅在𝜃𝑖每更新𝐶步后进行更新
• (𝑠, 𝑎, 𝑟, 𝑠′) ~𝑈 (𝐷) :样本从经验池𝐷中均匀抽样
• 这样做可以避免在近期经验上过拟合
[1] 伯禹AI
[2] https://www.deepmind.com/learning-resources/introduction-to-reinforcement-learning-with-david-silver
[3] 动手学强化学习
[4] Reinforcement Learning

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

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

相关文章

【蓝桥杯选拔赛真题02】C++计算天数 青少年组蓝桥杯C++选拔赛真题 STEMA比赛真题解析

目录 C/C++计算天数 一、题目要求 1、编程实现 2、输入输出 二、算法分析 <

VR全景拍摄市场需求有多大?适用于哪些行业?

随着VR全景技术的成熟&#xff0c;越来越多的商家开始借助VR全景来宣传推广自己的店铺&#xff0c;特别是5G时代的到来&#xff0c;VR全景逐渐被应用在我们的日常生活中的各个方面&#xff0c;VR全景拍摄的市场需求也正在逐步加大。 通过VR全景技术将线下商家的实景“搬到线上”…

102.linux5.15.198 编译 firefly-rk3399(1)

1. 平台&#xff1a; rk3399 firefly 2g16g 2. 内核&#xff1a;linux5.15.136 &#xff08;从内核镜像网站下载&#xff09; 3. 交叉编译工具 gcc version 7.5.0 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 4. 宿主机&#xff1a;ubuntu18.04 5. 需要的素材和资料&#xff…

点击弹出实现模拟百度那样子

<uni-section title"输入框示例" type"line" padding><view class"dialog-box"><text class"dialog-text">输入内容&#xff1a;{{ value }}</text></view><button class"button" type&qu…

支付宝支付接入流程

一、 接入准备 支付宝支付流程没有微信那么复杂&#xff0c;而且支付宝支持沙箱。登录支付宝开放平台控制台 点击开发工具中的沙箱 接口加密方式&#xff0c;我这里使用的是自定义密钥。生成密钥的方式 使用支付宝官方提供的密钥工具&#xff0c;唯一要注意的是支付宝密钥工具…

12 原子性|可见性|有序性|JMM内存模型

1 并发三大特性 1.1 原子性 一个或多个操作&#xff0c;要么全部执行&#xff0c;要么全部不执行。Java中&#xff0c;对基本数据类型的变量的读取和赋值操作是原子性操作&#xff0c;但不采取任何原子性保障措施的自增操作不是原子性的&#xff0c;如&#xff1a;i public c…

C语言系统化精讲(六):C语言选择结构和循环结构

文章目录 一、C语言选择结构1.1 if语句1.2 if…else语句1.3 else if语句1.4 if语句的嵌套1.5 条件运算符1.6 switch语句的基本形式1.7 多路开关模式的switch语句1.8 if…else语句和switch语句的区别 二、C语言循环结构2.1 C语言while循环和do while循环详解2.1.1 while循环2.1.…

基于机器视觉的停车位识别检测 计算机竞赛

简介 你是不是经常在停车场周围转来转去寻找停车位。如果你的车辆能准确地告诉你最近的停车位在哪里&#xff0c;那是不是很爽&#xff1f;事实证明&#xff0c;基于深度学习和OpenCV解决这个问题相对容易&#xff0c;只需获取停车场的实时视频即可。 该项目较为新颖&#xf…

为什么后端老是觉得前端简单?

首先&#xff0c;相对于后端来说&#xff0c;前端入门的门槛较低&#xff0c;有些人因程序员的高薪酬而转行&#xff0c;却又不愿学习更多的知识和技术&#xff0c;入行很久却还在做着最基础的工作&#xff0c;久而久之&#xff0c;前端工程师的技术水平参差不齐&#xff0c;进…

【嵌入式开发 Linux 常用命令系列 8 --代码格式修改工具 astyle】

文章目录 AStyle 介绍Ubuntu 下安装Windows 下安装 AStyle 介绍 AStyle&#xff0c;全名 Artistic Style&#xff0c;是一款源代码格式化工具。它可以自动格式化 C&#xff0c;C&#xff0c;C#&#xff0c;和Java源代码。使用它您可以轻松地对代码进行格式化&#xff0c;以满足…

python DevOps

1、用python的 subprocess就能写出ping 255个ip哪个不通。多进程就能快很多&#xff0c;用fork 2、子进程在循环中不写exit(),会发生再生成子进程&#xff0c;核心就是子进程下次循环就少一次&#xff0c;生出孙进程&#xff0c;循环少两次。。。直到结束 windows是没有os.fo…

Mac怎么清理磁盘空间?释放Mac磁盘空间有效方法

相信很多使用macOS系统的小伙伴都收到过提示“磁盘空间已满”消息&#xff0c;尤其是采用SSD固态硬盘的MacBook系列&#xff0c;120G的硬盘空间本就捉襟见肘&#xff0c;使用一段时间后&#xff0c;即使自己没有存放很多大文件&#xff0c; Mac的磁盘很快就满了。那么&#xff…

echarts的柱状图的重叠和堆叠实现两个柱体的显示和之前的差值显示

效果图 主要思路 准备三个柱体&#xff08;原计划&#xff0c;实际进度&#xff0c;差值&#xff09; 原计划和实际进度设置成重叠 {barWidth: 20,// yAxisIndex: 1,z: 1,name: 原计划,type: bar,stack: ab,emphasis: { // 点击柱体其他柱体颜色会变浅disabled: true},label…

山西电力市场日前价格预测【2023-10-27】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-10-27&#xff09;山西电力市场全天平均日前电价为347.06元/MWh。其中&#xff0c;最高日前电价为618.09元/MWh&#xff0c;预计出现在18: 15。最低日前电价为163.49元/MWh&#xff0c;预计…

VM虚拟机的安装与配置及操作系统的安装

目录 一.操作系统 1.简介 2.常见操作系统 2.1 windows操作系统 2.2 UNIX操作系统 2.3 linux操作系统 2.4 mac操作系统 2.5 嵌入式操作系统 3.个人版本和服务器版本的区别 4.Linux的版本介绍 4.1 Debian 4.2 Ubuntu 4.3 Redhat 4.4 Fedora 4.5 centos 二.VM虚拟…

微前端系列-样式隔离、元素隔离

样式隔离问题 各个应用之间可能相互设置标签样式&#xff0c;会相互影响&#xff0c;或者影响全局样式&#xff0c;比如应用A给body设置样式&#xff0c;应用B也给body设置样式 方法一 样式增加不同前缀 每个应用通过前缀独立区分开&#xff0c;京东micro-app默认是采用的这…

pika皮卡丘RCE靶场

pika |拼接命令&#xff0c;直接 find 寻找根目录下的文件&#xff0c;使用 grep 过滤 127.0.0.1 | find / | grep flag

超声电机工作原理

超声波电机的工作原理 在压电陶瓷振子上加高频交流电压时&#xff0c;利用逆压电效应或电致伸缩效应使定子产生微观机械振动。并将这种振动通过共振放大和摩擦耦合变换成旋转或直线型运动。 超声波驱动有两个前提条件&#xff1a; 需在定子表面激励出稳态的质点椭圆运动轨迹…

NTP(Network Time Protocol 网络时间协议)

作用 大数据产生与处理系统是各种计算设备集群的&#xff0c;计算设备将统一、同步的标准时间用于记录各种事件发生时序&#xff0c;如 E-MAIL 信息、文件创建和访问时间、数据库处理时间等。大数据系统内不同计算设备之间控制、计算、处理、应用等数据或操作都具有时序性&…

荣耀推送服务消息分类标准

前言 为了提升终端用户的推送体验、营造良好可持续的通知生态&#xff0c;荣耀推送服务将对推送消息进行分类管理。 消息分类 定义 荣耀推送服务将根据应用类型、消息内容和消息发送场景&#xff0c;将推送消息分成服务通讯和资讯营销两大类别。 服务通讯类&#xff0c;包…