《神经网络》课件第6章_第1页
《神经网络》课件第6章_第2页
《神经网络》课件第6章_第3页
《神经网络》课件第6章_第4页
《神经网络》课件第6章_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

6.1遗传算法的概念6.2一种适应度函数的改进算法6.3遗传算法及其遗传神经网络应用仿真6.4小结

习题

遗传算法(GeneticAlgorithms,GA)是一种基于自然选择和基因遗传学原理的优化搜索方法。遗传算法的创立有两个目的:一是抽象和严谨地解释自然界的适应过程;二是为了将自然生物系统的重要机理运用到工程系统、计算机系统或商业系统等人工系统的设计中。遗传算法在计算机上模拟生物进化过程和基因的操作,并不需要对象的特定知识,也不需要对象的搜索空间是连续可微的,它具有全局寻优的能力。一些用常规的优化算法能有效解决的问题,采用遗传算法寻优技术往往能得到更好的结果。有些问题采用常规的优化算法会陷入局部次优点,而采用遗传算法可以找到全局最优解。人们常把它用于许多领域

的实际问题,如函数优化、自动控制、图像识别、机器学习等。目前,遗传算法正在向其他学科和领域渗透,正在形成遗传算法和神经网络或模糊控制相结合的新算法,从而构成一种新型的智能控制系统整体优化的结构形式。本章讨论遗传算法的基本原理、操作、模式理论和计算机实现问题;在此基础上,探讨基于遗传算法寻优的软件编程方法、基于遗传算法神经网络辨识的软件开发,并给出了相应的程序及其程序剖析。6.1.1遗传算法的定义及特点

遗传算法是JohnH.Holland根据生物进化的模型提出的一种优化算法。自然选择学说是进化论的中心内容。根据进化论,生物的发展进化主要有三个原因,即遗传、变异和选择。6.1遗传算法的概念

遗传算法基于自然选择和基因遗传学原理的搜索方法,将“优胜劣汰,适者生存”的生物进化原理引入待优化参数形成的编码串群体中,按照一定的适配值函数及一系列遗

传操作对各个体进行筛选,从而使适配值高的个体被保留下来,组成新的群体;新群体包含上一代的大量信息,并且引入了新的优于上一代的个体。这样周而复始,群体中各个体

适应度不断提高,直至满足一定的极限条件。此时,群体中适配值最高的个体即为待优化参数的最优解。正是由于遗传算法独特的工作原理,使它能够在复杂空间进行全局优化搜索,具有较强的鲁棒性;另外,遗传算法对于搜索空间,基本上不需要什么限制性的假设(如连续、可微及单峰等)。常规的优化算法,如解析法,往往只能得到局部最优解而非全局最优解,且要求目标函数连续光滑及可微;枚举法虽然克服了这些缺点,但计算效率太低,对于一个实际问题常常由于搜索空间太大而不能将所有的情况都搜索到;即使很著名的动态规划法,也遇到“指数爆炸”问题,它对于中等规模和适度复杂性的问题也常常无能为力。遗传算法通过对参数空间编码并用随机选择作为工具来引导搜索过程朝着更高效的方向发展。同常规优化算法相比,遗传算法有以下特点:

(1)遗传算法是对参数的编码进行操作,而不对参数本身。遗传算法首先基于一个有限的字母表,把最优化问题的自然参数集编码为有限长度的字符串。

(2)遗传算法是从许多点开始并行操作的,而不局限于一点,因而可以有效地防止搜索过程收敛与局部最优解。

(3)遗传算法通过目标函数来计算适配值,而不需要其他推导和附加信息,从而对问题的依赖性较小。

(4)遗传算法的寻优规则是由概率决定的,而非确定性的。

(5)遗传算法在解空间进行高效启发式搜索,而非盲目地穷举或完全随机搜索。

(6)遗传算法对于待寻优的函数基本无限制,它既不要求函数连续,也不要求函数可微,既可以是数学解析式所表达的显函数,又可以是映射矩阵甚至是神经网络等隐函数,因而应用范围较广。

(7)遗传算法具有并行计算的特点,因而可通过大规模并行计算来提高计算速度。

