什么是强化学习?
📝什么是强化学习?
- 1. 📝监督,非监督,强化
- 2. 📝非 i.i.d
- 3. 📝强化学习基本形式
- 4. 📝马尔可夫过程
🌟 强化学习(Reinforcement Learning,RL)是机器学习(Machine Learning,ML)的一个分支,它能随着时间的推移,自动学习最优决策。这是许多科学和工程领域普遍研究的一个问题。
在瞬息万变的世界中,如果考虑时间的因素,即使是静态的输入输出问题也会变成动态问题。例如,想象一下你想要解决一个宠物图片分类(一共有两个目标类:狗和猫)的简单监督学习问题。你收集了训练数据集并使用深度学习(Deep Learning,DL)工具作为分类器。一段时间后,收敛的模型表现得很出色。这很棒!于是你将其部署并运行了一段时间。但是,当你从某个海滨度假胜地回来后,发现狗狗间流行的装扮方式发生了改变,因此大部分的查询都返回了错误的分类结果,你也因此需要更新你的训练图片,并重复之前的过程。这就不美妙了!
前面的示例旨在说明即使是简单的ML问题也有隐藏的时间维度。这常被忽视,那么它在生产系统中就可能会成为一个问题。RL很自然地将额外的维度(通常是时间,但并非必须是时间)并入学习方程式。这让RL更接近于人们所理解的人工智能(Artificial Intelligence,AI)。
1. 📝监督,非监督,强化
1.监督学习
你可能已经熟悉了监督学习的概念,监督学习是被研究得最多且最著名的机器学习方法。它的基本问题是,当给定一系列带标签的数据时,如何自动构建一个函数来将某些输入映射成另外一些输出。虽然这听起来很简单,但仍存在一些棘手的问题,计算机领域也是在最近才成功解决了部分问题。监督学习的例子有很多,包含:
- 文本分类:电子邮件是否是垃圾邮件?
- 图像分类和目标检测:图片包含了猫还是狗还是其他东西?
- 回归问题:根据气象传感器的信息判断明天的天气。
- 情感分析:某份评价反应的客户满意度是多少?
这些问题貌似不同,但思想一致——我们有很多输入输出对,并想通过学习它的规律来让未来的、当前不可见的输入能产生准确的输出。根据“标准答案”数据源给出的已知答案来学习,这就是监督一词的由来。
2.非监督学习
另外一个极端就是所谓的非监督学习,它假设我们的数据没有已知的标签。它的主要目标是从当前的数据集中学习一些隐藏的结构。这种学习方法的常见例子就是对数据进行聚类。该算法用于将数据分类成不同组,以揭示数据间的关系。例如,想要找到相似的图片或者有类似行为的客户。
另一类正变得越来越流行的非监督学习方法是生成对抗网络(Generative Adversarial Network,GAN)。当有两个相互竞争的网络时,一个网络试着生成假数据来愚弄第二个网络,而第二个网络则努力将伪造的数据和真实的采样数据区分开。随着时间的流逝,两个网络都通过捕获数据中一些细微的特定模式变得越来越强大。
3.强化学习
RL则处于第三阵营,介于完全监督和完全没有预定义标签之间。它会用到很多已经比较完善的监督学习方法来学习数据的表示,比如用深度神经网络(deep neural network)来进行函数逼近、随机梯度下降和反向传播。但它会用不同的方式来使用这些方法。
想象在某环境下有个需要选择动作的智能体。迷宫中走迷宫的老鼠就是一个很好的例子,当然你也可以想象一个无人操作的直升机在盘旋,或一个国际象棋程序要学着如何击败一名大师级棋手。
在这里,环境就是迷宫,迷宫里会有一些地方有食物,还有些地方有电流。老鼠能够选择动作,比如左转、右转以及前进。每一时刻,它都能观察到迷宫的整体状态并据此决定选择什么动作。老鼠的目的是找到尽可能多的食物,同时尽可能避免被电击。这些食物和电信号代表智能体(老鼠)收到的奖励,是环境针对智能体选择的动作所提供的额外反馈。奖励在RL中是非常重要的概念。智能体最终的目标是获取尽可能多的奖励
。在这个例子中,老鼠需要寻找大量食物并承受少量电击——对于老鼠而言,这比站着不动且一无所获要好得多。
我们想要的是一套神奇的方法,让老鼠学着自己避开电流并收集尽可能多的食物。RL就是这样一个与监督学习和非监督学习都不一样的神奇工具,它不像监督学习那样需要预定义好标签。没有人将机器老鼠看到的所有图片标记为好或坏,也没有人给出它需要转向的最佳方向。
但是, 它也不像非监督学习那样完全不需要其他信息,因为有奖励系统。奖励可以是得到食物后的正向反馈、遭到电击后的负向反馈,什么都没发生时则无反馈。通过观察奖励并将其与选择的动作关联起来,智能体将学习如何更好地选择动作,也就是获取更多食物、受到更少的电击。当然,RL的通用性和灵活性也是有代价的。与监督学习和非监督学习相比,RL被认为是更具挑战的领域。
2. 📝非 i.i.d
要注意的是,RL中的观察结果取决于智能体选择的动作,某种程度上可以说是动作导致的结果。如果智能体选择了无用的动作,观察结果不会告诉你做错了什么或如何选择动作才能改善结果(智能体只会得到负面的反馈)。如果智能体很固执并且不断犯错,那么这些观察结果会给出一个错误的印象,即没法获取更大的奖励了,但这种印象很可能是完全错误的。
-
用ML的术语来说,就是有非i.i.d.(independent and identically distributed,独立同分布)数据,而i.i.d.是大多数监督学习方法的前提。
-
智能体不仅需要利用它学到的知识,还要积极地探索环境,因为选择不同的动作很可能会明显地改善结果。但问题是太多的探索会严重地降低奖励(更不用说智能体实际上会忘记它之前学的知识了),所以需要找到这两种行为之间的平衡点。这种探索与利用的两难问题是RL中公开的基本问题之一。
-
选择动作后奖励可能会严重延迟。例如,在国际象棋中,游戏中途的一次强力落子就可以改变平衡。在学习过程中,我们需要发现这种因果关系,而
在时间的流逝和不断选择的动作中辨别这种因果关系是很困难的
。
3. 📝强化学习基本形式
RL实体(智能体和环境)以及它们之间的交互通道(动作、奖励和观察)。
1、奖励
在RL中,奖励是从环境中周期性获得的一个标量。奖励可正可负、可大可小,但它只是一个数字。奖励的目的是告诉智能体它表现得如何。我们不会定义智能体会多频繁地收到奖励——可能是每秒一次,也可能是一生一次。但为了方便,通常会将频率设为每固定时间戳一次或每与环境交互一次。在一生一次的奖励系统中,除了最后一次外,所有的奖励都是0。
奖励的目的是告诉智能体它有多成功,这是RL最核心的东西。强化(reinforcement)这个术语就出自此
,即智能体获得的奖励应该正向或反向地强化它的行为。奖励是局部的,意味着它反映了智能体最近的行为有多成功,而不是从开始到现在累计的行为有多成功。当然,从某些动作中获得了巨大的奖励并不意味着之后不会因为这个决定而面临窘境。这就像抢银行——在你考虑到后果之前,它可能看起来是个“好主意”。
智能体试图在一系列动作中获取最大的累积奖励。若想更好地理解奖励,参考以下示例:
- 金融交易:对买卖股票的交易者来说,奖励就是收益的多少。
- 国际象棋:奖励在游戏结束时以赢、输或平局的形式获得。当然,这也取决于平台。例如,对我来说,能与国际象棋大师打平就算巨大的奖励。实际上,我们需要指定奖励的具体值,但这可能会是一个相当复杂的表达式。例如,在国际象棋中,奖励可能与对手的强弱成比例。
大脑中的多巴胺系统:大脑中有一块区域(边缘系统)会在每次需要给大脑的其他部分发送积极信号时释放多巴胺。高浓度的多巴胺会使人产生愉悦感,从而加强此系统认为好的行为。不幸的是,边缘系统比较“过时”,它会认为食物、繁殖和支配是好的,但这又是另外一个故事了。
电脑游戏:玩家总是能得到很明显的反馈,即杀死敌人的数量或获得的分数。注意,在这个例子中,反馈已经被累积了,所以街机游戏的RL奖励应该是分数的导数,即新的敌人被杀时是1,其他时候都是0。 - 网页浏览:存在一些有很高实用价值的问题,即需要对网页上可用的信息进行自动抽取。搜索引擎通常就是为了解决这个问题,但有时,为了获得正在寻找的数据,需要填一些表单,浏览一系列链接或输入验证码,而这对于搜索引擎来说是很困难的事。有一种基于RL的方法可以处理这些任务,奖励就是你想获得的信息或结果。
- 神经网络(Neural Network,NN)结构搜索:RL已成功应用于NN结构优化领域,它的目标是通过一些手段在一些数据集中获得最佳性能,这些手段通常包括调整网络的层数或参数、添加额外的残差连接,或对NN结构做出其他改变。这种情况下,奖励就是NN的性能(准确性或其他能衡量NN预测是否精准的度量)。
- 狗的训练:如果你曾训练过狗,就知道每次要求它做什么的时候,需要给它一些好吃的(但不要太多)。当它不听从命令时,施加一点惩罚(负向奖励)也是常见的手段,但最近的研究表明这不如正向奖励有效。
- 学习成绩:学习成绩就是一种奖励系统,旨在给学生提供学习反馈。
奖励的概念是对智能体性能如何的一个非常普遍的指示,它也能被人为地注入我们周围的许多实际问题中。
2、智能体
智能体是通过执行确定的动作、进行观察、获得最终的奖励来和环境交互的人或物。在大多数实际RL场景中,智能体是某种软件的一部分,被期望以一种比较有效的方法来解决某个问题。前面示例中的智能体如下:
- 金融交易:决定交易如何执行的交易系统或交易员。
- 国际象棋:玩家或计算机程序。
- 大脑中的多巴胺系统:大脑本身,它根据感官数据决定是否是一次好的经历。
- 电脑游戏:玩游戏的玩家或计算机程序。(Andrej Karpathy曾发过推特说:“我们曾说应该让AI做所有的工作,我们自己只用玩游戏就行了。但是现在是我们在做所有的工作,而AI在玩游戏!”)
- 网页浏览:告诉浏览器点哪个链接、往哪动鼠标、输入哪些文本的软件。
- NN结构搜索:控制NN具体结构的软件。
- 狗的训练:你会决定选择什么动作(投食/惩罚),所以你就是智能体。
- 学习成绩:学生。
3、环境
环境是智能体外部的一切。从最一般的意义来说,它是宇宙的剩余部分,但这有点过分了,甚至超出了未来的计算能力,所以我们通常遵循一般的意义。
智能体和环境的交互仅限于奖励(从环境中获得)、动作(由智能体执行并馈入环境)以及观察(智能体从环境中获得的除奖励之外的一些信息)。
4、动作
动作是智能体在环境中可以做的事情。例如,动作可以是基于游戏规则(如果是游戏的话)的一次移动,也可以是做作业(在学校的场景下)。
在RL中会区分两种类型的动作——离散动作和连续动作。
-
离散动作构成了智能体可以做的互斥的有限集合,例如向左移动或向右移动。
-
连续动作会涉及数值,如汽车转动方向盘的动作在操作上就涉及角度和方向的数值。不同的角度可能会导致一秒后的情况有所不同,所以只转动方向盘肯定是不够的。
5、观察
对环境的观察形成了智能体的第二个信息渠道(第一个信息渠道是奖励)。你可能会奇怪为什么我们需要这个单独的数据源。答案是方便。观察是环境为智能体提供的信息,它能说明智能体周围的情况。
观察可能与即将到来的奖励有关(例如,看到银行的付款通知),也可能无关。观察甚至可以包含某种模糊的奖励信息,例如电脑游戏屏幕上的分数。分数只是像素,但我们可以将其转换成奖励值。对于现代DL来说,这并不是什么难事。
另一方面,奖励不应该被视为次要的或不重要的事情,而应该被视为驱动智能体学习的主要力量。如果奖励是错误的、有噪声的或只是稍微偏离主要目标,那么训练就有可能朝着错误的方向前进。
区分环境的状态和观察也很重要。环境的状态可能包括宇宙中的所有原子,这让测量环境中的所有东西变得不可能。即使将环境的状态限制得足够小,在大多数情况下,也要么无法得到关于它的全部信息,要么测量的结果中会包含噪声。不过,这完全没有问题,RL的诞生就是为了处理这种情况。回到那些示例,看看这两个概念之间的差异:
- 金融交易:在这里,环境指整个金融市场和所有影响它的事物。这涵盖非常多的事情,例如最近的新闻、经济和政治状况、天气、食物供应和推特趋势。甚至你今天决定待在家里的决定也可能会间接影响世界的金融系统(如果你相信“蝴蝶效应”的话)。然而,我们的观察仅限于股票价格、新闻等。我们无法查看环境中的大部分状态(是它们使金融交易变得如此复杂)。
- 国际象棋:这里的环境是你的棋盘加上你的对手,包括他们的棋艺、心情、大脑状态、选择的战术等。观察就是你看到的一切(当前棋子的位置),但是,在某些级别的对决中,心理学的知识和读懂对手情绪的能力可以增加你获胜的概率。
- 大脑中的多巴胺系统:这里的环境是你的大脑、神经系统、器官加上你能感知的整体世界。观察是大脑内部的状态和来自感官的信号。
- 电脑游戏:这里的环境是你的计算机的状态,包括所有内存和磁盘数据。对于网络游戏来说,还包括其他计算机以及它们与你的计算机之间的所有互联网基础设施包括路由器、交换机、光纤等。观察则只是屏幕中的像素和声音。这些像素信息并不是小数量级的(有人计算过,取中等大小图片(1024×768)的像素进行排列组合,其可能结果的数量明显大于我们星系中的原子数量),但整个环境的状态的数量级肯定更大。
- 网页浏览:这里的环境是互联网,包括我们的工作计算机和服务器计算机之间的所有网络基础设施,包含了数百万个不同的组件。观察则是当前浏览步骤中加载的网页。
- NN结构搜索:在本例中,环境相当简单,包括执行特定NN评估的工具集和用于获取性能指标的数据集。与互联网相比,它就像个玩具环境。观察则不同,它包括关于测试的一些信息,例如损失函数的收敛状态或者能从评估步骤中获得的其他指标。
- 狗的训练:在本例中,环境是狗(包括它那难以观察到的内心反应、心情和生活经历)和它周围的一切,以及其他狗,甚至是躲在灌木丛中的猫。观察则是你的感官信号和记忆。
- 学习成绩:这里的环境是学校本身、国家的教育体系、社会和文化遗产。观察则是学生的感官和记忆。
4. 📝马尔可夫过程
马尔可夫决策过程(Markov Decision Process,MDP),从最简单的马尔可夫过程(Markov Process,MP)开始,然后将其扩展成马尔可夫奖励过程(Markov reward process),最后加入动作的概念,得到MDP。
马尔可夫过程
从马尔可夫家族最简单的MP(也称为马尔可夫链)开始。想象一下你面前有一个只能被观察的系统。能观察到的被称为状态,系统可以根据动力学定律在状态间进行切换。再强调一次,你不能影响系统,只能观察到状态的变化。
系统中所有可能的状态形成了一个集合,称为状态空间。对MP而言,状态集应该是有限的(虽然有限制,但是它可以非常大)。观察结果形成了一个状态序列或状态链(这就是MP也称为马尔可夫链的原因)。例如,看一下最简单的模型——城市的天气模型,我们可以观察到今天是晴天还是雨天,这就是状态空间。随着时间的推移,一系列观察结果形成了一条状态链,例如[晴天,晴天,雨天,晴天,……],这称为历史。
要将这样的系统称为MP,它需要满足马尔可夫性质,这意味着系统未来的任何状态变化都仅依赖于当前状态
。
马尔可夫性质的重点就是让每一个可观察的状态是自包含的,都能描述系统的未来状态。马尔可夫性质要求系统的状态彼此可区分且唯一。在这种情况下,只需要一个状态就可以对系统的未来动态进行建模,而不需要整个历史或最后N个状态。
- 在天气的例子中,马尔可夫性质将模型限制在这样的情况下:不管之前看到了多少个晴天,晴天之后是雨天的概率都是相同的。这个模型不太现实,因为根据常识,我们知道明天会下雨的概率不仅取决于当前的状况,还取决于许多其他因素,例如季节、纬度以及附近是否有山和海。最近有研究表明,甚至连太阳的活动都会对天气造成重大影响。所以,这个例子的假设有点太天真了,但是有助于理解限制条件并做出清醒的决定。
如果想让模型变得更复杂,只需要扩展状态空间就可以了,以更大的状态空间为代价,我们可以捕获模型更多的依赖项。例如,如果要分别捕获夏天和冬天雨天的概率,将季节包含在状态中即可。
在这种情况下,状态空间将是[晴天+夏天,晴天+冬天,雨天+夏天,雨天+冬天]。
只要系统模型符合马尔可夫性质,就可以用转移矩阵来描述状态转移的概率,它是一个大小为N×N的方阵,N是模型中状态的数量。矩阵中的单元(第i行,第j列)表示系统从状态i转移到状态j的概率。
例如,在晴天/雨天的例子中,转移矩阵如下所示:
在这种情况下,如果某天是晴天,那么第二天是晴天的概率为80%,是雨天的概率为20%。如果观察到某天是雨天,那么第二天是晴天的概率是10%,第二天还是雨天的概率是90%。
MP的正式定义如下:
- 一组状态(S),系统可以处于任一状态。
- 一个转移矩阵(T),通过转移概率定义了系统的动态。
图中节点代表系统的状态,边上的标记表示状态转移的概率。如果转移的概率为0,那么不会画出这条边(即无法从一个状态转移到另一个状态)。这种表示法通常也用来表示有限状态机,这是自动机理论的研究范围。
为了展示一个更复杂的例子,来考虑另外一个模型,上班族模型(迪尔伯特就是一个很好的例子,他是斯科特·亚当斯的著名漫画中的主角)。上班族的状态空间如下:
家:他不在办公室。
计算机:他在办公室用计算机工作。
咖啡:他在办公室喝咖啡。
聊天:他在办公室和同事聊天。
上班族的状态转移图
假设上班族的工作日通常从家的状态开始,并且每天到了办公室后,都毫无例外地从喝咖啡开始(没有家→计算机的边,也没有家→聊天的边)。图1.5也展示了工作日都结束(即转移到家的状态)自计算机状态。
其转移矩阵如下所示:
转移概率可以直接插入状态转移图中,如图所示:
带转移概率的状态转移图
实际上,我们很少能知道确切的转移矩阵。真实世界中,一般只能得到系统状态的观察,这被称为片段:
家→咖啡→咖啡→聊天→聊天→咖啡→计算机→计算机→家
计算机→计算机→聊天→聊天→咖啡→计算机→计算机→计算机
家→家→咖啡→聊天→计算机→咖啡→咖啡
从观察中估算转移矩阵并不困难——将所有的状态转移计数,再将其归一化,这样总和就是1了。观察的数据越多,估算就越接近真正的模型。
马尔可夫性质暗示了稳定性(即所有状态的底层转移概率分布不会随着时间变化
)。非稳定性意味着有一些隐藏的因素在影响系统的动态,而这些因素没有被包含在观察中。但是,这与马尔可夫性质相矛盾,后者要求同一状态的底层概率分布必须相同,和状态的转移历史无关。
注意,在片段中观察到的实际状态转移与转移矩阵中的底层概率分布是有区别的。观察的具体片段是从模型的分布中随机抽样得到的,因此片段不同,估算得到的转移分布也可能不同。而真正的状态转移概率是不变的。如果不能保证这个前提,那么马尔可夫链将不再适用。
🌟 之后来继续扩展MP模型,使其更接近RL问题。将奖励考虑进来
相关文章:

