Dynamic Potential-Based Reward Shaping将势能塑形奖励函数拓展为F(s,t,s‘,t‘)

news2024/11/22 20:56:06

摘要

基于势能的奖励塑形可以显著降低学习最优策略所需的时间,并且在多agent系统中,可以显著提高最终联合策略的性能。已经证明,它不会改变一个agent单独学习的最优策略或多个agent一起学习的纳什均衡。

------然而,现有证明的一个局限性是假设状态的势能在学习期间不会动态变化。这种假设经常被打破,特别是如果奖励塑形函数是自动生成的

------在本文中,我们证明并演示了一种扩展基于势能的奖励塑形的方法,以允许动态塑形,并在单agent情况下保持策略不变性,在多agent情况下维持一致的纳什均衡

1. INTRODUCTION

------强化学习agent通常在没有先验知识的情况下实现,然而已经反复表明,向agent通知启发式知识可能是有益的[2,7,13,14,17,19]。这种先验知识可以被编码到agent的初始 Q − v a l u e Q-value Qvalue或奖励函数中。如果通过一个势能函数来实现,则两者可以等价[23]。

------最初,基于势能的奖励塑形被证明不会改变单个agent的最优策略,该agent提供了仅基于状态的静态势能函数[15]。对该方法的持续兴趣已经扩展了其能力,以在势能基于状态和动作[24]或agent不是单独的,而是在与其他塑形或非塑形agent共同的环境中发挥作用[8]时提供类似的保证。

------然而,所有现有的证明都假定静态势能函数。静态势能函数表示静态知识,因此,在agent学习时不能在线更新

------尽管理论结果存在这些局限性,但经验工作已经证明了动态势能函数的有用性[10,11,12,13]。在应用基于势能的奖励塑形时,一个常见的挑战是如何设置势能函数。使用动态势能函数的现有工作使这个过程自动化,使方法更容易被所有人访问

------一些(但不是所有)预先存在的实现(implementations)强制要求其势能函数在agent之前稳定。这一特征可能是基于直觉的论点,即在奖励函数这样做之前,agent无法收敛[12]。然而,正如我们将在本文中所展示的,尽管存在额外的动态奖励,但只要它们是给定的形式,agent就可以收敛。

------我们的贡献是证明动态势能函数如何不改变单agent问题域的最优策略或多agent系统(MAS)的纳什均衡。该工作证明了动态势能函数的现有使用是合理的,并解释了在从未保证额外奖励收敛的情况下,agent如何仍然收敛[10]。

------此外,我们还将证明,通过允许状态的势能随时间变化,基于动态势能的奖励塑形并不等同于Q表初始化。相反,它是一个独特的工具,对于希望持续影响agent探索的开发人员非常有用,同时保证不会改变agent或团队的目标。

------在下一节中,我们将介绍所有相关的背景材料。在第3节中,我们提出了两个关于动态势能函数对基于势的奖励塑形中现有结果的影响的证明。随后,在第4节中,我们通过在单agent和多agent问题域中实证证明动态势能函数来阐明我们的观点。论文最后总结了论文的主要结果。

2. PRELIMINARIES

在本节中,我们将介绍本文所基于的所有相关现有工作。

2.1 Reinforcement Learning

------强化学习是一种范式,它允许agent从与环境的互动中通过奖励和惩罚进行学习[21]。从环境接收的数字反馈用于改进agent的动作。强化学习领域的大部分工作将马尔可夫决策过程(MDP)作为数学模型[16]。

------MDP是一个元组< S , A , T , R S,A,T,R S,A,T,R>,其中 s s s是状态空间, a a a是动作空间, T ( s , a , s ′ ) = P r ( s ′ ∣ s , a ) T(s,a,s^′)=Pr(s^′|s,a) T(s,a,s)=Pr(ss,a)是状态 s s s中的动作 a a a将导致状态s′的概率, R ( s , a , s ′ ) R(s,a,s^′) R(s,a,s)是当状态 s s s中采取的动作 a a a导致状态 s ′ s′ s转换时收到的立即奖励 r r r解决MDP的问题是找到一个策略(即,从状态到动作的映射)使累积的奖励最大化。当环境动力学(environment dynamics)(转移概率和奖励函数)可用时,可以使用策略迭代来解决此任务[3]。

