在Unity3D中开发的遗传算法插件(Genetic Algorithm)

1. 本文目的

本文简要地对遗传算法进行阐述,让以前没有接触过遗传算法的人有个大概的认识,并了解遗传算法的工作原理

2. 生物的遗传与进化

(1)基因组(genome):生物细胞中的染色体组包含了复制该生物所需的全部信息,染色体 中的这一集合就被称为生物机体的基因组。

(2)杂交(crossover):当两个生物机体配对和复制时,它们的染色体互相混合,产生一个 由双方基因组成的全新染色体组,这一过程就叫杂交。这意味着后代继承的大部分可能 是上一代的优良基因,也可能继承了它们的不良基因。如果是前一种情况,后代就可能 变得比它的父母更优秀,而对于后一种情况,后代就可能变得不如它的父母。

(3)变异(mutate):当基因传递给子孙后代的过程中,会有很小的概率发生差错,从而使 基因得到微小的改变。生物的进化都是利用无数微小的变异发展而来的,前提是这些变 异是对生物生存有利的变异。

(4)适应性分数(fitness):越是能适应环境的子孙后代就越有可能继续复制基因并将其传 给下一个子孙后代。由此就会显示一种趋势,每一代总是比它的上一代更优秀。


3. 计算机中的遗传算法

遗传算法在计算机中的工作过程实质上就是模拟了生物的进化过程。

(1)首先,应确定一种编码方法,使得问题的任何一个潜在的可行解都能表示成为一个“数 字”染色体。

(2)然后创建一个由随机的染色体组成的初始群体(每个染色体代表一个不同的候选解), 并在一段时期中用于培育适应性最强的个体的办法,让它们进化。

(3)在此期间,染色体的某些位置上要加入少量的变异。

(4)经过许多代后,遗传算法将会收敛到一个解,但遗传算法不能确保一定能得到解,如 果有解也不确保找到的是最优解,但只要采用的方法正确,通常都能为遗传算法编出一 个能够运行很好的程序。

(5)遗传算法的最大优点就是,你不需要知道怎么去解决一个问题,仅需要知道用什么样 的方式对可行解进行编码,使得它能被遗传算法机制所利用。

4. 遗传算法中对其他名词的解释

(1)杂交率:杂交率就是用来确定两个染色体进行局部互换以产生两个新的子代的概率。

(2)变异率:变异率就是对染色体进行位变异操作的概率。

(3)TSP巡回销售员问题(Traveling Salesman Problem) : 给定几个城市,巡回销售员必须决定一条最短的路线,使他能够访问到每个城市一次, 然后返回他的起点。

5. 遗传算法的实现

通常代表可行解的染色体采用某种方式进行编码。在运行开始时,首先创建一个染 色体的种群,当一个初始群体已经被创建好了后,就开始做下面的一系列工作了:

不断循环,直到寻找出一个解

1. 检查每个染色体,看它解决问题的性能怎样,并相应地为它分配一个适应性分 数。

2. 从当前群体选出两个成员。选出的概率与染色体的适应性成正比,适应分数越 高,被选中的概率越大。常用的方法就是轮赌选择法(roulette wheel selection)。

3. 按照预先设定的杂交率(crossover rate),从每个选中染色体的一个随机确定的点 上进行杂交。

4. 按照预定的变异率(mutation rate),通过对被选染色体的位的循环,把相应的位进 行翻转。

5. 重复步骤 2,3,4,直到新的群体被创建出来。 结束循环

算法由步骤 1 到步骤 5 的一次循环称为一代(generation)。这里把整个的循环称 为一个时代(epoch)。


本插件下载地址:http://u3d.as/11Rf

本文转自:游戏开发者-SwordMaster,转载此文目的在于传递更多信息,版权归原作者所有。

推荐阅读