遗传算法简单易懂的例子
遗传算法及其应用实例

遗传算法及其应用实例遗传算法搜索最优解的方法是模仿生物的进化过程,即通过选择与染色体之间的交叉和变异来完成的。
遗传算法主要使用选择算子、交叉算子与变异算子来模拟生物进化,从而产生一代又一代的种群X (t )。
1.遗传算法的简单原理遗传算法(Genetic Algorithm, GA)是一种基于自然群体遗传演化机制的高效探索算法,它摒弃了传统的搜索方式,模拟自然界生物进化过程,采用人工进化的方式对目标空间进行随机化搜索。
它将问题域中的可能解看作是群体的一个个体或染色体,并将每一个体编码成符号串形式,模拟达尔文的遗传选择和自然淘汰的生物进化过程,对群体反复进行基于遗传学的操作(遗传,交叉和变异),根据预定的目标适应度函数对每个个体进行评价,依据适者生存,优胜劣汰的进化规则,不断得到更优的群体,同时以全局并行搜索方式来搜索优化群体中的最优个体,求得满足要求的最优解。
遗传算法主要是用来寻优,它具有很多优点:它能有效地避免局部最优现象,有及其顽强的鲁棒性,并且在寻优过程中,基本不需要任何搜索空间的知识和其他辅助信息等等。
利用遗传算法,可以解决很多标准优化算法解决不了的优化问题,其中包括目标函数不连续、不可微、高度非线性或随机的优化问题。
(1)选择算子:是模拟自然选择的操作,反映“优胜劣汰”原理。
它根据每一个个体的适应度,按照一定规则或方法,从t代种群X (t )中选择出一些优良的个体(或作为母体,或让其遗传到下一代种群X (t 1))。
(2)交叉算子:是模拟有性繁殖的基因重组操作,它将从种群X (t )所选择的每一对母体,以一定的交叉概率交换它们之间的部分基因。
(3)变异算子:是模拟基因突变的遗传操作,它对种群X (t )中的每一个个体,以一定的变异概率改变某一个或某一些基因座上的基因值为其他的等位基因。
交叉算子与变异算子的作用都在于重组染色体基因,以生成新的个体。
遗传算法的运算过程如下:步 1(初始化)确定种群规模 N ,交叉概率 P c ,变异概率 P m 和终止进化准则;随机生成 N 个个体作为初始种群 X (0);置 t ← 0。
遗传算法解释及代码(一看就懂)

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

遗传算法优化的matlab案例以下是一个简单的遗传算法优化的Matlab 案例:假设我们想找到一个函数f(x) 的最大值,其中x 的取值范围为[0,10]。
我们可以使用遗传算法来找到最大值。
步骤如下:1. 定义适应度函数我们可以使用f(x) 来定义适应度函数。
在这个例子中,我们使用函数f(x) = x^2。
在Matlab 中,我们可以这样定义适应度函数:function y = fitness(x)y = x.^2;end2. 定义遗传算法参数我们需要定义一些遗传算法的参数,如种群大小、交叉概率、变异概率等。
在这个例子中,我们定义种群大小为50,交叉概率为0.8,变异概率为0.1。
pop_size = 50; % 种群大小crossover_rate = 0.8; % 交叉概率mutation_rate = 0.1; % 变异概率3. 执行遗传算法优化我们可以使用Matlab 自带的ga 函数来执行遗传算法优化。
我们需要传入适应度函数、变量的取值范围等参数。
lb = 0; % 变量下限ub = 10; % 变量上限nvars = 1; % 变量个数options =gaoptimset('Display','iter','PopulationSize',pop_size,'CrossoverFraction',c rossover_rate,'MutationFcn',@mutationadaptfeasible,'MutationRate',mut ation_rate,'StallGenLimit',50); % 遗传算法参数[x,fval] = ga(@fitness,nvars,[],[],[],[],lb,ub,[],options); % 执行遗传算法优化disp(['Optimal value: ',num2str(fval)]);disp(['Optimal solution: [',num2str(x),']']);在上面的代码中,我们使用了mutationadaptfeasible 函数来保证变异产生的新个体也满足变量取值范围。
遗传算法优化的matlab案例