(8)遗传算法更适合大规模复杂问题的优化。

(9)遗传算法计算简单,功能强。6.1.2遗传操作

1.基本术语

(1)位串:群体中的个体也叫位串,如0110、1100,其个体的位数为4。

(2)群体:一组位串,一组位串的个数可在4~30之间选择。

(3)适应度函数:

(4)选择概率:概率最大的个体复制,概率最小的个体变异或被复制的替代,其余的位串交叉操作。(6-2)

(5)期望复制概率:一般取

(6)期望变异概率:一般取最大的变异概率

(7)配对:在交叉操作中的配对可随机、任意配对,或自己定义,也可采用轮盘赌的方法配对。

2.遗传算法的基本操作

Holland的遗传算法通常称为简单遗传算法。操作简单和覆盖面广是遗传算法的两个主要特点。一般的遗传算法都包含三个基本操作:复制(ReproductionOperator)、交叉(CrossoverOperator)和变异(MutationOperator)。

复制、交叉、变异操作由种群的适配值或由适应度函数的概率确定。

1)复制

复制(又称繁殖),是从一个旧种群中(OldPopulation)选择生命力强(即适配值大或选择概率大)的个体位串(或称字符串)(IndividualString)产生新种群的过程。或者说,复制是个体位串根据其目标函数f(即适配值函数)复制自己的过程。

例如给出一种群的初始位串:一组位串的个数为4,其中个体位串为5位,取适配值f(x)=x2,可以计算出选择概率p=fi/∑fi,如表6-1所示。表6-1复制操作前后的各项数据

在表6-1中,由于取变异概率Pm=0.001,因而新一代用选择概率最大的复制个体代替,即:

2)交叉

简单的交叉操作分两步实现。在由等待配对的位串构成的匹配池中,第一步是将新复制产生的位串个体随机两两配对;第二步是随机地选择交叉点,对匹配的位串进行交叉繁殖,产生一对新的位串。具体过程如下:

设位串的字符长度为l,在[l,l-1]的范围内,随机地选取一个整数值k作为交叉点。将两个配对位串从位置k后的所有字符进行交换,从而生成两个新的位串。例如,在表6-1中的两个初始配对个体位串为A1和A2(取交叉点k=4)如下:

A1=0110|1

A2=1100|0

位串的字符长度l=5,假定在1和4之间随机选取一个值k(k=4,如分隔符“|”所示),经交叉操作后产生了两个新的字符串,即

=01100

=11001

一般的交叉操作过程可用图6-1所示的方式进行(取交叉点k=2)。图6-1交叉操作

【例6-1】求使函数f(x)=x2在[0,31]上取得最大值的点x0。

(1)在区间[0,31]上的整参数x可用一个5位的二进制位串进行编码,x的值直接对应二进制位串的数值:

x=000000

x=3111111

(2)用抛硬币的方法随机产生一个由4个位串组成的初始种群,见表6-1。

(3)计算适配值及选择率:①对初始种群中的各个体位串解码,得到相应的参数x的值。

②由参数值计算目标函数值f(x)=x2。

③由目标函数值得到相应个体位串的适配值(直接取目标函数值)。

④计算相应的选择率(选择复制的概率):。

⑤计算期望的复制数,计算结果见表6-1。(4)复制,操作结果见表6-1。

(5)交叉,操作结果见表6-2。表6-2交叉操作前后的各项数据

(6)变异,取变异概率pm=0.001,则平均每1000位中才有一位变异。由4个位串组成的种群共有4×5=20位,则变异的期望值为20×0.001=0.02(位)。事实上,在我们的这个单代遗传的试验中没有变异发生。

(7)由表6-1和表6-2可以看出,虽然仅经历了一代遗传,第二代的平均值及最大值却比第一代的平均值及最大值有了很大提高,即

平均值292.5→438.5

最大值576→729

这说明经过这样的一次遗传算法步骤,问题的解决便朝着最优解的方向前进了一步,只要这个过程继续进行下去,最终将走向全局最优解,而每一步的操作却非常简单,而且对问题的依赖性小。

