【多智能体强化学习02---训练范式+独立学习+多智能体策略梯度算法】

news2025/1/14 18:02:12

文章目录

  • 多智能体强化学习
  • 训练和执行范式
    • CTCE
    • DTDE
    • CTDE
  • MARL符号表示
  • 分布式学习(Independent Learning)
    • 基于值函数的分布式学习(Independent value-based learning)
    • 基于策略梯度的分布式学习(Independent policy gradient learning)
  • 多智能体策略梯度算法
    • 多智能体策略梯度定理
    • 中心化的评论家(Centralised critics)
    • 中心化的动作价值评论家(Centralised action-value critics)
    • 反事实的动作价值估计(Counterfactual action-value estimation)
    • 具有中心化动作价值估计的均衡选择(Equilibrium Selection)

多智能体强化学习

本篇主要介绍多智能体系统的训练范式,MARL符号表示,多智能体独立学习以及多智能体策略梯度算法。

训练和执行范式

在多智能体系统中,一个很普遍的假设是每一个智能体只能观测到局部信息,这个假设是合理的,因为传感器感知能力、通信能力等的影响。如果要训练一个多智能体系统,根据在训练的时候所用信息的不同,可以将多智能体强化学习训练范式分为以下三种,分别是:中心化训练中心化执行(CTCE),分布式训练分布式执行(DTDE)和中心化训练分布式执行(CTDE)。接下来,我们将会分别进行介绍。

在这里插入图片描述

CTCE

CTCE即中心化训练中心化执行,也就是在多智能体系统中,利用共享信息进行训练,在执行的时候,利用共享信息输出动作。一个典型的例子就是一个中央控制器,它根据所有智能体的共享信息进行训练,在训练结束之后,根据所有智能体的共享信息输出每一个智能体需要执行的动作。通过CTCE的方式,可以让智能体更好的合作,但是也有很多问题:

  • 所有智能体的奖励最后要转换成一个标量值,这种方式无法区分每一个智能体动作的贡献。
  • 中心化训练期间,联合动作空间指数增长,不利于训练
  • 由于通信的限制,共享信息有困难,一般只假设在模拟环境中可以贡献信息。

DTDE

DTDE即分布式训练分布式执行,即每一个智能体根据自己的局部观测进行训练和执行,这种方式没有动作空间指数增长和通信的问题。但也有自己的问题:

  • 每一个智能体将其他智能体视为环境的一部分,导致环境的非平稳性问题。
  • 如果进行复杂的合作任务,DTDE可能协作性不强。

CTDE

CTDE即中心化训练,分布式执行,即在训练的时候利用共享信息,在执行的时候利用智能体的局部观测信息,这种方式结合了上面两种范式的优点。利用这种范式的比如actor-critic框架,基于值分解的方法等。
在这里插入图片描述

MARL符号表示

我们在前面的文章中已经提过,智能体的价值函数网络参数用 θ \theta θ表示,策略网络的参数利用 ϕ \phi ϕ表示,后面将会继续沿用这种表示方法。
我们将 π i ( . ∣ ϕ i ) \pi_i(.|\phi_i) πi(.∣ϕi)表示为 π ( . ∣ ϕ i ) \pi(.|\phi_i) π(.∣ϕi),参数 ϕ i \phi_i ϕi不但表示了不同智能体网络参数有可能不同,参数数量也有可能不同(参数数量不同意味着网络结构的不同)
我们说多智能体系统一个普遍的假设是局部观测,在做决策的时候,利用历史信息是很重要的,因为局部观测的历史信息里包含了当前时刻观测没有包含的信息,我们将每一个智能体的观测信息加上历史观测信息,表示为: h i t = ( o i 0 , o i 1 , . . . o i t ) h_i^t=(o_i^0,o_i^1,...o_i^t) hit=(oi0,oi1,...oit),将所有智能体的共享信息记为 h t = ( o 0 , o 1 , . . . , o t ) h^t=(o^0,o^1,...,o^t) ht=(o0,o1,...,ot),在中心化训练阶段,如果知道全局状态,我们一般就用 s t s^t st,而不用 h t h^t ht,注意,这里的 s t s^t st不包括历史信息,只包括当前时刻的全局状态信息,根据马尔科夫性,没有必要包含历史信息,但是 h t h^t ht是包含历史信息的。

