遗传算法的基本步骤与实例 遗传算法基本步骤

遗传算法的基本步骤与实例编码:GA在进行搜索之前先将解空间的解数据表示成遗传空间的基因型串结构数据,这些串结构数据的不同组合便构成了不同的点。初始群体的生成:随机产生N个初始串结构数据,每个串结构数据称为一个个体,N个个体构成了一个群体。GA以这N个串结构数据作为初始点开始迭代。适应性值评估检测:适应性函数表明个体或解的优劣性。不同的问题,适应性函数的定义方式也不同。选择:选择的目的是为了从当前群体中选出优良的个体,使它们有机会作为父代为下一代繁殖子孙。遗传算法通过选择过程体现这一思想,进行选择的原则是适应性强的个体为下一代贡献一个或多个后代的概率大。选择实现了达尔文的适者生存原则。交换:交换操作是遗传算法中最主要的遗传操作。通过交换操作可以得到新一代个体,新个体组合了其父辈个体的特性。交换体现了信息交换的思想。变异:变异首先在群体中随机选择一个个体,对于选中的个体以一定的概率随机地改变串结构数据中某个串的值。同生物界一样,GA中变异发生的概率很低,通常取值在0.001~0.01之间。变异为新个体的产生提供了机会。GA的计算过程为:选择编码方式产生初始群体计算初始群体的适应性值如果不满足条件 {选择 交换 变异 计算新一代群体的适应性值}核心函数:(1)function[pop]=initializega(num,bounds,eevalFN,eevalOps,options)--初始种群的生成函数【输出参数】pop--生成的初始种群【输入参数】num--种群中的个体数目bounds--代表变量的上下界的矩阵eevalFN--适应度函数eevalOps--传递给适应度函数的参数options--选择编码形式(浮点编码或是二进制编码)[precisionF_or_B],如 precision--变量进行二进制编码时指定的精度 F_or_B--为1时选择浮点编码,否则为二进制编码,由precision指定精度)(2)function [x,endPop,bPop,traceInfo] =ga(bounds,evalFN,evalOps,startPop,opts,... termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps)--遗传算法函数【输出参数】 x--求得的最优解 endPop--最终得到的种群 bPop--最优种群的一个搜索轨迹【输入参数】 bounds--代表变量上下界的矩阵 evalFN--适应度函数 evalOps--传递给适应度函数的参数 startPop-初始种群 opts[epsilon prob_opsdisplay]--opts(1:2)等同于initializega的options参数,第三个参数控制是否输出,一般为0。如[1e-6 1 0] termFN--终止函数的名称,如['maxGenTerm'] termOps--传递个终止函数的参数,如[100] selectFN--选择函数的名称,如['normGeomSelect'] selectOps--传递个选择函数的参数,如[0.08] xOverFNs--交叉函数名称表,以空格分开,如['arithXover heuristicXoversimpleXover'] xOverOps--传递给交叉函数的参数表,如[2 0;2 3;2 0] mutFNs--变异函数表,如['boundaryMutation multiNonUnifMutationnonUnifMutation unifMutation'] mutOps--传递给交叉函数的参数表,如[40 0;6 100 3;4 100 3;4 0 0]注意】matlab工具箱函数必须放在工作目录下【问题】求f(x)=x+10*sin(5x)+7*cos(4x)的最大值,其中0<=x<=9【分析】选择二进制编码,种群中的个体数目为10,二进制编码长度为20,交叉概率为0.95,变异概率为0.08【程序清单】%编写目标函数 function[sol,eval]=fitness(sol,options) x=sol(1); eval=x+10*sin(5*x)+7*cos(4*x);%把上述函数存储为fitness.m文件并放在工作目录下 initPop=initializega(10,[09],'fitness');%生成初始种群,大小为10 [xendPop,bPop,trace]=ga([0 9],'fitness',[],initPop,[1e-6 11],'maxGenTerm',25,'normGeomSelect',... [0.08],['arithXover'],[2],'nonUnifMutation',[2 253]) %次遗传迭代运算借过为:x = 7.856224.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.00000.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是传递给变异函数的参数。%郭涛算法_多父体杂交算法和郭涛算法_精英多父体杂交算法分别20次数值实验,并给出平均时间clear all;N=50;%初始个体个数M=8;n=1;%论域维数,可修改,用循环做eps=1e-6;%精度upper=10;lower=-10;%论域范围drop=upper-lower;%郭涛算法_多父体杂交算法minP0=zeros(20,n);minQ0=zeros(20,1);minFrequency0=zeros(20,1);minTimes0=zeros(20,1);for i=1:20 [minP0(i,:),minQ0(i),minFrequency0(i),minTimes0(i)]=GT(N,M,n,upper,lower,eps);end%对minP、minQ、minF requency按minQ从小到打排序tempP=zeros(20,n);tempFrequency=zeros(20,1);[X,I]=sort(minQ0);for r=1:20 tempP(r,:)=minP0(I(r),:); tempFrequency(r)=minFrequency0(I(r));endminP0=tempP;minQ0=X;minFrequency0=tempFrequency;averageTime0=sum(minTimes0)/20;averageFrequency0=sum(minFrequency0)/20;%郭涛算法_精英多父体杂交算法minP1=zeros(20,n);minQ1=zeros(20,1);minFrequency1=zeros(20,1);minTimes1=zeros(20,1);for i=1:20 [minP1(i,:),minQ1(i),minFrequency1(i),minTimes1(i)]=GT_GYZJ(N,M,n,upper,lower,eps);end%对minP、minQ、minFrequency按minQ从小到打排序tempP=zeros(20,n);tempFrequency=zeros(20,1);[X,I]=sort(minQ1);for r=1:20 tempP(r,:)=minP1(I(r),:); tempFrequency(r)=minFrequency1(I(r));endminP1=tempP;minQ1=X;minFrequency1=tempFrequency;averageTime1=sum(minTimes1)/20;averageFrequency1=sum(minFrequency1)/20;________________________________________________________________________________%郭涛算法_多父体杂交算法function[P_Best,Best,Frequency,Time]=GT(N,M,n,upper,lower,eps)if nargin<6 disp('输入参数错误'); return;elseif nargout<4 disp('输出参数错误'); return;end drop=upper-lower;%若各个分量上下界不同,可以用数组来代替P=zeros(N,n);%存放初始N个个体,每个个体有n个基因位Q=zeros(N,1);%存放P中个体对应函数值Frequency =0;%当前比较次数tic%生成初始群体Pfor s=1:n P(:,s)=drop*rand(N,1)+lower;end%生成初始群体P对应的函数值for r=1:N Q(r)=f(P(r,:));end[Best,BestIndex]=min(Q);[Worst,WorstIndex]=max(Q);%以下为郭涛算法主体循环部分A=zeros(1,M);B=zeros(1,M);while Worst-Best>eps Frequency=Frequency+1; %从P中选M个个体生成空间V,其下标存放于A中 A=floor(rand(1,M)*(N-1))+1; %生成Xson的各个组合系数(待检测) sum=0;minbound=-0.5;maxbound=1.5; for r=1:M-1 B(r)=(maxbound-minbound)*rand(1)+minbound; sum=sum+B(r); maxbound=min(1.5,1.5-sum); minbound=max(-0.5,-0.5-sum); end B(M)=1-sum; %生成Xson Xson=zeros(1,n); for r=1:M Xson=Xson+B(r)*P(A(r),:); end %越界处理 for s=1:n if Xson(s)<lower Xson(s)=lower; elseif Xson(s)>upper Xson(s)=upper; end end y=f(Xson); ify<Worst P(WorstIndex,:)=Xson;Q(WorstIndex)=y; [Best,BestIndex]=min(Q); [Worst,WorstIndex]=max(Q); end endP_Best=P(BestIndex,:);Time=toc;________________________________________________________________________________%郭涛算法_精英多父体杂交算法function[P_Best,Best,Frequency,Time]=GT_GYZJ(N,M,n,upper,lower,eps)if nargin<6 disp('输入参数错误'); return;elseif nargout<4 disp('输出参数错误'); return;end drop=upper-lower;%若各个分量上下界不同,可以用数组来代替P=zeros(N,n);%存放初始N个个体,每个个体有n个基因位Q=zeros(N,1);%存放P中个体对应函数值Frequency =0;%当前比较次数tic%生成初始群体Pfor s=1:n P(:,s)=drop*rand(N,1)+lower;end%生成初始群体P对应的函数值for r=1:N Q(r)=f(P(r,:));end[Best,BestIndex]=min(Q);[Worst,WorstIndex]=max(Q);%以下为郭涛算法主体循环部分A=zeros(1,M);B=zeros(1,M);while Worst-Best>eps Frequency=Frequency+1; [m,A(1)]=min(Q); %从P中选M-1个个体生成空间V,其下标存放于A中 A(2:end)=floor(rand(1,M-1)*(N-1))+1; %生成Xson的各个组合系数(待检测) sum=0;minbound=-0.5;maxbound=1.5; for r=1:M-1 B(r)=(maxbound-minbound)*rand(1)+minbound; sum=sum+B(r); maxbound=min(1.5,1.5-sum); minbound=max(-0.5,-0.5-sum); end B(M)=1-sum; %生成Xson Xson=zeros(1,n); for r=1:M Xson=Xson+B(r)*P(A(r),:); end %越界处理 for s=1:n if Xson(s)<lower Xson(s)=lower; elseif Xson(s)>upper Xson(s)=upper; end end y=f(Xson); ify<Worst P(WorstIndex,:)=Xson;Q(WorstIndex)=y; [Best,BestIndex]=min(Q); [Worst,WorstIndex]=max(Q); end endP_Best=P(BestIndex,:);Time=toc;________________________________________________________________________________%函数f(x)function y=f(x)n=length(x);y=1;for i=1:n s=0; for j=1:5 s=s+j*cos((j+1)*x(i)+j); end y=y*s;end

  