3)变异

变异操作是从一个旧种群中选择生命力弱(即适配值小或选择概率小)的个体位串(或称字符串)产生新种群的过程。如果取变异概率pm=0.07,表6-1的旧种群中的个体A3=01000,选择概率为,该个体应变异,其新一代变异前后为

复制及变异操作前后的各项数据如表6-3所示。表6-3复制及变异操作前后的各项数据

通过上面一个简单的例子可以看到,遗传算法与多数常规的最优化和搜索方法的区别主要表现在以下几个方面:

(1)算法只对参数集的编码进行操作,而不是对参数本身进行操作。

(2)遗传算法是从许多初始点开始并行操作的,而不是在一个单点上进行寻优,因而可以有效地防止搜索过程收敛于局部最优解。

(3)遗传算法通过目标函数来计算适配值,而不需要其他的推导和附属信息,从而对问题的依赖性较小。

(4)遗传算法使用随机转换规则而不是确定性规则来工作,即具有随机操作算子。

图6-2是遗传算法的工作示意图。

在遗传算法基础上,可构成遗传算法神经网络(GeneticAlgorithmsNeuralNetwork)。图6-2遗传算法工作示意图6.2.1适应度函数的选择与计算

在标准的遗传算法中,基本上不用搜索空间知识或其它辅助信息,而仅用适应度函数来评估个体,并在此基础上进行遗传操作。遗传算法不采用确定性的规则,而采用概率

的变迁规则来指导其搜索方向。另外,遗传算法的处理对象不是参数本身,而是对参数集进行了编码的个体。该编码操作使得遗传算法可直接对结构对象进行操作。6.2一种适应度函数的改进算法

以上具有特色的操作和方法使得遗传算法使用简单且易于并行化,具有较好的全局搜索性。因此,遗传算法具有广泛的应用领域。但在使用遗传算法时,适应度函数条件太宽松,不易设定,常要经过多次试凑才能确定。因此,我们提出了一种改进适应度函数算法[7],在此基础上,将这种改进的遗传算法和神经网络结合,构成了一种新型遗传神经解耦控制器。仿真和实际的炉群多变量解耦实验验证了该方法的有效性。

1.适应度函数的作用及其选择方法

适应度函数的评估是遗传算法选择交叉、变异操作的依据。该函数不仅不受连续可微的限制,而且其定义域可以任意设定。对于适应度函数的唯一要求是其输入目标函数有正

的输出。传统的适应度函数如式(6-1)所示。式中的Cmax可采用多种方式选择,Cmax可以是一个合适的输入值,也可以是在进化过程中目标函数g(x)的最大值或当前群体中的最大值

。从式(6-1)分析,Cmax条件太宽松,不易设定。在遗传算法中,对于同目标函数g(x),若由不同的技术人员来设定,结果会多种多样,差异甚大,无法判断哪种结果最合理,从而直接影响到遗传操作。

为防止遗传算法中的随机漫游现象,可通过放大相应的适应度函数的值来提高个体的竞争力。这种对适应度函数的调节称之为定标。自从DeJong开始引入适应度函数定标以来

,定标已成为进化过程中竞争水平的重要标志。定标(线性)有以下形式:

fx(x)=af(x)+b

(6-3)

式中,fx(x)为定标后的适应度函数,a和b可通过多种途径设置,但必须满足原适应度函数f(x)是定标后的适应度函数f

x(x)的平均值,或定标后的适应度函数的最大值是原适应度函数的指定倍数。除此之外,还有σ截断定标法、乘幂定标法等都是适应度函数的定标方法。无论以上哪种适应度函数的设定及其定标形式,均有其不确定的参数(如Cmax、a、b、σ等),需要在实际遗传操作中多次摸索或试凑才能确定。特别是Cmax,在遗传操作中无规律可寻,给遗传算法在工程中的应用带来很大不便。

2.适应度函数的改进设计与算法

1)适应度函数的改进设计