分布式学习(Independent Learning)

虽然我们前面说过,分布式学习面临环境非平稳性的问题,但这种学习范式却显得非常自然,接下来我们介绍如何使用现有的RL算法,来训练多个智能体。

基于值函数的分布式学习(Independent value-based learning)

在前面的学习中,我们讲过单智能体强化学习方法主要可以分为基于值的方法和基于策略梯度的方法,接下来,我们先来讲解基于值的方法在分布式学习这样的框架下,如何解决多智能体问题。
分布式学习,这里也可以叫做独立学习,顾名思义,每一个智能体独立的进行学习,将其他智能体视为环境的一部分,我们以DQN算法为例,来讲解IDQN算法,在IDQN算法种,每一个智能体有自己的价值网络 Q ( . ; θ i ) Q(.;\theta_i) Q(.;θi),单独维护自己的经验缓存池 D i D_i Di,并且仅仅使用自己的局部观测来做出动作,接收奖励,可以说,这里的每一个智能体都是自利的,没有团队目标。那每一个智能体如何更新自己的值函数网络呢?和DQN算法一样:
在这里插入图片描述
在每一个step中,所有智能体最小化自己的损失函数 L ( θ i ) L(\theta_i) L(θi),相当于最小化 L ( θ 1 ) + L ( θ 2 ) + L ( θ 3 ) + . . . + L ( θ n ) L(\theta_1)+L(\theta_2)+L(\theta_3)+...+L(\theta_n) L(θ1)+L(θ2)+L(θ3)+...+L(θn),这种方式有没有什么问题呢?
很明显,每一个智能体只根据自己的局部观测去做决策和学习,假设该智能体在训练早期的时候,在观测 o i t o_i^t oit下采取动作 a i t a_i^t ait获得了很高的奖励,但是在后面由于其他智能体的策略发生改变,该智能体在相同的观测下,采取同样的动作却获得了很低的奖励,这样的经验也会被智能体储存在经验缓存池中,这就导致了智能体的学习过程并步平稳,甚至不能收敛,这主要是由智能体的局部观测引起的。

后面也有人提出了几种改进方法来缓解这种方法,比如降低经验缓存池的容量,使得过时的数据尽早的被淘汰,或者给经验赋予重要性权值等,这里不一一说明。
下面是IDQN算法的伪代码:

在这里插入图片描述

基于策略梯度的分布式学习(Independent policy gradient learning)

和基于值函数的方法类似,基于策略梯度的分布学习同样将其他智能体视为环境的一部分,这里以REINFORCE算法讲解,在分布式REINFORCE中,每一个智能体维护一个策略网络 π ( . ∣ h i t ; ϕ i ) \pi(.|h_i^t;\phi_i) π(.∣hit;ϕi),根据自己的局部观测及历史做出动作,然后每一个智能体根据自己de 策略梯度更新自己的策略网络参数:
在这里插入图片描述
这里的 u i t u_i^t uit通过蒙特卡洛方法采样计算。
这种更新方式避免了IDQN方法中提到的训练不稳定的问题,在该方法中,智能体每一个回合更新一次策略参数,使用的数据都是智能体根据当前策略采集的最近的数据,当其他智能体的策略更新时,智能体可以立马检测到其他智能体策略的更新,并更新自己的策略,所以训练更加稳定
下面是分布式REINFORCE伪代码:
在这里插入图片描述
这样的学习范式同样适用于A2C和PPO算法,这里以A2C举例,N个智能体通过K个环境进行采样,每一个智能体根据自己的经验对网络进行更行,和A2C算法一样:
在这里插入图片描述
每一个智能体的目标是最小化所有环境上的平均损失函数:
L ( ϕ ) = 1 K ∑ k ∈ K L ( ϕ i ∣ k ) L(\phi)=\frac{1}{K}\sum_{k\in K}L(\phi_i|k) L(ϕ)=K1kKL(ϕik)
critic网络的更新如下:
在这里插入图片描述

