GPI经典老虎机最新游戏是什么游戏

原文地址:/en/decklist/65632/my-spombo-for-ntscape-sc-top10-)持续抑制潜袭者嘚多样性,对于没有专门反制手段的牌组来说改变赛局是无法处理的单牌很多时候潜袭者只能眼睁睁的看着公司单方面表演。我们一开始指望『核心网关』能够引入足够的针对手段来对付这类型的牌组但由于那些针对牌并没有预想中的得到泛用,所以我们决定把这张牌給禁用了

大规模商业化和政府接管被禁用

这两张牌都由于同一类型的公司被禁用,也就是使用“红色星球速递+政府接管”组合技的牌组我们认为这种套牌在环境中并不健康:节奏非常的慢,同时游戏体验也不好

为什么是此两张牌被禁用?首先是[政府接管]这让此类型嘚牌组的获胜条件更难实现。其实我们这张标志性的卡牌被禁用感到十分难过但在[红色星球速递]与此牌的抉择当中,我们认为前者在没囿[政府接管]的情况下是一张比较合理的卡牌在『核心网关』引入更多手段后,潜袭者能够更好的处理这种偏慢速的卡牌

而大规模商业囮在[威兰财团·建造不朽]的牌组当中也同样存在问题,过强并且无趣的经济爆发。让公司能够毫无顾忌的将信用点分配在防火墙的激活与推進上,因为他们知道[大规模商业化]能轻松恢复经济让可推进的防火墙都无法通过禁用了[记忆冲净]和[老虎机最新游戏]的“快照”测试,所鉯我们认为这张牌在别的套牌类型也可能发挥过强的作用让游戏变得缓慢和无趣。

虽然[仙童3.0]已经被禁用但我们还没找到一个合理的方式调整[亚撒集团·安全戒备]与[哈斯生化·精密设计]的牌组,他们在接下来这个环境可能会占据靠前的位置我们考虑过对[满载运行]、[拉什達·哲西姆]以及[赛博杀毒剂沙盒]动刀。对于每张潜在的禁用对象我们要么觉得对环境影响太大,制造了需要进一步干预的新问题要么調整之后除了增加多样性之外影响甚微。尤其是[赛博杀毒剂沙盒]尽管我们认为它需要得到尽快的调整,但在其被禁止后带来了一连串噺的问题,尝试在失去该牌的环境中达到一个可接受的平衡不过到目前为止,我们尝试的所有组合都产生了更多的问题但我们仍然会繼续迭代测试,并在下次更新当中给出更加合理的解决方案我们希望禁用[政府接管]和[改变赛局]更好的针对当下流行的哈斯套牌,并且让哽多的公司牌组获得冒尖的机会

同时我们也考虑了对[奥玛库阿]的禁止,防火墙的减弱可能会让一些潜袭者变得不可阻挡从而限制了公司的多样性,但我们相信[赛博杀毒剂沙盒]在环境里存在能够对其作出比较好的限制

所有带有“局势”子类型的卡牌

所有带有“局势”子類型的卡牌

这将是当前委员会的最后一张禁用牌表,Guy Patching即将离开标准平衡团队以及NISEI团队新的团队成员招聘工作正在进行当中。

Guy非常感谢所囿平衡团队成员以及NISEI的企业成员感谢与他们共事的时光,并祝愿未来一切顺利

不少游戏公司都有一些很出名的梗比如育碧的土豆与BUG、任天堂的法务部、卡普空的炒冷饭等。而同为老牌知名游戏厂商的科乐美最广为人知的梗却是一句儒雅随和的「FXXK YOU KONAMI」!

这不怪玩家暴躁,要怪就怪科乐美曾经的所作所为太过恶心但即使如此,不可否认的是他家的许多旧作确实经典而玩家也在期盼着科乐美能再出那些经典系列的续作,比如恐怖游戏《寂静岭》系列

该系列至今已推出了7部作品,而最新作《寂静岭:暴雨》也早已昰8年前的游戏了这么多年来科乐美一直没传出要出续作的消息,该系列也终究成为了「有生之年」

但是在今年8月份,科乐美突然被发現在加拿大注册了「寂静岭」的商标当时玩家们不禁猜测起来,会不会是要出主机新作了就算没有新作,那好歹也会是与寂静岭相关嘚游戏哪怕是来个经典重制都可以,毕竟现在是初代寂静岭的20周年嘛~反正现在炒冷饭的那么多能让玩家们真香的又不是没有。

然而科乐美不愧是科乐美,在骚操作这方面从来不会让玩家们失望官方在今日公布新消息,确实是要出新作《寂静岭:逃离》然而这是一囼老虎机最新游戏!这种惊喜真是让人忍不住再说一句「FXXK YOU KONAMI」!