------当环境动态不可用时,与大多数实际问题领域一样,策略迭代无法使用。然而,迭代方法的概念仍然是大多数强化学习算法的主干。这些算法应用所谓的时间差更新来传播关于状态值 V ( s ) V(s) V(s)或状态-动作对 Q ( s , a ) Q(s,a) Q(s,a)的信息[20]。这些更新基于特定状态或状态-动作值的两个时间上不同的估计的差异。 Q − l e a r n i n g Q-learning Qlearning算法就是这样一种方法[21]。每次转换后, ( s , a ) → ( s ′ , r ) (s,a)→(s^′,r) (s,a)(s,r),在环境中,它通过以下公式更新状态动作值:
在这里插入图片描述

------其中, α α α是学习率, γ γ γ是折扣系数。它修改了状态 s s s中采取动作 a a a的值,当执行该动作后,环境返回奖励 r r r,并移动到新的状态 s ′ s^′ s

------假设每个状态-动作对经历无限次,则奖励是有界的,并且agent的探索和学习率降低到零,Q-learning agent的值表将收敛到最优值 Q ∗ Q^∗ Q [22].
2.1.1 Multi-Agent Reinforcement Learning
------强化学习在MAS(多智能体系统)中的应用通常采用两种方法之一;多个agent学习器或联合动作学习器[6]。后者是一组多agent特定算法,旨在考虑其他agent的存在。前者是部署多个agent,每个agent使用单个agent强化学习算法。

------多个agent学习器假设任何其他agent都是环境的一部分,因此,当其他人同时学习时,环境似乎是动态的,因为在状态 s s s中采取行动a时,随着时间的推移,转变的概率会发生变化。为了克服动态环境的出现,开发了联合动作学习器,扩展了他们的价值函数,以考虑每个状态下所有agent的每个可能行动组合的价值。

------然而,通过联合行动学习打破了MAS的一个基本概念,即每个agent都是自我激励的,因此可能不同意广播他们的行动选择。此外,考虑联合作用会导致必须在向系统中添加每个附加agent时计算的值的数量呈指数增长。出于这些原因,这项工作将侧重于多个个体学习器,而不是联合行动学习器。然而,这些证明可以扩展到涵盖联合行动学习器。

------与目标是最大化个人奖励的单一agent强化学习不同,当部署多个自我激励的agent时,并非所有agent都能获得他们的最大奖励。相反,必须做出一些妥协,通常该系统旨在收敛到纳什均衡[18]。

------为了对MAS进行建模,单agent MDP变得不充分,而需要更一般的随机博弈(SG)[5]。n个agent的SG是一个元组< S , A 1 , . . . , A n ; T , R 1 , . . . , R n S,A_1,...,A_n;T,R_1,...,R_n S,A1,...,An;T,R1,...,Rn> ,其中 S S S是状态空间, a i a_i ai a g e n t i agent_i agenti的动作空间, T ( s , a i , . . . n , s ′ ) = P r ( s ′ ∣ s , a i , . . . n ) T(s,a_{i,...n},s')=Pr(s'|s,a_{i,...n}) T(s,ai,...n,s)=Pr(ss,ai,...n)是状态 s s s中的联合动作 a i , . . . n a_{i,...n} ai,...n将导致状态 s ′ s^′ s的概率, R i ( s , a i , s ′ ) R_i(s,a_i,s^′) Ri(s,ai,s) a g e n t i agent_i agenti在状态 s s s中采取动作 a i a_i ai导致向状态 s ′ s^′ s过渡时收到的即时奖励[9]。
------通常,强化学习agent,无论是单独部署还是共享环境,都是在没有事先知识的情况下部署的。假设开发人员不知道agent的行为。然而,通常情况并非如此,agent可以从开发人员对问题领域的理解中受益。

------向强化学习传授知识的一个常见方法是奖励塑形,我们将在下一小节更详细地讨论这个话题。

2.2 Reward Shaping

------奖励塑形的想法是提供一个代表先验知识的额外奖励,以减少次优动作的数量,从而减少学习所需的时间[15,17]。这个概念可以用 Q − l e a r n i n g Q-learning Qlearning算法的以下公式表示:
在这里插入图片描述
------其中 F ( s , s ′ ) F(s,s^′) F(s,s)是任何基于状态的塑形奖励的一般形式

