展会信息港展会大全

[转帖]求完全图哈密尔顿圈的遗传模拟退火算法matlab通用源程序
来源:互联网   发布日期:2011-08-23 17:30:27   浏览:8158次  

导读: % maxpop 给定群体规模 % pop 群体 % newpop 种群 %t0 初始温度 function [codmin,finmin]=fc0(cc,v0,t0) N=length(cc(1,:)); %定群体规模 if N50 maxpop=2*N-20; end if N=40 maxpop=2*N; end %产生初始群体 pop=zeros(maxpop,N); pop(:,1)=v0; finmin=inf;...

  • % maxpop 给定群体规模
  • % pop 群体
  • % newpop 种群
  • %t0 初始温度
  • function [codmin,finmin]=fc0(cc,v0,t0)
  • N=length(cc(1,:));
  • %定群体规模
  • if N>50
  • maxpop=2*N-20;
  • end
  • if N<=40
  • maxpop=2*N;
  • end
  • %产生初始群体
  • pop=zeros(maxpop,N);
  • pop(:,1)=v0;
  • finmin=inf;
  • codmin=0;
  • for i=1:maxpop
  • Ra=randperm(N);
  • Ra(find(Ra==v0))=Ra(1);
  • Ra(1)=v0;
  • pop(i,:)=Ra;
  • end
  • t=t0;
  • while t>0
  • %用模拟退火产生新的群体
  • pop=fc1(maxpop,pop,N,cc,v0,t);
  • %转轮赌选择种群
  • f=zeros(1,maxpop);
  • for i=1:maxpop
  • for j=1:N-1
  • x=pop(i,j);
  • y=pop(i,j+1);
  • fo1=cc(pop(i,j),pop(i,j+1));
  • f(i)=f(i)+fo1;
  • end
  • f(i)=f(i)+cc(pop(i,1),pop(i,N));
  • end
  • fmin=min(f);
  • for i=1:maxpop
  • if fmin==inf&f(i)==inf
  • dd=inf;
  • end
  • if fmin~=inf|f(i)~=inf
  • dd=fmin-f(i);
  • end
  • ftk(i)=exp(dd/t);
  • end
  • [fin1,cod]=sort(-ftk);
  • fin=abs(fin1);
  • %f(cod(1))
  • if f(cod(1))<finmin %记录当代最优解
  • finmin=f(cod(1));
  • codmin=pop(cod(1),:);
  • end
  • for i=1:maxpop
  • RR=rand(1);
  • cod2=find(fin>=RR);
  • % cod
  • newpop(i,:)=pop(cod(cod2(end)),:);
  • end
  • %单亲繁殖
  • if N>32
  • jmax=round(N/9);
  • end
  • if N<=32
  • jmax=2;
  • end
  • if mod(jmax,2)
  • jmax=jmax-1;
  • end
  • for i=1:maxpop
  • for j=1:2:jmax
  • nn=randperm(N);
  • x=nn(j);
  • y=nn(j+1);
  • if newpop(i,x)==v0|newpop(i,y)==v0
  • continue;
  • end
  • box1=newpop(i,x);
  • newpop(i,x)=newpop(i,y);
  • newpop(i,y)=box1;
  • end
  • end
  • %变异 Pc
  • Pc=0.02;
  • for i=1:maxpop
  • R1=rand(1);
  • if Pc>R1
  • for j=1:2:jmax+2
  • nn=randperm(N);
  • x=nn(j);
  • y=nn(j+1);
  • if newpop(i,x)==v0|newpop(i,y)==v0
  • pop(i,:)=newpop(i,:);
  • continue;
  • end
  • box1=newpop(i,x);
  • newpop(i,x)=newpop(i,y);
  • newpop(i,y)=box1;
  • pop(i,:)=newpop(i,:);
  • end
  • end
  • end
  • %温度下降
  • t=t-0.1;
  • end

  • function pop=fc1(maxpop,pop,N,cc,v0,t)
  • ff(N-1)=0;
  • f=0;
  • pop1=zeros(maxpop,N);
  • for i=1:maxpop
  • for j=1:N-1
  • x=pop(i,j);
  • y=pop(i,j+1);
  • ff(j)=cc(pop(i,j),pop(i,j+1));
  • pop1(i,:)=pop(i,:);
  • nn=randperm(N);
  • x=nn(1);
  • y=nn(2);
  • pop1=pop;
  • if pop(i,x)==v0|pop(i,x)==v0
  • continue
  • box1=pop(i,x);
  • pop1(i,x)=pop1(i,y);
  • pop1(i,y)=box1;
  • end
  • ff1(j)=cc(pop1(i,j),pop1(i,j+1));
  • end
  • f=sum(ff);
  • f1=sum(ff1);

  • if f==inf&f1==inf
  • dd=inf;
  • end
  • if f~=inf|f1~=inf
  • dd=f-f1;
  • end

  • Aij=min(1,exp(dd/t));
  • Pacept=rand(1);
  • if Aij>Pacept
  • pop(i,:)=pop1(i,:);
  • end
  • end

    赞助本站

  • AiLab云推荐
    展开

    热门栏目HotCates

    Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港