多智能体策略梯度算法

再前面我们介绍了单智能体RL算法在分布式学习范式中的应用,将单智能体RL算法直接应用于多智能体系统以及每一个智能体对环境的部分可观测性质,进一步加剧环境的非平稳性问题,通过使用CTDE范式可有缓解多智能体强化学习中的非平稳性问题,这一小节将会集中介绍CTDE范式下的多智能体策略梯度算法,在开始之前,我们对策略梯度定理拓展到多智能体策略梯度定理。

多智能体策略梯度定理

我们首先来回顾一下单智能体策略梯度定理:
∇ ϕ J ( ϕ ) = ∑ s ∈ S P r ( s ∣ π ) ∑ a ∈ A Q π ( s , a ) ∇ ϕ log ⁡ π ( a ∣ s ; ϕ ) = E π [ Q π ( s , a ) ∇ ϕ log ⁡ π ( a ∣ s ; ϕ ) ] \nabla_{\phi}J(\phi)=\sum_{s\in S}Pr(s|\pi)\sum_{a\in A}Q^{\pi}(s,a)\nabla_{\phi}\log \pi(a|s;\phi) =E_{\pi}[Q^{\pi}(s,a) \nabla_{\phi}\log \pi(a|s;\phi)] ϕJ(ϕ)=sSPr(sπ)aAQπ(s,a)ϕlogπ(as;ϕ)=Eπ[Qπ(s,a)ϕlogπ(as;ϕ)]
为了扩展策略梯度定理到多智能体系统,思考,在多智能体系统中,每一个智能体的预期回报只和该智能体有关吗?当然不是!还依赖于其他智能体的策略,基于这样一种视角,我们可以利用所有智能体的观测信息来估计这里的预期回报,此时多智能体策略梯度定理如下:
在这里插入图片描述
现在来分析上面的定理,对于智能体i,actor网络的策略为 π ( . ∣ h i ; ϕ i ) \pi(.|h_i;\phi_i) π(.∣hi;ϕi), Q i π ( h ^ , < a i , a − i > ) Q_i^{\pi}(\hat h,<a_i,a_{-i}>) Qiπ(h^,<ai,ai>)表示此时的预期回报估计依赖于所有智能体的观测和动作信息。

现在我们回过头再分析一下,这里采用所有智能体的观测信息到底能带来什么好处?
我们假设的场景是一个部分可观测的多智能体系统,对于其中某一个智能体,通过策略梯度定理来更新它的策略网络参数,后面一项表示策略的梯度,表示参数往哪个方向移动才能让 π \pi π再状态s下取到动作a的概率变大,而前面一项表示的是智能体在当前策略下,在状态s下采取动作a的价值,如果价值高,则移动的多,价值低,则移动的少,相对来说,是增大了在状态s下采取高价值动作的概率。
但是现在我们并没有一个准确的Q值去估计谁的价值更高,这里的Q值也是通过样本来估计的,在部分可观测的多智能体系统中,如果该智能体只用自己的局部观测的信息来估计它此时的动作价值,想不明白,我们假想一个足球场景,场内某个球员假设是局部观测,他能否评估自己的动作的好与坏?再假设,如果智能体用所有球员的信息,或者全局状态,它能否评估自己的动作的好与坏?
全局信息,它对该状态下的价值评估确实是更加准确的,但是对于部分观测的actor,到底有没有用?观点:对于actor网络加上历史信息确实是有用的,但如果actor网络只利用当前时刻的局部观测是没用的,可能只带来了一种局部观测下的行动偏好,但并不能保证它的优越性。