------尽管奖励塑形在许多实验中都很强大,但很快就发现,如果使用不当,它会改变最佳策略[17]。为了解决这些问题,提出了基于势能的奖励塑形[15],作为在源状态 s s s和目标状态 s ′ s^′ s上定义的某些势能函数 Φ Φ Φ的差:
在这里插入图片描述
------其中 γ γ γ 必须是agent更新规则中使用的相同折扣因子(参见方程1)。

------Ng等人[15]证明,根据等式3定义的基于势能的奖励塑形保证了学习策略,该策略等同于在无限和有限范围MDP中学习的没有奖励塑形的策略。Wiewiora[23]后来证明,当使用相同的势能函数初始化后一个agent的价值函数时,具有基于势能的奖励塑形和没有基于知识的Q-table初始化的agent学习将与没有奖励塑形的agent行为相同。

-------这些证明,以及关于基于势能的奖励塑形的所有后续证明,包括本文中提出的证明,需要通过基于优势的策略来选择行动[23]。基于优势的策略根据其价值的相对差异而非其确切价值来选择动作。常见的例子包括贪婪、ǫ-贪婪和Boltzmann soft-max。

  1. 2.2.1 Reward Shaping in Multi-Agent Systems

------已经证明,在多agent强化学习中,引入启发式知识也是有益的[2,13,14,19]。然而,这些示例中的一些没有使用基于势的函数来塑形奖励[14,19],因此,可能会因引入有益的循环策略而受到影响,从而导致收敛到先前在单个agent问题域中所证明的非预期行为[17]。

-------其余基于势能的应用[2,13]表明,收敛到更高值纳什均衡的概率增加。然而,这两个应用都没有考虑保证策略不变性的证明是否适用于多agent强化学习。

------从这一次开始,理论结果[8]表明,虽然Wiewiora对Q表初始化的等价性证明[23]也适用于多agent强化学习,但Ng的策略不变性证明[15]并不适用。基于多agent势能的奖励塑形可以改变一组agent将学习的最终策略,但不会改变系统的纳什均衡。

  1. 2.2.2 Dynamic Reward Shaping

------奖励塑形通常是使用领域特定的启发式知识[2,7,17]针对每个新环境定制实现的,但已经进行了一些尝试来将[10,11,12,13]知识编码自动化为塑形奖励函数。

------所有这些现有方法都会在agent学习时改变在线状态的势能。现有的单agent[15]和多agent[8]都没有证明理论结果考虑这种动态塑形

------然而,已经发表了一种观点,即势能函数必须在agent能够收敛之前收敛[12]。在大多数实现中,这种方法已被应用[11,12,13],但在其他实现中,稳定性从未得到保证[10]。在这种情况下,尽管有共同的直觉,agent仍然被视为收敛到最优策略。

------因此,与现有观点相反,尽管奖励不断变化,agent的策略仍有可能趋同。在下一节中,我们将证明这是如何实现的。

3. THEORY

------在本节中,我们将讨论动态势能函数对基于势的奖励塑形中三个最重要的现有证明的影响。具体而言,在第3.1小节中,我们讨论了单agent问题域中策略不变性的理论保证[15]和多agent问题域的一致纳什均衡[8]。稍后,在第3.2小节中,我们将讨论Wiewiora对Q表初始化的等价证明[23]。

3.1 基于动态势能的奖励塑形可以维持现有的保证

------为了扩展基于势能的奖励塑形以允许动态势能函数,我们扩展方程3以使用时间作为势能函数Φ的参数。非正式地,如果势能差是根据访问时的状态势能计算的,则策略不变或一致纳什均衡的保证仍然存在。正式地:
在这里插入图片描述
在这里插入图片描述
------其中 t t t是agent到达前一状态s的时间, t ′ t^′ t是到达当前状态 s ′ s^′ s时的当前时间(即t<t′)。

------为了证明单agent情况下的策略不变性和多agent情况中的一致纳什均衡,足以证明塑形agent在遵循固定的状态和动作序列时将获得的回报等于非塑形agent遵循相同序列时将收到的回报减去序列中第一个状态的可能性[1,8]。

