ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:17.63KB ,
资源ID:10205243      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10205243.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(一种新的遗传算法完整代码无需调试.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

一种新的遗传算法完整代码无需调试.docx

1、一种新的遗传算法完整代码无需调试一种新的遗传算法matlab完整代码带说明 function B,len,v=B2F(sol,bounds)%B,len=B2F(x,bounds) 二进制编码函数%x 编码向量如x=6 8 9;%bounds 边界约束ru如bounds=4 8 ;3 11;6 12;%B 二进制编码串%编码长度L由bounds(2)-bounds(1)决定%以上为例:% 编码长度向量L=4 8 6编成二进制L=11 1000 110,则len=2 4 3% 计算B=x-bound(1)=2 5 3编成二进制 B=10 0101 011n=length(sol);len=;B=

2、;v=;L=bounds(:,2)-bounds(:,1);L=de2bi(L);for i=1:nlen(i)=length(L(i,:);endv=sol-bounds(:,1);for i=1:n B=B de2bi(v(i),len(i);endfunction pops=changes(cpop,bounds,len,p)%基因突变函数%function pops=changes(pop,bounds,len,p)%pop 种群数目%bounds 边界约束%len 每个变量的编码长度% 如len为4 3 3;表示有三个变量,第一个变量的二进制编码长度为4,依次类推%p 突变概率%po

3、ps 返回突变后的基因%p1 基因突变数目if isempty(p) p=0.01;endn,m=size(cpop);pop=cpop;p1=round(sum(len)*n*p);k=0;q=;v=;while(kp1) k=k+1; q(k)=round(rand*(sum(len)*n-1)+1; for i=1:k-1 if q(k)=q(i) q(k)=; k=k-1; end endendfor i=1:nB(i,:),len=B2F(pop(i,:),bounds);endv=reshape(B,1,n*sum(len);for i=1:p1 if v(q(i)=0 v(q(i

4、)=1; else v(q(i)=0; endendv=reshape(v,n,sum(len);for i=1:n pop(i,:)=F2B(v(i,:),bounds,len);endpops=popcpopfunction cpop ,len,v=cross(child,bounds,CP)%交叉函数,采取点交叉%newpop ,len=cross(child,bounds,CP)%child 复制后的种群%bounds 边界约束%CP 交叉概率%newpop 交叉后的新种群%len 每个变量的编码长度% 如len返回为4 3 3;表示有三个变量,第一个变量的二进制编码长度为4,依次类推

5、 if isempty(CP) CP=0.25;endn ,m=size(child);B=;len=;t=;mychild=child(:,1:end-1);v=;p=rand(1,n);k=1; for i=1:n if p(i)CP v(k)=i; k=k+1; end end if (rem(k,2)=0) temp=v(k-1); while (temp=v(k-1) temp=round(rand*(n-1)+1; end v(k)=temp; k=k+1; end if isempty(v) B(i,:),len=B2F(mychild(1,:),bounds); B=;else

6、 for i=1:k-1B(i,:),len=B2F(mychild(v(i),:),bounds);endfor i=1:2:k-2 p2=round(rand*sum(len)-1)+1; t=zeros(1,p2); t(i,:)=B(i,1:p2); B(i,1:p2)=B(i+1,1:p2); B(i+1,1:p2)=t(i,:);endfor i=1:k-1 mychild(v(i),:)=F2B(B(i,:),bounds,len);endendcpop=mychild;function b = de2bi(d, n, p)%function b = de2bi(d, n, p)

7、%DE2BI 转换10进制数为二进制数。% B = DE2BI(D) 转换正整数向量D成二进制矩阵B。% 二进制矩阵B的每一行表示十进制向量D中相应的数。% B = DE2BI(D, N) 转换正整数向量D成二进制矩阵B,% 但指定B的列数为N。% B = DE2BI(D, N, P) 转换正整数向量D成p进制矩阵B。% p进制矩阵B的每一行表示十进制向量D中相应的数。d = d(:);len_d = length(d);if min(d) 0, error(Cannot convert a negative number);elseif isempty(find(d=inf), error(

8、Input must not be Inf.);elseif find(d = floor(d), error(Input must be an integer.); end;if nargin 0 b1 = b1 rem(tmp, 2);tmp = floor(tmp/2); end; n = length(b1);end;if nargin 3,p = 2;end;b = zeros(len_d, n);for i = 1 : len_d j = 1;tmp = d(i); while (j 0) b(i, j) = rem(tmp, p);tmp = floor(tmp/p); j =

9、j + 1;end;end;function pops,len=F2B(x,bounds,len)%二进制编码转化为十进制%pops=F2B(x,bounds,len)%x 二进制串如x=0 1 1 0 0 1 0 1 0 1 0 1%len 二进制串的分段len=3 4 5%bounds 边界约束%pops 十进制n=length(x);m=length(len);q=;for i=1:mq(i)=sum(len(1:i);endq=0 q;for j=1:m pops(j)=bounds(j,1); p=; p=x(q(j)+1:q(j+1); L1=q(j+1)-q(j); for k=

10、1:L1 pops(j)=pops(j)+p(k)*2(k-1); endend function sol,eval=f553(sol,options)m(1)=sol(1);m(2)=sol(2);m(3)=sol(3);%失效概率矩阵q=0.01 0.05 0.10 0.18;0.08 0.02 0.15 0.12;0.04 0.05 0.20 0.10;%约束条件g1=51-(m(1)+3).2+m(2).2+m(3).2;g2=20*sum(m+exp(-m)-120;g3=20*sum(m.*exp(-m/4)-65;%计算加惩罚项的适值if (g1=0)&(g2=0)&(g3=0)

11、 multi=1; for i=1:3 summ=0; for j=2:4 summ=summ+q(i,j).(m(i)+1); end multi=multi*(1-(1-(1-q(i,1).(m(i)+1)-summ); end eval=multi;else%取M=500 eval=-500;endfunction f,x=myga(num,bounds,Myfun,N,CP,P)%f,x=ga(num,bounds,fun,N,CP,P)%该遗传算法适用于:% 目标函数为求最大值,且解非负整数解%bounds 边界约束%Myfun 为目标函数%num 初始种群数%N 最大迭代次数%CP

12、 交叉概率%P 突变概率%f 目标最优解%x 最优解向量m=nargin;if m 输入变量太少)disp( 按回车键查看帮助) pause help ga f=-_- ; x=没有规矩不成方圆; break;endpop=INTinti(num,bounds);fmax=pop(:,end);endpop=pop;n=size(endpop,2);k=0;x=;f=zeros(1,num);while(kN) pop=mutation(endpop); cpop ,len,v=cross(pop,bounds,CP); pops=changes(cpop,bounds,len,P);brea

13、k; for i=1:num sol=pops(i,:); f(i)=Myfun(sol); if fmax(i)f(i) fmax(i)=f(i); endpop(i,1:end-1)=pops(i,:); endendendpop(:,end)=fmax(:);k=k+1;endf,ii=max(fmax);x=endpop(ii,1:end-1);function sol, eval =gaDemo1Eeval(sol,options)x=sol(1);eval = x + 10*sin(5*x)+7*cos(4*x);%参数说明%eval:个体的适应度; %sol:当前个体,n+1个元

14、素的行向量。function pop=INTinti(num,bounds)%pop=INTinti(num,bounds)%inti 编码函数%num 种群数%bounds 边界约束n=size(bounds,1);L=bounds(:,2)-bounds(:,1);p=rand(num,n);for i=1:num p(i,:)=round(p(i,:).*L); pop(i,:)= p(i,:)+bounds(:,1); f(i)=myfun(pop(i,:);endpop=pop f;function child=mutation(pop)%复制函数,采取小盘轮转法%child=mut

15、ation(pop)%mutation 编码%pop 初始种群%child 返回复制后的种群%pop(:,end) 适值度 n,m=size(pop);f=pop(:,end);value=sum(f);for i=1:n p(i)=f(i)/value; q(i)=sum(p(1:i);end t=rand(1,n);for j=1:n for k=1:n if t(j)q(k) v(j)=k; break end endend i=1:n; child(i,:)=pop(v(i),:);function f=myfun(sol,bnd)x=sol;n=length(x);f=0;for i

16、=1:n f=f+x(i)*i;endfunction f,x=myga(num,bounds,N,CP,P)%f,x=ga(num,bounds,fun,N,CP,P) %f,x=myga(,bounds,)%该遗传算法适用于:% 目标函数为求最大值,且解非负整数解%bounds 边界约束%Myfun 为目标函数%num 初始种群数%N 最大迭代次数%CP 交叉概率%P 突变概率%f 目标最优解%x 最优解向量m=nargin;if m 输入变量太少)disp( 按回车键查看帮助) pause help ga f=-_- ; x=没有规矩不成方圆; break;endif isempty(C

17、P) CP=0.25;endif isempty(P) P=0.01;endif isempty(N) N=1000;endif any(bounds(:,1) 按回车键查看帮助) pause help ga f=-_- ; x=没有规矩不成方圆; break;endif isempty(num) num=100;endpop=INTinti(num,bounds);fmax=pop(:,end);endpop=pop;n=size(endpop,2);count=0;x=;f=zeros(1,num);while(countN) pop=mutation(endpop); cpop ,len

18、,v=cross(pop,bounds,CP); pops=changes(cpop,bounds,len,P); for i=1:num sol=pops(i,:); f(i)=Myfun(sol); %惩罚策略for jj=1:length(sol) if sol(jj)bounds(jj,2) f(i)=-inf; endend if fmax(i)f(i) fmax(i)=f(i); endpop(i,1:end-1)=pops(i,:); endendendpop(:,end)=fmax(:);count=count+1;% f,ii=max(fmax);% x=endpop(ii,1:end-1);endf,ii=max(fmax);x=endpop(ii,1:end-1);function newpop ,len=xcross(child,bounds,CP) mychild=child(:,1:end-1);B(1,:),len=B2F(mychild(1,:),bounds);newpop=B(1,:);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1