clear all
clc
MaxGen=input('请输入最大进化代数MaxGen=');
popsize=input('请输入种群规模popsize=');
pr=input('请输入初始接受概率pr=');
dd=input('请输入退火控制值dd=');
w=[0.2 0.2 0.2 0.2 0.2 0.3 0.2 0.3 0.2 0.3 0.2 0.2 0.3 0.2];
u=[0.8 0.8 0.8 0.8 0.8 0.7 0.8 0.7 0.8 0.7 0.8 0.8 0.7 0.8];
M=[1 6 5 4;
1 6 4 -1;
1 -1 -1 -1;
1 5 4 -1;
1 3 -1 -1;
1 3 4 -1;
1 3 4 -1;
1 3 4 -1;
2 4 -1 -1;
1 3 4 -1;
1 6 5 4;
1 3 4 -1;
1 3 4 -1;
2 4 -1 -1];
pt=[10 15 10 20;
15 30 25 0;
23 0 0 0;
15 15 40 0;
23 20 0 0;
12 20 30 0;
15 60 20 0;
5 30 25 0;
20 30 0 0;
24 18 20 0;
18 24 24 40;
25 40 20 0;
17 20 50 0;
10 50 0 0];
WNumber=39;
PNumber=14;
MNumber=6;
solution=zeros(1,WNumber);
k=1;
for i=1:14
for j=1:4
if M(i,j)~=-1
solution(k)=i;
k=k+1;
end
end
end
L=length(solution);
Nchange=200;
chrompop=repmat(solution,popsize,1);
for i=2:popsize
for t=1:Nchange
changerand=ceil(L*rand(1,2));
temp=chrompop(i,changerand(1));
chrompop(i,changerand(1))=chrompop(i,changerand(2));
chrompop(i,changerand(2))=temp;
end
end
G2=MaxGen-round(0.618*MaxGen);
G1=G2-round(0.618*G2);
for s=1:popsize
fitness(s)=decomyque(chrompop(s,:),M,pt);
end
max_fitness=max(fitness);
min_fitness=min(fitness);
avg_fitness=mean(fitness);
t0=-((max_fitness-min_fitness)/log(pr))
t=t0
best_fitness=max_fitness
s=find(fitness==max_fitness);
best_solution=chrompop(min(s),:)
for i=1:MaxGen
maxfitness(i)=max(fitness);
selectset=zeros(popsize,L);
selectfitness=zeros(1,popsize);
sumfitness=sum(fitness);
cumsumfitness=cumsum(fitness);
dividesum=cumsumfitness/sumfitness;
selectrand=rand(1,popsize);
for s=1:popsize
if selectrand(s)<dividesum(1)
selectset(s,:)=chrompop(1,:);
selectfitness(s)=fitness(1);
end
for s_1=2:popsize
if dividesum(s_1-1)<selectrand(s)&selectrand(s)<dividesum(s_1);
selectset(s,:)=chrompop(s_1,:);
selectfitness(s)=fitness(s_1);
break;
end
end
end
if best_fitness<=max(selectfitness)
best_fitness=max(selectfitness);
s=find(selectfitness==max(selectfitness));
best_solution=selectset(min(s),:);
else
randnumber=ceil(rand*popsize);
selectset(randnumber,:)=best_solution;
selectfitness(randnumber)=best_fitness;
end
crossset=zeros(popsize,L); %定义交叉后染色体群为crossset
crossfitness=zeros(1,popsize);
matchrand=randperm(popsize);
for s=1:popsize/2
crossrand=rand;
if crossrand>0.7 %若随机数大于交叉概率则不交叉,直接放入crossset中
crossset(s,:)=selectset(matchrand(s),:);
crossfitness(s)=selectfitness(matchrand(s));
crossset(popsize+1-s,:)=selectset(matchrand(popsize+1-s),:);
crossfitness(popsize+1-s)=selectfitness(matchrand(popsize+1-s));
crossfitness(s)=decomyque(crossset(s,:),M,pt);
crossfitness(popsize+1-s)=decomyque(crossset(popsize+1-s,:),M,pt);
else
wayrand=rand;
if wayrand<=0.5
crossset(s,:)=selectset(matchrand(s),:);
a=crossset(s,:);
crossset(popsize+1-s,:)=selectset(matchrand(popsize+1-s),:);
b=crossset(popsize+1-s,:);
bl=round(rand()*5)+10;
ba_start=ceil(rand()*(WNumber-bl));
bb_start=ceil(rand()*(WNumber-bl));
while(ba_start==bb_start)
bb_start=ceil(rand()*(WNumber-bl));
end
ba=a(1,ba_start:(ba_start+bl));
bb=b(1,bb_start:(bb_start+bl));
for i=1:bl+1
for k=1:WNumber
if(a(1,k)==bb(i))
a(1,k)=0;
break;
end
end
end
for i=1:bl+1
for k=1:WNumber
if(b(1,k)==ba(i))
b(1,k)=0;
break;
end
end
end
d1=find(a(1,:));
c1=[];
q1=zeros(1,bl+1);
for i=1:size(d1,2)
c1=[c1 a(1,d1(i))];
w1=[q1 c1];
end
d2=find(b(1,:));
c2=[];
q2=zeros(1,bl+1);
for j=1:size(d2,2)
c2=[c2 b(1,d2(j))];
w2=[q2 c2];
end
a(1,:)=[bb c1];
b(1,:)=[ba c2];
crossset(s,:)=a(1,:);
crossset(popsize+1-s,:)=b(1,:);
crossfitness(s)=decomyque(crossset(s,:),M,pt);
crossfitness(popsize+1-s)=decomyque(crossset(popsize+1-s,:),M,pt);
else
crossset(s,:)=selectset(matchrand(s),:);
crossset(popsize+1-s,:)=selectset(matchrand(popsize+1-s),:);
s_1=randperm(L);
s_2=randperm(L);
s_1(5:L)=[];
s_2(5:L)=[];
r_1=sort(s_1);
r_2=sort(s_2);
tempset_1=crossset(s,r_1(1):r_1(2));
if r_1(3)-r_1(2)==1
crossset(s,r_1(1):(r_1(1)+r_1(4)-r_1(3)))=crossset(s,r_1(3):r_1(4));
crossset(s,r_1(1)+r_1(4)-r_1(3)+1:r_1(4))=tempset_1;
else
tempset_2=crossset(s,r_1(2)+1:r_1(3)-1);
crossset(s,r_1(1):(r_1(1)+r_1(4)-r_1(3)))=crossset(s,r_1(3):r_1(4));
crossset(s,(r_1(1)+r_1(4)-r_1(3)+1):(r_1(1)+r_1(4)-r_1(2)-1))=tempset_2;
crossset(s,(r_1(1)+r_1(4)-r_1(2)):r_1(4))=tempset_1;
end
tempset_1=crossset(popsize+1-s,r_2(1):r_2(2));
if r_2(3)-r_2(2)==1
crossset(popsize+1-s,r_2(1):(r_2(1)+r_2(4)-r_2(3)))=crossset(popsize+1-s,r_2(3):r_2(4));
crossset(popsize+1-s,(r_2(1)+r_2(4)-r_2(3)+1):r_2(4))=tempset_1;
else
tempset_2=crossset(popsize+1-s,r_2(2)+1:r_2(3)-1);
crossset(popsize+1-s,r_2(1):(r_2(1)+r_2(4)-r_2(3)))=crossset(popsize+1-s,r_2(3):r_2(4));
crossset(popsize+1-s,(r_2(1)+r_2(4)-r_2(3)+1):(r_2(1)+r_2(4)-r_2(2)-1))=tempset_2;
crossset(popsize+1-s,(r_2(1)+r_2(4)-r_2(2)):r_2(4))=tempset_1;
end
crossfitness(s)=decomyque(crossset(s,:),M,pt);
crossfitness(popsize+1-s)=decomyque(crossset(popsize+1-s,:),M,pt);
end
end
end
if best_fitness<=max(crossfitness)
best_fitness=max(crossfitness);
s=find(crossfitness==max(crossfitness));
best_solution=crossset(min(s),:);
else
randnumber=ceil(rand*popsize);
crossset(randnumber,:)=best_solution;
crossfitness(randnumber)=best_fitness;
end
%变异操作
average_fitness=sum(crossfitness)/popsize;
mutationset=zeros(popsize,L);
mutationfitness=zeros(1,popsize);
for s=1:popsize
mutationrand=rand;
if mutationrand>0.1
mutationset(s,:)=crossset(s,:);
mutationfitness(s)=crossfitness(s);
else
tempsolution=repmat(crossset(s,:),3,1);
tempfitness=zeros(1,3);
r=randperm(L);
tempset=tempsolution(1,r(1)); %变异方式之一:交换
tempsolution(1,r(1))=tempsolution(1,r(2));
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
自适应函数.rar (25个子文件)
自适应函数
selectanneal.m 734B
mutation.m 924B
judge.m 249B
selectanneal1.asv 699B
gante.m 2KB
anneal1.m 823B
decomyque.asv 1KB
adapting.m 451B
selectrws.m 406B
Untitled8.m 2KB
Untitled.asv 10KB
anneal.m 827B
crossover.m 2KB
main.m 3KB
initial.m 588B
T.xls 14KB
judge1.m 227B
JM.xls 14KB
selectanneal1.m 704B
fitness.m 955B
DT.xls 14KB
keepbest.m 343B
decomyque.m 1KB
weight.m 499B
Untitled.m 10KB
共 25 条
- 1
资源评论
- 南洲.2015-02-03我下载了,不过不是程序都,无用的东西
- IT守望者2013-02-17下载了 读了受益匪浅
muyudzj
- 粉丝: 1
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功