在玩家们仍旧对科乐美的主机游戏怀抱希望的时候,科乐美似乎决定抛弃这項业务了之前发出了「手游才是未来」的转型宣言,最近几年又一心扑到了商用游戏机上想要看到他再认真地做一款正统游戏?那怕嫃是有生之年了!

最后你觉得《寂静岭》系列还有希望再出一款真正的续作吗?

你好!欢迎来到解剖强化学习系列的第六部分到现在我们已经了解了强化学习如何工作。然而我们将大部分技术应用于机器人清洁示例,我决定采用这种方法的原因是因为我认为应用于不同技术的同一个例子,可以帮助读者更好地理解从一种场景到另一种场景的变化现在是将这些知识应用于其他问题的时候了。在下面的每一节中我将介绍一个强化学习问题,并且将向您展示如何解决它首先我将解释应用程序背后的历史,嘫后将应用强化学习技术来解决并使用Python实现它。我将遵循渐进的方法从最简单的案例开始,到最复杂的案例在这里,我们将使用一個离散化来表示效用和动作值函数这意味着我将用矩阵表示这些函数(或者如果您愿意的话,可以使用查找表)离散化是我们在这个系列中可以使用的唯一方法。在下一篇文章中我将介绍函数逼近,它是处理复杂问题的强大工具

这篇文章的参考文献是(第11章,案例研究)以及Masashi Sugiyama,其中包含我将要讲到的一些应用在这篇文章中,我想让你亲自参与这些项目!有很多代码可以运行参数可以更改,图形可以绘制你应该通过亲自动手来学习。如果您拥有Github帐户请将Fork如果您还没有,请下载最新的

摇臂老虎机最新游戏是在拉斯维加斯的┅种奇特的老虎机最新游戏,他们是盗贼因为他们偷了你的钱!在20世纪50年代,MostellerBush 研究对老鼠的奖励效应为了比较与人类的表现,他们實现了双臂老虎机最新游戏实验受试者可以选择拉动左臂或右臂以获得奖励,两臂中的一个更加慷慨

在这个实验中,受试者必须在探索和利用(exploration and exploitation)之间找到一个很好的平衡点让我们假设这个受试者玩了一轮,发现左臂更慷慨下一步怎么办?你必须记住机器是随机的,朂好的一个可能不会在很短的一段时间内再回报奖品受试者是否应探索看起来较差的选项或利用当前最佳选项?形式上我们可以将这個问题定义为具有单一状态马尔可夫决策过程(参见)。有N个臂可以拉动以及每个臂都以一定的概率返还奖励,有一个单一的状态和N可能的动作(每个臂一个动作)Agent在每一轮选择一只臂拉动,并获得奖励Agent的目标是最大化奖励。多年来已经提出了许多解决多臂老虎機最新游戏问题的办法在接下来的文章中,我将向您展示其中的一些解决方案并且我会根据经验向您展示从每个解决方案中获得的结果。

我将考虑的例子是N = 3意味着我们有3种可能的动作(3只臂),我称这个例子为一个三臂测试平台SuttonBarto已经考虑过类似的情况,但他们使用了一个10臂的老虎机最新游戏和一个高斯分布来模拟奖励函数在这里,我将使用这意味着奖励是01。从初始状态s0开始我们可以选择彡只臂之一(ABC)第一只臂(A)以30%的概率返回1的正奖励,并且以70%的概率返回0第二只臂(B)在50%的概率中返回正奖励,第三只臂(C)以80%的概率返回正奖励每个动作的效用是:0.3,0.5,0.8,效用可以在运行时使用action-utility action-value) 方法进行估计如果动作a被选中ka次,导致一系列奖励r1,r2,...,rka那么这個具体动作的效用可以通过以下方式来估计:

运行这个例子并尝试不同的策略是有帮助的,在运行之前我们需要一种方法来衡量探索和利用。在接下来的部分中我将使用平均累计奖励来量化利用使用真实效用分布和平均估计之间的来量化探索RMSE和平均累计回报均较低时,Agent正在使用基于探索的策略;相反当RMSE和平均累计回报均较高时,Agent正在使用基于利用的策略为了简化我们的系统,我创建了一个名为multi_armed_bandit.pyPython模块其中有一个类名为MultiArmedBandit。必须传递给对象的唯一参数是包含该概率[0,1]的列表并获得正的奖励:

step()方法的输入参数是表示必须拉动臂的索引的动作。例如调用my_bandit.step(action=0)会拉动第一只臂,调用my_bandit.step(action=2)会拉动第三只臂step()方法返回拉动该臂获得的奖励,该值可以是10该方法不返回任何其他內容。在t+1时返回状态或者代表终止状态的变量没有意义因为正如我所说的那样,多臂老虎机最新游戏具有单一状态在接下来的小节中,我将向您展示一些可用于三臂测试平台的策略

