游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

7个流行的强化学习算法及其代码实现

  目前流行的强化学习算法包括Qlearning、SARSA、DDPG、A2C、PPO、DQN和TRPO。这些算法已被用于在游戏、机器人和决策制定等各种应用中,并且这些流行的算法还在不断发展和改进,本文我们将对其做一个简单的介绍。
  1、Qlearning
  Qlearning:Qlearning是一种无模型、非策略的强化学习算法。它使用Bellman方程估计最佳动作值函数,该方程迭代地更新给定状态动作对的估计值。Qlearning以其简单性和处理大型连续状态空间的能力而闻名。
  下面是一个使用Python实现Qlearning的简单示例:importnumpyasnpDefinetheQtableandthelearningrateQnp。zeros((statespacesize,actionspacesize))alpha0。1Definetheexplorationrateanddiscountfactorepsilon0。1gamma0。99forepisodeinrange(numepisodes):currentstateinitialstatewhilenotdone:Chooseanactionusinganepsilongreedypolicyifnp。random。uniform(0,1)epsilon:actionnp。random。randint(0,actionspacesize)else:actionnp。argmax(Q〔currentstate〕)Taketheactionandobservethenextstateandrewardnextstate,reward,donetakeaction(currentstate,action)UpdatetheQtableusingtheBellmanequationQ〔currentstate,action〕Q〔currentstate,action〕alpha(rewardgammanp。max(Q〔nextstate〕)Q〔currentstate,action〕)currentstatenextstate
  上面的示例中,statespacesize和actionspacesize分别是环境中的状态数和动作数。numepisodes是要为运行算法的轮次数。initialstate是环境的起始状态。takeaction(currentstate,action)是一个函数,它将当前状态和一个动作作为输入,并返回下一个状态、奖励和一个指示轮次是否完成的布尔值。
  在while循环中,使用epsilongreedy策略根据当前状态选择一个动作。使用概率epsilon选择一个随机动作,使用概率1epsilon选择对当前状态具有最高Q值的动作。
  采取行动后,观察下一个状态和奖励,使用Bellman方程更新q。并将当前状态更新为下一个状态。这只是Qlearning的一个简单示例,并未考虑Qtable的初始化和要解决的问题的具体细节。2、SARSA
  SARSA:SARSA是一种无模型、基于策略的强化学习算法。它也使用Bellman方程来估计动作价值函数,但它是基于下一个动作的期望值,而不是像Qlearning中的最优动作。SARSA以其处理随机动力学问题的能力而闻名。importnumpyasnpDefinetheQtableandthelearningrateQnp。zeros((statespacesize,actionspacesize))alpha0。1Definetheexplorationrateanddiscountfactorepsilon0。1gamma0。99forepisodeinrange(numepisodes):currentstateinitialstateactionepsilongreedypolicy(epsilon,Q,currentstate)whilenotdone:Taketheactionandobservethenextstateandrewardnextstate,reward,donetakeaction(currentstate,action)Choosenextactionusingepsilongreedypolicynextactionepsilongreedypolicy(epsilon,Q,nextstate)UpdatetheQtableusingtheBellmanequationQ〔currentstate,action〕Q〔currentstate,action〕alpha(rewardgammaQ〔nextstate,nextaction〕Q〔currentstate,action〕)currentstatenextstateactionnextaction
  statespacesize和actionspacesize分别是环境中的状态和操作的数量。numepisodes是您想要运行SARSA算法的轮次数。Initialstate是环境的初始状态。takeaction(currentstate,action)是一个将当前状态和作为操作输入的函数,并返回下一个状态、奖励和一个指示情节是否完成的布尔值。
  在while循环中,使用在单独的函数epsilongreedypolicy(epsilon,Q,currentstate)中定义的epsilongreedy策略来根据当前状态选择操作。使用概率epsilon选择一个随机动作,使用概率1epsilon对当前状态具有最高Q值的动作。
  上面与Qlearning相同,但是采取了一个行动后,在观察下一个状态和奖励时它然后使用贪心策略选择下一个行动。并使用Bellman方程更新q表。3、DDPG
  DDPG是一种用于连续动作空间的无模型、非策略算法。它是一种actorcritic算法,其中actor网络用于选择动作,而critic网络用于评估动作。DDPG对于机器人控制和其他连续控制任务特别有用。importnumpyasnpfromkeras。modelsimportModel,Sequentialfromkeras。layersimportDense,Inputfromkeras。optimizersimportAdamDefinetheactorandcriticmodelsactorSequential()actor。add(Dense(32,inputdimstatespacesize,activationrelu))actor。add(Dense(32,activationrelu))actor。add(Dense(actionspacesize,activationtanh))actor。compile(lossmse,optimizerAdam(lr0。001))criticSequential()critic。add(Dense(32,inputdimstatespacesize,activationrelu))critic。add(Dense(32,activationrelu))critic。add(Dense(1,activationlinear))critic。compile(lossmse,optimizerAdam(lr0。001))Definethereplaybufferreplaybuffer〔〕DefinetheexplorationnoiseexplorationnoiseOrnsteinUhlenbeckProcess(sizeactionspacesize,theta0。15,mu0,sigma0。2)forepisodeinrange(numepisodes):currentstateinitialstatewhilenotdone:Selectanactionusingtheactormodelandaddexplorationnoiseactionactor。predict(currentstate)〔0〕explorationnoise。sample()actionnp。clip(action,1,1)Taketheactionandobservethenextstateandrewardnextstate,reward,donetakeaction(currentstate,action)Addtheexperiencetothereplaybufferreplaybuffer。append((currentstate,action,reward,nextstate,done))Sampleabatchofexperiencesfromthereplaybufferbatchsample(replaybuffer,batchsize)Updatethecriticmodelstatesnp。array(〔x〔0〕forxinbatch〕)actionsnp。array(〔x〔1〕forxinbatch〕)rewardsnp。array(〔x〔2〕forxinbatch〕)nextstatesnp。array(〔x〔3〕forxinbatch〕)targetqvaluesrewardsgammacritic。predict(nextstates)critic。trainonbatch(states,targetqvalues)Updatetheactormodelactiongradientsnp。array(critic。getgradients(states,actions))actor。trainonbatch(states,actiongradients)currentstatenextstate
  在本例中,statespacesize和actionspacesize分别是环境中的状态和操作的数量。numepisodes是轮次数。Initialstate是环境的初始状态。Takeaction(currentstate,action)是一个函数,它接受当前状态和操作作为输入,并返回下一个操作。4、A2C
  A2C(AdvantageActorCritic)是一种有策略的actorcritic算法,它使用Advantage函数来更新策略。该算法实现简单,可以处理离散和连续的动作空间。importnumpyasnpfromkeras。modelsimportModel,Sequentialfromkeras。layersimportDense,Inputfromkeras。optimizersimportAdamfromkeras。utilsimporttocategoricalDefinetheactorandcriticmodelsstateinputInput(shape(statespacesize,))actorDense(32,activationrelu)(stateinput)actorDense(32,activationrelu)(actor)actorDense(actionspacesize,activationsoftmax)(actor)actormodelModel(inputsstateinput,outputsactor)actormodel。compile(losscategoricalcrossentropy,optimizerAdam(lr0。001))stateinputInput(shape(statespacesize,))criticDense(32,activationrelu)(stateinput)criticDense(32,activationrelu)(critic)criticDense(1,activationlinear)(critic)criticmodelModel(inputsstateinput,outputscritic)criticmodel。compile(lossmse,optimizerAdam(lr0。001))forepisodeinrange(numepisodes):currentstateinitialstatedoneFalsewhilenotdone:Selectanactionusingtheactormodelandaddexplorationnoiseactionprobsactormodel。predict(np。array(〔currentstate〕))〔0〕actionnp。random。choice(range(actionspacesize),pactionprobs)Taketheactionandobservethenextstateandrewardnextstate,reward,donetakeaction(currentstate,action)Calculatetheadvantagetargetvaluecriticmodel。predict(np。array(〔nextstate〕))〔0〕〔0〕advantagerewardgammatargetvaluecriticmodel。predict(np。array(〔currentstate〕))〔0〕〔0〕Updatetheactormodelactiononehottocategorical(action,actionspacesize)actormodel。trainonbatch(np。array(〔currentstate〕),advantageactiononehot)Updatethecriticmodelcriticmodel。trainonbatch(np。array(〔currentstate〕),rewardgammatargetvalue)currentstatenextstate
  在这个例子中,actor模型是一个神经网络,它有2个隐藏层,每个隐藏层有32个神经元,具有relu激活函数,输出层具有softmax激活函数。critic模型也是一个神经网络,它有2个隐含层,每层32个神经元,具有relu激活函数,输出层具有线性激活函数。
  使用分类交叉熵损失函数训练actor模型,使用均方误差损失函数训练critic模型。动作是根据actor模型预测选择的,并添加了用于探索的噪声。5、PPO
  PPO(ProximalPolicyOptimization)是一种策略算法,它使用信任域优化的方法来更新策略。它在具有高维观察和连续动作空间的环境中特别有用。PPO以其稳定性和高样品效率而著称。importnumpyasnpfromkeras。modelsimportModel,Sequentialfromkeras。layersimportDense,Inputfromkeras。optimizersimportAdamDefinethepolicymodelstateinputInput(shape(statespacesize,))policyDense(32,activationrelu)(stateinput)policyDense(32,activationrelu)(policy)policyDense(actionspacesize,activationsoftmax)(policy)policymodelModel(inputsstateinput,outputspolicy)DefinethevaluemodelvaluemodelModel(inputsstateinput,outputsDense(1,activationlinear)(policy))DefinetheoptimizeroptimizerAdam(lr0。001)forepisodeinrange(numepisodes):currentstateinitialstatewhilenotdone:Selectanactionusingthepolicymodelactionprobspolicymodel。predict(np。array(〔currentstate〕))〔0〕actionnp。random。choice(range(actionspacesize),pactionprobs)Taketheactionandobservethenextstateandrewardnextstate,reward,donetakeaction(currentstate,action)Calculatetheadvantagetargetvaluevaluemodel。predict(np。array(〔nextstate〕))〔0〕〔0〕advantagerewardgammatargetvaluevaluemodel。predict(np。array(〔currentstate〕))〔0〕〔0〕Calculatetheoldandnewpolicyprobabilitiesoldpolicyprobactionprobs〔action〕newpolicyprobpolicymodel。predict(np。array(〔nextstate〕))〔0〕〔action〕Calculatetheratioandthesurrogatelossrationewpolicyproboldpolicyprobsurrogatelossnp。minimum(ratioadvantage,np。clip(ratio,1epsilon,1epsilon)advantage)Updatethepolicyandvaluemodelspolicymodel。trainableweightsvaluemodel。trainableweightspolicymodel。compile(optimizeroptimizer,losssurrogateloss)policymodel。trainonbatch(np。array(〔currentstate〕),np。array(〔actiononehot〕))valuemodel。trainonbatch(np。array(〔currentstate〕),rewardgammatargetvalue)currentstatenextstate6、DQN
  DQN(深度Q网络)是一种无模型、非策略算法,它使用神经网络来逼近Q函数。DQN特别适用于Atari游戏和其他类似问题,其中状态空间是高维的,并使用神经网络近似Q函数。importnumpyasnpfromkeras。modelsimportSequentialfromkeras。layersimportDense,Inputfromkeras。optimizersimportAdamfromcollectionsimportdequeDefinetheQnetworkmodelmodelSequential()model。add(Dense(32,inputdimstatespacesize,activationrelu))model。add(Dense(32,activationrelu))model。add(Dense(actionspacesize,activationlinear))model。compile(lossmse,optimizerAdam(lr0。001))Definethereplaybufferreplaybufferdeque(maxlenreplaybuffersize)forepisodeinrange(numepisodes):currentstateinitialstatewhilenotdone:Selectanactionusinganepsilongreedypolicyifnp。random。rand()epsilon:actionnp。random。randint(0,actionspacesize)else:actionnp。argmax(model。predict(np。array(〔currentstate〕))〔0〕)Taketheactionandobservethenextstateandrewardnextstate,reward,donetakeaction(currentstate,action)Addtheexperiencetothereplaybufferreplaybuffer。append((currentstate,action,reward,nextstate,done))Sampleabatchofexperiencesfromthereplaybufferbatchrandom。sample(replaybuffer,batchsize)PreparetheinputsandtargetsfortheQnetworkinputsnp。array(〔x〔0〕forxinbatch〕)targetsmodel。predict(inputs)fori,(state,action,reward,nextstate,done)inenumerate(batch):ifdone:targets〔i,action〕rewardelse:targets〔i,action〕rewardgammanp。max(model。predict(np。array(〔nextstate〕))〔0〕)UpdatetheQnetworkmodel。trainonbatch(inputs,targets)currentstatenextstate
  上面的代码,Qnetwork有2个隐藏层,每个隐藏层有32个神经元,使用relu激活函数。该网络使用均方误差损失函数和Adam优化器进行训练。7、TRPO
  TRPO(TrustRegionPolicyOptimization)是一种无模型的策略算法,它使用信任域优化方法来更新策略。它在具有高维观察和连续动作空间的环境中特别有用。
  TRPO是一个复杂的算法,需要多个步骤和组件来实现。TRPO不是用几行代码就能实现的简单算法。
  所以我们这里使用实现了TRPO的现有库,例如OpenAIBaselines,它提供了包括TRPO在内的各种预先实现的强化学习算法,。
  要在OpenAIBaselines中使用TRPO,我们需要安装:pipinstallbaselines
  然后可以使用baselines库中的trpompi模块在你的环境中训练TRPO代理,这里有一个简单的例子:importgymfrombaselines。common。vecenv。dummyvecenvimportDummyVecEnvfrombaselines。trpompiimporttrpompiInitializetheenvironmentenvgym。make(CartPolev1)envDummyVecEnv(〔lambda:env〕)DefinethepolicynetworkpolicyfnmlppolicyTraintheTRPOmodelmodeltrpompi。learn(env,policyfn,maxiters1000)
  我们使用Gym库初始化环境。然后定义策略网络,并调用TRPO模块中的learn()函数来训练模型。
  还有许多其他库也提供了TRPO的实现,例如TensorFlow、PyTorch和RLLib。下面时一个使用TF2。0实现的样例importtensorflowastfimportgymDefinethepolicynetworkclassPolicyNetwork(tf。keras。Model):definit(self):super(PolicyNetwork,self)。init()self。dense1tf。keras。layers。Dense(16,activationrelu)self。dense2tf。keras。layers。Dense(16,activationrelu)self。dense3tf。keras。layers。Dense(1,activationsigmoid)defcall(self,inputs):xself。dense1(inputs)xself。dense2(x)xself。dense3(x)returnxInitializetheenvironmentenvgym。make(CartPolev1)InitializethepolicynetworkpolicynetworkPolicyNetwork()Definetheoptimizeroptimizertf。optimizers。Adam()Definethelossfunctionlossfntf。losses。BinaryCrossentropy()Setthemaximumnumberofiterationsmaxiters1000Startthetrainingloopforiinrange(maxiters):Sampleanactionfromthepolicynetworkactiontf。squeeze(tf。random。categorical(policynetwork(observation),1))Takeastepintheenvironmentobservation,reward,done,env。step(action)withtf。GradientTape()astape:Computethelosslosslossfn(reward,policynetwork(observation))Computethegradientsgradstape。gradient(loss,policynetwork。trainablevariables)Performtheupdatestepoptimizer。applygradients(zip(grads,policynetwork。trainablevariables))ifdone:Resettheenvironmentobservationenv。reset()
  在这个例子中,我们首先使用TensorFlow的KerasAPI定义一个策略网络。然后使用Gym库和策略网络初始化环境。然后定义用于训练策略网络的优化器和损失函数。
  在训练循环中,从策略网络中采样一个动作,在环境中前进一步,然后使用TensorFlow的GradientTape计算损失和梯度。然后我们使用优化器执行更新步骤。
  这是一个简单的例子,只展示了如何在TensorFlow2。0中实现TRPO。TRPO是一个非常复杂的算法,这个例子没有涵盖所有的细节,但它是试验TRPO的一个很好的起点。总结
  以上就是我们总结的7个常用的强化学习算法,这些算法并不相互排斥,通常与其他技术(如值函数逼近、基于模型的方法和集成方法)结合使用,可以获得更好的结果。
  作者:SiddharthaPramanik

