基于遗传算法的染色体编码的分析
- 格式:doc
- 大小:31.50 KB
- 文档页数:6
1 遗传算法的原理1.1 遗传算法的基本思想遗传算法(genetic algorithms,GA)是一种基于自然选择和基因遗传学原理,借鉴了生物进化优胜劣汰的自然选择机理和生物界繁衍进化的基因重组、突变的遗传机制的全局自适应概率搜索算法。
遗传算法是从一组随机产生的初始解(种群)开始,这个种群由经过基因编码的一定数量的个体组成,每个个体实际上是染色体带有特征的实体。
染色体作为遗传物质的主要载体,其内部表现(即基因型)是某种基因组合,它决定了个体的外部表现。
因此,从一开始就需要实现从表现型到基因型的映射,即编码工作。
初始种群产生后,按照优胜劣汰的原理,逐代演化产生出越来越好的近似解。
在每一代,根据问题域中个体的适应度大小选择个体,并借助于自然遗传学的遗传算子进行组合交叉和变异,产生出代表新的解集的种群。
这个过程将导致种群像自然进化一样,后代种群比前代更加适应环境,末代种群中的最优个体经过解码,可以作为问题近似最优解。
计算开始时,将实际问题的变量进行编码形成染色体,随机产生一定数目的个体,即种群,并计算每个个体的适应度值,然后通过终止条件判断该初始解是否是最优解,若是则停止计算输出结果,若不是则通过遗传算子操作产生新的一代种群,回到计算群体中每个个体的适应度值的部分,然后转到终止条件判断。
这一过程循环执行,直到满足优化准则,最终产生问题的最优解。
图1-1给出了遗传算法的基本过程。
1.2 遗传算法的特点1.2.1 遗传算法的优点遗传算法具有十分强的鲁棒性,比起传统优化方法,遗传算法有如下优点:1. 遗传算法以控制变量的编码作为运算对象。
传统的优化算法往往直接利用控制变量的实际值的本身来进行优化运算,但遗传算法不是直接以控制变量的值,而是以控制变量的特定形式的编码为运算对象。
这种对控制变量的编码处理方式,可以模仿自然界中生物的遗传和进化等机理,也使得我们可以方便地处理各种变量和应用遗传操作算子。
2. 遗传算法具有内在的本质并行性。
LabVIEW中的遗传算法和优化问题求解LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种广泛应用于工程、科学和教育领域的可视化开发环境和图形编程语言,它的强大功能和灵活性使得它在工程领域中被广泛使用。
在LabVIEW中,遗传算法(Genetic Algorithm)被广泛应用于优化问题的求解。
遗传算法是一种基于生物进化理论的优化算法,它通过模拟生物进化的过程,通过选择、交叉和变异的操作来搜索最优解。
在LabVIEW 中,遗传算法通过使用遗传算法工具箱来实现。
使用遗传算法求解优化问题的一般步骤如下:1. 定义问题:首先需要明确优化问题是什么,以及问题的目标函数是什么。
例如,我们要最小化一个函数或者使得某个约束条件满足等。
2. 设计编码方案:遗传算法是基于染色体编码的,我们需要设计一个合适的编码方案来表示问题的解空间。
例如,可以使用二进制编码、实数编码或者排列编码等。
在LabVIEW中,可以使用BitArray或者RealArray来表示染色体。
3. 初始化种群:种群是遗传算法的基本单位,它由多个个体组成。
在LabVIEW中,可以使用一个数组来表示一个种群,数组的每个元素表示一个个体。
4. 评价个体适应度:每个个体都有一个适应度值,表示其在问题中的优劣程度。
在LabVIEW中,可以根据定义的目标函数来计算个体的适应度值。
5. 选择操作:根据个体的适应度值,选择一定数量的个体用于后续的交叉和变异操作。
选择操作根据适应度值的大小来进行,适应度值越大的个体被选中的概率越高。
6. 交叉操作:选择的个体通过染色体的交叉操作来生成新的个体。
交叉操作类似于生物中的基因交换过程,在LabVIEW中可以使用Crossover函数来实现。
7. 变异操作:对于新生成的个体,通过染色体的变异操作来引入新的基因变化。
变异操作类似于生物中的基因突变过程,在LabVIEW中可以使用Mutation函数来实现。
遗传算法基本原理遗传算法是一种基于生物进化原理的优化算法,通过模拟生物进化过程中的遗传机制和选择、交叉、变异等操作,实现问题的求解。
下面介绍遗传算法的基本原理。
遗传编码遗传算法的起点是编码,它将问题的解用一种编码方式表示出来。
编码方式有多种,如二进制编码、实数编码、染色体编码等。
编码方式的选择取决于问题的性质和求解精度要求。
初始种群遗传算法的另一个起点是初始种群,它是一组随机生成的个体集合。
每个个体代表问题的一个可能解。
初始种群的大小和个体质量直接影响到算法的性能和求解结果的质量。
适应度函数适应度函数是用来评估种群中每个个体的优劣程度。
适应度函数的选择应该根据问题的性质来确定,使得函数的值能够反映出个体的优劣程度。
适应度函数通常是将问题的目标函数进行转化得到的。
选择操作选择操作是根据适应度函数来选择种群中的个体进行繁殖。
选择操作有多种方式,如轮盘赌选择、锦标赛选择等。
这些方式都会根据个体的适应度来决定其被选中的概率。
选择操作的目标是保留优秀的个体,淘汰较差的个体。
交叉操作交叉操作是模拟生物进化过程中的基因交叉过程,通过两个个体进行交叉产生新的个体。
交叉操作有多种方式,如单点交叉、多点交叉、均匀交叉等。
交叉操作的目的是通过结合两个个体的优点来产生更优秀的个体。
变异操作变异操作是模拟生物进化过程中的基因突变过程,通过随机改变某个个体的部分基因来产生新的个体。
变异操作的目的是增加种群的多样性,避免算法过早陷入局部最优解。
终止条件终止条件是指算法终止的条件或标准。
通常情况下,终止条件可以根据问题的性质和求解要求来确定,如达到最大迭代次数、解的变化幅度小于一定阈值等。
当满足终止条件时,算法停止迭代,并输出当前种群中适应度最好的个体作为问题的解。
遗传算法原理及应用介绍遗传算法是一种受生物进化理论启发的优化算法,它模拟了自然界中的基因编码、交叉、变异和选择等过程。
遗传算法被广泛应用于求解复杂问题,如优化问题、搜索问题、机器学习等领域。
本文将介绍遗传算法的基本原理、流程以及在不同领域中的应用。
基本原理遗传算法的基本原理是通过模拟进化过程来搜索最优解。
算法通过构建一个种群,每个个体都代表了一个解。
通过遗传操作,包括选择、交叉和变异,不断改进种群中的个体,使其逐步逼近最优解。
1. 初始化种群遗传算法的第一步是初始化一个种群,种群中的个体表示待解决问题的一个可能解。
个体可以用二进制编码、整数编码、浮点编码等方式表示。
种群的大小和个体的编码方式会直接影响算法的搜索能力和效率。
2. 适应度评估每个个体都会通过适应度函数进行评估,适应度函数衡量了个体的适应程度,即其解决问题的能力。
适应度函数的选择依赖于具体问题的特点,如最大化问题可以使用目标函数值作为适应度,最小化问题可以使用目标函数的倒数或负值作为适应度。
3. 选择操作选择操作通过概率选择机制从种群中选择个体,用于构建下一代种群。
适应度高的个体被选中的概率较大,从而保留有较好的性状。
选择算子的选择有多种方法,如轮盘赌选择、锦标赛选择等,这些方法可以根据具体问题的特点进行调整。
4. 交叉操作交叉操作模拟了自然界中基因的交换过程,通过交换两个个体的染色体片段来产生新的个体。
交叉操作能够将两个个体的优良特性进行组合,从而产生具有更好适应度的后代。
交叉操作的方式多种多样,如单点交叉、多点交叉、均匀交叉等。
5. 变异操作变异操作模拟了自然界中基因的突变过程,通过改变个体的某些基因来产生新的个体。
变异操作保持了种群的多样性,并有可能引入新的解决方案。
变异操作的方式也有多种,如位变异、边界变异、非均匀变异等。
6. 更新种群经过选择、交叉和变异操作后,生成了下一代种群。
通过不断迭代以上步骤,种群的适应度逐渐提高,优秀的个体会逐渐占据主导地位。
遗传算法( GA , Genetic Algorithm ) ,也称进化算法。
遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法。
因此在介绍遗传算法前有必要简单的介绍生物进化知识。
一.进化论知识作为遗传算法生物背景的介绍,下面内容了解即可:种群(Population):生物的进化以群体的形式进行,这样的一个群体称为种群。
个体:组成种群的单个生物。
基因 ( Gene ) :一个遗传因子。
染色体 ( Chromosome ):包含一组的基因。
生存竞争,适者生存:对环境适应度高的、牛B的个体参与繁殖的机会比较多,后代就会越来越多。
适应度低的个体参与繁殖的机会比较少,后代就会越来越少。
遗传与变异:新个体会遗传父母双方各一部分的基因,同时有一定的概率发生基因变异。
简单说来就是:繁殖过程,会发生基因交叉( Crossover ) ,基因突变( Mutation ) ,适应度( Fitness )低的个体会被逐步淘汰,而适应度高的个体会越来越多。
那么经过N代的自然选择后,保存下来的个体都是适应度很高的,其中很可能包含史上产生的适应度最高的那个个体。
二.遗传算法思想借鉴生物进化论,遗传算法将要解决的问题模拟成一个生物进化的过程,通过复制、交叉、突变等操作产生下一代的解,并逐步淘汰掉适应度函数值低的解,增加适应度函数值高的解。
这样进化N代后就很有可能会进化出适应度函数值很高的个体。
举个例子,使用遗传算法解决“0-1背包问题”的思路:0-1背包的解可以编码为一串0-1字符串(0:不取,1:取);首先,随机产生M个0-1字符串,然后评价这些0-1字符串作为0-1背包问题的解的优劣;然后,随机选择一些字符串通过交叉、突变等操作产生下一代的M个字符串,而且较优的解被选中的概率要比较高。
这样经过G代的进化后就可能会产生出0-1背包问题的一个“近似最优解”。
编码:需要将问题的解编码成字符串的形式才能使用遗传算法。
遗传算法实验报告遗传算法实验报告引言:遗传算法是一种模拟生物进化过程的优化算法,通过模拟自然选择、遗传变异和交叉等操作,逐步优化问题的解。
本实验旨在探究遗传算法在解决优化问题中的应用,并通过实验验证其效果。
一、实验背景遗传算法最早由美国科学家约翰·霍兰德于20世纪60年代提出,其灵感来源于达尔文的进化论。
遗传算法通过基因编码、适应度评估、选择、交叉和变异等操作,模拟了进化过程中的遗传和变异,从而找到问题的最优解。
二、实验目的本实验旨在通过遗传算法解决一个经典的优化问题,验证其在解决实际问题中的有效性。
同时,对遗传算法的参数设置和操作过程进行调整和优化,以提高算法的性能。
三、实验步骤1. 问题定义:选择一个经典的优化问题,例如旅行商问题(TSP)或背包问题。
2. 解空间建模:将问题的解表示为染色体,设计基因编码方式。
3. 适应度函数定义:根据问题的特点,设计一个能够评估染色体解的适应度函数。
4. 初始化种群:随机生成一组初始染色体,作为种群。
5. 选择操作:根据适应度函数,选择一部分较优秀的染色体作为父代。
6. 交叉操作:通过交叉操作,生成新的子代染色体。
7. 变异操作:对子代染色体进行变异操作,引入新的基因变异。
8. 适应度评估:计算新的子代染色体的适应度。
9. 父代替换:根据适应度函数,选择一部分较优秀的子代染色体替换掉父代染色体。
10. 终止条件判断:判断是否满足终止条件,若满足则结束算法,否则返回步骤5。
11. 输出结果:输出最优解及其适应度值。
四、实验结果与分析通过实验,我们得到了一组优化问题的最优解,并计算出其适应度值。
通过观察实验结果,我们可以发现遗传算法在解决优化问题中的有效性。
同时,我们还可以通过调整遗传算法的参数和操作过程,进一步提高算法的性能。
五、实验总结通过本次实验,我们深入了解了遗传算法的原理和应用。
遗传算法作为一种优化算法,具有较强的适应性和鲁棒性,在解决实际问题中具有广泛的应用前景。
组合优化问题的遗传算法求解一、简介组合优化问题指的是在有限个元素中选取某些元素,以达到最优化的目标。
组合优化问题的求解在实际中应用广泛,如旅行商模型、调度问题、网络优化等领域。
但是这类问题求解面临着复杂度高、难以精确求解等困难。
在这种情况下,遗传算法是一种有效的求解方法。
遗传算法是一种基于达尔文进化论的计算方法,通过模拟生物进化的方式求解组合优化问题。
本文将介绍遗传算法在组合优化问题求解中的应用,着重介绍遗传算法基本框架、编码方法、适应度函数的构建以及遗传算法的优化策略等。
二、遗传算法基本框架遗传算法的求解过程主要包括初始种群生成、适应度评价、选择操作、交叉操作和变异操作等基本步骤。
(1)初始种群生成遗传算法首先需要生成一定数量的初始种群,初始种群可以通过随机生成或其他启发式算法生成。
例如,在旅行商问题中,初始种群可以随机生成多条路径。
(2)适应度评价适应度函数是遗传算法的核心,适应度函数的构建直接关系到遗传算法的性能。
适应度函数是对每个染色体的优劣进行量化评价,用以指导后续优化操作。
适应度函数构建需要根据问题特点进行设计。
(3)选择操作选择操作是指将上一代种群中的某些个体复制到下一代种群中,个体复制的概率与其适应度大小有关。
适应度越高的个体被选择的概率越大,从而使适应度高的个体更有机会进化到下一代。
选择操作可以通过轮盘赌选择、锦标赛选择等方式实现。
(4)交叉操作交叉操作是指对选择后的个体进行杂交,交叉操作是遗传算法的核心,它通过随机杂交个体的染色体,产生新的杂交染色体,从而增加搜索空间。
交叉操作可分为单点交叉、多点交叉、均匀交叉等。
(5)变异操作变异操作是指在交叉操作之后对个体发生变异,从而产生新的个体。
变异操作是通过随机改变染色体中的基因,从而增加多样性。
变异操作可以是简单变异、非一致变异、高斯变异等。
以上是遗传算法的基本框架,遗传算法的性能因素有适应度函数的设计、进化代数、群体大小、交叉概率、变异概率等。
人工智能实验报告学号:姓名:实验名称:遗传算法实验日期:2016.1.5【实验名称】遗传算法【实验目的】掌握遗传算法的基本原理,熟悉遗传算法的运行机制,学会用遗传算法来求解问题。
【实验原理】遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。
遗传算法是从代表问题可能潜在的解集的一个种群开始的,而一个种群则由经过基因编码的一定数目的个体组成。
每个个体实际上是染色体带有特征的实体。
在一开始需要实现从表现型到基因型的映射即编码工作。
由于仿照基因编码的工作很复杂,我们往往进行简化,如二进制编码,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度大小选择个体,并借助于自然遗传学的遗传算子进行组合交叉和变异,产生出代表新的解集的种群。
这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码,可以作为问题近似最优解。
遗传算法程度流程图为:【实验内容】题目:已知f(x)=x*sin(x)+1,x∈[0,2π],求f(x)的最大值和最小值。
数据结构:struct poptype{double gene[length];//染色体double realnumber;//对应的实数xdouble fitness;//适应度double rfitness;//相对适应度double cfitness;//累计适应度};struct poptype population[popsize+1];//最后一位存放max/min struct poptype newpopulation[popsize+1];//染色体编码:[0,2]x π∈,变量长度为2 π,取小数点后6位,由于2262322*102;π<<因此,染色体由23位字节的二进制矢量表示,则X 与二进制串(<b 22 b 21…… b 0>)2之间的映射如下:()2222212010bb ......b 2'i i i b x =⎛⎫=∙= ⎪⎝⎭∑;232'21x x π=- 适应度函数:由于要求f(x)的最值,所以适应度函数即可为f(x)。
人工智能中的遗传算法遗传算法(Genetic Algorithm,GA)是一种模拟自然进化过程的优化算法。
它适用于复杂问题的求解,并且在人工智能领域中得到了广泛的应用。
本文将介绍人工智能中遗传算法的原理、应用以及优势。
一、遗传算法原理遗传算法模拟了生物进化过程中的遗传与进化机制,通过对每个个体的基因组进行编码,然后通过选择、交叉和变异等操作,迭代地生成新一代的解,并逐步优化。
1.1 基因编码遗传算法中每个个体的解被编码为一个染色体,染色体由若干基因组成。
基因可以是二进制串、整数或浮点数等形式,根据问题的特点进行选择。
1.2 适应度评价适应度函数用于评价每个个体的优劣程度。
适应度值越高表示个体解越优秀。
在问题的求解过程中,根据适应度函数对个体进行评估和排序。
1.3 选择操作选择操作根据适应度函数对个体进行选择,使优秀的个体有更高的概率被选中。
常见的选择算法有轮盘赌和竞争选择等。
1.4 交叉操作交叉操作模拟了生物进化中的基因重组,通过交换父代个体的染色体片段产生新个体。
交叉操作可以增加种群的多样性,并且有助于在解空间中进行全局搜索。
1.5 变异操作变异操作是对个体染色体中的基因进行突变,引入一定的随机性。
变异操作可以避免种群陷入局部最优解,从而增加算法的全局搜索能力。
1.6 算法迭代遗传算法通过不断迭代地进行选择、交叉和变异操作,逐渐优化种群中的个体。
迭代次数和种群大小是影响算法性能的重要参数。
二、遗传算法的应用2.1 函数优化遗传算法可以用于求解复杂的函数优化问题,例如求解多峰函数的全局最优解。
通过适当选择适应度函数和调整参数,可以提高算法的收敛性和搜索能力。
2.2 组合优化遗传算法在组合优化问题中有广泛的应用。
例如在图的最短路径问题中,通过遗传算法可以求解出图中节点间的最短路径。
2.3 机器学习遗传算法可以用于机器学习领域中的特征选择和参数优化等问题。
通过遗传算法搜索最优的特征子集或参数组合,可以提高机器学习模型的性能和泛化能力。
遗传算法的基本原理和⽅法遗传算法的基本原理和⽅法⼀、编码编码:把⼀个问题的可⾏解从其解空间转换到遗传算法的搜索空间的转换⽅法。
解码(译码):遗传算法解空间向问题空间的转换。
⼆进制编码的缺点是汉明悬崖(Hamming Cliff),就是在某些相邻整数的⼆进制代码之间有很⼤的汉明距离,使得遗传算法的交叉和突变都难以跨越。
格雷码(Gray Code):在相邻整数之间汉明距离都为1。
(较好)有意义的积⽊块编码规则:所定编码应当易于⽣成与所求问题相关的短距和低阶的积⽊块;最⼩字符集编码规则,所定编码应采⽤最⼩字符集以使问题得到⾃然的表⽰或描述。
⼆进制编码⽐⼗进制编码搜索能⼒强,但不能保持群体稳定性。
动态参数编码(Dynamic Paremeter Coding):为了得到很⾼的精度,让遗传算法从很粗糙的精度开始收敛,当遗传算法找到⼀个区域后,就将搜索现在在这个区域,重新编码,重新启动,重复这⼀过程,直到达到要求的精度为⽌。
编码⽅法:1、⼆进制编码⽅法缺点:存在着连续函数离散化时的映射误差。
不能直接反映出所求问题的本⾝结构特征,不便于开发针对问题的专门知识的遗传运算算⼦,很难满⾜积⽊块编码原则2、格雷码编码:连续的两个整数所对应的编码之间仅仅只有⼀个码位是不同的,其余码位都相同。
3、浮点数编码⽅法:个体的每个基因值⽤某⼀范围内的某个浮点数来表⽰,个体的编码长度等于其决策变量的位数。
4、各参数级联编码:对含有多个变量的个体进⾏编码的⽅法。
通常将各个参数分别以某种编码⽅法进⾏编码,然后再将他们的编码按照⼀定顺序连接在⼀起就组成了表⽰全部参数的个体编码。
5、多参数交叉编码:将各个参数中起主要作⽤的码位集中在⼀起,这样它们就不易于被遗传算⼦破坏掉。
评估编码的三个规范:完备性、健全性、⾮冗余性。
⼆、选择遗传算法中的选择操作就是⽤来确定如何从⽗代群体中按某种⽅法选取那些个体遗传到下⼀代群体中的⼀种遗传运算,⽤来确定重组或交叉个体,以及被选个体将产⽣多少个⼦代个体。
遗传算法编码及算子简介遗传算法主要是通过遗传操作对群体中具有某种结构形式的个体施加结构重组处理,从而不断地搜索出群体中个体间的结构相似性,形成并优化积木块以逐渐逼近最优解。
由此可见,必须把群体中的个体转化成按一定基因结构组成的染色体或个体,即编码。
编码原则包括两条:1.有积极积木块编码规则,即所定编码应当易于生成所求问题相关的短距和低阶的积木块。
2.最小字符集编码规则,即所定编码应用最小字符集以使问题得到自然的表示或描述。
规则一是基于模式定理和积木块假设;规则二提供了一种更为实用的编码规则。
评估编码策略常采用的规范有:1.完备性:问题空间中的所有点都能作为GA空间的点表现。
2.健全性:GA空间中的染色体能对应所有问题空间中的候选解。
3.非冗余性:染色体和候选解一一对应。
这些评估规范是独立于问题领域的普遍准则。
对某个具体的应用领域而言,应该客观化地比较和评估该问题领域中所用的编码方法。
应用遗传算法进行优化,首先将问题描述成串的形式,以模拟染色体。
选择何种编码方式对算法的运行有很大的影响。
现在,流行的观点认为二进制编码能在相同的范围内表示最多的模式,能充分地体现所谓的隐含并行性。
但是,二进制编码方式的精度依赖于染色体的基因位数及设计变量的范围。
因而对于高精度、多变量问题,n值需很大,降低遗传算法的收敛速度。
另外,二进制编码不直接反映真实的设计空间。
其它的编码方式还有:格雷码编码、浮点编码、树结构编码、参数动态编码和多维编码等。
遗传算法主要有选择、交叉和突变算子选择算子遗传算法使用选择算子或称复制算子来对种群中的个体进行优胜劣汰操作:选择算子使适应性高的个体在后代中生存的概率较大,而适应度低的个体生存的概率很小甚至被淘汰。
遗传算法中的选择操作就是来确定如何从父代群体中按某种方法选取那些个体以传到下一代群体的一种遗传算法。
选择操作是建立在群体中个体的适应度评价基础上的。
选择操作的主要目的是为了避免基因缺失、提高全局收敛性和计算效率。
遗传算法中⼆进制编码的⽣成和解码-Python 以六峰值驼背函数为例,有两个变量,范围分别是[-3, 3], [-2, 2],精度要求为0.01 那么要使⽤⼆进制编码来表⽰的话,编码⽅法采⽤多参数级联编码⽅法,也就是把两个变量分别编码然后顺序拼接起来。
根据遗传算法的编码⽅法,染⾊体的长度的计算公式应该是np.ceil(np.log2((UB[i] - LB[i]) / EPS + 1)) 代⼊[-3,3], [-2,2]和0.01,算得染⾊体长度分别为10和9,拼接起来就是19。
def encode(VAR_NUM, LB, UB, EPS):L = np.zeros(3)L[0] = 0for i in range(VAR_NUM):L[i + 1] = np.ceil(np.log2((UB[i] - LB[i]) / EPS + 1))# 计算染⾊体的长度LS = int(np.sum(L))# 初始化种群 01随机矩阵pop = np.random.randint(0, 2, LS)# 要返回染⾊体切割点索引return pop, np.cumsum(list(map(int, L)))if__name__ == '__main__':# 以六峰值驼背函数为例# 六峰值驼背函数有两个⾃变量,# 元素x[0]的范围是[-3,3]# 元素x[1]的范围是[-2, 2]print("随机⽣成⼀个⼆进制编码:")bin_code, point = encode(2, [-3, -2], [3, 2], 0.01)print(bin_code)print("染⾊体切割点索引")print(point)输出:随机⽣成⼀个⼆进制编码:[1 0 0 0 0 0 1 0 1 1 0 0 1 1 0 0 0 0 1]染⾊体切割点索引[ 0 10 19]解码的话,先把⼆进制转换为⼗进制,然后根据最⼤最⼩值标准化公式把数值限制到[-3,3]和[-2,2]即可。
基于遗传算法的染色体编码的分析
第19卷第1期
2010年1月
重庆电子工程职业学院V o1.19NO.1
lan.2010oumalofChon£咽in£CoUe~eofElectronicEnl~ine
基于遗传算法的染色体编码的分析
吴焱岷
(重庆大学计算机学院,重庆400044;重庆电子工程职业学院,重庆401331)
摘要:遗传算法为解决复杂问题,特别是NP类问题提供了一种全新的思路,其编码方式也将在一定程
度上决定算法效率的高低和程序设计的复杂程度.需要针对想要解决问题类型的不同而采取不同的编码方式.
关键词:遗传算法;编码;值类型;事务类型
中图分类号:TP39文献标识码:A文章编号:1674—5787(2010)01一【)【】86一O2
遗传算法的概念最早是由BagleyJ.D在1967年提出
的.而开始遗传算法的理论和方法的系统性研究在1975
年开始.这一开创性工作是由Michigan大学的J.H.
Holland所实行.遗传算法简称GA(GeneticAlgorithm),在
本质上是一种不依赖具体问题的直接搜索方法.其基本
思想是基于Darwin进化论和Mendel的遗传学说
Darwin进化论最重要的是适者生存原理它认为每
一
物种在发展中越来越适应环境.物种每个个体的基本
特征由后代所继承.但后代又会产生一些异于父代的新
变化.
Mendel遗传学说最重要的是基因遗传原理它认为
遗传以密码方式存在细胞中.并以基因形式包含在染色
体内每个基因有特殊的位置并控制某种特殊性质,所
以.每个基因产生的个体对环境具有某种适应性.基因突变和基因杂交可产生更适应于环境的后代.经过存优去
劣的自然淘汰.适应性高的基因结构得以保存下来.
遗传算法最大的特点莫过于可以绕过复杂的数学推
导而采用最直接的方式在有限空间中搜索结果.例如求
函数f(x)=x*sin(10"n'x)+2在(一1,2)区间上的极大值,按照常规思路.需要对函数求导,找出函数的变化趋势和拐点.才能确定最大值的位置.对于相对简单的函数.采用
这些数学的方法还没有太高的难度.但是对于复杂的函数.则需要较为深厚的数学功底.同时也增加了程序设计的复杂程度
对于GA.采用一套全新的思路,首先任意给定一组
随机值x.由此开始进行演化.这些值就是代表一系列原
始生命.这些生命是否可以延续,取决于他们的适应程
度将这些随机值带入函数中进行运算,对得到的一系列
函数值进行排序.求最大值,可以认为值较大的函数值对应的x接近我们所需要的结论,这些结果可以保留;反之.对于另外一些函数值较小的x.则表明应该被淘汰.
第二步就是按照Mendel的基因理论.对这些将被淘
汰的X进行演化.演化分两步进行:
(1)交叉.两个x值交换数据,类似生物界的交配,染
色体进行重新重组.交换基因以期得到新的品种,新品种可能更加适应环境而得到生存的机会.也可能向相反的
方向发展.从而失去生存的机会.因此通过某种方式得到新的X的值可以导致函数值增大.也可能导致减小,他们都将参加新一轮的竞争
(2)变异.单一的X值进行自身的调整,这类似于生
物界的染色体发生基因突变.突变后的基因也可能导致
物种更加适应或更加不适应环境.因此通过突变方式后
要重新评估函数值以决定新的X值的去留.同样新的X
值也必将参加新一轮的竞争
通过一系列操作.我们始终保留函数值较大的一系
列X.如同生物竞争中只有最强的个体才能生存下来一
样.最终我们可以得到最佳答案
按照上面的思路.我们任意产生100个随机数.经过
100代的进化.得到如下结论:
在第27代最早出现最佳运算结论:
f(1.8505594374083l1=3.85027363583461
共使用4.828125秒.起始时间:21:54:08.31,结束时
间:21:54:12.859
经过反复测试.结果可以稳定x=1.85附近.这和理论
值也是非常近似的那么GA是如何保证这种收敛性的
呢7原因就在于它的编码方式可以很好地与基因理论相
融合.
显然.由于X的编码方式千差万别,因此J.H.Holland
本人也提及采用二进制才是最佳方式.这样做的好处有
两点:
收稿日期:2009一l2一l8
作者简介:吴焱岷(1974一),男,湖北武汉人,重庆大学计算机学院计算机科学技术专业2004级在职研究生,重庆电子工程职业
学院计算机应用系党总支副书记,主要从事软件设计,网站建设方面的研究.
87重庆电子工程职业学院第19卷
1.数据在计算机内部就是采用二进制方式.这样的
编码方式与计算机内部的数据表示相吻合.便于计算机
的处理
2.如同染色体的基因.每一位二进制数据单元就是
可以进行操作的最小单元.便于对交叉与变异这两种基
本的遗传现象的模拟
正是将生命遗传,进化的规律运用到程序设计中,所
以程序运行符合自然规律.可以得到理想的结果
遗传算法在当时提出主要解决科学计算方面的问
题.即值类型的问题.采用二进制的形式可以很好的解决
编码问题.一般我们这样来进行操作:
不失一般性.我们可以假设在(a,b)区间上搜索某一
个结论.假设对于X要求精度为小数点后n位
首要问题是需要确定染色体的二进制位数.a到b的
长度为fb—a),每个待编码的数据保留到小数点后n位.
表明1个单位数据中包含l0n个待编码的数.那么整个探索空间中就有(b—a)10n个需要编码的数据.由于采用二
进制编码.所以要表示这么多数据,需要至少m位,则有:
2≥(b-a)10"一m≥In2((b-a)10n)
所以m可以由ln((b—a)l0的结果向上取整表示,这
样I11位的二进制数至少可以表示出(b--a)*10n个数据了. 这种编码方式对于科学计算类的问题是非常有效
的.因为我们的解空间是连续的,而采用二进制编码方
式.我们也可以近似的认为其表示的数值空间也是"连续"的.这样我们按照基因组成染色体的方式.可以对二
进制数据进行重组,以考查哪些基因有利于问题的解决. 但是需要注意的问题是.随着GA在更加广泛的领域加
以应用.有一个新的情况出现了,即对于事务性的问题,
二进制编码同样高效么?
以GA在排课系统的应用为例.如果用二进制表示
的话.必须按照定长进行切割P位表示上课教室,q位表
示上课时间,每一个课程需要(p+q)位来表示未来课表中
的上课时间与上课教室信息.但是由于初始状态是随机
的.上课时间和上课教室必然存在很多的冲突或搭配不理想的地方.需要对这些问题进行逐一的统计及处理.那么需要将原来二进制表示的信息还原成原本表示的上课时间,上课教室信息,同时课程表的二维表格被修改成一维空间.这给操作也带来了很多不必要的麻烦,所以有必要对原有的编码形式重新认真考虑.
针对上述问题.没有必要一定采用一维的二进制编
码习惯.到底如何表示染色体和基因要视具体情况而定, 在排课问题中.我们大可将染色体直接设计成二维模型. 表示上课时间,上课教室的二维布局,将课程(含班级,教师信息)填充其中.只要保证一个单元格中仅仅放入一项课程就已经避免了上课时间,上课教室上潜在的冲突的可能性.做了这样的调整后,在进行交叉,变异操作时,也可以以班级或老师为单位进行.而不必像二进制编码一般随机的抽取.这样可以保留较好的基因.加快收敛的速度以取得更加令人满意的结果
改造后的染色体如下图所示
教室1教室2教室3教室4教室n
上课时间l$.…..
上课时间2$}
上课时间3${
上课时间nl
基因的编码可以采用灵活的方式.不一定非要采取
二进制形式,因为每一单元格中包含课程,班级,教师等
信息,可以用类或结构体将其封装起来,至于课程,班级, 教师等信息的编码则可以灵活处理.为了和数据库进行数据的无缝交流.建议采用十进制编码形式.以便与数据库内部的代码保持一致.从而可以省却许多不必要的编码和解码开销
综上所述.在GA中我们对于染色体的编码不一定
要采取二进制的形式.具体要视待解决问题的性质而定: 1.对于值类型的求解问题.可以采用二进制的编码
形式.以便保持数据在计算机内部以及染色体表示上的一
致.
2.对以事务型的求解问题.可以灵活采用一维或多
维的染色体表示形式.对基因的编码.则可以采用更加灵活形式:十进制,字符串,结构体或类等.
任何算法需要随时代的发展而不断的修正.在遗传
算法提出之初.我们解决的多是数值运算类型的问题,用二进制的表达形式便于保持基因内在数据与外在表现形式的统一.但是当我们把这种方法移植到事务型问题的求解上时.二进制编码由于本身的缺陷而不足以表达丰富的含义.反而成为绊脚石.我们可以对其编码方式进行调整.以适应问题求解的需要.
在遗传算法提出之机.计算机硬件水平相对较低.需
要充分考虑硬件上时间,空间的开销.而如今硬件水平高速发展,牺牲一定的空间,时间而带来程序设计难度的降低也不失是一种可行的方案
责任编辑王荣辉。