遗传算法编码
遗传算法编码

遗传算法编码遗传算法是一种基于自然选择和遗传遗传规律的优化算法,主要用于求解复杂的优化问题。
在遗传算法中,编码是一个非常重要的步骤,它将问题的解空间转换成一组基因组成的编码。
通过对编码进行操作,遗传算法可以生成新的解,并逐步寻找最优解。
本文将介绍遗传算法中的编码方法。
遗传算法的编码方法一般有两种:二进制编码和实数编码。
其中,二进制编码是将问题的解表示成一个二进制串,每个二进制位表示一个变量的取值,通过对二进制串进行操作来生成新的解。
实数编码则是将问题的解表示成一个实数向量,每个实数表示一个变量的取值,通过对实数向量进行操作来生成新的解。
对于二进制编码,最常见的方式是将每个变量的取值范围分成若干个子区间,然后将每个子区间映射到一个二进制码。
例如,对于一个取值范围为[0,1]的变量,可以将其分成8个子区间,每个子区间映射到3位二进制码,从而将变量的取值表示成24位的二进制串。
对于实数编码,最常见的方式是将每个变量的取值范围映射到一个实数区间,然后将实数向量表示成这个区间内均匀分布的点。
除了二进制编码和实数编码外,还有其他的编码方式,如格点编码、置换编码等。
格点编码是一种将问题的解空间表示成一个格点网格的编码方式,每个格点代表一个解,通过对格点进行操作来生成新的解。
置换编码是一种将问题的解表示成一个排列的编码方式,每个排列代表一个解,通过对排列进行操作来生成新的解。
在实际应用中,选择适当的编码方式对算法的性能有很大的影响。
因此,在使用遗传算法求解问题时,需要考虑问题的特点,选择最适合的编码方式。
同时,需要注意编码方式对算法的搜索空间、搜索效率和搜索精度的影响,以便选择最优的编码方式。
遗传算法(浮点数编码)

