


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、%下面举例说明遗传算法 %求以下函数的最大值 % f (x)=10*sin(5x) +7*cos(4x) xG 0,10 %将 x的值用一个10位的二值形式表示为二值问题,一个10位的二值数提供的分辨率是每为(10-0)/(2"10-1)=。 %各变量域0,10离散化为二值域0,1023 , x=0+10*b/1023,其中b是0.1023中的一个二值数。% H 文件函数定义语句:function输出变量二函数名称(输入变量1,输入变量2,)语句;输入变量与输出变量的关系end; %非必须的例如:function c=myadd(a,b)c=a+b;调用方式: c=myadd(1,2
2、) %输出结果为 c=a+b=1+2=3%初始化 ( 编码 )%函数的功能是 实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的 长度), %长度大小取决于变量的二进制编码的长度(在本例中取 10位)。弘遗传算法子程序%Name:(实现群体的初始化)冬初始化function pop= i n i t pop (pops i ze, chromlength) %定义 M 文件函数 ( 实现种群初始化的函数 )pop-round (rand (popsize, chromlength) : % rand( 机产生函数。 rand 髓机产生毎个单元为 (
3、0.1?行数为 popsize, 列数为 chromlength 的矩阵, 此式子为输出 jt pop 与输入变量 popsize 和 chromlength 的关系式。 % round 对矩阵的每个 单元进行圓整 roun函数的作用是按指走的位数对数值进行四舍五入。这样产生的初始种群。% r%计算目标函数值% 2. 2. 1 将二进制数转化为十进制数 (1)监遗传算法子程序%Name:%产生 2"n 2"(n-l).1的行向量,然后求和,将二进制转化为十进制function pop2=decodebinary (pop) %定义 M 文件函数 ( 将二进制数转化为十进制数
4、的函数 ) px,py =size(pop) ; % 求pop的行数和列数。px为种群数,染色体的长度为 pyfor i=l : pypopl (: . i)=2? °(py-i). *pop(:, i) ; %popl (: t i)表示 popl 矩阵的第 i 列全部元素endpop2=sum(popl,2): %求 popl 的每行之和%matlab中sum()函数的用法%a=sum(x) ; %对x矩阵的列求和a=sum(x,2); %对乂矩阵的行求和a=sum(x(: ) ; %x矩阵的所有元素求和八(:J)表示提取A矩阵的笫j列全部元素IA(i,:)表示提取A矩阵的笫i行
5、元素,A(i, j)表示提取A矩阵的第i行第j列的元素。% 2. 2. 2将二进制编码转化为十进制数(2)%函数的功能是将染色体(或二进制编码)的特定位置转换为十进制,参数 spoint表示待解码的二进制串 的起始位置 % (对于多个变量而言,如有两个变量,采用20为表示,每个变量10为,那么第一个变量从1开始,另一个变量从11开始。本例为1),%参数length表示所截取的长度(本例为10)。冬遗传算法子程序%Name:(将染色体二进制编码转换成十进制)function pop2=decodechrom(pop, spoint, length)滋参数 spoint表示待解码的二进制串的起始位
6、置 popl=pop(:,spoint: spoint+length-1); %提取矩阵 pop 的第 spoint 至U spoint+length-1 歹形成一个新 矩阵 popU pop2=decodeb i nary (pop 1) ; %解二进制码% 2. 2. 3计算目标函数值%函数的功能是实现目标函数的计算,其公式采用本文例如仿真,可根据不同优化问题予以修改。 监遗传算法子程序%Name:%实现目标函数的计算fun cti on objvalue=calobjvalue(pop)templ=decodechrom(pop, 1,10); %将pop每行转化成十进制数,1代表待解码
7、的二进制串起始位置,10代表 截取的长度x=templ*10/1023 ; %将二值域中的数转化为变量域的数objvalue=10*si n(5*x)+7*cos (4*x); %计算目标函数值 %计算个体的适应值<%遗传算法子程序 %Name:%计算个体的适应值%? A=3 4 2 ; A =1 5 3;4 7 1A(l)=3=1 ; 八=5;A =4 ; A =4; A (5)%根据2. 2. 3计算出的目标函数值计算个体的适应值function fitvalue=calfitva 1 ue(objva 1 ue) %定义函数 globalCmin; %global表示全局Cmin=
8、0 ;pxt py =size(objvalue):% objvalue 为列向量矩阵for i=l:pxif objvalue(i) +Gnin>0 % objvalue(i)表示矩阵 objvalue 的第 i 个元素(从上往下数) elsetemp=;endfitvalue(i)=temp ; %列向量矩阵fitvalue为px个循环中temp的值构成的。endfitva 1 ue=fitvalue f ; %运算符'表示向量的复共馳 ?最终的fitvalue为行向量矩阵temp=Cm i n+objva1ue(i);%选择复制其算法为: 设置选择算法执行次数j=0 在区间
9、(0, totalFit ness )内产生一随机数 ran ds, totalFit ness表示种群个体适应度之和 i=0, sum=0;其中i表示第i个个体,sum表示0 i的个体的适应度值之和 sum = sum +fitness( i),如果 sum>rands,转; 否贝U转 i+,转I 返回第i个个体indivalsEi j+,如果j =个体总数totallndavial,选择操作结束,否那么转%选择或复制操作是决定哪些个体可以进入下一代。程序中采用赌轮盘选择法选择,这种%根据方程pi=fi/Zfi=fi/fsum(fsum表示总概率和,一般设为1)选择步骤:% 1)在第t
10、代,由(1)式计算fsum和pi% 2)产生 0.1的随机数 rancK .),求 s=rand ( .) *fsum方法较易实现。% 3)求EfiAs中最小的k,那么第k个个体被选中% 4)进行N次2)、3)操作,得到N个个体,成为第t=t+1代种群 监遗传算法子程序%Name:%选择复制% A=l 2 3 ; 4 56A =1 24 5 cumsum(A)ans =1 25 73639B-l 2 3: cumsum(B) ans =136% ran d(mt n)表示产生矩阵,rand(mtntp)表示产生 p个 m*n 矩阵,rand(m,ntp,q)表示产生p*q个m村1矩阵%func
11、tion newpop =selection (pop, f i tvalue) %定义选择函数, 有没有都可。 totalf i t=sum(f i tvalue) ; %求适应值之和 fitvalue=fitvalue/totalfit ; %适应值二单个个体被选择的概率 fi tva 1 ue=cumsum(f itva 1 ue):%f i tvalue 为行向量矩阵 , cumsum(f i tvalue) 表示元素依次累加的新行矩阵。 ) px,py=size(pop): % px 为种群数,染色体的长度为 py ms=sort(rand(px, 1); %sort ()从小到大排
12、列。 rand(px, 1)是任意产生 px 个元素的行向量矩阵。 i=l;j=l;while j<=pxif(ms(j)Xfitvalue(i) %ms 为产生的随机的行矩阵; fitvalue 为元素依次累加的新的行矩阵。 newpop(j)=pop(i): % newpop() 为输出函数, pop 为初始种群中。j=j+l ;elsei=i+l ;endend%交叉交叉算法步骤可描述为: 设置交叉次数 j=0 ; 在群体的范围内随机产生两个整数,其值在区间 1, totallndival 之间 产生一个随机数 randc, randcE 0,1 假设rands M pc,不执行交
13、叉操作,直接转 随机产生在区间0, indavalLength内的整数crossSite作为交叉点,执行交叉操作 j+; 如果 j M countIndival/2, 终止交叉操作,否那么转 2%交叉(crossover),群体中的每个个体之间都以一定的概率pc交叉,即两个个体从各自字符串的某一位置% (一般是随机确定 )开始互相交换,这类似生物进化过程中的基因分裂与重组。例如, 假设 2 个父代个体 xh x2 为:% xl=0100110% x2=1010001%从每个个体的第 3位开始交叉,交又后得到 2个新的子代个体 yl, y2 分别为:% yl=0100001% y2=101011
14、0%这样 2 个子代个体就分别具有了2 个父代个体的某些特征。利用交又我们有可能由父代 个体在子代组合成具有更高适合度的个体。滋事实上交又是遗传算法区别于其它传统优化方法的主要特点之一。 弘遗传算法子程序%Name:%交叉那 c 交叉概率,交叉概率过大 () ,高适应值的个体容易被破坏,交叉率过小,算法退化成随机搜索,合 适的范围 在之间。function newpop二 crossover(pop,pc)px,py=size(pop);newpop=ones(size(pop): %newpop为px*py阶元素都为1的矩阵,目的就是产生一个px*py阶矩阵for i=l : 2: px-l
15、 %是for循环,i间隔一个数取值,为1, 3, 5,,px-1,防止重复交叉。if (rancKpc)cpoint=round(rand*py): %cpoint 交叉点,随机产生交叉点。newpop(it :) = pop(i, l: cpoint) tpop(i+11cpoint+1:py) ; %交叉操作,相邻两行直接进行交 叉。 newpop(i+l, : ) = pop(i + l, l : cpoint),pop(i,cpoint+1 : py) ; %交叉操作 ,相邻两行直接进行交叉。else %假设 rand 2 pc ,不执行交叉操作Snewpop(i,: )=pop(i)
16、;newpop(i+l, : ) 二 pop(i+1);endend%变异变异算法描述如下:?j=0 产生一个随机数 randmG 0,1 如果randm>Pm,那么不进行变异操作,直接转,否那么转 随机产生一整数 muteO,indivalLength, 将该位的数值翻转或进行替换操作 j卄,如果j> cou nt In di val (个体总数),那么退出变异操作,否那么转%变异(mutation),基因的突变普遍存在于生物的进化过程中。变异是指父代中的每个个体的每一位都以概率pm翻转,即由 "1 变为 "0",%或由"0变为“1。遗传算
17、法的变异特性可以使求解过程随机地搜索到解可能存在的整个空间,因此可以在一定程度上求得全局最优解。弘遗传算法子程序%Name:破异% all 函数:检测矩阵中是否全为非寒元素,如果是,那么返回 1,否那么,返回 0。any函数:检测矩阵中是否有非零元素,如果有,那么返回 1,否那么,返回0。用法和all -样function newpop=mutation(pop ? pm)px.py=size(pop);newpop=ones(size(pop); for i=l:px if(rand<pm) %随机产生 0-1 的数值小于变异概率 pm 那么执行变异操作。 mpoint=round(r
18、and*py): %mpoint 变异点, round() 作用对数值进行 四舍五入。 if mpoint<=0 %变异点 W0 时mpoint=l ;endnewpop(i)=pop(i) ;0,判if any (newpop (i, mpo i n t) =0 %any 函数的用法, any (newpop(i, mpoint) 判断元素值是否为非零 断结果等于 0 时newpop(i,mpoint)=1 ; %如果 newpop(i ? mpoint)元素值是否为 0,把 0 变 1,变异操作 elsenewpop(i,mpoint) =0 ; %如果 newpop(i .mpoi
19、nt)元素值是不为 0,把 1 变 0,变异操作 end elsenewpop(i)二 pop(i);endend%求出群体中最大的适应值及其个体%遗传算法子程序%Name:%求出群体中适应值最大的值% function x y=my func(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=3>function bestindiYidual,bestfit=best(pop,fitvalue)pxtpy=size(pop);best individual=pop(1,:) ; %矩阵pop的第一
20、行,初始最好个体bestf it=fitvalue(1) ;%定义初始最大适应值for i=2 :pxif fitva1ue(i)>bestfitbestindividual=pop(i,:) ;bestf i t=f i tva1ue(i) ;endend%主程序%遗传算法主程序%Name:clearselfpops i ze=20 ; %群体大小chromlength=10; %字符串长度 ( 个体长度 )pc=; %交叉概率pm 二;变异概率pop-ini tpop (popsi zet chromlength) ; %随机产生初始群体for i=l :20 %为迭代次数objva
21、lue =calobjvalue(pop) ; %计算目标函数f i tvalue=calf i tvalue(objvalue) ; %计算群体中每个个体的适应度newpop =selection (pop, f itvalue) ; %复制newpop =crossover (pop, pc) ; %交叉newpop =mutat ion (pop, pc) ; %变 异best indi vidual, bestf i t =best (pop, f i tvalue) ;%求出群体中适应值最大的个体及其适应值y(i)=max(bestfit) ;% max(A) :返回一个行向量,向量
22、的第 i 个元素是矩阵 A 的第 i 列上的最大值。%Y,U=max(A) :返回行向量 Y 和 U, Y 向量记录 A 的每列的最大值, U 向量记录每列最大值的行号。n(i) = i; %貌似没啥用pop5=best i nd i v i dua1 ;x(i) =decodechrom(pop5, 1.chromlength)*10/1023 ;%对矩阵 pop5 进行解码,变成十进制数 pop 二 newpop;endfplot(* 10*sin(5*x) +7*cos(4*x) 1, 0 10) % fplot (fun, 1 imi ts) 在指定的范围 limits 内画出函数名为
23、 fun 的图像。 hold onplot(x,y,'r* ) 画出来的点有重合的,其实与循环次数是相同的。Yhold offz index 二 max(y) ; %计算最大值及其位置 x5=x(index)% 计算最大值对应的 x 值 y=z【问题】求 f(x) =x 10*sin(5x) 7*cos(4x) 的最大值,其中 0<=x<=9 【分析】选择二进制编码,种群中的个体数目为10,二进制编码长度为 20,交叉概率为,变异概率为【程序清单】%编写目标函数functionEsol,eval 二 fitness(sol,options)x=sol(1) ;eval=x
24、10*sin(5*x) 7*cos(4*x):%把上述函数存储为文件并放在工作目录下ini tPop=initial izega(10, 0 9 , 1 fitness') ;%生成初始种群,大小为 10x endPop,bPop,trace=ga(0 9 fitness1,initPop,le611,八axGe nTerm25, 'n ormGeoi nSelect',?f 'arithXover1 F 2,1 nonUn ifMut at ion1, 2 25 3) % 次遗传迭代 运算借过为: X =(当X为时,f(X)取最大值 注:遗传算法一般用来取得近
25、似最优解,而不是最优解。遗传算法实例 2【问题】在一 5<=Xi<=5,i=l,2 区间内,求解f(x1,x2)=-20*exp*sqrt ?(x1. "2 x2. *2)-exp*(cos(2*pi*x1) cos(2*pi*x2) 的最小值。【分析】种群大小 10,最大代数 1000,变异率,交叉率 【程序清单】%源函数的 matlab 代码 function eval=f(sol)size(sol,2);x-sol (l : numv) ; eva1=-20*exp*sqrt(sum(x. 2)/numv)-exp(sum(cos(2*pi*x)/numv) ; %
26、适应度函数的 mat lab 代码function sol,eval-fitness(sol,opt ions) numv=size(sol,2)-1;x 二 sol(l : numv);eval=f(x);eval=-eval;监遗传算法的 mstbb 代码bounds=ones(2,1)*-5 5 ;pt endPop,bestSols,trace=ga(boundsr,fitness1)注:前两个文件存储为 Hl 文件并放在工作目录下,运行结果为P =大家可以直接绘出f(x)的图形来大概看看f(X)的最值是多少,也可是使用优化函数来验证。mat lab命令行执行命令:fplot(fx 1
27、0*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,交叉概率为,变异概率为【程序清单】%编写目标函数functionsol,eval 二 fitness(sol,options)x=sol(1): eval=x+10*s i n(5*x)+7*cos(4*x) ;%把上述函数存储为文件并放在工作目录下initPop=initializega(10 r 0 9, ' fitness*) ;%生成初始种群,大小为10r1Ex endPop,bPop,trace=ga(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 儿童色彩创作课件大纲
- 课件智能AI教学课件
- 广东会计初级自考试题及答案
- 历年护理考试题及答案
- 礼仪学堂考试题及答案
- 乐器辅助考试题及答案
- 广东房屋构造自考试题及答案
- 康复基层考试题及答案
- 钼钨冶炼辅料制备工适应性考核试卷及答案
- 信息安全管理员职业考核试卷及答案
- 旅行社劳动合同范文3篇
- 2025年污水处理及其再生利用行业研究报告及未来行业发展趋势预测
- 证券投资学课件吴晓求
- 摩托车整车采购合同范本
- 托管班合伙人合同协议书
- 2025劳动合同补充协议
- 社区节水节电知识培训课件
- 防火墙行业知识培训课件
- 2025版全新升级二手房买卖合同模板下载
- 乡镇执法证考试题及答案
- 2025年监理工程师继续教育试卷及答案
评论
0/150
提交评论