版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、遗传算法程序(一) :说明:fga.m为遗传算法的主程序;采用二进制Gray编码,采用基于轮盘赌法的非线性排 名选择 , 均匀交叉 ,变异操作 ,而且还引入了倒位操作 !function BestPop,Trace=fga(FUN,LB,UB,eranum,popsize,pCross,pMutation,pInversion,options)% BestPop,Trace=fmaxga(FUN,LB,UB,eranum,popsize,pcross,pmutation)% Finds a maximum of a function of several variables.% fmaxga
2、solves problems of the form:% max F(X) subject to: LB = X = UB% BestPop- 最优的群体即为最优的染色体群% Trace- 最佳染色体所对应的目标函数值% FUN- 目标函数% LB- 自变量下限% UB- 自变量上限% eranum- 种群的代数 ,取 100-1000(默认 200)% popsize- 每一代种群的规模;此可取50-200( 默认 100)% pcross- 交叉概率 ,一般取 0.5-0.85 之间较好 (默认 0.8)% pmutation - 初始变异概率 ,一般取 0.05-0.2 之间较好 (默
3、认 0.1)% pInversion - 倒位概率 ,一般取 0.050.3 之间较好 (默认 0.2)% options- 1*2 矩阵 ,options(1)=0 二进制编码 (默认 0),option(1)=0 十进制编%码,option(2)设定求解精度(默认1e-4)% T1=clock;if nargin0)error( 数据输入错误 ,请重新输入 (LBUB):);ends=sprintf(程序运行需要约 %.4f秒钟时间,请稍等 ,(eranum*popsize/1000);disp(s);global m n NewPop children1 children2 VarNum
4、 bounds=LB;UB;bits=;VarNum=size(bounds,1);precision=options(2);% 由求解精度确定二进制编码长度 bits=ceil(log2(bounds(:,2)-bounds(:,1) ./ precision);% 由设定精度划分区间 Pop=InitPopGray(popsize,bits);% 初始化种群m,n=size(Pop);NewPop=zeros(m,n);children1=zeros(1,n);children2=zeros(1,n);pm0=pMutation;BestPop=zeros(era num, n);% 分配
5、初始解空间 BestPop,TraceTrace=zeros(eranum,length(bits)+1);i=1;while i=eranumfor j=1:mvalue(j)=feval(FUN(1,:),(b2f(Pop(j,:),bounds,bits);% 计算适应度endMaxValue,Index=max(value);BestPop(i,:)=Pop(Index,:);Trace(i,1)=MaxValue;Trace(i,(2:length(bits)+1)=b2f(BestPop(i,:),bounds,bits);selectpop=NonlinearRankSelect
6、(FUN,Pop,bounds,bits);% 非线性排名选择 CrossOverPop=CrossOver(selectpop,pCross,round(unidrnd(eranum-i)/eranum);%采用多点交叉和均匀交叉,且逐步增大均匀交叉的概率%round(unidrnd(eranum-i)/eranum)MutationPop=Mutation(CrossOverPop,pMutation,VarNum);% 变异 InversionPop=Inversion(MutationPop,pInversion);% 倒位Pop=In vers ion Pop;% 更新pMutati
7、o n=pmO+(iA4)*(pCross/3-pmO)/(era nu mM);%随着种群向前进化,逐步增大变异率至1/2 交叉率p(i)=pMutation;i=i+1;endt=1:eranum;plot(t,Trace(:,1);title(函数优化的遗传算法);xlabel(进化世代数(era nu m);ylabel(每一代最优适应度(maxfitness);MaxFval,I=max(Trace(:,1);X=Trace(I,(2:length(bits)+1);hold on; plot(I,MaxFval,*);text(I+5,MaxFval,FMAX= num2str(M
8、axFval);str1=sprintf ( 进化到 %d 代 ,自变量为 %s 时,得本次求解的最优值 %fn 对应染色体是: %s,I,num2str(X),MaxFval,num2str(BestPop(I,:);disp(str1);%figure(2);plot(t,p);% 绘制变异值增大过程T2=clock;elapsed_time=T2-T1;if elapsed_time(6)0elapsed_time(6)=elapsed_time(6)+60; elapsed_time(5)=elapsed_time(5)-1;endif elapsed_time(5)1 时,b(i)=
9、mod(a(i-1)+a(i),2)%其中原二进制串:a(1)a(2).a(n),Gray 串:b(1)b(2).b(n) initpop(i,:)=pop(1:end-1);endinitpop(popsize,:)=ones(1,len);%The whole one encoding individual%解码function fval = b2f(bval,bounds,bits)% fval - 表征各变量的十进制数% bval - 表征各变量的二进制编码串% bounds - 各变量的取值范围% bits - 各变量的二进制编码长度scale=(bou nds(:,2)-bou n
10、ds(:,1)./(24bits-1); %The range of the variables numV=size(bounds,1);cs=0 cumsum(bits);for i=1:numVa=bval(cs(i)+1):cs(i+1);fval(i)=sum(2.A(size(a,2)-1:-1:0).*a)*scale(i)+bou nds(i,1);end%选择操作%采用基于轮盘赌法的非线性排名选择%各个体成员按适应值从大到小分配选择概率:%P(i)=(q/1-(1-q)An)*(1-q)9,其中 P(O)PP(n), sum(P(i)=1function selectpop=N
11、onlinearRankSelect(FUN,pop,bounds,bits)global m nselectpop=zeros(m,n);fit=zeros(m,1);for i=1:mfit(i)=feval(FUN(1,:),(b2f(pop(i,:),bounds,bits);% 以函数值为适应值做排名依据 endselectprob=fit/sum(fit);% 计算各个体相对适应度 (0,1)q=max(selectprob);% 选择最优的概率 x=zeros(m,2);x(:,1)=m:-1:1;y x(:,2)=sort(selectprob);r=q/(1-(1-q)Am)
12、;%标准分布基值newfit(x(:,2)=r*(1-q).A(x(:,1)-1);% 生成选择概率newfit=cumsum(newfit);% 计算各选择概率之和 rNums=sort(rand(m,1);fitIn=1;newIn=1;while newIn=mif rNums(newIn)newfit(fitIn) selectpop(newIn,:)=pop(fitIn,:); newIn=newIn+1;elsefitIn=fitIn+1;endend%交叉操作function NewPop=CrossOver(OldPop,pCross,opts)%OldPop 为父代种群, p
13、cross 为交叉概率 global m n NewPopr=rand(1,m); y1=find(r=pCross); len=length(y1);if len2&mod(len,2)=1% 如果用来进行交叉的染色体的条数为奇数,将其调整为偶数 y2(length(y2)+1)=y1(len);y1(len)=;endif length(y1)=2for i=0:2:length(y1)-2if opts=0NewPop(y1(i+1),:),NewPop(y1(i+2),:)=EqualCrossOver(OldPop(y1(i+1),:),OldPop(y1(i+2),:); else
14、NewPop(y1(i+1),:),NewPop(y1(i+2),:)=MultiPointCross(OldPop(y1(i+1),:),OldPop(y1(i+2),:); endendendNewPop(y2,:)=OldPop(y2,:);%采用均匀交叉function children1,children2=EqualCrossOver(parent1,parent2)global n children1 children2hidecode=round(rand(1,n);% 随机生成掩码 crossposition=find(hidecode=1);holdposition=fin
15、d(hidecode=0); children1(crossposition)=parent1(crossposition);% 掩码为 1,父 1 为子 1 提供基因 children1(holdposition)=parent2(holdposition);% 掩码为 0,父 2 为子 1 提供基因 children2(crossposition)=parent2(crossposition);% 掩码为 1,父 2 为子 2 提供基因 children2(holdposition)=parent1(holdposition);% 掩码为 0,父 1 为子 2 提供基因%采用多点交叉,交叉
16、点数由变量数决定function Children1,Children2=MultiPointCross(Parent1,Parent2)global n Children1 Children2 VarNumChildren1=Parent1;Children2=Parent2;Points=sort(unidrnd(n,1,2*VarNum);for i=1:VarNumChildren1(Points(2*i-1):Points(2*i)=Parent2(Points(2*i-1):Points(2*i);Children2(Points(2*i-1):Points(2*i)=Parent
17、1(Points(2*i-1):Points(2*i);end%变异操作function NewPop=Mutation(OldPop,pMutation,VarNum) global m n NewPop r=rand(1,m); position=find(r=1for i=1:lenk=unidrnd(n,1,VarNum); % 设置变异点数,一般设置 1 点 for j=1:length(k)if OldPop(position(i),k(j)=1 OldPop(position(i),k(j)=0;elseOldPop(position(i),k(j)=1;endendendend
18、NewPop=OldPop;%倒位操作function NewPop=Inversion(OldPop,pInversion)global m n NewPopNewPop=OldPop;r=rand(1,m);PopIn=find(r=1for i=1:lend=sort(unidrnd(n,1,2);if d(1)=1&d(2)=nNewPop(PopIn(i),1:d(1)-1)=OldPop(PopIn(i),1:d(1)-1);NewPop(PopIn(i),d(1):d(2)=OldPop(PopIn(i),d(2):-1:d(1);NewPop(PopIn(i),d(2)+1:n
19、)=OldPop(PopIn(i),d(2)+1:n); endend end遗传算法程序(二)function youhuafunD=code;N=50; % Tunable maxgen=50;% Tunablecrossrate=0.5; %Tunable muterate=0.08; %Tunable generation=1;num = length(D); fatherrand=randint(num,N,3); score = zeros(maxgen,N); while generation1450)|(min(F2)=900)error(DATA property F2 ex
20、ceed its range (900,1450) end% get group property F1 of data, according to F2 value F4=zeros(size(F1);for ite=11:-1:1 index=find(F2best.max_fadvance_k=advance_k+1; x_better(advance_k)=fitness.x; best.max_f=max(f); best.popus=popus; best.x=fitness.x;endif mod(advance_k,SPEEDUP_INTER)=0RANGE=minmax(x_
21、better);RANGEadvance=0;endendreturn;function popus=init% 初始化M=50;%种群个体数目N=30;%编码长度popus=round(rand(M,N);return;function fitness=fit(popus,RANGE)% 求适应度M,N=size(popus);fitn ess=zeros(M,1);% 适应度f=zeros(M,1);% 函数值A=RANGE(1);B=RANGE(2);初始取值范围0 255for m=1:Mx=0;for n=1:Nx=x+popus(m, n)*(2( n-1);endx=x*(B-A
22、)/(2AN)+A;for k=1:5 f(m,1)=f(m,1)-(k*sin(k+1)*x+k);endendf_std=(f-min(f)./(max(f)-min(f);% 函数值标准化 fitness.f=f;fitness.f_std=f_std;fitness.x=x;return;function picked=choose(popus,fitness)% 选择 f=fitness.f;f_std=fitness.f_std;M,N=size(popus);choose_N=3; picked=zeros(choose_N,2); p=zeros(M,1);%选择 choose
23、_N 对双亲 %记录选择好的双亲%选择概率d_order=zeros(M,1);%把父代个体按适应度从大到小排序f_t=sort(f,descend);% 将适应度按降序排列for k=1:Mx=find(f=f_t(k);% 降序排列的个体序号 d_order(k)=x(1);endfor m=1:Mpopus_t(m,:)=popus(d_order(m),:);endpopus=popus_t;f=f_t;p=f_std./sum(f_std);%选择概率c_p=cumsum(p);%累积概率for cn=1:choose_Npicked(cn,1)=roulette(c_p); % 轮盘赌picked(cn,2)=roulette(c_p); % 轮盘赌 popus=intercross(popus,picked(cn,:);% 杂交 endpopus=aberrance(popus,picked);% 变异 return;function popus=interc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 田径社团工作规划5篇
- 秋季学期七年级数学备课组工作计划范文(12篇)
- DB4102T 019-2021 开封市传统食品制作技艺 锅贴
- DB4101T 66-2023 药品网络销售同城配送服务规范
- 暑假学习计划模板集锦(30篇)
- 2024年断桥铝门窗安装服务协议
- 2024年工程合作:分包商与总包商细致分工合同
- 2024年建筑工程物资供应协议
- 2024年技术转让合同:专利使用权协议
- 2024年新式合作协议模板
- 机器学习 课件 第10、11章 人工神经网络、强化学习
- 北京市人民大学附属中学2025届高二生物第一学期期末学业水平测试试题含解析
- 书籍小兵张嘎课件
- 氢气中卤化物、甲酸的测定 离子色谱法-编制说明
- 2024秋期国家开放大学专科《机械制图》一平台在线形考(形成性任务四)试题及答案
- 2024年经济师考试-中级经济师考试近5年真题集锦(频考类试题)带答案
- 2024年黑龙江哈尔滨市通河县所属事业单位招聘74人(第二批)易考易错模拟试题(共500题)试卷后附参考答案
- 私募基金管理人-廉洁从业管理准则
- 房地产估价机构内部管理制度
- 艺术哲学:美是如何诞生的学习通超星期末考试答案章节答案2024年
- 广西科普传播中心招考高频难、易错点500题模拟试题附带答案详解
评论
0/150
提交评论