遗传算法(浮点数编码)浮点数编码实现遗传算法遗传算法主要包括三个主要操作,选择、交叉和变异。
⽤浮点数编码进⾏运算,三种操作⽅法如下:选择:1. 计算i f 和n i S f =∑2. 计算ii nf P S =3. 累计概率1ii j j g P ==∑4. 产⽣均匀分布0~1的随机数r5. 将r 与i g ⽐较,如果1i i g r g -≤≤,则选择个体i 进⼊到下⼀代新群体6. 反复执⾏4和5,直⾄新群体的个体数⽬等于⽗代群体规模交叉:11(1)(1)t tt A B A t t t B A Bx x x x x x αααα++=+-=+- 其中,1t A x +和1t B x +是交叉之后的个体,t A x 和tB x 是随机选择的两个个体,α是交叉的⼀个常数, 取值为(0,1]。
变异:1max min()()%20()()%21t t t A A A tt A A x k x x r rand x x k x x r rand +?+?-?==?-?-?=?,,1t A x +是变异之后的个体,tA x 是变异之前的个体,k 是变异的⼀个常数,取值为(0,1],max x 是个体的上限,min x 是个体的下限,r 是产⽣的随机数。
适应度线性变换:F aF b '=+其中F 是原适应度,F '是变换之后的适应度,a,b 是变换的系数。
适应度线性变换要满⾜下⾯两个条件:条件⼀:avgavg F F '= 条件⼆:maxavg F C F '=?C=1.2~2缩放时参数a,b 的计算⽅法可以⽤如下⽅法:如果满⾜:maxmin 1avg C F F F C ?->-就令:max (1)avg avg C a F F F -=-max max avg avg avgF C F b F F F -?=-否则:min avgavg F a F F =- min min avgavg F F b F F ?=- 实现代码如下:#include#include#include#include#define M 80 //种群数量#define XMIN -1 //下限#define XMAX 2 //上限#define PI 3.1415926#define PC 0.8 //交叉概率#define PM 0.18 //变异概率#define PA 0.01 //交叉因⼦struct Node{double Pmember;double Myfitness; //Myfitness是适应度double Myfitsum; //Myfitsum是适应度占总体适应度的百分⽐,然后从第⼀个个体往后累加,主要⽤于选择操作}Nownode[M],Nextnode[M]; //本代群体和下⼀代群体int nodeindex[M]; //交叉时随机配对,存放配对的群体下标int T=0;double fx(double x) //根据x计算fx{double y;y=x*sin(10*PI*x)+2;//y=100-(x-5)*(x-5);return y;}int calfitness() //计算适应度值{int i;double minfitness,maxfitness,avefitness=0;double C=1.7,a,b;double temp;minfitness=Nownode[0].Myfitness=fx(Nownode[0].Pmember);maxfitness=minfitness;avefitness=maxfitness;for(i=1;i{Nownode[i].Myfitness=fx(Nownode[i].Pmember);avefitness+=Nownode[i].Myfitness;if(minfitness>Nownode[i].Myfitness){minfitness=Nownode[i].Myfitness;}if(maxfitness{maxfitness=Nownode[i].Myfitness;}}if(minfitness<0)//如果有负的适应度值,就把所以的适应度都加上⼀个数,使适应度全都为正数{temp=minfitness;Nownode[0].Myfitness+=-temp;avefitness=Nownode[0].Myfitness;maxfitness=Nownode[0].Myfitness;minfitness=Nownode[0].Myfitness;for(i=1;i{Nownode[i].Myfitness+=-temp;avefitness+=Nownode[i].Myfitness;if(minfitness>Nownode[i].Myfitness){minfitness=Nownode[i].Myfitness;}if(maxfitness{maxfitness=Nownode[i].Myfitness;}}}//适应度线性变换avefitness=avefitness/M;//计算平均适应度if(minfitness>(C*avefitness-maxfitness)/(C-1)){a=(C-1)*avefitness/(maxfitness-avefitness);b=(maxfitness-C*avefitness)*avefitness/(maxfitness-avefitness);}else{a=avefitness/(avefitness-minfitness);b=minfitness*avefitness/(avefitness-minfitness);}for(i=0;i{Nownode[i].Myfitness=a*Nownode[i].Myfitness+b;}Nownode[0].Myfitsum=Nownode[0].Myfitness;for(i=1;i{Nownode[i].Myfitsum=Nownode[i].Myfitness+Nownode[i-1].Myfitsum;//每⼀个Myfitsum都是⾃⼰的适应度加上前⼀个的Myfitsum}for(i=0;i{Nownode[i].Myfitsum=Nownode[i].Myfitsum/Nownode[M-1].Myfitsum;//每⼀个Myfitsum除以所有适应度之和,使Myfitsum为0~1之间}return 0;}double randn() //产⽣XMIN到XMAX之间的随机数{return XMIN+1.0*rand()/RAND_MAX*(XMAX-XMIN);}int initpopulation() //初始化种群{int i;for(i=0;i{Nownode[i].Pmember=randn();}calfitness(); //计算适应度return 0;}int assignment(struct Node *node1,struct Node *node2)//把node2的值赋值给node1{node1->Pmember=node2->Pmember;node1->Myfitness=node2->Myfitness;node1->Myfitsum=node2->Myfitsum;return 0;}int copypopulation() //复制操作{int i,num=0;double temp;while(num{temp=1.0*rand()/RAND_MAX;if(temp<=Nownode[0].Myfitsum){assignment(&Nextnode[num++],&Nownode[0]);//把第⼀个个体复制到下⼀代break;}if(temp>=Nownode[i-1].Myfitsum&&temp<=Nownode[i].Myfitsum)//把第i个个体复制到下⼀代{assignment(&Nextnode[num++],&Nownode[i]);break;}}}for(i=0;i{assignment(&Nownode[i],&Nextnode[i]); //更新本代个体}calfitness(); //计算适应度return 0;}int isrepeat(int temp,int n) //产⽣随机下标判断是否重复{int i;for(i=0;i{if(nodeindex[i]==temp)return 1;}return 0;}int crossover(){int i,temp;double temp_pc;do {temp=rand()%M;} while(isrepeat(temp,i));nodeindex[i]=temp;}for(i=0;i{temp_pc=1.0*rand()/RAND_MAX; //如果满⾜交叉的条件,就开始交叉if(temp_pc<=PC){Nownode[nodeindex[i]].Pmember=PA*Nownode[nodeindex[i+1]].Pmember+(1-PA)*Nowno de[nodeindex[i]].Pmember; Nownode[nodeindex[i+1]].Pmember=PA*Nownode[nodeindex[i]].Pmember+(1-PA)*Nowno de[nodeindex[i+1]].Pmember; }}calfitness(); //计算适应度return 0;}int mutation() //变异操作{int i,temp;double k=0.8,temp_pm;for(i=0;i{temp_pm=1.0*rand()/RAND_MAX;if(temp_pm<=PM) //如果满⾜变异条件,就开始变异{temp=rand()%2;if(temp==0){Nownode[i].Pmember=Nownode[i].Pmember+k*(XMAX-Nownode[i].Pmember)*1.0*rand( )/RAND_MAX;}else{Nownode[i].Pmember=Nownode[i].Pmember-k*(Nownode[i].Pmember-XMIN)*1.0*rand()/ RAND_MAX; }}}calfitness(); //计算适应度return 0;}int findmaxfit()//找到适应度最⼤的个体{int i,index=0;double temp=0;for(i=0;i{if(temp{index=i;temp=Nownode[i].Myfitness;}}return index;}int main(){int i=0,index;int num=0,num1=0,num2=0;srand(time(NULL));while(num++<1000){T=0;initpopulation();while(T++<200){copypopulation();crossover();mutation();}index=findmaxfit();if(fabs(Nownode[index].Pmember-1.85)<=0.1) {num1++;}else{num2++;}}printf("正确的次数有%d次\n",num1);printf("错误的次数有%d次\n",num2);return 0;}。
遗传算法的基本原理和对生活的启示