什么是强化学习?
📝什么是强化学习? 1. 📝监督,非监督,强化2. 📝非 i.i.d3. 📝强化学习基本形式4. 📝马尔可夫过程 🌟 强化学习(Reinforcement Learning,RL&#x…...

如何在Linux系统上安装cpolar内网穿透
如何在Linux系统上安装cpolar内网穿透 文章目录 如何在Linux系统上安装cpolar内网穿透 cpolar作为一款体积小巧却功能强大的内网穿透软件,不仅能够在多种环境和应用场景中发挥巨大作用,还能适应多种操作系统,应用最为广泛的Windows、Mac OS系…...

分布式软件架构——内容分发网络
内容分发网络(CDN,Content Distribution Network或Content Delivery Network) 其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定。通过在网络各处放置节点服务器所构成的在现…...

【HAL库】STM32CubeMX开发----STM32F407----LAN8720A----移植FreeModbus实现ModbusTCP
前言 本次实验以 STM32F407VET6 芯片为MCU,使用 25MHz 外部时钟源。 以太网PHY层芯片为 LAN8720A,移植FreeModbus实现ModbusTCP网口通信。 具体内容参考文章:【HAL库】STM32CubeMX开发----STM32F407----ETHLAN8720ALWIP----ping通 本次移植…...

11-矩阵(matrix)_方阵_对称阵_单位阵_对角阵
矩阵及其运算 [ a 11 ⋯ a 1 n ⋯ ⋯ ⋯ a m 1 ⋯ a m n ] \begin{bmatrix} a_{11} & \cdots & a_{1n} \\ \cdots & \cdots & \cdots \\ a_{m1} & \cdots & a_{mn} \\ \end{bmatrix} a11⋯am1⋯⋯⋯a1n⋯amn 矩阵就是二维数组&…...

AWS多账户单点登录 IAM Identity Center(AWS SSO)
需求场景 多个aws账户,登陆麻烦且不安全,SSO单点功能并且外部身份提供者 — 如果您要管理外部身份提供者(IdP)(例如 Okta 或 Active Directory)中的用户。 官方文档:https://docs.aws.amazon.c…...
实验2-3-3 求奇数分之一序列前N项和 (15 分)
实验2-3-3 求奇数分之一序列前N项和 (15 分) 本题要求编写程序,计算序列 1 1/3 1/5 … 的前N项之和。 输入格式: 输入在一行中给出一个正整数N。 输出格式: 在一行中按照“sum S”的格式输出部分和的值S,精确到小数点后6位。…...
关于Android studio中的自动化测试脚本UiAutomator框架以及UiAutomatorViewer工具的使用——项目案例
加入依赖 implementation androidx.test.uiautomator:uiautomator:2.2.0创建CalcActivity页 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"...

OA办公自动化系统设计与实现(论文+源码)_kaic
摘要 随着信息化建设的日益深入,无论是政府还是企事业单位,部门之间的信息沟通与协调工作越来越重要。人们迫切需要一个能充分利用网络优势,并可以管理企业的各种重要信息的软件平台,利用该平台快速建立自己的信息网络和办公管理系…...
ansible——playbook
playbook playbook是剧本的意思 通过 task 调用 ansible 的模块将多个 play 组织在一 个playbook中运行。 playbook本身由以下各部分组成: Tasks: 任务,即调用模块完成的某操作 Variables: 变量 Templates: 模板 Handlers: 处理器,当某条件…...

DDS中间件设计
OpenDDS、FastDDS数据分发服务中间件设计 软件架构 应用层DDS层RTPS层传输层 软件层次 FastDDS整体架构如下,这里可以看到DDS和RTPS的关系。另外缺少一部分IDL(统一描述语言),其应该是Pub、Sub的反序列化、序列化工具。 在RT…...

aws的EC2云服务器自己操作记录
亚马逊官网有免费试用1年的服务器 以下内容参考 1. 启动生成实例 1.1 创建实例时需要生成 使用的默认的 Debian 和 一个.pem后缀的秘钥 1.2 网上下一个Mobaxterm ,实例名是公有 IPv4 DNS 地址 ,使用SSH连接,登录名是admin 1.3 登录进去后 输入用户名 admin 后进去,sudo …...

基本ACL 和高级ACL配置
基本ACL 一、要求 1.全网可达 2.在1的基础上使PC1不能访问PC2 二、思路 1.通过写静态的方式使全网可达 2.配置acl主要是拒绝源IP的访问 3.在靠近目标的地方配置acl及使用 三、操作配置 1.IP及静态配置 [r1]int g0/0/0 [r1-GigabitEthernet0/0/0]ip add 123.0.0.1 24 [r…...
【uniapp 报错 Cannot read properties of null (reading ‘offsetWidth‘)解决办法】
该错误通常是由于访问了一个空值的offsetWidth而引起的。解决方法如下: 检查代码中是否有访问了空值的情况,比如变量未初始化或者传入了空值参数或者事件未定义。 在操作元素之前,确保元素已经被正确加载。可以使用如下方法: <…...

6.s081/6.1810(Fall 2022)Lab2: System calls
文章目录 前言其他篇章参考链接0. 前置准备1. System call tracing (moderate)1.1 简单分析1.2 Hint 11.3 Hint 21.4 Hint 31.5 Hint 41.6 Hint 51.7 测试 2. Sysinfo (moderate)2.1 声明2.2 实现2.2.1 框架2.2.2 用户态与内核态交互2.2.3 计算空闲内存的大小2.2.4 计算非UNUSE…...

Git在VSCode中的使用
1.Git图像化界面进行项目初始化(git init) 2. Git图形化界面对文件进行操作 当我们创建一个文件时,该文件后面有一个U,表示文件未跟踪。 我们在管理工具中输入日志并提交代码,相当于做了两件事,将文件由“…...

【双指针_移动零_C++】
题目解析 移动零 nums [0,1,0,3,12] [1,3,12,0,0]算法原理 数组划分(数组分块) 双指针算法(利用数组下标来充当指针)使用两个指针的作用: cur指针:从左往右扫描数组,就是遍历数组。 dest指针…...

【网络安全】网络安全威胁实时地图 - 2023
文章目录 [TOC] ① 360 安全大脑360 APT全景雷达 ② 瑞星杀毒瑞星云安全瑞星网络威胁态势感知平台 ③ 比特梵德 Bitdefender④ 飞塔防火墙 FortiGuard⑤ 音墙网络 Sonicwall⑥ 捷邦 Check Point⑦ AO卡巴斯基实验室全球模拟隧道模拟 ⑧ 数字攻击地图⑨ Threatbutt互联网黑客攻击…...

视频过大如何压缩变小?文件压缩技巧分享
如何压缩视频是许多视频编辑者、视频上传者经常遇到的问题,如果你也遇到了这个问题,不用担心,下面将就给大家分享几个视频压缩方法,可以帮助大家轻松地压缩视频,同时保持视频的高清晰度和音频质量。 一、嗨格式压缩大师…...

组合模式(Composite)
组合模式是一种结构型设计模式,主要用来将多个对象组织成树形结构以表示“部分-整体”的层次结构,因此该模式也称为“部分-整体”模式。简言之,组合模式就是用来将一组对象组合成树状结构,并且能像使用独立对象一样使用它们。 Co…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...