遗传算法优化的matlab案例遗传算法是一种启发式优化算法,它模拟了自然界中的生物进化过程,通过运用生物进化中的遗传机制和适应度评价来搜索问题的优化解。
它被普遍应用于各种领域中的优化问题,如函数优化、组合优化、机器学习等。
本文将通过一个简单的Matlab案例介绍如何应用遗传算法进行优化。
假设我们需要优化一个简单的目标函数f(x) = x^2,其中x的值范围在[-10, 10]之间。
我们希望找到使得函数值最小的x。
首先,我们需要定义遗传算法中的基本操作,包括种群初始化、个体选择、交叉和变异。
种群初始化是指生成初始种群,个体选择是指根据适应度评价选择优秀个体,交叉是指将两个个体交叉产生新个体,变异是指对个体进行随机变化以增加种群的多样性。
种群初始化可以通过随机生成x的值来实现。
假设种群大小为100,我们可以使用rand函数生成一个100行1列的随机矩阵表示种群,同时将矩阵中的值映射到[-10, 10]的范围内。
个体选择可以通过计算适应度评价来选择最优个体。
在本案例中,适应度评价即目标函数的值。
我们可以计算每个个体的适应度并选择最小的个体作为最优个体。
交叉操作可以通过随机选择两个个体,并将它们的染色体交叉产生新个体。
在本案例中,染色体即x的值。
我们可以随机选择两个个体,并取它们染色体的均值作为新个体的染色体。
变异操作可以通过随机变化个体的染色体来增加种群的多样性。
在本案例中,我们可以随机选择一个个体,并对其染色体加上一个小的随机数。
通过以上基本操作,我们可以构建一个完整的遗传算法优化过程。
其基本流程如下:1. 初始化种群。
生成一个随机矩阵表示初始种群。
2. 计算适应度。
计算每个个体的适应度,并选择最小的个体作为最优个体。
3. 重复以下步骤直到满足终止条件:a. 选择交叉个体。
随机选择两个个体作为交叉个体。
b. 交叉操作。
根据交叉概率对交叉个体进行交叉操作,并生成新个体。
c. 变异操作。
根据变异概率对新个体进行变异操作。
matlab遗传算法实例

matlab遗传算法实例Matlab遗传算法实例引言:遗传算法是一种模拟自然界生物遗传与进化过程的算法,它通过模拟自然选择、交叉、变异等操作来搜索最优解。
Matlab作为一种强大的数值计算软件,提供了丰富的工具箱来实现遗传算法。
本文将介绍一个基于Matlab的遗传算法实例,以帮助读者更好地理解遗传算法的原理和应用。
一、遗传算法基本原理遗传算法主要包括个体编码、适应度评价、选择、交叉和变异等基本操作。
个体编码是将问题的解表示为染色体,通常使用二进制编码。
适应度评价是根据问题的目标函数对个体进行评估,以确定其适应度值。
选择操作通过一定的策略选择适应度较高的个体作为下一代的父代。
交叉操作将选定的父代个体通过染色体交叉产生新的子代个体。
变异操作以一定的概率对个体的染色体进行变异,以增加种群的多样性。
通过迭代上述操作,逐步优化种群,最终找到问题的最优解。
二、遗传算法实例假设我们要解决一个简单的函数优化问题,即求解函数f(x) = x^2 + 8x + 16的最小值。
我们可以使用遗传算法来搜索函数的最优解。
1. 初始化种群我们需要初始化一个包含N个个体的种群。
每个个体都表示问题的一个解,即一个实数x。
这里,我们将种群大小设置为50,取值范围为[-10, 10]之间的随机数。
2. 适应度评价对于每个个体,我们计算其适应度值,即函数f(x)的值。
根据函数的性质,我们知道函数的最小值为-4,在x=-4时取得。
因此,我们可以将适应度值定义为f(x)与-4之间的差的倒数。
3. 选择操作选择操作决定了哪些个体将成为下一代的父代。
通常采用轮盘赌选择算法,即根据个体的适应度值来确定其被选中的概率。
适应度值较高的个体被选中的概率较大。
4. 交叉操作在选择出的父代个体中,通过染色体交叉操作来产生新的子代个体。
我们可以选择单点交叉或多点交叉。
例如,我们可以随机选择两个个体,将它们的染色体在一个随机位置进行交叉,得到两个新的子代个体。
第七章遗传算法应用举例