中心化的评论家(Centralised critics)

通过设定一个中心化的评论家,来指导智能体actor的更新,中心化的评论家带来了什么好处?如果以所有智能体的观测及历史作为条件,确实可以反映此时的状态的价值。智能体可以根据更加准确的价值估计来计算自己的策略梯度。这种方式在评估智能体i的策略好坏的时候,将其他智能体的信息作为额外条件,相应的,由于此时状态空间的增大,价值函数的估计方差增大(因为本来就是在估计),从而导致策略梯度方差增大,导致更新不稳定,但是相应地,由于额外信息提供了更加广阔的状态空间,智能体可以看到更优的解,从而也避免了很容易收敛到局部最优的情况。
在使用中心化的评论家时,历史信息及其重要,如果额外信息包括了其他智能体的历史信息,那么此时的价值估计就会隐式的学习到其他智能体的策略,相应的也会更加准确的评估该策略在该状态下的价值,从而指导智能体向着价值更高的方向更新。如果没有历史信息,就会引入很高的偏差。
在这一节中,主要还是以A2C算法作为例子,所以主要评估的是优势函数,所以值网络估计的是状态价值函数,这里可以认为是为每一个智能体构建了一个价值网络,只不过包含了其他智能体的额外信息。
A2C伪代码如下:
在这里插入图片描述
这一段主要还是探讨了中心化的评论家到底有没有用?结论是有用,虽然增大了方差,却也缓解了容易陷入局部最优解的问题,但是也只是经验之谈,没有严格的理论证明,直觉上,确实是评估的更加准确了,但是前提是在部分观测下,使用历史信息作为条件来估计

中心化的动作价值评论家(Centralised action-value critics)

在前面我们说通过中心化的评论家可以学习一个状态价值网络,并且使得训练更加稳定。当然,我们也可以学习一个中心化的动作价值网络,对于智能体i,网络的输入是该智能体的观测历史,中心化的信息以及所有智能体的动作。
那这个动作价值网络的损失函数又该如何定义呢?请看下面:
在这里插入图片描述
现在我们来分析一下上面的式子:这里的目标值 y i y_i yi为什么不采用类似DQN那样的最大化操作呢?因为我们现在是利用智能体当前策略采集到的经验来估计这里的Q值,我们的目标是对动作价值的准确估计,而不是让动作价值越高越好,所以这里我们也不能用经验缓存池。
那如何更新actor网络呢?请看下面:
在这里插入图片描述
此时智能体i的策略梯度如下:
在这里插入图片描述
此时智能体i的critic网络的输入是该智能体的历史观测信息,中心化信息,所有智能体的动作,很明显,通过这种方式设计的critic网络只需要一个就够了,用来评估所有智能体联结动作的价值,但是此时的动作空间很大,评估很困难,那应该怎么设计呢?看下图:
在这里插入图片描述
我们现在假设每一个智能体有一个critic网络,该网络的输入是智能体i的历史观测信息、中心化信息、其余智能体的动作,输出是该智能体每一个动作的价值,这种结构的网络可以很好的避免动作组合空间维度过高的问题,他的更新和前面的公式类似。

反事实的动作价值估计(Counterfactual action-value estimation)

