- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
..
% 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;
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 t0
%用模拟退火产生新的群体
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==inff(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 N32
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 PcR1
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
ff1(j)=cc(pop1(i,j),pop1(i,j+1));
end
f=sum(ff);
f1=sum(ff1);
if f==inff1==inf
dd=inf;
end
if f~=inf|f1~=inf
dd=f-f1;
end
Aij=min(1,exp(dd/t));
Pacept=rand(1);
if Aijacept
pop(i,:)=pop1(i,:);
end
end
文档评论(0)