为了克服传统的遗传算法中适应度函数的不确定性,并且让适应度函数f(x)随着输入空间个体的变化而变化,从而使适应度函数能合理地评价个体,进一步完成选择、交叉、变异等操作,本文构造以下改进适应度函数:(6-4)(6-5)式中,gm是当前输入空间的个体最大值;E[g(x)]是n个目标函数的均值。这里利用gm和E[g(x)]之差的欧氏范数再加上E[g(x)]作为C*,并以此取代式(6-1)中当前合适的输入值Cmax

,这样不仅能保证适应度函数f(x)为非负值,且使f(x)随着输入空间的个体的变化而变化。在遗传算法中,对于同一目标函数g(x),由不同的技术人员来设定,结果会统一,从而由该适应度函数f(x)来牵制遗传操作,使得遗传操作趋于更合理。

2)适应度函数改进算法

改进适应度函数将作为遗传神经解耦控制器的一个子程序。求取子程序的步骤如下:

(1)从主程序读个体xi,计算目标函数gi(x)。

(2)求gi(x)的均值,计算sum=sum+gi(x),并求E[gi(x)]=sum/i。

(3)判断gx(x)<gi(x)是否成立。若是,gm(x)=gi(x);若否,直接转(4)。

(4)根据式(6-5)计算

(5)根据式(6-1),求取适应度函数f(x)。

(6)返回主程序。6.2.2一种改进的遗传神经解耦方法

将式(6-3)、式(6-4)改进适应度函数用于遗传操作,该遗传算法和BP神经网络结合,构成一种改进适应度函数的遗传神经解耦控制器。这种控制器既继承了遗传算法的“较好的全局搜索性”,又发扬了神经网络“对非线性有较强的逼近能力”的特点,因此,可以用于复杂的非线性多变量系统控制。该控制器的算法如下:

(1)对神经网络的权值、阈值、反传误差ε、循环次数M赋值。

(2)计算神经网络的输出(见式(6-8))。

(3)调用改进适应度函数的遗传算法子程序,修正神经网络权值。

(4)判断反传误差是否小于等于ε。若是,结束算法。

(5)判断循环次数是否为M。若是,结束;若否,转(2)。

(6)结束。改进适应度函数的遗传算法主程序包括:

(1)根据要解决实际问题被控量相应的动态调节系数或要逼近的函数的自变量,通过编码,产生初始群体;设定目标函数g(x);赋终结条件值。

(2)调用改进适应度函数f(x)求取子程序。

(3)执行选择、交叉、变异遗传操作。

(4)统计结果,群体更新;计算种群大小和遗传操作的概率。

(5)将二进制的码译成十进制的数,输出结果解决实际问题。

(6)判断终结条件到否。若否,转(2);若到,结束。将系统的解耦控制误差作为被控量。为防止遗传算法操作中个体太长,计算量大的问题,这里采用单神经元解耦控制的方案,输入xj(i)为三维列向量,它们分别是误差e(i)、误差的变化率Δe(i)及误差关系式e(i)-2e(i-1)+e(i-2)。由遗传算法操作来完成权值矩阵w(i)的修正,

w(i)=[w1

w2

w3

θ]T,其中w1、w2、w3分别是三个输入量到单神经元的权值,θ为单神经元的阈值。如果认为权值在-16~+16之间,对三个权值和阈值各用4位二进制码串表示,依次连接在一起形成一个应用于遗传算法的个体,该个体为16位的二进制码串。各连接权的字符串值和实际权值之间有如式(6-6)所示的关系,其阈值也有相同的关系:(6-6)式中,binreplace(i)是经过遗传操作后,权值或阈值的4位二进制码对应的十进制数,并用oi代替;目标函数选均方差值,即;适应度函数采用改进适应度函数的求取子程序计算。

在执行选择、交叉、变异遗传操作时,选择继承的概率,即评价各个权值和阈值,对应适应度函数的选择概率为(6-7)式中N为群体中包含个体的个数,选N=60,对该个体为16位的二进制码串进行一点交叉。在实际训练中,将选择概率较大的20%,即前12个个体直接遗传给下一代。选择概率小于0.001的个体随机异变16位中的任意位。选择概率大于0.001同时处在13以后的个体码串进行一点交叉,这样进行遗传操作后,再利用式(6-6)将该个体为16位的二进制码串

