


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、%下面举例说明遗传算法%求下列函数的最大值% f(x)=10*sin(5x)+7*cos(4x) x 0,10 %将x的值用一个10位的二值形式表示为二值问题,一个10位的二值数提供的分辨率是每为(10-0)/010-1) 0.01。 % 将变量域 0,10离散化为二值域0,1023, x=0+10*b/1023, 其中b是0,1023中的一个二值数。% M文件函数定义语句:function输出变量=函数名称(输入变量1,输入变量2,)语句;输入变量与输出变量的关系end; %非必须的例如:function c=myadd(a,b)c=a+b;调用方式:c=myadd(1,2) % 输出结果为
2、 c=a+b=1+2=3% 2.1初始化(编码)% initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength 表示染色体的长度(二值数的长度),%长度大小取决于变量的二进制编码的长度(在本例中取10位)。%遗传算法子程序%Name: in itpop.m(实现群体的初始化 )%初始化function pop=initpop(popsize,chromlength) % 定义 M文件函数(实现种群初始化的函数)pop=round(rand(popsize,chromlength); % rand ()随机产生函数。rand 随机产生每个单元为 0,1行
3、数为 popsize,列数 为chromlength的矩阵,此式子为输出变量 pop与输入变量 popsize和chromlength的关系式。% round对矩阵的每个单元进 行圆整,round函数的作用是按 指定的位数 对数值进行四舍五入。这样产生的初始种群。% r% 2.2计算目标函数值% 将二进制数转化为十进制数(1)%遗传算法子程序%Name: decodeb in ary.m%产生2An 2A(n-1). 1的行向量,然后求和,将二进制转化为十进制function pop2=decodebinary(pop) % 定义M文件函数(将二进制数转化为十进制数的函数)px,py=size
4、(pop); %求pop的行数和列数。px为种群数,染色体的长度为pyfor i=1:pypop1(:,i)=2.A(py-i).*pop(:,i);%pop1(:,i)表示 pop1 矩阵的第 i 列全部元素endpop2=sum(pop1,2); % 求 pop1 的每行之和%matlab中sum()函数的用法%a=sum(x); %对x矩阵的列求和a=sum(x,2); %对x矩阵的行求和a=sum(x(:); %x 矩阵的所有元素求和%A(:,j)表示提取A矩阵的第j列全部元素A(i,:)表示提取A矩阵的第i行元素,A(i, j)表示提取A矩阵的第i行第j列的元素。% 222将二进制编
5、码转化为十进制数(2)% decodechrom.m函数的功能是将染色体(或二进制编码)的特定位置转换为十进制,参数spoint表示待解码的二进制串的起始位置% (对于多个变量而言,如有两个变量,采用20为表示,每个变量 10为,则第一个变量从1开始,另一个变量从11开始。本例为1),%参数1ength表示所截取的长度(本例为10 )。%遗传算法子程序%Name: decodechrom.m (将染色体二进制编码转换成十进制)function pop2=decodechrom(pop,spoint,length)%参数 spoint 表示待解码的二进制串的起始位置pop1=pop(:,spoi
6、nt:spoint+length-1);%提取矩阵 pop 的第 spoint 到 spoint+length-1 列,形成一个新矩阵pop1。pop2=decodebinary(pop1); % 解二进制码% 计算目标函数值% calobjvalue.m函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修 改。%遗传算法子程序%Name: calobjvalue.m%实现目标函数的计算fun cti on objvalue=calobjvalue(pop)temp仁decodechrom(pop,1,10); %将pop每行转化成十进制数,1代表待解码的二进制串起
7、始位置,10代表截取的长度x=temp1*10/1023; %将二值域中的数转化为变量域的数objvalue=10*si n(5*x)+7*cos(4*x); %计算目标函数值% 2.3计算个体的适应值%遗传算法子程序%Name:calfitvalue.m%计算个体的适应值%>> A=3 4 2;1 5 3;4 7 1A =342153471A(1)=3 ;A(2) =1 ;A(3)=4 ; A(4)=4 ; A(5)=5%根据计算出的目标函数值计算个体的适应值fun cti on fitvalue=calfitvalue(objvalue) % 定义函数global Cmin;
8、%global 表示全局Cmi n=0;px,py=size(objvalue); % objvalue 为歹U向量矩阵for i=1:pxif objvalue(i)+Cmin>0% objvalue(i)表示矩阵 objvalue 的第 i 个元素(从上往下数)temp=Cm in+objvalue(i);elsetemp=0.0;endfitvalue(i)=temp; % 列向量矩阵 fitvalue为px个循环中temp的值构成的。endfitvalue=fitvalue' %运算符表示向量的复共轭,最终的fitvalue为行向量矩阵% 2.4选择复制其算法为: 设置选
9、择算法执行次数j=0 在区间(0, totalFit ness)内产生一随机数 ran ds, totalFit ness表示种群个体适应度之和 i=0 , sum=0 ;其中i表示第i个个体,sum表示0 i的个体的适应度值之和 sum = sum +fitness(i),如果 sum>rands,转;否则转 i+,转 返回第i个个体indivalsi j+,如果j =个体总数total Indavial,选择操作结束,否则转%选择或复制操作是决定哪些个体可以进入下一代。程序中采用赌轮盘选择法选择,这种方法较易实现。%根据方程pi=fi/ 刀fi=fi/fsum fsum表示总概率和,
10、一般设为1),选择步骤:% 1)在第t代,由(1)式计算fsum和pi% 2)产生0,1的随机数 rand(.),求 s=rand( .)*fsum% 3)求刀fi坤最小的k,则第k个个体被选中% 4)进行N次2 )、3)操作,得到N个个体,成为第t=t+1代种群%遗传算法子程序%Name: selectio n.m%选择复制% A=1 2 3;4 5 6A =1234 56cumsum(A)ans =1235 79B=1 2 3; cumsum(B)ans =136% rand(m,n)表示产生 m*n矩阵,rand(m,n,p)表示产生 p个 m*n矩阵,rand(m,n,p,q)表示产生
11、 p*q个 m*n 矩阵%fun ctio n n ewpop=selectio n(pop,fitvalue) % 定义选择函数,有没有都可。 totalfit=sum(fitvalue); % 求适应值之和fitvalue=fitvalue/totalfit; % 适应值=单个个体被选择的概率 fitvalue=cumsum(fitvalue);%fitvalue为行向量矩阵,cumsum(fitvalue)表示元素依次累加的新行矩阵。px,py=size(pop); % px为种群数,染色体的长度为pyms=sort(rand(px,1); %sort()从小到大排列。rand(px,1
12、)是任意产生px个元素的行向量矩阵。i=1;j=1;while j<=px if(ms(j)<fitvalue(i) %ms为产生的随机的行矩阵;fitvalue为元素依次累加的新的行矩阵。newpop(j)=pop(i);% newpop()为输出函数,pop 为初始种群 2.1 中。j=j+1;elsei=i+1;endend% 2.5交叉交叉算法步骤可描述为: 设置交叉次数j=0 ; 在群体的范围内随机产生两个整数,其值在区间1,totalIndival 之间 产生一个随机数randc , randc 0,1 若rands > pp不执行交叉操作,直接转 随机产生在区间
13、0,indavalLength内的整数crossSite作为交叉点,执行交叉操作 j+ ;如果j > countlidival/2,终止交叉操作,否则转 2%交叉(crossover),群体中的每个个体之间都以一定的概率pc交叉,即两个个体从各自字符串的某一位置% (一般是随机确定)开始互相交换,这类似生物进化过程中的基因分裂与重组。例如,假设2个父代个体 x1 , x2为:% x仁0100110%x2=1010001%从每个个体的第3位开始交叉,交又后得到2个新的子代个体y1, y2分别为:%y1 = 0100001% y2 = 1010110%这样2个子代个体就分别具有了2个父代个体
14、的某些特征。利用交又我们有可能由父代个体在子代组合成具有更高适合度的个体。%事实上交又是遗传算法区别于其它传统优化方法的主要特点之一。%遗传算法子程序%Name: crossover.m%交叉%pc交叉概率,交叉概率过大(0.75-1 ),高适应值的个体容易被破坏,交叉率过小(0-0.25),算法退化成随机搜索,合适的范围在 之间。fun cti on n ewpop=crossover(pop,pc)px,py=size(pop);newpop=ones(size(pop); %newpop为px*py阶元素都为1的矩阵,目的就是产生一个px*py阶矩阵for i=1:2:px-1%是for
15、循环,i间隔一个数取值,为1, 3, 5,,px-1,防止重复交叉。if(ra nd<pc)cpoi nt=rou nd(ra nd*py); %cpoi nt 交叉点,随机产生交叉点。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 %若rand > pc,不执行交叉操作n ewpop(i,:)=pop(i);n ewpop(i+1,:)=pop(i+
16、1);endend% 2.6变异变异算法描述如下: j=0 产生一个随机数randm 0,1 如果randm>Pm ,则不进行变异操作,直接转,否则转 随机产生一整数mut 0,indivalLength,将该位的数值翻转或进行替换操作 j+,如果j> countlndival(个体总数),则退出变异操作,否则转%变异(mutation),基因的突变普遍存在于生物的进化过程中。变异是指父代中的每个个体的每一位都以概 率pm翻转,即由“ 1变为“ 0”%或由“(变为“1。”遗传算法的变异特性可以使求解过程随机地搜索到解可能存在的整个空间,因此可以在 一定程度上求得全局最优解。%遗传算
17、法子程序%Name: mutatio n.m%变异% all函数:检测矩阵中是否全为非零元素,如果是,则返回1,否则,返回0”any函数:检测矩阵中是否有非零元素,如果有,则返回1,否则,返回0”用法和all 一样fun cti on n ewpop=mutati on( pop,pm)px,py=size(pop);n ewpop=on es(size(pop);for i=1:pxif(rand<pm)%随机产生0-1的数值小于变异概率pm,则执行变异操作。mpoint=round(rand*py); %mpoint 变异点,round()作用对数值进行 四舍五入。if mpoint
18、<=0%变异点 w 0 时mpoin t=1;endn ewpop(i)=pop(i);if any(newpop(i,mpoint)=0 %any 函数的用法,any(newpop(i,mpoint)判断元素值是否为非零0,判断结果等于0时newpop(i,mpoint)=1;%如果newpop(i,mpoint)元素值是否为 0,把0变1,变异操作elsenewpop(i,mpoint)=0;%如果newpop(i,mpoint)元素值是不为 0,把1变0,变异操作endelsen ewpop(i)=pop(i);endend % 2.7求出群体中最大的适应值及其个体%遗传算法子程序
19、%Name: best.m%求出群体中适应值最大的值% fun ctio n x y=my_fu nc(a,b)x=a+b; y=a-b;调用如下:m n=my_func(5,2) % 输出结果为 m=a+b=5+2=7; n=a-b=5-2=3fun cti on best in dividual,bestfit=best(pop,fitvalue)px,py=size(pop);best in dividual=pop(1,:); % 矩阵pop的第一行,初始最好个体 bestfit=fitvalue(1);%定义初始最大适应值for i=2:pxif fitvalue(i)>bes
20、tfitbesti ndividual=pop(i,:);bestfit=fitvalue(i);endend% 2.8主程序%遗传算法主程序%Name:ge nmainO 5.mclearclfpopsize=20; %群体大小chromlength=1O; %字符串长度(个体长度)pc=0.6; %交叉概率pm=0.001; %变异概率pop=initpop(popsize,chromlength); % 随机产生初始群体for i=1:20%为迭代次数objvalue=calobjvalue(pop); % 计算目标函数 fitvalue=calfitvalue(objvalue); %
21、计算群体中每个个体的适应度n ewpop=select ion( pop,fitvalue); %复制newpop=crossover(pop,pc); % 交叉newpop=mutation(pop,pc); % 变异best in dividual,bestfit=best(pop,fitvalue);%求出群体中适应值最大的个体及其适应值y(i)=max(bestfit);% max(A):返回一个行向量,向量的第i个元素是矩阵A的第i列上的最大值。%Y,U=max(A):返回行向量 Y和U, Y向量记录A的每列的最大值,U向量记录每列最大值的行号。 n(i)=i; %貌似没啥用pop5
22、=besti ndividual;x(i)=decodechrom(pop5,1,chromlength)*10/1023;% 对矩阵 pop5 进行解码,变成十进制数pop=n ewpop;endfplot('10*sin(5*x)+7*cos(4*x)',0 10) % fplot(fun,limits)在指定的范围 limits 内画出函数名为 fun 的图像。hold onplot(x,y,'r*') %画出来的点有重合的,其实与循环次数是相同的。hold offz index=max(y); % 计算最大值及其位置x5=x(index)%计算最大值对应
23、的x值y=z【问题】求 f(x)=x 10*si n(5x) 7*cos(4x)的最大值,其中0<=x<=90.95,【分析】选择二进制编码,种群中的个体数目为10,二进制编码长度为20,交叉概率为变异概率为0.08【程序清单】%编写目标函数fun cti on sol,eval=fit ness(sol,opti ons)x=sol(1);eval=x 10*si n(5*x) 7*cos(4*x);%把上述函数存储为fitness.m文件并放在工作目录下in itPop=i nitializega(10,0 9,'fit ness');% 生成初始种群,大小为1
24、0xen dPop,bPop,trace=ga(09,'fit ness',i ni tPop,1e-611,'maxGe nTerm',25,' normGeomSelect',.0.08,'arithXove门,2,' nonUn ifMutatio n',2 25 3) %次遗传迭代运算借过为:x =7.8562 24.8553(当 x 为 7.8562 时,f (x)取最大值 24.8553)注:遗传算法一般用来取得近似最优解,而不是最优解。遗传算法实例2【问题】在一5<=Xi<=5,i=1,2 区间内
25、,求解f(x1,x2)=-20*exp(-0.2*sqrt(0.5*(x1.A2x2.A2)-exp(0.5*(cos(2*pi*x1)cos(2*pi*x2)22.71282的最小值。【分析】种群大小 10,最大代数1000 ,变异率0.1,交叉率0.3【程序清单】%源函数的 matlab代码fun cti on eval=f(sol)nu mv=size(sol,2);x=sol(1: numv);eval=-20*exp(-0.2*sqrt(sum(x.A2)/nu mv)-exp(sum(cos(2*pi*x)/numv) 22.71282;%适应度函数的matlab代码fun cti
26、 on sol,eval=fit ness(sol,opti ons)nu mv=size(sol,2)-1;x=sol(1: numv);eval=f(x);eval=-eval;%遗传算法的 matlab代码bou nds=o nes(2,1)*-5 5;p,e ndPop,bestSols,trace=ga(bo un ds,'fit ness')注:前两个文件存储为m文件并放在工作目录下,运行结果为p =0.0000 -0.0000 0.0055大家可以直接绘出f(x)的图形来大概看看f (x)的最值是多少,也可是使用优化函数来验证。matlab命令行执行命令:fplo
27、t('x 10*si n(5*x) 7*cos(4*x)',0,9)evalops是传递给适应度函数的参数,opts是二进制编码的精度,termops是选择 maxGenTerm结束函数时传递个maxGenTerm的参数,即遗传代数。xoverops是传递给交叉函数的参数。mutops是传递给变异函数的参数。【问题】求 f(x)=x+10*si n(5x)+7*cos(4x)的最大值,其中0<=x<=9【分析】选择二进制编码,种群中的个体数目为10,二进制编码长度为20,交叉概率为0.95,变异概率为 0.08【程序清单】%编写目标函数fun cti on sol,eval=fit ness(sol,opti ons)x=sol(1);eval=x+10*si n(5*x)+7*cos(4*x);%把上述函数存储为fitness.m文件并放在工作目录下in itPop=i nitializega(10,0 9,'fit ness');% 生成初始种群,大小为10xen dPop,bPop,trace=ga(0 9,'fit ness',i ni tPop,1e-611,'maxGe nTerm',25,' normGeomSelect',.0.08,'arithX
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 麻纤维耐酸抗碱熨工艺考核试卷及答案
- 铜矿选矿浮选柱设备操作培训工艺考核试卷及答案
- 山西对口考试题库及答案
- 宠物洗浴考试题库及答案
- 箱包烫画细节修正工艺步骤工艺考核试卷及答案
- 2025年焊工考试全真模拟模拟题及参考答案详解
- 2025年国有投资法试题及答案
- 纺织带涂层耐应力耐候工艺考核试卷及答案
- 特殊饮食知识培训课件
- 废水处理药剂技术革新工艺考核试卷及答案
- 2025年中式烹调师(技师)理论考试笔试试题(150题)含答案
- 宁德时代shl测评题库
- 微信小程序申请模板-电商平台对用户交易纠纷处理的机制或方案
- 冷库、冷藏车故障应急预案管理程序
- 冠心病危险因素管理
- 高速安全知识
- 2024年10月成都市金牛区人民政府西华街道办事处公开招考1名编外人员笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 妇产科 女性生殖系统生理学习课件
- 玛丽艳美容培训
- 2025年四川华丰科技股份有限公司招聘笔试参考题库含答案解析
- 《物业管理培训课件:业主满意度提升策略》
评论
0/150
提交评论