强化学习泛化性 综述论文阅读 A SURVEY OF GENERALISATION IN DEEP REINFORCEMENT LEARNING

news2024/11/27 16:34:50

强化学习泛化性 综述论文阅读

  • 摘要
  • 一、介绍
  • 二、相关工作:强化学习子领域的survey
  • 三、强化学习中的泛化的形式
    • 3.1 监督学习中泛化性
    • 3.2 强化学习泛化性背景
    • 3.3 上下文马尔可夫决策过程
    • 3.4 训练和测试上下文
    • 3.6 应用实例
    • 3.7 更可行泛化的其他假设
    • 3.8 备注和讨论
  • 4. 强化学习中的泛化基准
    • 4.1 环境
      • 4.1.1 泛化环境的分类
      • 4.1.2 环境趋势
    • 4.2 泛化评估协议
    • 4.3 讨论

摘要

DRL泛化研究目的是将算法部署在新未知环境中仍然具有很好的效果,而不只是在训练环境有较好的效果。

泛化性的研究是在现实场景中实现DRL部署的重要环节。因为在现实世界中,环境将是多样的、动态的和不可预测的。

这篇文章的工作:1. 定义了强化学习泛化性的形式化定义。 2. 对现有的通用化基准及解决通用化问题的方法进行分类。3. 对该领域的现状进行批判性讨论和展望。

其他观点:1. 采用纯程序性内容生成方法进行基准设计不利于通用化的进展,建议快速在线适应和解决RL特定问题,作为未来通用化方法工作的一些领域。 2. 建议在未充分探索的问题设置中构建基准,例如离线RL泛化和奖励函数变化。

一、介绍

  1. 强化学习可应用于自动驾驶、算法控制、机器人等,但实现需要在真实环境中使用,而真实环境又是复杂变化的。因此,RL算法需要对环境的变化具有鲁棒性,并且在部署过程中能够转移和适应不可见的(但类似的)环境。
  2. 当前RL研究主要在Atari和MuJoCo等基准上进行,它们在完全相同的环境下评估政策,与现实场景不匹配(下图左栏)。这与监督学习完全不同,监督学习分为训练集与测试集属于不同分布。因此RL可能会严重过拟合,即使稍微调整环境算法也无法获得好的效果(如改变随机种子)。
  3. 研究侧重于生成其策略具有所需鲁棒性、传递和自适应特性的算法,挑战训练和测试将是相同的基本假设(下图中和右栏)。
  4. 本文研究范围:zero-shot策略转移问题。这要求将训练好的策略迁移到新的环境中不能进行额外的训练,因此域自适应和许多元RL方法的含义方法是不适用的。
  5. 文章结构:第2节简述相关工作;第3节介绍RL及泛化性背景;第4节描述RL中通用化的当前基准,同时讨论了环境(4.1)和评估协议(4.2);第5节对工作产生方法进行了分类和描述,以解决普遍化问题;第6节对当前领域进行批判性讨论和展望;第7节总结了调查中的主要收获。
  6. 文章贡献:
    (1)提出了一种形式主义和术语描述RL泛化性问题。
    (2) 提出了一个可用于测试泛化性的基准分类,讨论分为分类环境和评估协议。总结PCG方法的缺点:完全PCG环境限制了在该环境下进行的研究的精度,建议未来的环境应使用PCG和可控变化因素的组合。
    (3)建议对现有方法进行分类,以解决各种泛化问题。进一步研究途径,包括快速在线适应、解决RL特定的泛化问题、新颖的架构、基于模型的RL和环境生成。
    (4) 给出展望,建立基准将使离线RL通用化和奖励功能变化取得进展。指出了几个值得探索的不同设置和评估指标:调查上下文效率和进行连续RL设置都是未来工作的必要领域。
    在这里插入图片描述
    (图中可见,经典RL侧重于训练和测试相同的环境(单例环境,第一列),但在现实世界中,训练和测试环境将不同,要么来自相同的分布(IID泛化环境,第二列),要么来自不同的分布(OOD泛化环境,第三列))