------因此,让我们考虑任意agenti在没有塑形的情况下在折扣框架中经历序列 s ˉ \bar{s} sˉ时的返回Ui。正式地:
在这里插入图片描述
------其中 r j , i r_{j,i} rj,i a g e n t i agent_i agenti在时间 j j j从环境接收的奖励。给定此返回定义,真实 Q Q Q值可通过以下公式正式定义:
在这里插入图片描述
------现在考虑相同的agent,但通过添加等式4中给出的形式的基于动态势能的奖励函数来修改奖励函数。经历相同序列 s ˉ \bar{s} sˉ的塑形agent U i , Φ U_{i,Φ} Ui,Φ的回报为:
在这里插入图片描述
------然后把6和7结合起来,我们知道塑形的 Q Q Q 函数是:
在这里插入图片描述
------其中t是当前时间。

------由于原始Q值和塑形Q值之间的差异不取决于所采取的动作,因此在任何给定状态下,无论塑形如何,最佳(或最佳响应)动作都保持恒定。因此,我们可以得出结论,策略不变性和一致纳什均衡的保证仍然存在。

3.2 基于动态势的奖励塑形与 Q 表初始化不等价

------在单agent[23]和多agent[8]强化学习中,具有静态势能函数的基于势能的奖励塑形等同于初始化agent的Q table,从而:
在这里插入图片描述
------其中 Φ ( ⋅ ) Φ(·) Φ()是与塑形agent使用的势能函数相同的势能函数。

------然而,对于动态势能函数,这个结果不再成立。证明要求具有基于势能的奖励塑形的agent和具有上述 Q Q Q表初始化的agent在提供相同的状态、行动和奖励历史的情况下,在其下一个行动中具有相同的概率分布。