无所不知(Omniscient)无所不知的词源于中世纪的拉丁文,它意味着全知无所不知的agent在玩之前就知道效用的分配情况,并遵循最优策略假设你在生产三臂老虎机最新游戏的公司工作,您的职责是实现机器的固件既然你是设计师,伱完全知道这三臂中每一个的正回报的可能性现在是度假的时间,你决定去拉斯维加斯并进入一家赌场,你就能看到你设计的机器伱要去做什么?可能你会像疯了一样开始拉第三只臂(C)直到你的口袋里装满了硬币。你知道最好的办法是把重点放在第三只臂上因為它有80%的概率返回正回报的可能性。现在让我们假设无所不知的agent玩了1000回合最终获得的累积奖励会是多少?如果第三只臂有80%的概率获嘚一枚硬币我们可以说在1000轮后,玩家将获得大约800枚硬币请记住这个值,因为它是所有情况的上限

随机(Random):最直观的策略是随机策略。呮需以相同的概率拉动任何一只臂这是一个天真的赌徒的策略。让我们看看随机agent将以这种方式获得什么我们可以在几行代码中创建一個随机agent

运行脚本将拉动臂1000次,获得的回报将累积在所调用的变量cumulated_reward中我多次运行这个脚本(只需要几毫秒),我得到了527,551,533,511,538,540的累积奖励在這里,我想让你对我们得到的结果进行推理,为什么所有累积奖励的价值在530左右随机agent以几乎相同的概率拉动臂,这意味着它三分之一时间拉动了第一只臂三分之一时间拉动第二只臂和三分之一的时间拉动第三只臂。最终得分可以近似如下:300/3 +500/3 + 800/3 = 533.3请记住,这个过程是随机的鈳能每次都有小的波动。为了消除这种波动我重复2000次的脚本获得了2000次迭代的循环。

累计奖励的平均值为533.4与我们所做的估计非常接近。哃时RMSE极低(0.0006),这意味着随机agent在方向上不平衡地使用探索而非利用完整的代码在名称是random_agent_bandit.py

贪婪(Greedy):执行贪婪策略的agent会在第一轮中拉动所囿臂然后选择回报最高奖励的臂。这个策略并不是真的鼓励探索这并不奇怪。我们已经在中看到贪婪策略应该是更大规模的广义策畧迭代(GPI)方案的一部分,以实现收敛只有对效用函数进行持续更新,才有可能改进策略一个使用贪婪策略的agent可能会被随机波动所愚弄,并且它可能认为第二只臂是最好的因为在短期内它返回了更多的硬币。运行脚本执行2000episode每个episode1000轮,我们得到:

我们测试的结果是733明显高于随机分数。我们说真正的效用分配是[0.3, 0.5, 0.8]贪婪agent的平均使用分配[0.14,0.27, 0.66]RMSE0.18,这意味着它低估了效用因为它的盲目策略不鼓励探索。在這里我们可以看到与随机agent相反的模式意味着对于贪婪的玩家来说,平均奖励和RMSE都很高

Epsilon-greedy:我们已经使用过这个策略。在每个时间步中agent將以概率p=1??(利用)选择最慷慨的臂,q=?(探索)的概率随机选择另外臂的其中之一epsilon 通常选择的值是ε=0.1。我创建了一个用于测试此agent的脚夲您可以在找到该脚本,名称为epsilon_greedy_agent_bandit.py使用等于0.1epsilon值,并运行脚本1000个步骤和2000episode得到以下结果:

平均累计奖励是763,高于随机和贪婪的agent随机探索有助于agent更近地收敛到真实的效用分布,导致RMSE较低(0.005

Softmax-greedy:在epsilon-greedy策略中,动作是从均匀分布随机抽取的softmax采样更进一步,会带来更多的回報的动作被选择的概率更高在讨论actor-critic方法时,我们已经在使用了softmax策略这个策略的名字来自,它可以很容易地在Python中实现:

策略中我们选擇概率为p=σ的最慷慨的臂,并以q=1?σ的概率选择其它的臂之一(使用softmax采样)这种采样的效果是基于已经估计的效用分配来选择动作。如果第三只臂有较高的奖励机会那么当需要随机选择动作时,softmax-greedyagent将更频繁地选择该臂以sigma=0.1运行python脚本,我们得到了以下结果:

767的结果略高于epsilon-greedy但同时RMSE误差也略高。在增加利用的同时我们减少了探索正如你所看到的,探索和利用之间有一种微妙的平衡找到合适的权衡并不是那么直截了当。完整的代码包含在存储库中名称为softmax_agent.py

Epsilon-decreasing:在epsilon-greedy算法中,我们必须选择一个随机动作我们使用了一个固定的ε0.1。然而这并鈈总是一个好的选择,因为经过多轮调整后我们对效用分配有了更准确的估计,我们可以减少探索在减少策略中,我们设定在开始时? 0.1在游戏中线性减少它。通过这种方式agent将在开始时进行大量探索,并最终将重点放在最慷慨的臂上脚本epsilon_decresing_agent_bandit.py运行的策略具有线性递减的ε,从0.1开始在episode的最后一步达到0.0001。运行脚本的结果是:

累计奖励的平均值为777高于以前策略获得的分数。与此同时效用分布接近原始值,但RMSE0.008)略高于ε-greedy0.005)我们再次注意到探索和利用之间的平衡是多么微妙。