爱华网本文地址 » http://www.aihuau.com/a/25101015/259224.html

更多阅读

女孩化妆的基本步骤 教人化妆的网站

女孩化妆的基本步骤——简介不知不觉间已经到了该化妆的年龄了,你是不是还在为怎样化妆发愁呢?那么今天我就给大家讲一下最简单基础的化妆步骤。女孩化妆的基本步骤——女孩化妆的基本步骤——粉底液怎么用女孩化妆的基本步骤 1、洁

泡茶的基本步骤 如何泡茶部步骤

  茶的冲泡方法有简有繁,要根据具体情况,结合茶性而定。但不论泡茶技艺如何变化,一些基本的方法则是相通的。冲泡一杯好茶出来,除了备茶、选水、烧水、配具之外,都需要遵照泡茶的基本步骤。温具  用热水冲淋茶壶,包括壶嘴、壶盖,

原创 创意农业的基本类型与发展模式 今日头条原创文章类型

【原创】创意农业的基本类型与发展模式2012-02-16 09:35:45阅读(196)评论(0)系统分类:文化个人分类:默认关键词: 原创 创意 类型 农业 模式 基本 发展一.创意农业的基本类型(一)农业资源替代针对本地的农业条件,用充裕资源替代紧缺资源,或

立定跳远的教学步骤与方法 小学立定跳远教学视频

立定跳远的教学步骤与方法一、建立正确的立定跳远动作概念(1)向学生简明地讲解立定跳远的动作要领。(2)学习两臂的前后摆动作。(3)学习两臂摆动配合两腿屈伸动作。(4)学习预备姿势重心前移动作。注意事项:(1)两臂后摆幅度要大。(2

声明:《遗传算法的基本步骤与实例 遗传算法基本步骤》为网友女人你给力吗分享!如侵犯到您的合法权益请联系我们删除