思考这样一个问题,在前面我们已经提到,critic可以用来估计状态值函数,我们想想此时的网络输入和输出分别是什么?对于智能体i,其critic网络的输入是该智能体的观测历史,历史中心化信息,网络输出是此时的状态价值函数。我们后面还用critic来估计网络的动作价值函数,我们再来看看此时的网络输入和输出分别是什么,网络的输入是智能体的观测历史,历史中心化信息以及其他智能体的动作,网络的输出是智能体i的每一个动作的预期价值。很明显,训练前者要更加简单,那为什么我们还要去训练一个动作价值函数呢?接下来,我们回答这个问题。
注意:估计出的价值函数,也可以评估该状态下对某个动作的偏好
其中一个好处是可以利用动作价值函数解决信用分配问题,用到的概念是差分奖励的形式,利用了一种反事实的想法:如果采用了默认操作,我会受到哪种奖励?可以用下面的公式来表示这种差分奖励的形式:
d i = R i ( s , < a i , a − i > ) − R i ( s , < a ^ i , a − i > ) d_i = R_i(s,<a_i,a_{-i}>)-R_i(s,<\hat a_i,a_{-i}>) di=Ri(s,<ai,ai>)Ri(s,<a^i,ai>)
这种差分奖励的形式可以用来比较在其他智能体动作不变的情况下,我如果不采取现在的动作,而是用默认的动作,会有怎样的差异?这种形式反映了当前动作对奖励的一种贡献。
但是这样的差分奖励面临两个问题:

  • 默认的动作如何选取?
  • 计算奖励需要奖励估计函数?

这里的第一个问题可以使用贵族效用的方式来解决,这里我们不采用默认动作,我们以当前策略下采取的动作得到的奖励的均值来作为后面一项。评估这里的奖励函数可能需要用网络来进行估计。
现在我们来介绍基于这样的想法设计的反事实多智能体策略梯度算法COMA,该策略通过下面的公式计算来计算智能体i在当前策略下采取动作ai的优势:
在这里插入图片描述
注意这里的后面一项,这里的 a − i a_{-i} ai被固定,其余的形式和多智能体策略梯度定理一样,只不过前面的值换成这里的优势函数。

这里需要对反事实基线和状态价值函数进行比较:其实可以发现,上面的公式和我们前面遇到的SAC中优势的计算公式很相似,不同点在于后面一项中,反事实基线的计算是通过固定其他智能体的动作,当前智能体以当前策略评估自己在其他智能体固定动作下采用的动作的平均价值。前面一项表示了实际采用的动作,那么这样一项就表示了当前智能体在其他智能体此时动作下,采取的实际动作的优势。
现在我们再来看状态价值函数,首先状态价值函数是一个很广的概念,如果应用在多智能体中,可以发现,很难在其他智能体动作固定的情况下,评估该智能体当前动作的偏好。

具有中心化动作价值估计的均衡选择(Equilibrium Selection)

这一节开始之前,我们先来回顾两个概念,纳什均衡和帕累托最优,纳什均衡指的是多个智能体的一种策略稳定状态,在该策略组合下,任意一个智能体改变自己的策略,都不会让自己的收益变高,纳什均衡一般在非合作场景下使用。帕累托最优强调整体效率,算是一种分配,如果想让某个智能体的收益变高,就不得不让其他智能体的收益变低
本节从一个例子出发进行讲解,请看下图的例子:
在这里插入图片描述
在上面的例子中,两个智能体有两个可选动作分别是A和B,这里存在两个纳什均衡状态分别是(A,A)和(B,B),在存在多个纳什均衡的时候,学习主体偏好风险较低的行为而达到收益较低的纳什均衡,比如上图的例子:假设这两个智能体都按照0.5的概率来选择动作,对于智能体1:选择动作A的平均回报是:2,选择动作B的平均回报是2.5,所以在应用策略梯度定理的时候,选择动作B的概率将会增大,从而实现正循环,第二个智能体也同理,所以最后二者收敛到(B,B)这个纳什均衡,但是存在更优的解。
如果在做出动作的时候考虑其他智能体的动作,就会做出最优选择,如图智能体i在更新自己的策略参数的时候,如果这里的偏好通过下式计算,就能收敛到帕累托最优,因为是在无冲突环境中,其他智能体的策略通过下式来得出:
在这里插入图片描述
在这里插入图片描述
然而,随着智能体数量的增加,上面这一步很难完成,这也是帕累托AC面临的问题。
所以可以看到,采用中心化的动作价值函数可以帮助多智能体系统提升性能,指导多智能体策略更新向着最优的均衡方向

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

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

相关文章

力扣:数组篇