二、相关工作:强化学习子领域的survey

  1. 以往的survey工作包括:
    (1)持续强化学习(CRL):这与RL中的泛化密切相关,但未考虑zero-shot的特性。
    (2)鲁棒RL(RRL):聚焦于解决环境模型中最坏情况的效果,是泛化性的一个子领域。
    (3)sim-to-real:模拟到真实是泛化问题的具体实例,sim-to-real的一些方法依赖于来现实数据。
    (4)RL迁移学习(TRL):TRL与泛化相关,都假设策略在不同环境中训练,但TRL侧重于额外训练,这里侧重于zero-shot。
    (5)多任务深度RL
    (6)RL中的探索
    (7)RL中课程学习

三、强化学习中的泛化的形式

3.1 监督学习中泛化性

监督学习中,通常假设训练和测试数据集来自相同分布,其泛化性与测试效果相同。具有训练和测试数据Dtrain、Dtest和损失函数L的模型φ的监督学习中的广义差距定义为
在这里插入图片描述
对于泛化性的五种概括:
(1) 系统性:通过系统地重组已知的部分和规则来概括
(2) 生产力:将预测扩展到超出训练数据长度的能力
(3) 替代性:通过用同义词替换组件的能力来概括,
(4).局部性:如果模型合成操作是局部的,而不是全局的
(5) 过度概括:如果模型关注异常或对异常具有鲁棒性

3.2 强化学习泛化性背景

  1. RL中的标准形式是马尔可夫决策过程(MDP),MDP由元组M=(S,a,R,T,p)组成。
  2. POMDP是部分可观测马尔可夫决策过程,POMDP由一个元组M=(S,A,O,R,T,φ,p)组成,其中o是观测函数,φ是状态到观测的转移函数。

