




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
% 下面举例说明遗传算法 % 求下列函数的最大值 % f(x)=10*sin(5x)+7*cos(4x) x0,10 % 将 x 的值用一个 10 位的二值形式表示为二值问题,一个 10 位的二值数提供的分辨率是每为 (10-0)/(210-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) % 输出结果为c=a+b=1+2=3% 2.1 初始化(编码)% initpop.m 函数的功能是实现群体的初始化,popsize 表示群体的大小,chromlength 表示染色体的长度(二值数的长度),% 长度大小取决于变量的二进制编码的长度(在本例中取10位)。%遗传算法子程序%Name: initpop.m (实现群体的初始化)%初始化function pop=initpop(popsize,chromlength) %定义M文件函数(实现种群初始化的函数)pop=round(rand(popsize,chromlength); % rand()随机产生函数。rand 随机产生每个单元为 0,1 行数为 popsize,列数为 chromlength 的矩阵,此式子为输出变量pop与输入变量popsize和chromlength的关系式。% round 对矩阵的每个单元进行圆整,round函数的作用是按指定的位数对数值进行四舍五入。这样产生的初始种群。% r% 2.2 计算目标函数值% 2.2.1 将二进制数转化为十进制数(1)%遗传算法子程序%Name: decodebinary.m %产生 2n 2(n-1) . 1 的行向量,然后求和,将二进制转化为十进制function pop2=decodebinary(pop) %定义M文件函数(将二进制数转化为十进制数的函数)px,py=size(pop); %求pop的行数和列数。px为种群数,染色体的长度为pyfor i=1:py pop1(:,i)=2.(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列的元素。% 2.2.2 将二进制编码转化为十进制数(2)% decodechrom.m 函数的功能是将染色体(或二进制编码) 的特定位置转换为十进制,参数 spoint 表示待解码的二进制串的起始位置% (对于多个变量而言,如有两个变量,采用 20 为表示,每个变量 10 为,则第一个变量从1 开始,另一个变量从 11 开始。本例为 1),% 参数 1ength 表示所截取的长度(本例为 10)。%遗传算法子程序%Name: decodechrom.m(将染色体二进制编码转换成十进制)function pop2=decodechrom(pop,spoint,length) %参数 spoint 表示待解码的二进制串的起始位置pop1=pop(:,spoint:spoint+length-1); %提取矩阵pop的第spoint到spoint+length-1列,形成一个新矩阵pop1。pop2=decodebinary(pop1); %解二进制码% 2.2.3 计算目标函数值% calobjvalue.m 函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。%遗传算法子程序%Name: calobjvalue.m%实现目标函数的计算function objvalue=calobjvalue(pop)temp1=decodechrom(pop,1,10); %将pop每行转化成十进制数,1代表待解码的二进制串起始位置,10代表截取的长度x=temp1*10/1023; %将二值域中的数转化为变量域的数objvalue=10*sin(5*x)+7*cos(4*x); %计算目标函数值% 2.3 计算个体的适应值%遗传算法子程序%Name:calfitvalue.m%计算个体的适应值% A=3 4 2;1 5 3;4 7 1 A = 3 4 2 1 5 3 4 7 1 A(1)=3;A(2) =1;A(3)=4;A(4)=4;A(5)=5%根据2.2.3计算出的目标函数值计算个体的适应值function fitvalue=calfitvalue(objvalue) %定义函数 global Cmin; %global表示全局Cmin=0;px,py=size(objvalue); % objvalue为列向量矩阵for i=1:px if objvalue(i)+Cmin0 % objvalue(i)表示矩阵objvalue的第i个元素(从上往下数)temp=Cmin+objvalue(i);elsetemp=0.0;endfitvalue(i)=temp; %列向量矩阵 fitvalue为px个循环中temp的值构成的。endfitvalue=fitvalue; %运算符表示向量的复共轭,最终的fitvalue为行向量矩阵% 2.4 选择复制其算法为:设置选择算法执行次数 j=0在区间(0, totalFitness)内产生一随机数rands,totalFitness表示种群个体适应度之和i=0,sum=0;其中i表示第i个个体,sum表示0 i的个体的适应度值之和sum = sum +fitness(i) ,如果 sumrands,转;否则转i+,转返回第 i 个个体indivalsij+,如果 j = 个体总数 totalIndavial,选择操作结束,否则转% 选择或复制操作是决定哪些个体可以进入下一代。程序中采用赌轮盘选择法选择,这种方法较易实现。% 根据方程pi=fi/fi=fi/fsum(fsum表示总概率和,一般设为1),选择步骤:% 1)在第t代,由(1)式计算 fsum和pi% 2)产生0,1 的随机数 rand( .),求 s=rand( .)*fsum% 3)求fis中最小的k,则第k个个体被选中% 4)进行N次 2)、3)操作,得到N个个体,成为第t=t+1代种群%遗传算法子程序%Name: selection.m%选择复制% A=1 2 3;4 5 6 A = 1 2 3 4 5 6 cumsum(A)ans = 1 2 3 5 7 9 B=1 2 3; cumsum(B)ans = 1 3 6% rand(m,n) 表示产生m*n矩阵,rand(m,n,p) 表示产生p个m*n矩阵,rand(m,n,p,q) 表示产生p*q个m*n矩阵%function newpop=selection(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)是任意产生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; else i=i+1; end end% 2.5 交叉交叉算法步骤可描述为:设置交叉次数 j=0;在群体的范围内随机产生两个整数,其值在区间 1,totalIndival 之间产生一个随机数randc,randc0,1若rands pc,不执行交叉操作,直接转 随机产生在区间0,indavalLength内的整数crossSite作为交叉点,执行交叉操作j+;如果 j countIndival/2,终止交叉操作,否则转2% 交叉(crossover),群体中的每个个体之间都以一定的概率 pc 交叉,即两个个体从各自字符串的某一位置% (一般是随机确定)开始互相交换,这类似生物进化过程中的基因分裂与重组。例如,假设 2 个父代个体 x1,x2 为:% x1=0100110% x2=1010001% 从每个个体的第 3 位开始交叉,交又后得到 2 个新的子代个体 y1,y2 分别为:% y10100001% y21010110% 这样2个子代个体就分别具有了 2 个父代个体的某些特征。利用交又我们有可能由父代个体在子代组合成具有更高适合度的个体。%事实上交又是遗传算法区别于其它传统优化方法的主要特点之一。%遗传算法子程序%Name: crossover.m%交叉%pc交叉概率,交叉概率过大( 0.75-1 ),高适应值的个体容易被破坏,交叉率过小 (0-0.25) ,算法退化成随机搜索,合适的范围在 0.25-0.75 之间。function newpop=crossover(pop,pc)px,py=size(pop); newpop=ones(size(pop); %newpop为px*py阶元素都为1的矩阵,目的就是产生一个px*py阶矩阵for i=1:2:px-1 % 是for循环,i间隔一个数取值,为1,3,5,px-1,防止重复交叉。 if(randPm ,则不进行变异操作,直接转 ,否则转随机产生一整数 mut0,indivalLength ,将该位的数值翻转或进行替换操作j+,如果 j countIndival(个体总数),则退出变异操作,否则转% 变异(mutation),基因的突变普遍存在于生物的进化过程中。变异是指父代中的每个个体的每一位都以概率 pm 翻转,即由“1”变为“0”,% 或由“0”变为“1”。遗传算法的变异特性可以使求解过程随机地搜索到解可能存在的整个空间,因此可以在一定程度上求得全局最优解。%遗传算法子程序%Name: mutation.m%变异% all函数:检测矩阵中是否全为非零元素,如果是,则返回1,否则,返回0。any函数:检测矩阵中是否有非零元素,如果有,则返回1,否则,返回0。用法和all一样function newpop=mutation(pop,pm) px,py=size(pop);newpop=ones(size(pop); for i=1:px if(randpm) %随机产生0-1的数值小于变异概率pm,则执行变异操作。 mpoint=round(rand*py); %mpoint变异点,round( )作用对数值进行四舍五入。 if mpointbestfit bestindividual=pop(i,:); bestfit=fitvalue(i); endend% 2.8 主程序%遗传算法主程序%Name:genmain05.mclearclfpopsize=20; %群体大小chromlength=10; %字符串长度(个体长度)pc=0.6; %交叉概率pm=0.001; %变异概率pop=initpop(popsize,chromlength); %随机产生初始群体for i=1:20 %为迭代次数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);% max(A):返回一个行向量,向量的第i个元素是矩阵A的第i列上的最大值。%Y,U=max(A):返回行向量Y和U,Y向量记录A的每列的最大值,U向量记录每列最大值的行号。n(i)=i; %貌似没啥用pop5=bestindividual;x(i)=decodechrom(pop5,1,chromlength)*10/1023;%对矩阵pop5进行解码,变成十进制数pop=newpop;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)%计算最大值对应的 x 值y=z【问题】求 f(x)=x 10*sin(5x) 7*cos(4x)的最大值,其中 0=x=9【分析】选择二进制编码,种群中的个体数目为 10,二进制编码长度为 20,交叉概率为 0.95,变异概率为 0.08【程序清单】%编写目标函数functionsol,eval=fitness(sol,options)x=sol(1);eval=x 10*sin(5*x) 7*cos(4*x);%把上述函数存储为 fitness.m 文件并放在工作目录下initPop=initializega(10,0 9,fitness);%生成初始种群,大小为 10x endPop,bPop,trace=ga(0 9,fitness,initPop,1e-6 11,maxGenTerm,25,normGeomSelect,.0.08,arithXover,2,nonUnifMutation,2 25 3) %次遗传迭代运算借过为:x =7.8562 24.8553(当 x 为 7.8562 时,f(x)取最大值 24.8553)注:遗传算法一般用来取得近似最优解,而不是最优解。遗传算法实例 2【问题】在5=Xi=5,i=1,2 区间内,求解f(x1,x2)=-20*exp(-0.2*sqrt(0.5*(x1.2 x2.2)-exp(0.5*(cos(2*pi*x1) cos(2*pi*x2)22.71282 的最小值。【分析】种群大小 10,最大代数 1000,变异率 0.1,交叉率 0.3【程序清单】源函数的 matlab 代码function eval=f(sol)numv=size(sol,2);x=sol(1:numv);eval=-20*exp(-0.2*sqrt(sum(x.2)/numv)-exp(sum(cos(2*pi*x)/numv) 22.71282;%适应度函数的 matlab 代码function sol,eval=fitness(sol,options)numv=size(sol,2)-1;x=sol(1:numv);eval=f(x);eval=-eval;%遗传算法的 matlab 代码bounds=ones(2,1)*-5 5;p,endPop,bestSols,trace=ga(bounds,fitness)注:前两个文件存储为 m文件并放在工作目录下,运行结果为p =0.0000 -0.0000 0.0055大家可以直接绘出 f(x)的图形来大概看看 f(x)的最值是多少,也可是使用优化函数来验证。matlab 命令行执行命令:fplot(x 10*sin(5*x) 7*cos(4*x),0,9)evalops 是传递给适应度函数的参数,opts 是二进制编码的精度,termops 是选择 maxGenTerm结束函数时传递个 maxGenTerm的参数,即遗传代数。xoverops 是传递给交叉函数的参数。mutops 是传递给变异函数的参数。【问题】求 f(x)=x+10*sin(5x)+7*cos(4x)的最大值,其中 0=x=9【分析】选择二进制编码,种群中的个体数目为 10,二进制编码长度为 20,交叉概率为 0.95,变异概率为 0.08【程序清单】%编写目标函数functionsol,eval=fitness(sol,options)x=sol(1);eval=x+10*sin(5*x)+7*cos(4*x);%把上述函数存储为 fitness.m 文件并放在工作目录下initPop=initializega(10,0 9,fitness);%生成初始种群,大小为 10x endPop,bPop,trace=ga(0 9,fitness,initPop,1e-6 11,maxGenTerm,25,normGeomSelect,.0.08,arithXover,2,nonUnifMutation,2 25 3) %次遗传迭代运算借过为:x =7.8562 24.8553(当 x 为 7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重冶萃取工新员工考核试卷及答案
- 焙烧炉焙烧工上岗考核试卷及答案
- 油品装卸工操作考核试卷及答案
- 充填回收工主管竞选考核试卷及答案
- 铁合金炉外法冶炼工设备调试考核试卷及答案
- 蒸馏炉工成本控制考核试卷及答案
- 地理信息应用作业员上岗考核试卷及答案
- 铸管精整工主管竞选考核试卷及答案
- 教育素养考试题及答案
- 中药药剂员工艺考核试卷及答案
- 玉石床垫讲稿课件
- 初中音乐七年级上册第一单元 红岩魂走进歌乐山
- 栈桥修复方案(全文)
- 某五星级酒店单项工程经济指标
- 交通标志牌工程施工组织设计(标准版)
- 【课件】《红烛》课件24张统编版高中语文必修上册
- 交通事故认定书复核申请书模板
- 电气一次设备吊装搬运施工方案
- “一机一档”范本(共12页)
- 长输管道施工工序
- 公司法实施条例
评论
0/150
提交评论