医疗健康周报第5周合成生物公司微构工场完成3。59亿元人民币(本文为钛媒体Pro(专业版)用户专享)钛媒体Pro周报通过钛媒体TMTBase全球一级市场数据库,汇总国内外一周投融资事件和热点,旨在让投资人与创业者用户,以时间、数据……北大教授教你正确刷牙方法和大家一起来聊一聊口腔健康相关的一些问题。我们先来了解一下口腔保健的主角牙齿。大部分的恒雅在14岁左右出奇全部出奇一共28到32颗。刷牙出血怎么回事其中前面的8颗用……阿兰埃尔克森都回巴西了,为何阿洛伊西奥不走?真是因为爱国吗国家队比赛告一段落后,中国队内的几名佣兵里,阿兰和埃尔克森都提出了回到巴西的要求,目前也都已经回到自己的祖国巴西,而只有阿洛伊西奥坚持留在中国。阿兰是最早提出回国的,这一……吃红薯能降血糖还是升血糖?吃红薯好还是紫薯好?一次给你讲清楚李大姐年轻的时候最喜欢吃红薯,尤其是烤的。但是上了年纪的李大姐被诊断出了糖尿病,听说红薯淀粉含量极高,是升糖大户,李大姐不得不为了健康放弃了心头之好。而最近又听专家说红薯有降糖……宝宝多大穿拉拉裤别太纠结年龄,看3个信号,附选拉拉裤的5个细在超市的游乐场,看见一个宝宝边玩边拉扯纸尿裤,像是要把纸尿裤扯下来,宝宝的妈妈正坐在懒妈妈身边,不停地叫宝宝别扯纸尿裤,宝宝却不听她的,过了几分钟,宝宝终于成功了,只是,见宝宝……爱尔眼科们闷声发财的样子,让人羡慕极了本周一家叫普瑞眼科(SZ:301239)的公司登录科创板,很受投资者瞩目,连日大涨。金眼银牙,诚不我欺。都说眼科好,但到底有多好?眼科医院究竟是怎样一门生意?以普瑞……TypeScript入门指南新系列深入浅出TypeScript来了,本系列至少20篇。本文为第一篇,来介绍一下TypeScript以及常见的类型。一、为什么学习TypeScript?TypeS……跃跃御市2022格局基本落定,自主五虎提前成团出战来源:中国经济网王跃跃2022年,延续多年的自主三强格局迎来剧变。中国经济网此前一直看好的两支潜力股比亚迪和奇瑞(含捷途和星途),凭借百万辆的销量规模,提前一个月与吉利、……除了茅台五粮液,什么样的酒收藏价值更高?酒是人类最舒服朋友,酒是不能拿來收藏的,酒是帮助解头烦脑和给壮胆之灵魂,有酒很快就可解决做回神仙之乐!大部分人收藏酒不是为了卖,而是收藏在家放着,我倒觉得平民百姓不适合收……吃过最恐怖的食物是什么?贵州牛瘪火锅前两天被朋友问及这辈子吃过最恐怖的食物是什么,一下子让我想起了被牛瘪火锅支配的恐惧。先给大家科普下什么叫牛瘪火锅:牛瘪是用牛胃里未消化完的草熬制而成的。熬出来的汤汁呈绿色……炝拌包菜丝焯水多少时间是关键,很多人都做错了,厨师长教你做法今天和大家分享一道炝拌包菜丝家常做法,包菜不想再炒着吃了,可以试试这个做法,简单易学,有喜欢的赶紧学习一下。食材:包菜辅料:红辣椒、干辣椒、大蒜调料:陈醋、香……这就是为什么比特币的合理价格目前为42,000美元知名分析师CaprioleInvestments的创始人查尔斯爱德华兹(CharlesEdwards)在他的最新推文中分享了一项评估,即比特币的当前价格仍被严重低估。HashRibbon……
德国科学家找到储氢问题的解决方案盐氢是最理想的清洁燃料,它可以由越来越容易、越来越丰富的太阳能光伏电力来分解水来产生(电解过程),受控方式燃烧后产生的副产品仅仅是对我们有利用价值的水,零排放没有任何对空气环境的……新海南调查海口公交该如何升级?代表委员专家学者都来献计支招11月10日,海口市开始征集公交线网优化方案意见建议以来,新海南客户端、南海网、南国都市报联合推出了海口公交调查系列报道,引起了市民的广泛关注,并积极留言献计支招。那么,……人生不过3万多个日夜,每一天都是精彩的直播,很多人却在摆烂佛说人在出生之前是看过自己出生后一辈子要经历的生活,这是真是假也无从去争辩,但我认为是不对的,如果真的看过自己要走的路,难道哪怕前方满是荆棘也义无反顾的走入轮回吗,都说众生皆苦……山东省拟确定11家旅游景区为国家4A级旅游景区央广网北京10月17日消息据山东省文化和旅游厅消息,根据中华人民共和国国家标准《旅游景区质量等级的划分与评定》和《山东省旅游景区质量等级管理办法》,经有关市文化和旅游行政部门推……韩国辣白菜是怎么做的?美味无国界,好吃的食物就像金子一样,走到哪都会受欢迎,所以辣白菜能火也是很自然哒。辣白菜非常的开胃下饭,和别的食物在一起烹饪味道也很好。我做的辣白菜非常好吃,比我在外面店……央视直播!德约科维奇冲击温网第7冠,中国名将剑指新历史北京时间2022年7月10日,温网进入最后一个比赛日,男单决赛由德约科维奇对阵克耶高斯,前者冲击温网第7冠,后者全力争夺职业生涯第一个大满贯冠军。另外,中国名将张帅压轴登场,她……比特币基础概念问答系列(之三)答疑请出中本聪迎接新世界一文中的概念11。比特币的上涨是投机资金推动12。比特币高波动性,新人不要加杠杆13。比特币上涨的利好是什么14。观察比特币和区……Steam新一周销量榜漫威蜘蛛侠重制版第二IT之家8月14日消息,Steam公开了新一周(8月8日至8月14日)的销量排行,SteamDeck掌机十一连冠,索尼《漫威蜘蛛侠:重制版》包揽第二三名。IT之家了解到,……为什么要在全世界提倡推广在烹调食物时拒绝高温烹调的饮食文化?谢好友邀请;拒绝高温烹调食物是有道理的。人类是杂食性动物,百万年来都是生吃低温食物,能够繁衍下来,证明这种吃法是合理的。后来古人类吃到了被雷电烤熟、被森林草原……生脉饮有什么功效?治疗哪些病症?生脉饮:益气复脉,养阴生津的作用。用于缓解胸痹,心悸等症状,常用于治疗急性心肌梗死、心律失常、冠心病、肺结核、慢性支气管炎、神经衰弱等引起的心烦失眠,均有很好的疗效,另外,生脉……上海哪个区才是正宗上海人最多的?上海作为一个城市是1840年开埠后逐步形成的。郊区十县是1958年划归上海的。所以老南市区是老上海人最多的地方。当然是上郊区最多喽!是不是正宗上海人回家翻户口本祖籍就知道……成都猪肉从38跌到13元,为什么很多面馆及熟食店肉品不跟随降我在成都市新津区,去年由于疫情等特殊原因,猪肉每市斤由18元涨到了38元左右,每市肉疯涨20多元。面馆里每碗二面臊子面普遍由7元涨到8至9元,个别肥肠面每碗11元,汤锅店小分汤……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网