第七章遗传算法应⽤举例第七章遗传算法应⽤举例遗传算法提供了⼀种求解⾮线性、多模型、多⽬标等复杂系统优化问题的通⽤框架,它不依赖于问题具体的领域。
随着对遗传算法技术的不断研究,⼈们对遗传算法的实际应⽤越来越重视,它已经⼴泛地应⽤于函数优化、组合优化、⾃动控制、机器⼈学、图象处理、⼈⼯⽣命、遗传编码、机器学习等科技领域。
遗传算法已经在求解旅⾏商问题、背包问题、装箱问题、图形划分问题等多⽅⾯的应⽤取得了成功。
本章通过⼀些例⼦,介绍如何利⽤第五章提供的遗传算法通⽤函数,编写MATLAB 程序,解决实际问题。
7.1 简单⼀元函数优化实例利⽤遗传算法计算下⾯函数的最⼤值:()sin(10) 2.0[1,2]f x x x x π=?+∈-,选择⼆进制编码,种群中个体数⽬为40,每个种群的长度为20,使⽤代沟为0.9,最⼤遗传代数为25。
下⾯为⼀元函数优化问题的MA TLAB 代码。
figure(1);fplot ('variable.*sin(10*pi*variable)+2.0',[-1,2]); %画出函数曲线% 定义遗传算法参数NIND= 40; % 个体数⽬(Number of individuals)MAXGEN = 25; % 最⼤遗传代数(Maximum number of generations)PRECI = 20; % 变量的⼆进制位数(Precision of variables)GGAP = 0.9; % 代沟(Generation gap)trace=zeros (2, MAXGEN); % 寻优结果的初始值FieldD = [20;-1;2;1;0;1;1]; % 区域描述器(Build field descriptor) Chrom = crtbp(NIND, PRECI); % 初始种群gen = 0; % 代计数器variable=bs2rv(Chrom,FieldD); % 计算初始种群的⼗进制转换 ObjV = variable.*sin (10*pi*variable)+2.0; % 计算⽬标函数值while gen < MAXGEN,FitnV = ranking (-ObjV); % 分配适应度值(Assign fitness values) SelCh = select ('sus', Chrom, FitnV , GGAP); % 选择SelCh = recombin ('xovsp',SelCh,0.7); % 重组SelCh = mut(SelCh); % 变异variable=bs2rv(SelCh,FieldD); % ⼦代个体的⼗进制转换ObjVSel =variable.*sin(10*pi*variable)+2.0; % 计算⼦代的⽬标函数值[Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV ,ObjVSel); % 重插⼊⼦代的新种群 gen = gen+1; % 代计数器增加% 输出最优解及其序号,并在⽬标函数图象中标出,Y 为最优解,I 为种群的序号[Y,I]=max(ObjV),hold on;plot (variable (I),Y , 'bo');trace (1,gen)=max (ObjV); %遗传算法性能跟踪trace (2,gen)=sum (ObjV)/length (ObjV);endvariable=bs2rv (Chrom,FieldD); %最优个体的⼗进制转换hold on,grid;plot (variable',ObjV','b*');figure (2);plot (trace (1,:)');hold on;plot (trace (2,:)','-.');grid;legend ('解的变化','种群均值的变化')使⽤基于适应度的重插⼊确保四个最适应的个体总是被连续传播到下⼀代。
遗传算法的介绍以及例子
遗传算法步骤
c)
评估种群中个体适应度
例:max
编码
1 , 2 = 1 2 + 2 2
初始化种群
. . 1 ∈ 1,2,3,4,5,6,7
2 ∈ 1,2,3,4,5,6,7
遗传算法中以个体适应度(对环境
的适应程度)的大小来评定各个个体的
优劣程度,从而决定其遗传机会的大小。
本例中,目标函数是以求函数最大
初始化种群
a) 编码
由于遗传算法不能直接处理问题空间的
参数,因此必须通过编码将要求解的问题表示
成遗传空间的染色体或者个体。这一转换操
作就叫做编码(encoding),也可以称作(问
题的)表示(representation)。
本例中,我们可以用无符号二进制整数
对1 , 2进行编码。1 , 2是0-7的整数,分别
b) 初始化种群
编码
遗传算法是对群体进行的进化操作,需要给
其准备初始种群进行“进化”操作:
初始化种群
• 初始化种群的大小取决于要解决的问题,
但通常包含成百上千的个体。
评估种群中个体适应度
• 通常,初始群体的选取是随机的,是在
整个群体的搜索空间内的随机选取。
• 偶尔,有先验知识的前提下,也可以在
搜索空间的一部分区域内随机选取。
继承了旧细胞的基因。
•
交叉(crossover):两个染色体的某一相同位置处DNA被切断,前后两串分别交叉组合形成两个
新的染色体。也称基因重组或杂交;
•
变异(mutation):复制时可能产生某些复制差错,变异产生新的染色体,表现出新的性状。
•
编码(coding):DNA中遗传信息在一个长链上按一定的模式排列。遗传编码可看作从表现型到基
遗传算法例子
������������ ,以及所有个体的适应值的
������������ , ( i=1.2,…,M );
2、
其次计算出每个个体的相对适应值的大小 下一代群体中的概率,
������������ /������������ ,它即为每个个体被遗传到
3、 4、
每个概率值组成一个区域,全部概率值之和为 1; 最后再产生一个 0 到 1 之间的随机数, 依据该随机数出现在上述哪一个概率区域 内来确定各个个体被选中的次数。
(在数学里面 s.t.是 subject to 的缩写,受约束的意思按中文习惯应该是使得...满足...)
因 x1, x2 为 0 ~ 7 之间的整数,所以分别用 3 位无符号二进制整数来表示,将它们连接 在一起所组成的 6 位无符号二进制数就形成了个体的基因型,表示一个可行解。 举例:������1 = 5,转为二进制数 101; ������2 = 6,转为二进制数 110; 则记 X={5,6}为表现性,X=101110 为基因型。 (2) 初始群体的产生; 本例中,群体规模的大小取为 4,即群体由 4 个个体组成,每个个体可通过随机方法产生。 如:011101,101011,011100,111001 分别对应{3,5} {5,3} {3,4} {7,1} (3) 适应值汁算 遗传算法中以个体适应值的大小来评定各个个体的优劣程度,从而决定其遗传 机会的大小。 本例中,目标函数总取非负值,并且是以求函数最大值为优化目标,故可直接 利用目标函数值作为个体的适应值。 (4) 选择运算;优胜劣汰,可以利用适应值值作为淘汰指标; 1、 先计算出群体中,每个个体的相对适应值的大小 总和
适应值
1101 34 1001 50 11 34 01 50 适应值 72+52=74 32+1=10 72+32=58 52+1=26
遗传算法实例(参考)
• crtbp:创建一元素为随机数的种群矩阵
[Chrom, Lind, BaseV]=crtbp(Nind, Lind)
[Chrom, Lind, BaseV]=crtbp(Nind, BaseV)
[Chrom, Lind, BaseV]=crtbp(Nind, Lind, Base) Chrom:染色体矩阵;Lind:长度;BaseV:基本字符。 • 举例:创建一个长度为4有3个个体的种群 [Chrom, Lind, BaseV]=crtbp(3, 4, BaseV) 得到: Chrom=[0 0 1 0; 1 0 1 1; 0 1 0 1] Lind=4; BaseV=[2 2 2 2];
n
max( cij ) j 1
• 染色体采用十进制编码,每个基因表示为火力点 的编号。染色体的长度由按目标批次编号顺序排 列的火力单元分配编号组成,表示一种可能的分 配方案。
• 射击有利程度估计值(对每个定点测量后确定的)
p=[.87 .52 .11 .78 .72 .69 .94 .72 .36 .28 .27 .74 .24 .78 .45; .87 .52 .11 .78 .72 .69 .94 .72 .36 .28 .27 .74 .24 .78 .45; .87 .52 .11 .78 .72 .69 .94 .72 .36 .28 .27 .74 .24 .78 .45; .87 .52 .11 .78 .72 .69 .94 .72 .36 .28 .27 .74 .24 .78 .45; .87 .52 .11 .78 .72 .69 .94 .72 .36 .28 .27 .74 .24 .78 .45; .87 .52 .11 .78 .72 .69 .94 .72 .36 .28 .27 .74 .24 .78 .45; .62 .87 .70 .22 .80 .42 .43 .90 .13 .95 .18 .19 .12 .61 .35; .48 .20 .42 .16 .43 .58 .69 .03 .34 .72 .15 .24 .29 .30 .75];
遗传算法简单一元函数优化实例
1.遗传算法简单一元函数优化实例利用遗传算法计算最大值f(x)=x sin(10*pi*x)+2, x in [-1,2]选择二进制编码,种群中个体数目为40,每个种群的长度为20,使用代沟为0.9,最大遗传代数为25。
下面为一元函数优化问题的MATLAB代码figure(1);fplot('variable.*sin(10*pi*variable)+2.0',[-1,2]); %画出函数曲线%定义遗传算法参数NIND=40; %个体数目(Number of individuals)MAXGEN=25; %最大遗传代数(Maximum number of generations)PRECI=20; %变量的二进制位数(Precision of variables)GGAP=0.9; %代沟(Generation gap)trace=zeros(2, MAXGEN); %寻优结果的初始值FieldD=[20;-1;2;1;0;1;1]; %区域描述器(Build field descriptor)Chrom=crtbp(NIND, PRECI); %初始种群gen=0; %代计数器variable=bs2rv(Chrom, FieldD); %计算初始种群的十进制转换ObjV=variable.*sin(10*pi*variable)+2.0; %计算目标函数值while gen<MAXGENFitnV=ranking(-ObjV); %分配适应度值(Assign fitness values)SelCh=select('sus', Chrom, FitnV, GGAP); %选择SelCh=recombin('xovsp', SelCh, 0.7); %重组SelCh=mut(SelCh); %变异variable=bs2rv(SelCh, FieldD); %子代个体的十进制转换ObjVSel=variable.*sin(10*pi*variable)+2.0; %计算子代的目标函数值[Chrom ObjV]=reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel); %重插入子代的新种群variable=bs2rv(Chrom, FieldD);gen=gen+1; %代计数器增加%输出最优解及其序号,并在目标函数图像中标出,Y为最优解,I为种群的序号[Y, I]=max(ObjV);hold on;plot(variable(I), Y, 'bo');trace(1, gen)=max(ObjV); %遗传算法性能跟踪trace(2, gen)=sum(ObjV)/length(ObjV);endvariable=bs2rv(Chrom, FieldD); %最优个体的十进制转换hold on, grid;plot(variable,ObjV,'b*');figure(2);plot(trace(1,:));hold on;plot(trace(2,:),'-.');gridlegend('解的变化','种群均值的变化')基于排序的适应度分配计算由程序段FitnV=ranking(-ObjV)实现,这里的评定算法假设目标函数是最小化的,所以ObjV前加了个负号,使目标函数最大化,适应度值结果由向量FitnV 返回。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
遗传算法简单实例为更好地理解遗传算法的运算过程,下面用手工计算来简单地模拟遗传算法的各个主要执行步骤。
例:求下述二元函数的最大值:(1) 个体编码遗传算法的运算对象是表示个体的符号串,所以必须把变量x1, x2 编码为一种符号串。
本题中,用无符号二进制整数来表示。
因 x1, x2 为 0 ~ 7之间的整数,所以分别用3位无符号二进制整数来表示,将它们连接在一起所组成的6位无符号二进制数就形成了个体的基因型,表示一个可行解。
例如,基因型 X=101110 所对应的表现型是:x=[ 5,6 ]。
个体的表现型x和基因型X之间可通过编码和解码程序相互转换。
(2) 初始群体的产生遗传算法是对群体进行的进化操作,需要给其淮备一些表示起始搜索点的初始群体数据。
本例中,群体规模的大小取为4,即群体由4个个体组成,每个个体可通过随机方法产生。
如:011101,101011,011100,111001(3) 适应度汁算遗传算法中以个体适应度的大小来评定各个个体的优劣程度,从而决定其遗传机会的大小。
本例中,目标函数总取非负值,并且是以求函数最大值为优化目标,故可直接利用目标函数值作为个体的适应度。
(4) 选择运算选择运算(或称为复制运算)把当前群体中适应度较高的个体按某种规则或模型遗传到下一代群体中。
一般要求适应度较高的个体将有更多的机会遗传到下一代群体中。
本例中,我们采用与适应度成正比的概率来确定各个个体复制到下一代群体中的数量。
其具体操作过程是:•先计算出群体中所有个体的适应度的总和fi ( i=1.2,…,M );•其次计算出每个个体的相对适应度的大小 fi / fi ,它即为每个个体被遗传到下一代群体中的概率,•每个概率值组成一个区域,全部概率值之和为1;•最后再产生一个0到1之间的随机数,依据该随机数出现在上述哪一个概率区域内来确定各个个体被选中的次数。
(5) 交叉运算交叉运算是遗传算法中产生新个体的主要操作过程,它以某一概率相互交换某两个个体之间的部分染色体。
本例采用单点交叉的方法,其具体操作过程是:•先对群体进行随机配对;•其次随机设置交叉点位置;•最后再相互交换配对染色体之间的部分基因。
(6) 变异运算变异运算是对个体的某一个或某一些基因座上的基因值按某一较小的概率进行改变,它也是产生新个体的一种操作方法。
本例中,我们采用基本位变异的方法来进行变异运算,其具体操作过程是:•首先确定出各个个体的基因变异位置,下表所示为随机产生的变异点位置,其中的数字表示变异点设置在该基因座处;•然后依照某一概率将变异点的原有基因值取反。
对群体P(t)进行一轮选择、交叉、变异运算之后可得到新一代的群体p(t+1)。
从上表中可以看出,群体经过一代进化之后,其适应度的最大值、平均值都得到了明显的改进。
事实上,这里已经找到了最佳个体“111111”。
[注意]需要说明的是,表中有些栏的数据是随机产生的。
这里为了更好地说明问题,我们特意选择了一些较好的数值以便能够得到较好的结果,而在实际运算过程中有可能需要一定的循环次数才能达到这个最优结果。
=========================================================== =======================基本遗传算法的框图:所以,遗传算法基本步骤是:1)初始化t←0进化代数计数器;T是最大进化代数;随机生成M个个体作为初始群体P(t);2)个体评价计算P(t)中各个个体的适应度值;3)选择运算将选择算子作用于群体;4)交叉运算将交叉算子作用于群体;5)变异运算将变异算子作用于群体,并通过以上运算得到下一代群体P(t + 1);6)终止条件判断t≦T:t←t+1 转到步骤2;t>T:终止输出解。
好的,看下遗传算法的伪代码实现:▲Procedures GA:伪代码begininitialize P(0);t = 0; //t是进化的代数,一代、二代、三代...while(t <= T) dofor i = 1 to M do //M是初始种群的个体数Evaluate fitness of P(t); //计算P(t)中各个个体的适应度end forfor i = 1 to M doSelect operation to P(t); //将选择算子作用于群体end forfor i = 1 to M/2 doCrossover operation to P(t); //将交叉算子作用于群体end forfor i = 1 to M doMutation operation to P(t); //将变异算子作用于群体end forfor i = 1 to M doP(t+1) = P(t); //得到下一代群体P(t + 1)end fort = t + 1; //终止条件判断t≦T:t←t+1 转到步骤2 end whileend二、深入遗传算法1、智能优化算法概述智能优化算法又称现代启发式算法,是一种具有全局优化性能、通用性强且适合于并行处理的算法。
这种算法一般具有严密的理论依据,而不是单纯凭借专家经验,理论上可以在一定的时间内找到最优解或近似最优解。
遗传算法属于智能优化算法之一。
常用的智能优化算法有:遗传算法、模拟退火算法、禁忌搜索算法、粒子群算法、蚁群算法。
(本经典算法研究系列,日后将陆续阐述模拟退火算法、粒子群算法、蚁群算法。
)2、遗传算法概述遗传算法是由美国的J. Holland教授于1975年在他的专著《自然界和人工系统的适应性》中首先提出的。
借鉴生物界自然选择和自然遗传机制的随机化搜索算法。
模拟自然选择和自然遗传过程中发生的繁殖、交叉和基因突变现象。
在每次迭代中都保留一组候选解,并按某种指标从解群中选取较优的个体,利用遗传算子(选择、交叉和变异)对这些个体进行组合,产生新一代的候选解群,重复此过程,直到满足某种收敛指标为止。
基本遗传算法(Simple Genetic Algorithms,GA)又称简单遗传算法或标准遗传算法),是由Goldberg总结出的一种最基本的遗传算法,其遗传进化操作过程简单,容易理解,是其它一些遗传算法的雏形和基础。
3、基本遗传算法的组成(1)编码(产生初始种群)(2)适应度函数(3)遗传算子(选择、交叉、变异)(4)运行参数接下来,咱们分门别类,分别阐述着基本遗传算法的五个组成部分:1、编码遗传算法(GA)通过某种编码机制把对象抽象为由特定符号按一定顺序排成的串。
正如研究生物遗传是从染色体着手,而染色体则是由基因排成的串。
基本遗传算法(SGA)使用二进制串进行编码。
初始种群:基本遗传算法(SGA)采用随机方法生成若干个个体的集合,该集合称为初始种群。
初始种群中个体的数量称为种群规模。
2、适应度函数遗传算法对一个个体(解)的好坏用适应度函数值来评价,适应度函数值越大,解的质量越好。
适应度函数是遗传算法进化过程的驱动力,也是进行自然选择的唯一标准,它的设计应结合求解问题本身的要求而定。
3.1、选择算子遗传算法使用选择运算对个体进行优胜劣汰操作。
适应度高的个体被遗传到下一代群体中的概率大;适应度低的个体,被遗传到下一代群体中的概率小。
选择操作的任务就是从父代群体中选取一些个体,遗传到下一代群体。
基本遗传算法(SGA)中选择算子采用轮盘赌选择方法。
Ok,下面就来看下这个轮盘赌的例子,这个例子通俗易懂,对理解选择算子帮助很大。
轮盘赌选择方法轮盘赌选择又称比例选择算子,其基本思想是:各个个体被选中的概率与其适应度函数值大小成正比。
设群体大小为N,个体xi 的适应度为 f(xi),则个体xi的选择概率为:轮盘赌选择法可用如下过程模拟来实现:(1)在[0, 1]内产生一个均匀分布的随机数r。
(2)若r≤q1,则染色体x1被选中。
(3)若qk-1<r≤qk(2≤k≤N), 则染色体xk被选中。
其中的qi称为染色体xi (i=1, 2, …, n)的积累概率, 其计算公式为:积累概率实例:轮盘赌选择方法的实现步骤:(1)计算群体中所有个体的适应度值;(2)计算每个个体的选择概率;(3)计算积累概率;(4)采用模拟赌盘操作(即生成0到1之间的随机数与每个个体遗传到下一代群体的概率进行匹配)来确定各个个体是否遗传到下一代群体中。
例如,有染色体s1= 13 (01101)s2= 24 (11000)s3= 8 (01000)s4= 19 (10011)假定适应度为f(s)=s^2 ,则f (s1) = f(13) = 13^2 = 169 f (s2) = f(24) = 24^2 = 576 f (s3) = f(8) = 8^2 = 64f (s4) = f(19) = 19^2 = 361 染色体的选择概率为:染色体的累计概率为:根据上面的式子,可得到:例如设从区间[0, 1]中产生4个随机数:r1 = 0.450126, r2 = 0.110347r3 = 0.572496, r4 = 0.985033.2、交叉算子交叉运算,是指对两个相互配对的染色体依据交叉概率 Pc 按某种方式相互交换其部分基因,从而形成两个新的个体。
交叉运算是遗传算法区别于其他进化算法的重要特征,它在遗传算法中起关键作用,是产生新个体的主要方法。
基本遗传算法(SGA)中交叉算子采用单点交叉算子。
单点交叉运算3.3、变异算子变异运算,是指改变个体编码串中的某些基因值,从而形成新的个体。
变异运算是产生新个体的辅助方法,决定遗传算法的局部搜索能力,保持种群多样性。
交叉运算和变异运算的相互配合,共同完成对搜索空间的全局搜索和局部搜索。
基本遗传算法(SGA)中变异算子采用基本位变异算子。
基本位变异算子是指对个体编码串随机指定的某一位或某几位基因作变异运算。
对于二进制编码符号串所表示的个体,若需要进行变异操作的某一基因座上的原有基因值为0,则将其变为1;反之,若原有基因值为1,则将其变为0 。
基本位变异算子的执行过程:4、运行参数(1)M :种群规模(2)T :遗传运算的终止进化代数(3)Pc :交叉概率(4)Pm :变异概率三、浅出遗传算法遗传算法的本质遗传算法本质上是对染色体模式所进行的一系列运算,即通过选择算子将当前种群中的优良模式遗传到下一代种群中,利用交叉算子进行模式重组,利用变异算子进行模式突变。
通过这些遗传操作,模式逐步向较好的方向进化,最终得到问题的最优解。
遗传算法的主要有以下八方面的应用:(1)组合优化(2)函数优化(3)自动控制(4)生产调度(5)图像处理(6)机器学习(7)人工生命(8)数据挖掘四、遗传算法的应用遗传算法的应用举例、透析本质(这个例子简明、但很重要)已知x为整数,利用遗传算法求解区间[0, 31]上的二次函数y=x2的最大值。