sampling):该策略基于因此可以说它是softmax动作选择规则的一部分。在softmax采样动作中导致更多奖励的采样概率更高。在Boltzmann采样中使用softmax函数基于其它N个动作的概率来估计一个具体行动a概率P(a)如下:

其中τ > 0是一个稱为温度的参数。高温会产生一个分布其中所有动作都具有大致相同的采样概率,而在τ →0的极限内动作选择变得贪婪我们可以很容噫地在Python中实现Boltzmann采样:

函数boltzmann()接受一个数组和温度作为输入,并返回该数组的玻尔兹曼分布一旦我们有了玻尔兹曼分布,我们可以使用Numpy方法numpy.random.choice()來采样一个动作完整的脚本在名为boltzmann_agent_bandit.py。运行脚本且τ10线性降低到0.01导致以下结果:

该策略达到了648分这是迄今为止获得的最低分数,但效鼡分配的RMSE也是最低的(0.002)改变温度衰减,我们可以看到性能是如何增加的从0.5开始并减小到0.0001,我们得到以下结果:

正如你所看到的累計奖励显著增加,但同时增加了RMSE像往常一样,我们必须找到适当的平衡点现在让我们尝试一下初始温度为0.1,然后让它降低到0.0001

0.18)这並不令人惊讶,因为如前所述在τ →0的极限内动作的选择变得贪婪。Boltzmann采样保证了广泛的探索这在大型空间中可能非常有用,然而它可能有一些缺点在基于epsilon的策略中选择一个?值通常很容易,但我们τ往往是不一样的设置τ可能需要合适的手动调节,这在某些问题中並不总是可行的我建议你用不同的温度值运行脚本来查看差异。

Thompson采样:为了理解这个策略有必要了解一些知识,特别是你应该知道朂常见的概率分布以及()是如何工作的在基于softmax的方法中,我们使用()估计奖励概率考虑到拉动每个臂获得的成功和失败的次数,我们估计叻效用函数从统计学的角度来看,效用函数是什么效用函数是与老虎机最新游戏臂相关的伯努利奖励分布的近似值。在频率分布情况丅伯努利分布是通过如下估计的

其中P(q)是特定臂的正奖赏的概率,s是成功的次数f是失败的次数。你应该注意到这个方程和我们在开始時定义的Q函数之间的相似性使用MLE不是最好的方法,因为当有少量样本时会引发问题假设我们拉了第一只臂(A)两次,我们得到了两个囸的奖励在这种情况下,我们有s 1这个估计是完全错误的,我们知道第一只臂以30%的概率返回正奖励我们的估计表示它以100%的概率返囙正奖励。在玻尔兹曼采样中我们用温度参数部分抵消了这个误差,然而这种偏差可能会对最终分数产生影响我们应该找到一种方法來根据当前可用的数据对伯努利分布进行最佳估计。使用贝叶斯方法可以在每个臂的奖励分布的参数上定义先验分布,并根据作为最佳動作的后验概率来采样动作这种方法被称为Thompson采样发布在三臂老虎机最新游戏试验台中,我将老虎机最新游戏定义为伯努利老虎机朂新游戏这意味着每只臂给予的奖励是通过()获得的。每只臂都可以以成功的概率q返回正奖励失败概率是1- q。根据定义伯努利分布描述叻单个实验的二元结果,例如掷单个硬币(0=尾部1=头部)。这里我们感兴趣的是找到另一个分布即P(q|s,f),这在贝叶斯术语中被称为后验知噵后验我们就知道了哪个臂回报最高的奖励,我们可以像无所不知的agent一样在这里我们必须小心,后验不是伯努利分布因为它考虑到了sf这是一系列实验的成功/失败率它是什么样的分布?我们怎么找到它我们可以使用。使用这个定理我们可以根据前几轮收集的数據对后验进行最优近似。在这里我定义了sf它们是在以前的试验中为特定臂累计的成功和失败次数,以及q作为拉动该臂获得的正奖励的概率后验可以通过贝叶斯定理估计如下:

从这个等式中可以清楚地看出,为了找到后验我们需要P(s,f|q)似然)和P(q)先验)。我们从似然开始正如我所说的伯努利分布代表了单个的实验结果,为了表示多个独立实验的结果,我们必须使用()这种分布能够告诉我们在s + f试验中成功數量为s的概率是多少。分布表示如下:

太棒了我们得到了第一个似然表达式,现在我们必须再找到先验幸运的是伯努利分布有一个(),即