------如果在实验之前用状态的势能( Φ ( s , t ′ ) Φ(s,t') Φ(st))初始化Q表,那么在初始化的试剂中不考虑势能的任何未来变化。因此,在agent经历了一种状态,其中塑形agent的势能函数发生了变化,他们可能会做出不同的后续行动选择。

------形式上,这可以通过考虑接收基于动态势的奖励塑形的agent L L L和不接收但如等式9所示初始化的agent L ′ L^′ L来证明。Agent L L L将通过以下规则更新其Q值:
在这里插入图片描述
其中, ∆ Q ( s , a ) = α δ Q ( s , a ) ∆Q(s, a) = αδQ(s, a) Q(s,a)=αδQ(s,a) Q Q Q值更新的量。
Agent L L L 的当前 Q Q Q 值可以正式表示为初始值加上变化,因为:
在这里插入图片描述
其中 Q ′ ( s , a ) Q′(s,a) Q(sa)是状态-动作对 ( s , a ) (s,a) (sa)的初始 Q Q Q值。类似地,agent L ′ L^′ L通过以下规则更新其Q值:
在这里插入图片描述
------其中 Φ ( s , t 0 ) Φ (s,t_0) Φ(s,t0)是学习开始前状态 s s s 的势能。

------为了使两个agent行为相同,他们必须通过 Q Q Q值的相对差而不是绝对大小来选择其行为,并且两个agent的行为的相对顺序必须保持相同。正式地:
在这里插入图片描述
------在基本情况下,这仍然是正确的,因为 ∆ Q ( s , a ) ∆Q(s,a) Q(s,a) ∆ ∆ 在采取任何行动之前, Q ′ ( s , a ) Q^′(s,a) Q(s,a)等于零,但在这之后,动态势能函数的证明就不成立了。
------具体地,当agent首次转换到势能已改变的状态时,agent L L L将通过以下方式更新 Q ( s , a ) Q(s,a) Q(s,a)
在这里插入图片描述
在这里插入图片描述
------一旦发生这种情况,状态s的agent L和agent L′之间的Q值差将不再在所有行动中保持恒定。如果这种差足以改变行动的顺序(即方程14被打破),那么任何理性agent的策略在状态s中的后续行动选择上都将具有不同的概率分布。

------在单agent问题域中,如果满足标准的必要条件,则排序的差异将仅是暂时的,因为用静态势能函数初始化的agent和/或接收基于动态势的奖励塑形的agent将收敛到最优策略。在这些情况下,暂时的差异只会影响agent的探索,而不会影响他们的目标。

------在多agent的情况下,如前所示[8],改变的探索可以改变最终的联合策略,因此,不同的排序可能会保持不变。然而,正如我们在上一小节中所证明的,这并不意味着agent的目标发生了变化。

------在这两种情况下,我们已经展示了在相同的经历之后,如等式9中初始化的agent如何与接收基于动态势能的奖励塑形的agent行为不同。这是因为给状态的初始值不能捕捉其潜在的后续变化。

------或者,初始化的药剂可以在每次电位变化时重置其Q表,以反映塑形药剂的变化。然而,这种方法将由于经历而丢失所有更新历史,因此再次导致塑形agent和初始化agent之间的行为差异。

------此外,该方法和其他类似的尝试在agent开始学习后整合潜在变化的方法也不再是严格的Q表初始化。

因此,我们得出结论,没有一种初始化agent的Q表的方法来保证与接受基于动态势能的奖励塑形的agent的行为等效。

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

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

相关文章

正厚软件-软件测试用例设计方法之二-边界值

正厚软件-刘老师的干货分享 上一课我们学习测试用例的等价类划分法&#xff0c;今天我们看下边界值法。 一、方法简介 1、定义&#xff1a;边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充。 2、边界值与等价类…

Linux零拷贝原理学习

文章目录一、为什么要有 DMA 技术?二、传统的文件传输有多糟糕&#xff1f;三、如何优化文件传输的性能&#xff1f;四、 如何实现零拷贝&#xff1f;mmap writesendfile使用零拷贝技术的项目五、PageCache 有什么作用&#xff1f;六、大文件传输用什么方式实现&#xff1f;一…

c++动态创建二维数组和释放

动态创建二维数组和释放 文章目录创建参考博客&#x1f60a;点此到文末惊喜↩︎ 创建 指针数组的方式 使用malloc和free可以兼容c相比于使用STL可以更加灵活但是debug可能数组显示不全 // 初始化int **arr;int row 5;//用于表示行数int col 5;//用于表示列数arr new int…

网站升级HTTPS教程

现在越来越多的网站开始使用https协议&#xff0c;其实百度从2014年底就已经开始支持https了&#xff0c;并且据说在排名上&#xff0c;同权重的网站&#xff0c;开启https会优待提升排名。先不管排不排名吧&#xff0c;https是一种更安全更先进的技术。作为互联网的弄潮儿&…

MPU9250数据转换

MPU9250数据转换1. MPU92501.1 MPU9250介绍2. 数据转换2.1 陀螺仪数据转换2.2 加速度数据转换1. MPU9250 1.1 MPU9250介绍 1&#xff09;MPU9250 内部集成有 3 轴陀螺仪、3 轴加速度计和 3 轴磁力计 2&#xff09;输出&#xff1a; 16 位的数字量; 3&#xff09; 通过集成电路…

MCE | 免疫检查点大组团

提到免疫&#xff0c;总会让人联想到由免疫失调引起的疾病&#xff0c;例如病毒感染&#xff0c;自身免疫病类风湿性关节炎&#xff0c;癌症等。实际上&#xff0c;机体的免疫应答受到严格的调控&#xff0c;并存在多种机制预防对自身蛋白的免疫反应。在过去的 20 年中&#xf…

3.2、封装成帧

3.2、封装成帧 3.2.1、封装成帧 数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧 在帧头和帧尾中包含有重要的控制信息 数据链路层将上层交付下来的协议数据单元封装成帧后&#xff0c;通过物理层将构成帧的各比特转换成电信号发送到传输媒体 那么接收方的数据…

dreamweaver作业静态HTML网页设计——摩尔庄园7页HTML+CSS+JS DW大学生网页作业制作设计 Dreamweaver简单网页

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

15_移动端项目或者前后端分离项目接口规范

15_移动端项目或者前后端分离项目接口规范写在前面的话&#xff0c;主要是谈谈接口 随着前后端的分离&#xff0c;后端工程师不需要编写页面&#xff0c;甚至不需要编写JavaScript代码&#xff0c;只需要提供接口给前端工程师即可&#xff0c;可是就是仅仅一个接口&#xff0c…

mybatis-plus自带的乐观锁

文章目录1.场景1.1.模拟冲突2.添加乐观锁2.1数据库添加字段2.2配置文件中增加乐观锁拦截器2.3类的属性上添加注解2.4再次运行测试文件3.优化流程mysbatis-plus乐观锁原理&#xff1a;mysbatis-plus进行修改操作时&#xff0c;会将数据库中version字段的值拿出来和上一个查询时的…

大一学生WEB前端静态网页——旅游网页设计与实现-张家口 6页

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 游景点介绍 | 旅游风景区 | 家乡介绍 | 等网站的设计与制作| HTML期末大学生网页设计作业 HTML&#xff1a;结构 CSS&#xff1a;样式 在操作方面上运…

【电力负荷预测】模拟退火算法结合狮群算法优化Elman神经网络电力负荷预测【含Matlab源码 1454期】

⛄一、模拟退火算法简介 1 引言 模拟退火算法(Simulated Annealing&#xff0c;SA)的思想最早由Metropolis等人于1953年提出&#xff1a;Kirkpatrick于1983年第一次使用模拟退火算法求解组合最优化问题[1] 。模拟退火算法是一种基于MonteCarlo迭代求解策略的随机寻优算法&…

图文详解Linux基础经典教程(09)——部署项目至CentOS

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 概述 在之前的操作里&#xff0c;我们在CentOS中安装了JDK、Tomcat、MySQL。接下来&#xff0c;我们需要将JavaWeb项目部署至CentOS。 项目开发 请在IDEA中开发JavaWeb项…

SpringBoot SpringBoot 开发实用篇 6 监控 6.3 actuator

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇6 监控6.3 actuator6.3.1 actuator6.3.2 监控原理6.3.3 小结6 监控 …

Win10下安装CARLA

在仿真环境中要使用lidar进行测试&#xff0c;目前prescan和matlab的lidar扫描方式无法设置&#xff0c;而CARLA中lidar是机械扫描形式&#xff0c;符合需求故选择该软件&#xff0c;只是测试不想重装系统&#xff0c;便在win10下进行安装测试。 1. 安装前需要安装的软件 1. …

小白必看 最核心的5大TikTok视频营销策略(附赠工具)

数据显示&#xff0c;TikTok的用户月人均使用时长达到了每月23.6小时&#xff0c;超过了YouTube的23.2小时。TikTok的用户支出在2022年第一季度达到了8.4亿美元&#xff0c;迄今为止其用户支出总额已超过46亿美元。可见&#xff0c;Tiktok是目前发展相对较好的的短视频社交媒体…

网页JS自动化脚本(一)安装油猴或暴力猴等脚本管理器并新建脚本

在我们的工作生活当中使用网页的机会越来越高,很多时候要进行重复的操作,所以进行一些JS脚本就成了可选项首先我们要在网页浏览器中安装上脚本管理器,这里示范的是安装暴力猴,是一个开源的免费的小软件,是在github上的一款软件,下载下来之后名称为Violentmonkey_2.13.0_chrome.…

Node与浏览器平台下的Event loop

Event loop 浏览器中的Event loop 浏览器平台下一共有两个任务队列&#xff0c;一个是宏任务一个是微任务。 从上至下执行所有的同步代码执行过程中将遇到的宏任务与微任务添加至相应的队列同步代码执行完毕后&#xff0c;执行满足条件的微任务回调微任务队列执行完毕后执行…

C# 加解密之AES

从这一篇开始呢&#xff0c;写一下常用的一些加解密方式。一般我们来说呢&#xff0c;对于加密&#xff0c;我们分为可逆和不可逆。可逆加密又可分为对称加密&#xff08;AES、DES等&#xff09;和非对称加密&#xff08;RSA&#xff09;&#xff0c;还有就是一些编码加密等&am…

适用于C/C++开发人员的HOOPS

1.编译和运行时信息 1.1编制和执行 编译和运行基于C的应用程序需要以下步骤&#xff1a; 编译&#xff1a; 所有3DGS应用: hoops.lib 使用HOOPS/MVO的应用: hoops_mvo.lib 使用HOOPS/Stream的应用: hoops_stream.lib 执行&#xff1a;确保以下本地DLL位于应用程序的目录或…