译成相应的权值和阈值,然后经过sigmoid函数激励可得(6-8)式中,yo(i)是单神经元的输出;θi为第i次遗传操作时单神经元的阈值;u(i)是直接加在被控对象上的输入值。6.2.3遗传神经解耦仿真、实验及结论

针对多变量燃烧系统中的一个子系统,其离散模型为

(6-9)

式中,yi±1(i-1)为相邻的燃烧点即其它子系统对该子系统的影响,据统计,其为幅值约是yi(i)的1/10的非线性函数[7]。针对上述多变量燃烧系统,对于两个相邻的子系统,利用MATLAB语言(离线仿真用MATLAB编程)和C语言结合(在实测时及控制接口用C编程),上机仿真,两个相邻的子系统给定温度分别为yp1=60℃,yp2=90℃,先用常规的PI算法,并令式(6-9)的d=0,仿真结果如图6-3所示;然后采用改进适应度函数的遗传神经解耦控制器,令式(6-9)的d=0.05,仿真结果如图6-4所示。图中“-”曲线为给定温度;“×”曲线为子系统1的输出yo1;“○”曲线为子系统2的输出yo2。图6-4中的wd为随机噪声曲线,模仿子系统之间的耦合信号,代替相邻的燃烧点即其它子系统对该子系统的影响,分别加在各子系统中。在同样给定温度下,采用改进适应度函数的遗传神经解耦控制器对多变量非线性系统解耦控制,并实测温度,表6-4是两个实际相邻燃烧子系统实测的温度值。

图6-3常规的PI算法解耦仿真(d=0时)图6-4改进遗传神经解耦仿真(d=0.05时)表6-4两个实际相邻的燃烧子系统在60℃、90℃给定温度采用改进遗传神经解耦的实测温度以上分析、仿真及炉群实验证明,采用改进适应度函数的遗传神经解耦控制器对多变量非线性解耦控制优于传统的PI控制,效果良好。6.3.1遗传算法寻优MATLAB仿真

【例6-2】用遗传算法求下列函数的最大值:

f(x)=10cos3x-4x,x∈[0,10]

解将x

的值用一个10位的二值形式码串表示。

编程如下(该程序包括1个主程序和9个子程序,采用M函数文件编程):6.3遗传算法及其遗传神经网络应用仿真

%遗传算法主程序(在光盘上对应的程序名为FLch6eg1)

clear

clf

popsize=20;

%设置初始参数,群体大小

chromlength=10;%字符串长度(个体长度),染色体长度

pc=0.6;%设置交叉概率,本例中交叉概率是定值,若想设置变

%化的交叉概

率可用表达式表示,或自定义一个交叉概

%率函数,例如用神经网络训练得到的值作为交叉概率

pm=0.001;

%设置变异概率,同理也可设置为变化的变异概率

pop=initpop(popsize,chromlength);%运行初始化函数,随机产生初始群体

fori=1:30%30为迭代次数

[objvalue]=calobjvalue(pop);

%计算目标函数

fitvalue=calfitvalue(objvalue);

%计算群体中每个个体的适应度

[newpop]=selection(pop,fitvalue);

%复制

[newpop]=crossover(pop,pc);%交叉

[newpop]=mutation(pop,pc);%变异

[bestindividual,bestfit]=best(pop,fitvalue);%求出群体中适应值最大的个体及其适应值

y(i)=max(bestfit);

n(i)=i;

pop5=bestindividual;

x(i)=decodechrom(pop5,1,chromlength)*10/1023;

pop=newpop;

end

y(i)fplot('10*cos(3*x)-4*x)',[010])

gridon

holdon

plot(x,y,'g*')

holdoff

%2.1初始化(编码)(子程序名:initpop.m)

%initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染

%色体的长度(二值数的长度),长度大小取决于变量的二进制编码的长度(在本例中取10位)。

functionpop=initpop(popsize,chromlength)pop=round(rand(popsize,chromlength));%rand随机产生每个单元为{0,1}行数为popsize,