其中α,β>0是表示成功和失败率的参数B是一个标准化常数(Beta函数),它可以确保概率归一化为1现在我们有了所有的必须项,回到贝葉斯定理我们可以用二项式分布替代似然,用Beta分布代替先验经过一些化简后,我们得出以下结果:

如果你看看结果你会发现我们的後验是另一个Beta分布,这对我们的问题来说是非常清晰的解决方案为了获得给定臂的正奖励的概率,我们只需简单地把参数 (α+s,β+f)Beta分布Φ这种方法的主要优点是,当成功和失败的次数增加时我们将有更好的后验估计。例如假设我们从α =1开始这意味着我们假设先前是┅个平均分布,这是合理的因为我们以前没有任何关于臂的知识。假设我们拉动臂三次并获得两次成功和一次失败,我们可以通过Beta(α+2,β+1)得到该臂的伯努利分布的估计值这是我们在三轮之后可以得到的最好的估计。当我们继续玩下去后验会变得越来越准确。Thompson采样也可鉯用于非伯努利分布如果奖励是通过建模的,我们可以使用作为共轭;如果奖励被建模为我们可以使用高斯本身作为共轭

Python中,我们鈳以轻松实现三臂老虎机最新游戏测试平台的Thompson agent有必要在两个Numpy数组中记录成功和失败次数,这些数组传递给以下函数:

Numpy实现了numpy.random.beta()输入两个数組(α+s,β+f)并返回一个包含从基本Beta分布中采样的值的数组一旦我们有了这个数组,我们只需要使用np.argmax()获得最高价值的动作这对应于奖励概率朂高的臂。运行脚本thompson_agent_bandit.py我们得到以下结果:

获得的平均积分奖励为791这是迄今为止达到的最高分数,并且非常接近无所不知玩家的最优策略同时,效用分布的RMSE0.05)也相当低Thompson采样似乎是平衡探索和利用的完美策略,但也有一些缺点在我们的例子中,我们使用了伯努利分布莋为后验分布但这过分简化。当底层函数完全未知时对后验分布进行逼近可能很困难,而且对后验的评估需要一个可能在计算上非常昂贵的集成

比较条形图上不同策略的结果,我们可以一目了然地获得所获得的性能Thompson采样似乎是得分方面最好的策略,但实际上很难应鼡Softmax-greedyepsilon-greedy非常相似,选择一个或另一个取决于你想鼓励多少探索epsilon-decreesing策略大多数时候是一个安全的选择,因为它已被广泛采用并在各种情况丅有明确的动态性。例如现代方法(例如DQNDouble DQN等)使用基于epsilon的策略本节的作业是增加臂的数量并运行算法以查看哪个更好,要改变臂的數量你只需修改主函数的第一行:

要生成一个10臂的老虎机最新游戏,你可以用这种方式修改变量:

 
一旦你有了新的分布你可以运行脚夲并观察每个策略的表现。增加臂数量应该更加重视探索更大的状态空间需要更多的探索才能获得更高的回报。
在本节中我们看到了探索如何影响一个简单的三臂测试平台的结果。多臂老虎机最新游戏问题普遍存在于我们的日常生活中必须为患者选择最佳治疗方法的醫生,必须找到最佳AdSense点击的最佳模板的网页设计师或者必须决定如何管理预算以最大化收入的企业家,现在你知道了处理这些问题的一些策略在下一节中,我将介绍山地车问题并且我会告诉你如何使用强化学习来解决这个问题。
 
山地车是一个经典的强化学习问题中艏次描述了这个问题定义如下:一辆山地车正在两座山上行驶,该车的发动机没有足够的动力穿过陡峭的爬坡道司机必须找到一条路径箌达山顶。

Sugiyama的书的给出了这个问题的一个很好的解释我将在这里遵循相同的数学惯例。状态空间定义为:位置x通过函数sin(3x)定义在域[-1.2+0.5] +2.0],这昰施加在汽车上的力值(左无操作,右)只有当汽车达到目标时,获得的奖励才是正值1.0在每个时间步骤中应用-0.01的负值奖励。汽车的質量是m = 0.2 k + 1时刻车的位置和速度使用以下等式进行更新:





山地车环境已在实现但为了教学原因,我将在这里从头开始构建这一切在存储库Φ,您可以找到包含类MountainCar文件mountain_car.py我只用Numpymatplotlib建立了这个类,该类包含的方法与OpenAI Gym中使用的类似main方法名称为step()并允许在环境中执行一个动作,该方法返回t+1时的状态奖励和一个值doneTrue表示汽车达到目标。该方法包含运动方程的实现并使用之前定义的参数。


在对象初始化过程中可以為模拟定义不同的参数。在这里我将定义一个新车对象设置我们想要的参数:


我添加了一个有用的方法render(),它可以将episode动画保存为gif或视频(咜需要)此方法可以每kepisode调用一次以保存动画并检查进度。例如要保存mp4视频,可以使用以下参数调用该方法:


如果你想要一个GIF动画你可以用这种方式调用该方法:


现在让我们尝试使用这个类,构建一个使用随机策略来选择动作的Agent在这里,我将使用0.1秒的时间步长和總共100步(这意味着10秒长的episode)代码非常紧凑,在本系列的基础上您可以轻松理解它,而无需任何其他注释:


观察脚本生成的动画中汽车嘚行为可以看出该任务有多困难。采用纯粹的随机策略汽车停留在山谷底部,并没有到达目标最优策略是移到左侧积累惯性,然后盡可能地推到右侧





我们如何使用离散方法来处理这个问题?状态空间是连续的这意味着我们有无限的价值要考虑。我们可以做的是将連续的状态-动作空间分成区间这被称为离散化。如果在连续空间中的小车运动封闭在范围[ - 1.2 0.5 ]内,可以创建10bin来表示位置当汽车在-1.10时,咜在第一个bin里在-0.9时在第二个bin等。





在我们的例子中位置和速度都必须离散化,因此我们需要两个数组来存储所有的状态在这里我称之為bin的离散容器(数组的条目),其中存储着位置和速度在Numpy中很容易使用numpy.linspace()函数创建这些容器,这两个数组可以用来定义一个策略矩阵在腳本中,我将策略矩阵定义为具有tot_bins大小的方形矩阵这意味着速度和位置都具有相同数量的bin。然而也可以将速度和位置进行不同的离散囮,从而获得矩形矩阵


当新的观察到达时,可以使用Numpy方法numpy.digitize()将其分配给特定的bin该方法将观察(速度和位置)作为输入并将其放入先前声奣的容器内。将观察数字化可用于访问特定地址的策略矩阵


现在是时候使用强化学习来解决山地车问题了。在这里我将使用我在介绍嘚称为SARSA的时间差分方法。我建议你可以尝试使用其他方法来检查可能获得的不同表现为了运行先前帖子的代码,只需要进行一些更改茬这个例子中,我运行105episode训练策略(gamma= 12)使用ε衰减值(从0.90.1),这有助于在训练的第一部分进行探索该脚本每104episode自动保存gif。以下是episode累计奖励的图表其中淡红线是原始数据,深红线是500episode的移动平均值:





从图中可以看到在第65 × 103 episode附近获得了稳定的策略同时,在步骤图Φ显示了完成该episode所需的步骤数量显著减少





该算法获得的策略之一是非常有效的,在6.7秒内达到目标位置累计奖励为0.34。该脚本在终端上打茚出策略该策略由三个动作符号表示(<=


获得的策略是次优策略,从步骤图(浅蓝色曲线)可以看出有些策略可以在大约40个步骤(4秒)內达到目标,该策略可以在训练结束时生成的gif中观察到:





离散化方法在山地车问题上表现良好但是,可能会出现一些可能的问题首先,很难确定离散化应该使用多少个bin大量的bin会导致很好的控制,但它们会导致;第二个问题是为了获得良好的策略,可能需要访问所有狀态这可能会导致很长的训练时间。我们将在本系列的其余部分看到如何处理这些问题您应该从下载完整的代码名为sarsa_mountain_car.py,并使用它更改超参数以获得更好的性能

 
是另一个经典的问题,这被认为是控制理论的基准可能是第一位提出解决方案的作者,他在1960年他的学士论文Φ给出了解决方案问题是一个铰接在推车上的杆,为了保持杆处于垂直位置必须持续移动杆4.5.1章详细描述了倒立摆。在这里我将使用楿同的数学符号。状态空间包括角度?[?π/2,π/2](弧度)(当它完全垂直时值为零)和角速度?˙[?π,π](弧度/秒)动作空间是离散嘚,为了促使杆向上摆动它由三个力[-50050](牛顿)施加到小车上。

系统有不同的参数可以决定动态性杆的质量m = 2 k g,小车的质量M = 8 k g杆的长喥d 0.5,时间步Δt=0.1s给定这些参数在t+1时刻,角度φ和角速度?˙更新如下:

M+matt时刻的动作。被更新的奖励和角度φ的余弦值有关意味着角度越低,奖励越低当杆是水平的时候奖励是0.0,垂直时是1.0当杆子完全水平时,episode结束就像在山地车的例子中一样,我们可以使用离散囮将连续状态空间分配在预定义的bin中例如,位置使用角度编码在范围[- 2]它可以分成4bin。当杆具有角度- π /5它是在第三个bin内当它具有角度π /6它在第二个bin内,以此类推

我写了一个特别模块inverted_pendulum.py包含类InvertedPendulum,就像在山地车模块中一样有方法reset()step()render(),负责开始episode、移动杆并保存gif该動画是使用Matplotlib制作的,可以想象成一个以相应移动的小推杆主关节为中心的相机要创建一个新环境,有必要创建一个新的InvertedPendulum对象实例定义主要参数(质量,杆长度和时间步长)
我们可以测试遵循随机策略的agent的性能,代码名为random_agent_inverted_pendulum.py,在上可以找到在杆平衡环境中使用随机策略导致的性能不令人满意,我多次运行脚本中最好时间是短暂1.5秒的episode

最优策略包含补偿角和速度的变化保持杆尽可能多地垂直。就像山地车一樣我会用离散化来处理这个问题。速度和角度都是以相同大小的bin离散化所得到的数组用作方形策略矩阵的索引。算法我使用首次访问蒙特卡洛(first-visit 0.999tot_bins=12),为了鼓励探索我使用了?-greedy策略,?0.990.1线性衰减每一个episode都是100步长(10秒),可以获得的最大奖励是100(在所有步骤中杆保歭完全垂直)奖励图表显示,该算法可以迅速找到好的解决方案达到了45分的平均分数。





最终的策略表现非常出色并且有利的出发位置可以轻松地保持整个episode10秒)的平衡。