3.3 上下文马尔可夫决策过程

  1. 讨论泛化性需要一种方法谈论一系列任务、环境或级别。如OpenAI的Procgen,标准协议是在200个级别的固定集合上训练策略,然后评估级别的完整分布的性能。
  2. 为正式化任务集合的概念,这里从上下文马尔可夫决策过程(CMDP)开始。这里状态变为 s = ( c , s ′ ) ∈ S C s=(c,s^{'}) \in S_{C} s=(c,s)SC,其中 c c c是上下文信息, s ′ s^{'} s是基础状态。其中上下文 c c c代表种子、ID或参数向量这些决定任务的信息。因此在一个episode里 c c c不会发生变化,在不同的episode中 c c c才不同。CMDP是任务或环境的全部集合,在Procgen中,每个游戏都是一个单独的CMDP。
  3. 这里通常假设智能体无法观察到上下文信息c,因此将CMDP看作可以观察到状态s的POMDP。其中观测转移函数为: ϕ ( s ′ , c ) = s ′ \phi (s^{'},c) = s^{'} ϕ(s,c)=s
  4. 奖励函数、转移函数、初始状态分布和发射函数都将上下文作为输入,因此上下文决定了MDP。每个上下文MDP代表了一种任务的等级或类型。
  5. 一些MDP具有随机过渡或奖励功能,因此进行试验时需进行随机种子的设置,理论上讲这些种子可以被看作是上下文。但这里作者不认为它是上下文,这更紧密地映射到具有随机动力学的真实场景,在那里无法控制随机性。

3.4 训练和测试上下文

  1. 由于泛化性源自训练集和测试集的差异,因此需要指定一组训练和测试的上下文MDP(因为上下文决定MDP)。
  2. 划分训练集和测试集时,对于任意的CMDP: M = { S , A , R , T , C , p } M = \{S, A, R, T, C, p \} M={S,A,R,T,C,p}, 可以生成一个子集 C ′ ∈ C C^{'} \in C CC, 通过上下文子集划分训练和测试集。(如设置procgen的种子)。
  3. 训练:
    对于任何CMDP,其期望回报可设置为:
    在这里插入图片描述
    其中,R是策略奖励, p ( c ) p(c) p(c)是上下文分布。
    在上下文训练集中训练,上下文测试集中测试,目标就是在测试集中的表现:
    在这里插入图片描述
    如procgen中,使用200关作为训练集,使用全分布作为测试集,实现zero-shot的迁移。
  4. 与监督学习一样,可以将训练和测试效果之间的差距作为通用性的衡量标准:
    在这里插入图片描述
  5. 这种形式主义定义了一般化问题,每个问题都由CMDP、训练和测试上下文集的选择决定。

3.6 应用实例

  1. openai的procgen:游戏由不同层次组成,具有不同的布局或敌人数量,以及不同的视觉风格,不会影响动态或奖励功能。在这种环境中,上下文是一个随机种子,作为级别生成的输入。
  2. Sim-to-real:上下文集分为与模拟相对应的上下文和与现实相对应的上下文。环境决定了动力学、观察功能和状态空间。CMDP通常可以理解为两个CMDP的有效结合,一个用于现实,一个模拟,具有共享的行动空间和观察空间类型。领域随机化的动机是,在模拟中产生广泛的可能上下文将使上下文的测试分布更接近扩展的训练分布。
  3. 医疗保健:未来RL部署的一个有前途的领域,因为存在许多顺序决策问题。如,诊断和治疗单个患者的任务可以理解为CMDP,其中患者有效地指定了上下文:患者对测试和治疗的反应不同(动态变化),并可能提供不同的测量(状态变化)。上下文总是可以调节相关MDP函数以控制变化。假设某些部分的上下文(或关于上下文的某些信息)是可观察的,因为可以访问患者的病史和个人信息。
  4. 自动驾驶:在不同的地点(状态空间变化)、由于一天中的时间(观察功能变化)而在不同的天气和照明条件下以及在不同的路面上驾驶(动态变化)都是这些系统需要解决的问题。

3.7 更可行泛化的其他假设

仅使用CMDP结构假设难以给出泛化效果的理论保证。必须做出进一步的假设。这些是关于类型变化、训练和测试上下文集的分布或上下文集中的附加基础结构的假设。

  1. 训练和测试上下文集分布的假设
    假设:
    (1)尽管训练和测试上下文集不相同,但这两个集合的元素来自相同的基础分布,类似于监督学习中的iid数据假设。如 OpenAI Procgen的设置,其中训练上下文集是从种子的全分布中随机均匀采样的200个种子的集合,并且全分布被用作测试上下文集。
    (2)许多RL泛化工作不假设训练和测试环境来自相同的分布。被称为领域泛化,这里将训练和测试环境称为不同的领域,这些领域可能相似,但不是来自相同的底层生成分布。典型的如sim-to-real。
  2. 结构的进一步形式化假设
    假设:
    (1)块MDP:假设在从潜在状态空间到给定观察空间的映射中存在块结构,或者存在由具有与给定MDP相同行为的较小状态空间描述的另一MDP。Du等人[39]使用这一假设来改善勘探边界,这取决于潜在状态空间的大小,而不是给定的观测空间。Zhang等人[40]开发了一种表示学习方法,该方法将相关特征与不相关特征区分开来,改善了对只有不相关特征变化的环境的泛化。
    (2)因子MDP:可用于描述面向对象的环境或多智能体设置,其中状态空间可分解为独立的因素。

3.8 备注和讨论

  1. 泛化的度量
    有两种明显的方法可以评估模型的泛化性能。一种是只看评估任务的绝对表现,另一种是看泛化差距。在监督学习中,不同算法的泛化能力通常通过评估任务的最终性能来评估。在RL中,我们更关心算法的泛化潜力,方法是将泛化与训练性能解耦,并使用泛化间隙进行评估。
    但在如此广泛的类别中,目标甚至可能相互冲突。各种RL算法的泛化性能可能取决于其部署的环境类型,因此需要对部署时存在的挑战类型进行仔细分类,以正确评估泛化能力。
  2. 解决泛化问题的角度
    为了提高测试性能,可以(1)提高训练时间性能,同时保持泛化间隙恒定,(2)减少泛化间隙,同时保持训练时间奖励恒定,或者(3)混合使用两种方法。在RL中,与泛化无关的工作采用第一种方法,RL中的泛化工作目标是(2)。
  3. Zero-shot策略转移动机
    在这项工作中,专注于zero-shot的策略转移:策略从训练CMDP转移到测试CMDP,并且不允许在测试上下文中进行任何进一步的训练。

4. 强化学习中的泛化基准

本节给出了RL泛化的基准分类。基准任务是环境选择(CMDP,第4.1节)和适当的评估协议(训练和测试环境集,第4.2节)的组合。对基准进行分类后,作者指出纯PCG方法生成环境的局限性(第4.3节,通用化程序内容生成的缺点),并讨论了泛化问题中困难的范围。

4.1 环境

4.1.1 泛化环境的分类

  1. 表1中列出了RL中测试泛化的可用环境,并总结了每个环境的关键属性。这些环境都提供了一个非单例上下文集,可用于创建各种评估协议。选择一个特定的评估协议,然后产生一个基准。

  2. Style:给定一个高级别描述

  3. Contexts:描述了上下文集。有两种设计上下文集的方法,其区别在于是否可以看到上下文内容。
    (1)第一种,叫做过程性内容生成(PCG),使用随机种子来在上下文MDP生成期间确定选择。是一个黑箱过程,只选择一个种子。
    (2)第二种,叫做可控环境,对上下文MDP之间的变化因素提供了更直接的控制。上下文集通常是多因素空间,既包括连续空间又包括离散空间。
    后面使用“PCG”表示使用种子作为输入的黑盒PCG,使用“可控”来指直接更改上下文MDP相关参数的环境,即白盒PCG。

  4. Variation:描述了上下文MDP集合中的变化。可以是状态空间变化(、动态变化(过渡函数)、视觉变化(观察函数)或奖励函数变化。

  5. 分类列表:
    在这里插入图片描述
    在上下文列中,PCG表示过程内容生成,Con表示连续,Dis-C表示离散基数,Dis-O表示离散序数。在变异栏中,S、D、O和R分别是状态、动态、观察或奖励函数变异。

4.1.2 环境趋势

  1. 环境中网格世界(14.25%)和连续控制(13.24%)受到关注,但街机风格和3D环境的基准已经确立。PCG在通用环境中大量使用,在21个(38%)环境中使用。许多环境将PCG组件与可控变化相结合。大多数环境在其上下文集合中有几种不同的变化因素。
  2. 在变化方面,状态变化最常见(42,76%),其次是观察(29,53%),然后是奖励(20,36%)和动态(19,35%)。
  3. 在基准集合中可以分类:PCG状态变化的网格环境(MiniGrid、BabyAI、Crafter、Rogue-gym、MarsExplorer、NLE、MiniHack),非PCG观察变化的连续控制环境(RoboSuite、DMC Remasted、DMC-GB、DCS、KitchenShift、NaturalEnvs、MuJoCo),以及可适用于zero-shot泛化的多任务连续控制基准(CausalWorld、RLBench、Meta-world)。

4.2 泛化评估协议

评估协议规定了训练和测试上下文集、训练时对训练集采样的限制以及训练环境中允许的样本数量。

  1. PCG评估协议
    PCG环境提供了三类评估协议,分别为
    A:单个上下文训练,整个上下文集测试
    B:一小组上下文训练,整个上下文集测试
    C:完整上下文集训练,其中的一组上下文测试
    对于A, 由于难度太大,目前没有实例。
    对于B,可能会出现在训练集上过拟合而导致在测试集上效果不好的情况。该协议的示例包括OpenAI Procgen、RogueGym的两种模式,JumpingFromPixels和MarsExplorer的一些使用。
    对于C,并没有明显地针对泛化问题,它的测试集来自训练集的一部分,但相对于原始RL的协议具有一定的泛化性。这里作者任务C应该是标准RL的评估协议,原来的评估协议只是一个特例。
    A,B,C分别对应于下图的三列。
    在这里插入图片描述

  2. 可控环境评估协议
    主要为下图,考虑训练上下文,在其基础上进行内推分布测试、单个因子的外推测试和多个因子的外推测试。
    在这里插入图片描述

4.3 讨论

  1. 非视觉泛化:非视觉类型的泛化应使用视觉简单的领域,如MiniHack[77]和NLE[79]。这些环境包含足够的复杂性,可以测试许多类型和非视觉概括的优势。有许多现实世界中的问题设置不需要视觉处理,例如系统控制和推荐系统。
  2. DeepMind控制套件变体:泛化基准的一个子类别是DeepMind Control Suite[99]变体的选择:DMC-Remastered, DMC-Generalisation Benchmark, Distracting Control Suite, Natural Environments [61, 60, 37, 78]。这些环境都关注视觉概括和样本效率,需要从像素学习连续的控制策略。其中Distracting
    Control Suite是功能最全面的变体,因为它具有最广泛的变体,其中最难的组合是当前方法无法解决的。
  3. 无意的泛化基准:一些环境最初并不是泛化基准,但可以通过不同的评估协议来适应这种情况。包括CausalWorld, RWRL, RLBench, Alchemy, Meta-world等。建议在使用这些基准测试时明确使用哪种协议,并与之前方法的评估进行比较。使用标准方案有助于再现性。
  4. 泛化过程内容生成的缺点:PCG往往使用随机种子集,没有用于控制上下文MDP之间的变化的附加结构。
    (1)PCG很有用,但纯PCG存在一些问题:这些环境支持的评估协议范围限于不同大小的训练上下文集,不对其特定因素进行解耦难以进行一般化。通常需要付出更多的努力才能将这些因素设置为特定的值,而不是仅显示生成级别的值。因此纯PCG无法对特定类型的通用化进行更具针对性的评估。

这意味着,虽然PCG是创建一组大型上下文MDP的有用工具,但纯基于PCG的环境有一个缺点:这些环境支持的评估协议范围限于不同大小的训练上下文集。如果不大力标记生成的水平或解开PCG以暴露捕获这些因素的潜在参数化,就不可能测量沿着特定变化因素的一般化。通常需要付出更多的努力才能将这些因素设置为特定的值,而不是仅显示生成级别的值。因此,PCG基准正在测试“通用”形式的通用化和RL优化,但无法对特定类型的通用化进行更具针对性的评估。这意味着在特定问题上取得研究进展是困难的,因为孤立地关注特定瓶颈是困难的。

一个有趣的折衷方案是,在几个环境中达成,即在程序上产生一些低水平的环境,但仍有许多变化因素在研究人员的控制下。例如,障碍塔[82]有程序生成的平面布局,但视觉特征(以及某种程度上的布局复杂性)可以控制。另一个例子是MiniHack[77],其中可以用丰富的描述语言从头开始指定整个MDP,如果需要,PCG可以填充任何组件。这两者都能实现更具针对性的实验类型。我们认为,这种PCG和可控环境的结合是设计未来环境的最佳方法;为了在环境(尤其是状态空间)中产生足够的多样性,需要使用PCG,如果控制足够精细,能够进行精确的科学实验,那么环境仍然有助于解开一般化的进展。

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

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

相关文章

SSM整合

整合的思路是: 先创建spring框架 通过spring整合spring mvc 通过spring整合mybatis 工程创建 创建Maven工程–>create for archtype–>webapp 创建项目结构 在recourses目录下创建 dbconfig.properties、log4j.properties、mysqlConfig.xml、springmvc.xml、…

css3实现一个3d楼梯动画

背景 👏👏通过给出的宽/高个数,用css3的transform以及transform-style快速的实现一个3d楼梯,速速来Get吧~ 🥇文末分享源代码。记得点赞关注收藏! 1.实现效果 2.实现步骤 定义css变量:宽w、高…

cadence SPB17.4 - allegro - disable recent Designs list

文章目录cadence SPB17.4 - allegro - disable recent Designs list概述笔记效果备注ENDcadence SPB17.4 - allegro - disable recent Designs list 概述 和csdn同学讨论问题, 他的问题如下: cadence如何在不去掉startpage的情况下只Recent Projects呢?&#xff…

【能效管理】变电站综合自动化监控系统在35kV变电站中应用

摘要:Acrel-1000变电站综合自动化系统,是我司根据电力系统自动化及无人值守的要求,总结国内外的研究和生产的先进经验,专门研制出的新一代电力监控系统。本系统具有保护、遥测、遥信、遥脉、遥调、遥控功能,可实现无人…

Lakehouse架构指南

什么是数据湖,为什么需要数据湖? 数据湖是一种存储系统,具有底层数据湖文件格式及其不同的数据湖表格式,可存储大量非结构化和半结构化数据,并按原样存储,但没有特定用途。广泛的技术和非技术数据消费者可…

第10讲:Python列表对象查操作之通过切片获取列表中的元素

文章目录1.切片获取列表中的技术要点1.1切片获取列表中的概念总结1.2.切片的语法格式以及含义3.使用切片方法获取列表中元素3.1.定义一个原始列表列表3.2.当step步长为正数时切片的案例3.3.当step步长为负数时切片的案例3.4.使用负数索引作为切片范围4.将切片后的列表赋值给新的…

【收藏】安科瑞企业微电网能效管理系统云平台演示账号

安科瑞 李亚俊 Acrel8757 1、AcrelCloud-1000变电所电力运维云平台 网址:https://acrelcloud.cn/ 演示账号:acrel 密码:123456 2、SCADA电力监控系统 网址:http://scada.acrel-eem.com/ 演示账号:acrel 密码:…

【手把手】教你玩转SpringCloud Alibaba之Nacos Config深入

1、不同环境相同配置问题-自定义Data ID配置 在实际的开发过程中,项目所用到的配置参数有的时候并不需要根据不同的环境进行区分,生产、测试、开发环境所用到的参数值是相同的。怎么解决同一服务在多环境中,引用相同的配置的问题&#xff1f…

Spring Security(7)

您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~ 有时某些业务或者功能,需要在用户请求到来之前就进行一些判断或执行某些动作,就像在Servlet中的FilterChain过滤器所做的那样&#xff0c…

A Self-Attentive model for Knowledge Tracing论文笔记

原文链接和代码链接A Self-Attentive model for Knowledge Tracing | Papers With Code motivation:传统方法面临着处理稀疏数据时不能很好地泛化的问题。 本文提出了一种基于自注意力机制的知识追踪模型 Self Attentive Knowledge Tracing (SAKT)。其本质是用 Tra…

我的创作二周年纪念日

我的创作二周年纪念日 文章目录我的创作二周年纪念日机缘最初成为创作者的初心:1. 自我简介2. 日常学习过程中的记录收获在创作的过程中都有哪些收获?1. 获得了多少粉丝的关注?2. 获得了多少正向的反馈,如赞、评论、阅读量?3. 认识和哪些志同道合的领域同行?日常…

剑指Offer专项突破版(76)—— 数组中的第 k 大的数字

题目 剑指 Offer II 076. 数组中的第 k 大的数字 思路 假设有个划分函数divide: divide:将num在[l,r]范围内,按照nums[l]进行划分,返回一个数组range,划分为: 所有小于nums[l]的数:移动到nu…

nginx连接前后端分离项目 或 负载均衡映射多个服务器

nginx的两种用法: 打通前后端项目,前后端分离的项目,通过nginx建立连接 负载均衡,一台机器请求转发至多个服务器 1. 前后端分离项目,打通前后端项目 前端项目中的配置: 后端项目的ip和端口号就是正常的 …

verilog实现分频(奇数分频和偶数分频,通用版)

大家好,最近写了一些分频器的设计,发现奇数分频和偶数分频是比较常用分频效果,所以写了一个比较简单的分频代码,适用于奇数分频和偶数分频(不考虑占空比),代码已经经过测试,需要可自…

微服务框架 SpringCloud微服务架构 5 Nacos 5.7 Nacos 与 Eureka 的对比

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构5 Nacos5.7 Nacos 与 Eureka 的对比5.7.1 Nacos 注册中心细节分析5.7.2 临…

基于马科维茨与蒙特卡洛模型的资产最优配置模型(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 资本是保险公司经营的核心要素,是资产配置的重要约束条件。本文在马克维茨方法的基础上,将偿付能力引入了资产配置的优化模型。…

VH6501模板工程介绍(一)

VH6501硬件结构 1.式样 1.正向有5个灯,用来指示干扰的触发状态,干扰类型(数字或模拟),通道通信以及设备状态。 2.两个DB9接口(公头male和母头female),这是CAN或CANFD通道&#xff0…

(二)Java 线程

一、创建和运行线程 1. 方法一,直接使用 Thread Slf4j(topic "c.Test1") public class Demo {public static void main(String[] args) {Thread t new Thread(){Overridepublic void run() {log.debug("running");}};t.setName("t1&qu…

Casein-PEG-Indocyanine green 络蛋白-聚乙二醇-吲哚菁绿 Casein-ICG

产品名称:络蛋白-聚乙二醇-吲哚菁绿 英文名称:Casein-PEG-Indocyanine green 质量控制:95% 原料分散系数PDI:≤1.05 存储条件:-20C,避光,避湿 用 途:仅供科研实验使用,…

【免杀前置课——Windows编程】十三、事件与信号量——事件与互斥体区别、操纵信号量实现游戏多开访问控制(附代码)

事件 事件可以完全控制,其他无法控制线程的执行顺序,但是事件对象可以做到。 ***事件(Event)***是在线程同步中最常使用的一种同步对象,事件包含一个使用计数,一个是用来表示自动重置/手动重置的布尔值,另…