%列数为chromlength的矩阵,%roud对矩阵的每个单元进行圆整。

%2.2计算目标函数值

%2.2.1将二进制数转化为十进制数(1)(子程序名:decodebinary.m)

%产生[2^n2^(n-1)...1]的行向量,然后求和,将二进制转化为十进制

functionpop2=decodebinary(pop)

[px,py]=size(pop);%求pop行和例数

fori=1:py

pop1(:,i)=2.^(py-1).*pop(:,i);%pop的每一个行向量(二进制表示),for循环语句将每

%个二进制行向量按位置

py=py-1;%乘上权重

endpop2=sum(pop1,2);%求pop1的每行之和,即得到每行二进制表示变为十进制%表示值,实现二进制到十进制的转变

%2.2.2将二进制编码转化为十进制数(2),(子程序名:decodechrom.m)

%decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置

%(对于多个变量而言,如有两个变量,采用20位表示,每个变量10位,则第一个变量从1开始,另一个变量从11开始。本例为1)[newpop]=crossover(pop,pc);

%交叉

[newpop]=mutation(pop,pc);

%变异

[bestindividual,bestfit]=best(pop,fitvalue);

%求出群体中适应值最大的个体

及其适应值

y(i)=max(bestfit);

n(i)=i;

pop5=bestindividual;

x(i)=decodechrom(pop5,1,chromlength)*10/1023;

pop=newpop;

end

y(i)%参数1ength表示所截取的长度(本例为10)。

%Name:decodechrom.m

%将二进制编码转换成十进制

functionpop2=decodechrom(pop,spoint,length)

pop1=pop(:,spoint:spoint+length-1);%将从第“spoint”位开始到第“spoint+length-1”%位(这段码位表示一个参数)取出

pop2=decodebinary(pop1);%利用上面函数“decodebinary(pop)”将用二进制表示的个体%基因变为十进制数%2.2.3计算目标函数值,(子程序名:calobjvalue.m)

%calobjvalue.m函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同%优化问题予以修改,实现目标函数的计算

function[objvalue]=calobjvalue(pop)

temp1=decodechrom(pop,1,10);%将pop每行转化成十进制数

x=temp1*10/1023;%将二值域中的数转化为变量域的数

objvalue=10*cos(3*x)-4*x;%计算目标函数值

%2.3计算个体的适应值(子程序名:calfitvalue.m)functionfitvalue=calfitvalue(objvalue)

globalCmin;

Cmin=0;

[px,py]=size(objvalue);

fori=1:px

ifobjvalue(i)+Cmin>0

temp=Cmin+objvalue(i);

else

temp=0.0;

end

fitvalue(i)=temp;

end

fitvalue=fitvalue';%2.4选择复制(子程序名:selection.m)

%选择或复制操作是决定哪些个体可以进入下一代。程序中采用赌轮盘选择法选择,这种方%法较易实现。

%根据方程pi=fi/∑fi=fi/fsum,选择步骤:

%1)在第t代,由(1)式计算fsum和pi

%2)产生{0,1}的随机数rand(.),求s=rand(.)*fsum

%3)求∑fi≥s中最小的k,则第k个个体被选中

%4)进行N次2)、3)操作,得到N个个体,成为第t=t+1代种群

%遗传算法子程序

%Name:selection.m

%选择复制function[newpop]=selection(pop,fitvalue)

totalfit=sum(fitvalue);%求适应值之和

fitvalue=fitvalue/totalfit;%单个个体被选择的概率

fitvalue=cumsum(fitvalue);%如fitvalue=[1234],则cumsum(fitvalue)=[13610]

[px,py]=size(pop);

ms=sort(rand(px,1));%从小到大排列,将"rand(px,1)"产生的一列随机数变成轮盘赌形式的表示方法,由小到大排列

fitin=1;%fivalue是一向量,fitin代表向量中元素位,即fitvalue(fitin)代表第fitin个个体的单个个体被选择的概率

newin=1;%同理whilenewin<=px

if(ms(newin))<fitvalue(fitin)%ms(newin)表示的是ms列向量中第"newin"位数值,同理fitvalue(fitin)