1、数组理论基础 数组是存放在连续内存空间上的相同类型数据的集合。 需要两点注意的是 数组下标都是从0开始的。数组内存空间的地址是连续的 因为数组的在内存空间的地址是连续的&#xff0c;所以我们在删除或者增添元素的时候&#xff0c;就难免要移动其他元素的地址。 …

LLM之RAG实战(二十九)| 探索RAG PDF解析

对于RAG来说&#xff0c;从文档中提取信息是一种不可避免的场景&#xff0c;确保从源文件中提取出有效的内容对于提高最终输出的质量至关重要。 文件解析过程在RAG中的位置如图1所示&#xff1a; 在实际工作中&#xff0c;非结构化数据比结构化数据丰富得多。如果这些海量数据无…

免费视频背景素材下载

找免费视频素材、背景就上这6个网站&#xff0c;高质量&#xff0c;无版权可商用。 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 菜鸟图库虽然是个设计素材网站&#xff0c;但除了设计类素材之外还有很多视频、音频、办公类等素材&#xff0c;视频素材就有上…

课堂行为动作识别数据集

一共8884张图片 xml .txt格式都有 Yolo可直接训练 已跑通 动作类别一共8类。 全部为教室监控真实照片&#xff0c;没有网络爬虫滥竽充数的图片&#xff0c;可直接用来训练。以上图片均一一手工标注&#xff0c;标签格式为VOC格式。适用于YOLO算法、SSD算法等各种目标检测算法…

自主通用多物理场仿真PaaS平台伏图(Simdroid)及伏图电子散热模块上架华为云商店

随着云计算、大数据等前沿技术的蓬勃发展&#xff0c;国内制造业正面临智能制造转型升级的机遇与挑战。工业软件是制造业研发创新不可或缺的核心工具&#xff0c;《“十四五”智能制造发展规划》中明确了工业软件对于智能制造的核心支撑作用&#xff0c;着重提出加强关键核心技…

DevOps方案中10款最佳开源监控工具

DevOps方案中10款最佳开源监控工具 2024年,监视对现代DevOps团队的工作至关重要。DevOps团队需要可靠且灵活的工具,以有效监视和管理复杂系统,这些系统可以提供有关系统性能、可用性和安全性的实时见解。 开源监控工具由于其成本效益、灵活性和社区支持而日益受到青睐。 …

MySQL教程-SQL

SQL(Structured Query Language)结构化查询语言&#xff0c;操作关系型数据库的编程语言&#xff0c;定义了一套操作关系型数据库统一标准。 语法 SQL语句可以单行或多行书写&#xff0c;以;为结束标记SQL可以使用空格或缩进来增强语句的可读性SQL分单行注释(-- 注释内容 或 …

景略JL5104-N048C 可P2P代替RTL8304MB

话不多说&#xff0c;直接上参数&#xff0c;可免费申请样片上机测试。 JL5104是一个带有RMIl接口的4端口快速以太网交换机。 它支持四级优先级队列的QoS功能&#xff0c;保证了一些实时网络应用的性能。 JL5104集成了一个2k入口地址查找表和一个4路关联散列算法&#xff0c;该…

ios xcode 15 PrivacyInfo.xcprivacy 隐私清单 查询应用使用的隐私api

1.需要升级mac os系统到13 兼容 xcode 15.1 2.升级mac os系统到14 兼容 xcode 15.3 3.选择 New File 4.直接搜索 privacy 能看到有个App Privacy 5.右击Add Row 7.直接选 Label Types 8.选中继续添加就能添加你的隐私清单了 苹果官网文档

稀碎从零算法笔记Day15-LeetCode:判断子序列

跑样例的时候LC炸了&#xff0c;以为今天回断更 题型&#xff1a;字符串、双指针 链接&#xff1a;392. 判断子序列 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述&#xff08;此题建议结合样例理解&#xff09; 给定字符串 s 和 t &#xf…

鸿蒙Socket通信示例(TCP通信)