遗传算法的基本原理和对生活的启示一、遗传算法的基本原理遗传算法是一种受自然界进化机制启发的优化算法,其基本原理主要包括基因编码、初始种群的产生、适应度函数的确定、选择操作、交叉操作和变异操作等几个方面。
1.基因编码:遗传算法需要对问题进行编码,将问题的解空间映射到基因空间。
常见的编码方式有二进制编码、实数编码等。
2.初始种群的产生:通过随机方式生成一定数量的初始解,构成初始种群。
3.适应度函数的确定:根据问题的目标函数,定义适应度函数,用于评估种群中每个个体的优劣。
4.选择操作:根据适应度函数,选择适应度较高的个体进行遗传操作,生成下一代种群。
5.交叉操作:通过交叉配对和重组,生成新的个体。
6.变异操作:对个体的一定概率发生基因位的变异,增加种群的多样性。
遗传算法通过不断的迭代,不断优化种群中的个体,最终得到满足要求的最优解。
二、对生活的启示遗传算法的原理不仅在计算机科学中有着广泛的应用,而且也能给我们的生活带来很多启示。
以下是一些主要的启示:1.适应环境:在自然界中,生物通过进化适应环境。
同样,在生活中,我们也应该积极适应环境,不断学习和改进自己。
2.多样性思维:遗传算法中的变异操作增加了种群的多样性,使得算法能够更好地搜索解空间。
在解决问题时,我们也应该尝试多种方法,不要局限于一种思路。
3.持续优化:遗传算法通过不断迭代优化种群中的个体,最终得到最优解。
在生活中,我们也应该不断优化自己的行为和思维,提升自己的能力和素质。
4.合作与竞争:遗传算法中的选择和交叉操作体现了竞争和合作的机制。
在竞争中,优秀的个体得以保留;在合作中,新的个体得以产生。
这启示我们在生活中要学会竞争与合作,互相促进,共同成长。
遗传算法

j=0 选择两个交叉个体 执行交叉 将交叉后的两个新个体 添入新群体中 j = j+2
将复制的个体添入 新群体中
j = j+1
N
j = M? Y
N
j = pc· M? Y
Gen=Gen+1
N
j = pm· M? L· Y
遗传算法应用举例 ——在函数优化中的应用
[例] Rosenbrock函数的全局最大值计算。
bi 2i1 )
i 1
U max U min 2 1
0.3 70352 (12.1 3) /(218 1) 1.052426
二)个体适应度评价
如前所述,要求所有个体的适应度必须为正数或零,不能是负数。
(1) 当优化目标是求函数最大值,并且目标函数总取正值时,可以直接设定
max s.t. 如图所示: 该函数有两个局部极大点, 分别是: f(2.048, -2048) =3897.7342 f(-2.048,-2.0048) =3905.9262 其中后者为全局最大点。 f(x1,x2) = 100 (x12-x22)2 + (1-x1)2 -2.048 ≤ xi ≤ 2.048 (xi=1,2)
变异操作示例
变异字符的位置是随机确定的,如下表所示。某群体有3个个体,每个体含4 个基因。针对每个个体的每个基因产生一个[0, 1] 区间具有3位有效数字的值产生变异。表 中3号个体的第4位的随机数为0.001,小于0.01,该基因产生变异,使3号个体由
下面介绍求解该问题的遗传算法的构造过程:
第一步:确定决策变量及其约束条件。 s.t. 第二步:建立优化模型。 max 第三步:确定编码方法。 用长度为l0位的二进制编码串来分别表示二个决策变量x1,x2。 lO位二进制编码串可以表示从0到1023之间的1024个不同的数,故将x1,x2的 定义域离散化为1023个均等的区域,包括两个端点在内共有1024个不同的离散点。 从离散点-2.048到离散点2.048,依次让它们分别对应于从0000000000(0)到 f(x1,x2) = 100 (x12-x22)2 + (1-x1)2 -2.048 ≤ xi ≤ 2.048 (xi=1,2)
遗传算法中常见的编码方式