newpop(newin,:)=pop(fitin,:);%赋值,即将旧种群中的第fitin个个体保留到下一代(newpop)

newin=newin+1;

else

fitin=fitin+1;

end

end%2.5交叉(子程序名:crossover.m)

%交叉(crossover),群体中的每个个体之间都以一定的概率pc交叉,即两个个体从各自字符串的某一位置

%(一般是随机确定)开始互相交换,这类似生物进化过程中的基因分裂与重组。例如,假设2个父代个体x1,x2为:

%x1=0100110

%x2=1010001

%从每个个体的第3位开始交叉,交又后得到2个新的子代个体y1,y2分别为:

%y1=0100001

%y2=1010110

%这样2个子代个体就分别具有了2个父代个体的某些特征。利用交叉我们有可能由父代个体在子代组合成具有更高适合度的个体。

%事实上交叉是遗传算法区别于其它传统优化方法的主要特点之一。

%遗传算法子程序

%交叉

function[newpop]=crossover(pop,pc)

[px,py]=size(pop);

newpop=ones(size(pop));

fori=1:2:px-1

if(rand<pc)

cpoint=round(rand*py);

newpop(i,:)=[pop(i,1:cpoint)pop(i+1,cpoint+1:py)];

newpop(i+1,:)=[pop(i+1,1:cpoint)pop(i,cpoint+1:py)];

else

newpop(i,:)=pop(i,:);

newpop(i+1,:)=pop(i+1,:);

end

end%2.6变异(子程序名:mutation.m)

%变异(mutation),基因的突变普遍存在于生物的进化过程中。变异是指父代中的每个个体的每一位都以概率pm翻转,即由“1”变为“0”,

%或由“0”变为“1”。遗传算法的变异特性可以使求解过程随机地搜索到解可能存在的整个空间,因此可以在一定程度上求得全局最优解。

%遗传算法子程序function[newpop]=mutation(pop,pm)

[px,py]=size(pop);

newpop=ones(size(pop));

fori=1:px

if(rand<pm)%产生一随机数与变异概率比较

mpoint=round(rand*py);

ifmpoint<=0

mpoint=1;

endnewpop(i,:)=pop(i,:);

ifany(newpop(i,mpoint))==0

newpop(i,mpoint)=1;

else

newpop(i,mpoint)=0;

end

else

newpop(i,:)=pop(i,:);

end

end%2.7求出群体中最大的适应值及其个体(子程序名:best.m)

%求出群体中适应值最大的值

function[bestindividual,bestfit]=best(pop,fitvalue)

[px,py]=size(pop);

bestindividual=pop(1,:);

bestfit=fitvalue(1);

fori=2:px

iffitvalue(i)>bestfit

bestindividual=pop(i,:);

bestfit=fitvalue(i);

end

end程序运行结果如图6-5所示。图6-5遗传寻优算法运算结果从图6-5中的“*”点可见,遗传算法找到了该非线性函数的全局极大值点。6.3.2遗传神经元辨识MATLAB仿真

【例6-3】采用基于遗传算法的神经网络学习非线性

函数:

yp=1-exp(-i/2)

解(1)编写程序(光盘中对应的程序名为FLch6eg2)。

由于源程序过长,下面只列出主程序,完整的程序见光盘。

鉴于被学习的非线性函数较简单,为了说明基于遗传算法的神经网络的学习过程,选用具有3个输入的单神经元。3个输入对应的权值均选3位二进制码串,单神经元的阈值选用1位二进制码串。由遗传算法操作来完成权值矩阵ω(i)的修正,ω(i)=[w1

w2

w3θ]T相当于个体,其中w1、w2、w3分别是3个输入量到单神经元的权值,θ为单神经元的阈值,故个体ω(i)为10位码串。种群选4个个体。编程中,令x=ω(i),将x的值用一个10位的二值形式表示。选用Sigmoid激发函数%主程序

clear

clf

x2=0.02;x1=0;x0=0.01;e=0;

popsize=20;%设置初始参数,群体大小

chrom

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论