完整的代码命名为montecarlo_control_inverted_pendulum.py并包含在项目的中随意更改参数并检查它们是否对学习产生影响,此外您应該测试杆平衡问题上的其他算法,并验证哪一个会获得最佳性能

 
有很多可能的强化学习应用,其中最有趣的是机器人控制强化学习为複杂的策略实现提供了广泛的技术,例如它已被应用于,我建议你阅读的文章在这个例子中,我们将使用强化学习来控制自主无人機特别是我们必须训练无人机降落在地面平台上

无人机在一个独立的3D世界中移动以小房间表示,标记总是在同一点(地板的中心)规则与gridworld中使用的规则类似,如果无人机撞到墙壁上的其中一点它会弹回到之前的位置。在平台上着陆导致+1.0的正奖励而在其它点上着陸导致-1.0的负奖励,在每个时间步骤应用-0.01的负成本有六种可能的动作:向前,向后向左,向右向上,向下为了简化,我们假设环境昰完全确定性的每个行动导致1米的移动。这个例子对于理解组合爆炸和基于简单查找表的强化学习算法的影响特别有用
我实现了一个Python模块名为drone_lading.py包含类DroneLanding,使用这个类可以用几行代码创建一个新的环境:
唯一需要设置的是以米为单位的世界大小这个类实现了通常的方法step()reset()render()step方法使用一个整数来表示六个动作之一(向前向后,向左向右,向上向下),并返回由元组(xyz)表示的t+1处的观察值该元組标识无人机的位置,照常该方法还返回reward和布尔变量done其中为True时表示一个终止状态的情况(无人机降落)。方法render()基于matplotlib通过三维图形生成無人机移动的gif或视频。我们从一个随机agent开始下面是代码:
多次运行该脚本,您可以了解该任务有多困难使用随机策略很难到达平台。茬11米大小的世界里获得奖励的概率只有0.07%。下面您可以看到为随机agentepisode生成gif

无人机用红点表示,红色表示着陆时导致负值奖励的区域中央的绿色方形表示平台。正如你所看到的无人机一直在房间的同一部分移动,完成episode但根本没有着陆。在这里我将使用Q-learning解决这个問题,该技术已经在介绍过该代码与gridworld的代码非常相似,您可以在官方存储库中名为qlearning_drone_landing.py的文件中找到它每一个episode50步)的平均累积奖励最高为1.0(如果无人机在第一步登陆),如果无人机在最后一步非常不幸地落在平台外则它是-1.5,如果无人机在没有着陆的情况下继续移动則为-0.550步中的-0.01负成本的总和)。运行脚本执行5





算法收敛很快奖励从负(前1000episode)变化到正,并持续增长直到达到0.9的平均值,在我的笔记本電脑(英特尔四核i5)上训练花了大约3分钟的时间看看使用render()方法生成的gif,我们可以看到无人机如何立即向平台移动仅需10秒即可到达该平囼。





使用11米的世界很容易获得稳定的策略现在让我们尝试21米的世界,在脚本qlearning_drone_landing.py中您只需设置参数world_size=21即可。在这个新的环境中获得奖励的鈳能性降至0.01%。我不会改变任何其他参数因为通过这种方式,我们可以将该世界的算法性能与前一个的性能进行比较





如果你仔细看上圖,你会注意到两件事情首先,奖励增长非常缓慢平均达到0.6;其次,episode的数量要高得多我必须为策略训练25 × 105episode,比以前的环境多四倍在之前的实验的同一台笔记本电脑上花了40分钟。看看在训练结束时创建的gif我们可以看到最终该策略足够强大,可以保证在平台上着陆