遗传算法中常见的编码方式
遗传算法是一种基于进化原理的优化算法,其中最重要的一步是对问题进行编码。
编码方式的选择会直接影响算法的效率和求解质量。
在遗传算法中,常见的编码方式有以下几种:
1. 二进制编码
二进制编码是最常见的编码方式,将每个个体表示为一串由0和1组成的二进制字符串。
这种编码方式简单易懂,容易实现,但是当问题的解空间较大时可能会导致编码长度过长。
2. 编码浮点数
编码浮点数是将问题中的实数变量编码成二进制数。
这种编码方式的优点是可以直接映射到问题的实际值,但是也因此可能导致精度问题。
3. 排列编码
排列编码是将问题中的离散变量编码成一个排列。
这种编码方式适用于需要考虑变量之间相对位置的问题,如旅行商问题。
4. 树形编码
树形编码是将问题转换成树形结构进行编码,这种编码方式适用于需要考虑变量之间的依赖关系的问题。
5. 重组编码
重组编码是将问题中的变量按照一定的规则进行编码。
这种编码方式适用于具有局部结构的问题,如图着色问题和社区发现问题。
以上是遗传算法中常见的编码方式,不同的问题需要选择适合的
编码方式才能获得最优的求解结果。
遗传算法解释及代码(一看就懂)【精品毕业设计】(完整版)

