本人在Unity3D中开发的遗传算法插件的介绍

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)。


6. 遗传算法的常用算子 

(1)染色体采用二进制编码的遗传算法 

选择算子

精英选择法 (Elite Selection): 精英选择是一种能够确保种群中具有最高适应性分数的成员能过渡到下一代的方法

轮赌选择法 (Roulette Wheel Selection): 从染色体种群中选择一些成员的方法,被选中的几率和它们的适应性分数成比例, 适应性分数越高的染色体被选中的概率越大。但这不保证适应性分数最高的成员一 定能选入下一代,仅仅说明它有最大的概率被选中。

杂交算子

单点杂交算子 (SinglePoint Crossover): 单点杂交仅仅将父代的基因组在随机位置切断,并交换其尾部

双点杂交算子 (DoublePoint Crossover): 双点杂交需要将基因组在两个位置上断裂开来,并交换之间的基因块

多点杂交算子 (MultiPoint Crossover): 多点杂交就是沿着父代染色体长度,逐位逐位地按照杂交率来随机地交换基因

变异算子

多点变异算子 (MultiPoint Mutate): 沿着染色体的长度,根据变异率,进行变异操作

适应性分数变比算子

排名变比 (Rank Fitness Scaling):  采用按适应性分数多少的名次来改变适应性分数。

(2)染色体采用十进制整数编码用于解决 TSP 问题的遗传算法 

选择算子

轮赌选择法 (Roulette Wheel Selection): 从染色体种群中选择一些成员的方法,被选中的几率和它们的适应性分数成比例,适应性分数越高的染色体被选中的概率越大。但这不保证适应性分数最高的成员一定能选入下一代,仅仅说明它有最大的概率被选中。

适应性比例选择 (Fitness Proportionate Selection): 这一类型的选择技术的挑选后代的原则,就是把较高的被选中概率赋给那些较高 适应性分数的个体,即每个个体都有一个被选中进行复制的期望值。该预期值等 于该个体的适应性分数除以种群的平均适应性分数。 精英选择法 (Elite Selection): 精英选择是一种能够确保种群中具有最高适应性分数的成员能过渡到下一代的方法。

稳态选择法 (Steady State Selection): 稳态选择的原理和精英选择有些类似,不过不是在最优的个体集中选出少量个体 进入下一代,而是把当前种群中,除去少数几个表现最差的个体后,全部保留起 来。被保留的个体接着要利用通常的变异和杂交算子来选择。稳态选择在解决某 些问题时确实证明很有用,但对于大多数问题而言,它不被推荐使用。

随机遍及取样选择法 (Stochastic Universal Sampling Selection): 随机遍及取样试图解决适应性比例选择应用于小种群上时出现的问题。它不是用一个轮盘旋转几次来获取新种群。而是使用了 n 个均匀隔开的指针,指针的个数 同于所需后代的个数 ,只需旋转一次,就可得到新种群的所有个体 锦标赛选择法 (Tournament Selection): 首先是在种群里随机地挑选出 n 个个体,然后将这些基因组中适应性分数最高的 个体加入新种群。任何被选中的个体并不从原种群里移走,因此有可能被重复多 次选中。

杂交算子

部分映射的杂交算子 (Partially-Mapped Crossover Operator): 随机选出两个杂交点观察两个父代的中段,并记下其中的对应关系,逐个地检查两个父代基因组中的每个基因 ,每次找到和上面列出的基因之一相匹配的基因,就进行交换,一步一步地进行下去。

基于顺序的杂交算子 (Order-Based Crossover): 在父代上随机挑选几个城市,所选出的城市的排列顺序将施加到子代同样一些城市 的排列顺序

基于位置的杂交算子 (Position-Based Crossover): 类似基于顺序的杂交,但要把使用城市的顺序,替代为使用城市的绝对位置。

变异算子

移位变异算子 (Displacement Mutation): 随机选择两个点,取出其间的染色体段,插入到剩余染色体的一个随机位置上

交换变异算子 (Exchange Mutation): 在染色体上选择 两 个基因进行交换 插入变异算子 (Insertion Mutation): 与 移 位 变 异 算 子 类 似 ,唯 一 不 同 点 是 插 入 变 异 算 子 一 次 只 取 出 一 个 基 因 并 插 回 染 色 体

散播变异算子 (Scramble Mutation): 随机地选择一对位置,将其间的城市进行任意的移动

适应性分数变比算子

排名变比 (Rank Fitness Scaling): 采用按适应性分数多少的名次来改变适应性分数。

西格玛变比 (Sigma Fitness Scaling): 使遗传算法在运行期间保持稳定的选择压力 ,在开始时,适应性分数分布得很散,适 应 性 较 高 的 个 体 将 以 较 小 的 期 望 分 配 到 后 代 。在 算 法 执 行 后 期 ,当 所 有 的 适 应 性 分 数 都变得大同小异,适应性较好的个体以较大的期待分配给后代。

波兹曼变比 (Scaling Bolzmann Fitness): 逐 渐 遗 传 算 法 在 运 行 期 间 的 选 择 压 力 ,在 开 始 时 用 较 小 的 选 择 压 力 以 保 证 多 样 性 得 到 维持,当遗传算法开始接近收敛到解的时候,会希望只有较好的个体产生后代。

本文插件地址:

https://assetstore.unity.com/packages/slug/106269

更多插件请访问本人的个人网站:

https://www.swordmaster.info

你可能感兴趣的:(本人在Unity3D中开发的遗传算法插件的介绍)