如何用算法玩转“飞翔小鸟”(下)
2019年09月01日 由 sunlei 发表
645441
0
在昨天的学习当中,我们了解了创建一个能够自动玩我们的超级游戏的算法所需的部分元素,今天我们继续关于剩余元素当中的“遗传算法”部分。
前文回顾:
https://www.atyun.com/43534.html
遗传算法部分
让我们回到最基本的…
遗传算法是基于达尔文进化论中物种进化四定律的进化算法。它们的操作非常简单,基于自然选择和遗传学的机制。这些算法的目的是获得任何优化问题的解决方案。在计算机科学中,这个过程与生物过程有些不同。
#LAB:群体的初始化,是遗传算法的第一步,包括初始化构成群体的每个个体的基因,也就是说,为构成群体的所有个体的所有基因赋值。然后,根据每个人在试用期的表现,给每个人分配一个能力得分,在这个阶段每个人都要接受原始问题的测试。这些分数将用于选择将要复制的个体。在交叉阶段,一个称为“交叉概率”的参数(通常介于0.7和0.9之间)表示发生交配的概率百分比。如果结果是有利的,那么将随机选择一个交叉点。繁殖个体的所有基因都会在两个“亲本”个体之间进行交换。两个“儿童”个体将由此产生,并取代人口中最弱势的两个个体。否则,如果结果是不利的,什么也不会发生。突变是遗传算法的最后一步。对于新群体中的每个个体,包括两个“儿童”个体,如果发生了交配,他们的一个基因将被随机选择并替换为随机选择的值。像交叉阶段一样,有一个“突变概率”,通常在0.1到0.5之间,这表明突变发生的几率。如果在该步骤之后达到停止标准,则算法停止,否则,当分配了能力得分时,过程恢复,并在循环中继续,直到达到停止标准。
但是我们的问题呢?
在我们的例子中,和大多数情况一样,两个最重要的步骤将是定义与初始问题直接相关的基因代表什么,以及定义计算适合度得分的函数。
我要提醒您,这个算法的目标是取代前面看到的前向和后向传播过程。因此,本文的目的是优化每个个体神经网络的权重系数。因此,我们的小鸟的基因将是它们的神经网络的权重系数,最初将为每个个体随机初始化,然后使用遗传算法进行调整,使每只甜心小鸟变得更强壮和更有效率。
为了让鸟类不断前进,取得更好的结果,必须加强最接近上述点的个体,最接近障碍物对和效果最好的个体之间的通道,以便它们能够传递自己的基因,从理论上讲,种群是更好的。
然后,我们将采用这个函数来计算适合度得分,因为它考虑了我们试图在一个人身上强调的所有标准。鸟的得分越高,它走的距离越远,它的健康分数越高,它与著名点之间的距离越短,它越靠近障碍物之间的通道,它失去的分数越少,因此它的健康分数越高。
之后呢?
在本文中,我们已经熟悉了构成人工智能的概念。在神经网络和遗传算法实现后,在我们最喜爱的游戏代码中,我们只需启动最后的程序。尽管一开始很混乱,但经过几代人的努力,人类的平均能力得分将不断提高,而智力越来越不可思议的温顺的鸟类将获得越来越高的分数,直到他们打破世界纪录。但是这个聪明的小生物能走多远呢?
迈向无限的一步…
如果我们的个人在第一个障碍中取得成功,那就意味着他已经知道如何成功地通过下一个障碍,同时也包括所有将要跟随的人。因此,由于他或多或少了解克服所有障碍的方法,错过下一个障碍的机会会随着新障碍的每次通过而减少。今天,让我们假设这一说法是正确的。我们定义事件Rₙ₊₁ :“最棒的鸟错过了n+1th的障碍物”。所以我们有:
根据我们的说法,如果鸟通过障碍物,则错过下一个障碍物的概率低于未通过前一个障碍物的概率。我们有:
一种减少a的方法是用一个比他大的数除以他。然而,概率总是在0和1之间,所以为了确保它总是大于被除的概率,除数必须严格大于1。因此,我们获得了失效概率随时间变化的潜在定义序列:
因此我们得到:
因此,我们从序列中推导出显式公式,并通过计算序列的极限继续推理:
因此,这个演示意味着,如果小鸟通过了大量的障碍物,它在下一个障碍物上失败的概率非常接近0,如果它通过了无限多的障碍物,它错过下一个障碍物的概率将是0。因此,由于人工智能的存在,飞鸟的世界纪录可能是无限的。唯一的问题是我没有足够的时间等到无穷大来验证这些结论。
最后…
在介绍了神经网络和遗传算法之后,您有了编写自己的Flappybird人工智能的所有关键,但尤其是将这些概念应用到其他项目中。如果你喜欢这篇机器学习的介绍,我希望你能在这里留下一个鼓励的声音。