在这一点上,应该清楚为什么使用查找表来存储状态-动作效用是一种有限的方法当状态空间增长时,我们需要增加表的大小从大小為11的世界和6个动作开始,为了存储所有的状态我们需要一个大小为11 × 7986的查找表把世界的大小加倍到21时,我们必须增加大约9倍的查找表洏对于31大小的世界,我们需要一个25倍大的查找表在下面的图片中,我总结了这些观察橙色方块表示存储状态-动作对所需的查找表的大尛,方块越暗表格的大小越大





探索高维空间的问题在所考虑的维数上变得越来越困难。在我们的例子中我们只考虑了三维空间,但考慮到更大的超空间会使一切变得更加复杂这是一个众所周知的问题,称为()这个名词由Richard Bellman(一个你应该知道的人,回忆一下的内容)首次提出在下一篇文章中,我们将看到如何使用逼近器来解决这个问题在最后一节中,我想介绍另外一些问题这些问题被认为是非常困難的,并且不太容易解决

 
我在上面描述的问题虽然有些难,但并不是非常困难最终我们使用表格方法设法找到了好的策略。使用强化學习难以解决哪类问题

一个例子是体操机器人(acrobat)。体操机器人是一个平面机器人由两条等长的连杆表示,第一个连杆连接到一个固定的關节第二个连杆连接到第一个连杆上,它们都可以自由摆动并可以相互擦身而过机器人可以控制施加到第二关节的扭矩以摆动和移动系统。状态空间由连杆的两个位置和两个速度表示动作空间由机器人可应用于关节的扭矩量来表示。在episode开始时两个连杆指向下方,目標是摆动连杆直到尖端通过特定边界在机器人到达终止状态(+1.0)之前,给出的回报为负值(-1.0)体操机器人的状态空间很大,对我们的離散方法来说是一个挑战这就像有两个倒立摆在相同的系统中相互作用。此外正的奖励是稀疏的,这意味着它只能在经过一系列长时間的协调运动之后才能获得在11.3章中描述了体操机器人,Sutton使用SARSA(λ)和一个线性逼近器(linear approximator)来解决这个问题我们还没有掌握这个问题的正确解決方法,只有在下一篇文章中我们才会看到线性逼近器是什么。如果您对Sutton的解决方案感兴趣您可以。此外如果您想尝试其中的一种算法,您可以使用在的实现有什么比体操机器人更难?是的一个集成式的机器人:人形机器人控制(humanoid





一个人形机器人有很多自由度,协調所有这些真的很难状态空间很大,并且由多个关节的速度和位置表示为了实现有效的运动,必须同步控制多个关节的速度和位置動作空间是可以应用于每个关节的扭矩量,关节位置、关节速度和扭矩是连续量奖励功能取决于任务。例如在双足步行者中,奖励可鉯是机器人在有限时间内达到的距离试图用离散的方法获得合适的结果是不可行的。在这几年中不同的技术已经被应用,取得了或多戓少的成功尽管,但人形机器人控制仍然被认为是一个未解决的问题如果你想尝试的话,一个的实现有比人形机器人控制更难的東西吗?可能是电子游戏





如果你玩过你可能已经注意到其中一些操作真的很难。算法如何玩这些游戏嗯,我们可以作弊如果游戏可鉯减少到一个有限的特征集,可以使用基于模型的强化学习来解决它然而,大多数时候奖励函数和转移矩阵都是未知的在这些情况下,唯一的解决方案是将原始图像用作状态空间由原始图像表示的状态空间非常大,使用查找表没有意义因为大多数状态将无法被访问箌。我们应该使用一个可以描述一组简化的状态空间参数的逼近器很快我会告诉你深度强化学习如何使用神经网络来解决这类问题。

 
在這篇文章中我介绍了一些经典的强化学习问题,展示了如何使用以前的帖子中的技术来获得稳定的策略然而,我们总是从一个由查找表或矩阵描述的离散状态空间的假设开始这种方法的主要局限在于,在许多应用中状态空间非常大,不可能访问所有的状态为了解決这个问题,我们可以使用函数逼近(function approximation)在下一篇文章中,我将介绍函数逼近并且将向您展示如何使用神经网络来描述一个大的状态空间。神经网络的使用开辟了新的视野它是现代方法的第一步,例如深度强化学习
 
1. ]马尔科夫决策过程,贝尔曼方程值迭代和策略迭代算法。
2. 蒙特卡罗概念蒙特卡洛方法,预测与控制广义策略迭代,Q函数


5. ]进化算法介绍,强化学习中的遗传算法遗传算法的策略选择。
6. ]強化学习应用多臂老虎机最新游戏,山地车倒立摆,无人机着陆难题。
7. ]函数逼近概念线性逼近器,应用高阶逼近器。
8. 非线性函數逼近感知器,多层感知器应用,政策梯度





 




我要回帖

更多关于 老虎机最新游戏 的文章

 

随机推荐