前言 DevEco Studio版本&#xff1a;4.0.0.600 参考链接&#xff1a;OpenHarmony Socket 效果 TCPSocket 1、bind绑定本地IP地址 private bindTcpSocket() {let localAddress resolveIP(wifi.getIpInfo().ipAddress)console.info("111111111 localAddress: " …

性能测试总结 —— 测试流程篇!

本文主要介绍下性能测试的基本流程&#xff0c;性能测试从实际执行层面来看&#xff0c;测试的过程一般分为这么几个阶段&#xff0c;如下图&#xff1a;       下面分别介绍下每个阶段具体需要做什么&#xff1a; 一、性能需求分析&#xff1a; 性能需求分析是整个性能…

【PLC】现场总线和工业以太网汇总

1、 现场总线 1.1 什么是现场总线 1&#xff09;非专业描述&#xff1a; 如下图&#xff1a;“人机界面”一般通过以太网连接“控制器(PLC)”&#xff0c;“控制器(PLC)”通过 “现场总线”和现场设备连接。 2&#xff09;专业描述&#xff08;维基百科&#xff09; 现场总线…

MTK安卓开发板_联发科开发板评估套件_安卓主板硬件开发

在介绍开发板之前&#xff0c;让我们先来区分一下核心板和开发板的区别。核心板是一种集成度高、功能完整的计算模块&#xff0c;搭载系统&#xff0c;简化了外围接口&#xff0c;体积尺寸相对较小&#xff0c;主要适用于嵌入式系统。而开发板由核心板底板组成&#xff0c;提供…

探索直播美颜SDK的未来发展方向:虚拟现实、增强现实与混合

如今&#xff0c;随着虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;和混合现实&#xff08;MR&#xff09;等技术的不断发展&#xff0c;直播美颜SDK的未来发展方向也将面临着更多的可能性和挑战。今天我将与大家共同探讨直播美颜SDK在虚拟现实、增…

国科大网络行为学导论代码作业--更新中

一、Xray安装 参考自&#xff1a;Xray的安装与使用&#xff08;超详细&#xff09;_xray使用教程-CSDN博客 下载网址&#xff1a;Releases chaitin/xray GitHub 解压 双击安装 生成证书 cd到xray目录&#xff0c;生成证书 复制链接 然后cd到xray目录 .\xray_windows_amd6…

Ubuntu 14.04:PaddleOCR基于PaddleHub Serving的服务部署(失败)

目录 一、为什么使用一键服务部署 二、安装 paddlehub 1.8 2.1 安装前的环境准备 2.2 安装paddlehub 1.8 2.2.1 安装paddlehub 2.2.2 检测安装是否成功 2.2.3 检查本地与远端PaddleHub-Server的连接状态 2.2.4 测试使用 2.3 其他 2.3.1 如何卸载、pip常用命令、常见…

WRF模型运行教程(ububtu系统)--II.ARWpost安装

一、ARWpost简介 ARWpost 是一个把 WRF 结果转为 GrADS 或 Vis5D 可以辨识的数据格式的软件&#xff0c;就是WRF运行结束以后&#xff0c;把WRF的结果变成咱们平时比较常用的数据格式。 二、下载和安装ARWpos_V3 1.ARWpos_V3安装前准备 # 进入Build_WRF文件夹 cd Build_WRF …

代码随想录刷题笔记-Day33

1. 跳跃游戏 55. 跳跃游戏https://leetcode.cn/problems/jump-game/ 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 tru…

【海贼王的数据航海】排序——概念|直接插入排序|希尔排序

目录 1 -> 排序的概念及其运用 1.1 -> 排序的概念 1.2 -> 常见的排序算法 2 -> 插入排序 2.1 -> 基本思想 2.2 -> 直接插入排序 2.2.1 -> 代码实现 2.3 -> 希尔排序(缩小增量排序) 2.3.1 -> 代码实现 1 -> 排序的概念及其运用 1.1 -&g…