遗传算法( 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背包问题的一个“近似最优解”。
编码:需要将问题的解编码成字符串的形式才能使用遗传算法。
遗传算法解释及代码(一看就懂)

遗传算法( 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背包问题的一个“近似最优解”。
编码:需要将问题的解编码成字符串的形式才能使用遗传算法。
遗传算法基本概念

遗传算法基本概念一、引言遗传算法(Genetic Algorithm,GA)是一种基于生物进化原理的搜索和优化方法,它是模拟自然界生物进化过程的一种计算机算法。
遗传算法最初由美国科学家Holland于1975年提出,自此以来,已经成为了解决复杂问题的一种有效工具。
二、基本原理遗传算法通过模拟自然界生物进化过程来求解最优解。
其基本原理是将问题转换为染色体编码,并通过交叉、变异等操作对染色体进行操作,从而得到更优的解。
1. 染色体编码在遗传算法中,问题需要被转换成染色体编码形式。
常用的编码方式有二进制编码、实数编码和排列编码等。
2. 适应度函数适应度函数是遗传算法中非常重要的一个概念,它用来评价染色体的适应性。
适应度函数越高,则该染色体越有可能被选中作为下一代群体的父代。
3. 选择操作选择操作是指从当前群体中选择出适应度较高的个体作为下一代群体的父代。
常用的选择方法有轮盘赌选择、竞赛选择和随机选择等。
4. 交叉操作交叉操作是指将两个父代染色体的一部分基因进行交换,产生新的子代染色体。
常用的交叉方法有单点交叉、多点交叉和均匀交叉等。
5. 变异操作变异操作是指在染色体中随机改变一个或多个基因的值,以增加种群的多样性。
常用的变异方法有随机变异、非一致性变异和自适应变异等。
三、算法流程遗传算法的流程可以概括为:初始化种群,计算适应度函数,选择父代,进行交叉和变异操作,得到新一代种群,并更新最优解。
具体流程如下:1. 初始化种群首先需要随机生成一组初始解作为种群,并对每个解进行编码。
2. 计算适应度函数对于每个染色体,需要计算其适应度函数值,并将其与其他染色体进行比较。
3. 选择父代根据适应度函数值大小,从当前种群中选择出若干个较优秀的染色体作为下一代群体的父代。
4. 进行交叉和变异操作通过交叉和变异操作,在选出来的父代之间产生新的子代染色体。
5. 更新最优解对于每一代种群,需要记录下最优解,并将其与其他染色体进行比较,以便在下一代中继续优化。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
遗传算法编码
读万卷书不如行万里路,今天下决心写一个SGA(Simple Genetic Alogrithms)程序,是求解非约束优化问题。
max f(x1,x2)=21.5+x1*sin(4*PI*x1)+x2*sin(20*PI*x2)
-3.0<=x1<=12.1
4.1<=x2<=
5.8
这可是遗传算法中最容易的,可是结果却令人失望,在整个求解过程中都收敛在局部最优,只有通过加大变异率才能求得全局最优,但问题可想而知:全局最优解不稳定,就好像是昙花一现。
查了一下资料才发现是编码设计的问题。
我用的是二进制编码。
编码是应用遗传算法时要解决的首要问题,也是设计遗传算法时的一个关键步骤。
编码方法影响到交叉算子、变异算子等遗传算子的运算方法,大很大程度上决定了遗传进化的效率。
迄今为止人们已经提出了许多种不同的编码方法。
总的来说,这些编码方法可以分为三大类:二进制编码法、浮点编码法、符号编码法。
下面我们从具体实现角度出发介绍其中的几种主要编码方法。
1.二进制编码方法:
它由二进制符号0和1所组成的二值符号集。
它有以下一些优点:
1)编码、解码操作简单易行
2)交叉、变异等遗传操作便于实现
3)符合最小字符集编码原则
4)利用模式定理对算法进行理论分析。
二进制编码的缺点是:对于一些连续函数的优化问题,由于其随机性使得其局部搜索能力较差,如对于一些高精度的问题(如上题),当解迫近于最优解后,由于其变异后表现型变化很大,不连续,所以会远离最优解,达不到稳定。
而格雷码能有效地防止这类现象
2.格雷码方法:
格雷码方法是这样的一种编码方法,其连续两个整数所对应的编码值之间仅仅只有一个码位是不同的。
如下表
十进制二进制格雷码
000000000
100010001
200100011
300110010
401000110
501010111
601100101
701110100
810001100
910011101
1010101111
1110111110
1211001010
1311011011
1411101001
1511111000增加遗传距离
假设有一个二进制编码B=b m b m-1…b2b1,其对应的格雷码为G=g m g m-1…g2g1
由二进制编码转格雷码的转换公式为:
g m=b m
g i=b i+1⊕b i,i=m-1,m-2,…2,1(真异或假的结果是真,假异或真的结果也是真,真异或真的结果是假,假异或假的结果是假)
由格雷码转二进制的转换公式为:
b m=g m
b i=b i+1⊕g i,i=m-1,m-2,…2,1
从以上表格可以看出,当一个染色体变异后,它原来的表现现和现在的表现型是连续的。
格雷码编码的主要优点是:
1)便于提高遗传算法的局部搜索能力
2)交叉、变异等遗传操作便于实现
3)符合最小字符集编码原则
4)便于利用模式定理对算法进行理论分析
3.浮点编码法
对于一些多维、高精度要求的连续函数优化问题,使用二进制编码来表示个体时将会有一些不利之处。
二进制编码存在着连续函数离散化时的映射误差。
个体长度较知时,可能达不到精度要求,而个体编码长度较长时,虽然能提高精度,但却使遗传算法的搜索空间急剧扩大。
所谓浮点法,是指个体的每个基因值用某一范围内的一个浮点数来表示。
在浮点数编码方法中,必须保证基因值在给定的区间限制范围内,遗传算法中所使用的交叉、变异等遗传算子也必须保证其运算结果所产生的新个体的基因值也在这个区间限制范围内。
浮点数编码方法有下面几个优点:
1)适用于在遗传算法中表示范围较大的数
2)适用于精度要求较高的遗传算法
3)便于较大空间的遗传搜索
4)改善了遗传算法的计算复杂性,提高了运算交率
5)便于遗传算法与经典优化方法的混合使用
6)便于设计针对问题的专门知识的知识型遗传算子
7)便于处理复杂的决策变量约束条件
4.符号编码法
符号编码法是指个体染色体编码串中的基因值取自一个无数值含义、而只有代码含义的符号集如{A,B,C…}。
符号编码的主要优点是:
1)符合有意义积术块编码原则
2)便于在遗传算法中利用所求解问题的专门知识
3)便于遗传算法与相关近似算法之间的混合使用。
但对于使用符号编码方法的遗传算法,一般需要认真设计交叉、变异等遗传运算的操作方法,以满足问题的各种约束村求,这样才能提高算法的搜索性能。