程序如下:
clear;
NIND=200;
rr=NIND/2;
MAXGEN=500;
GGAP=1;
cc=5;
gg=10;
zz=cc*gg;
pc=0.80;
pm=0.05;
minb=2468;
T=[140 126 70 60 20 93 52 7 16 14 47 40 10 13 9 23 78 56 20 153 167 32 29 116 63 7 14 3 7 14 43 82 9 31 11 2 18 4 10 40 65 17 3 73 120 40 10 65 47 28];
T1=T';
M=[4 3.2 6 5.2 4.1 2.5 3.4 4 3.5 3.4 12 20 17 10 13 23 19 25 17 12 10 11.3 14.5 13.5 10.5 16 20 32 19.5 28.5 4.5 7 4 2.5 6 7.5 6.5 3.5 3.5 6 20.5 25 17 11.5 10.5 4.5 4 3.5 4.7 3.3];
trace1=[];trace2=[];trace3=[];
farm=zeros(rr,zz);
for i=1:rr
farm(i,:)=randperm(zz);
end
gen=1;
while gen
mina=20000;
A=zeros(1,rr);
A1=zeros(1,rr);
B=zeros(1,rr);
k=zeros(rr,zz);
o=zeros(rr,zz);
l=zeros(1,zz);
for i=1:rr
for j=1:zz
if farm(i,j)<=cc
z(j)=1;x(j)=farm(i,j);
else if farm(i,j)>cc&farm(i,j)<=cc*2
z(j)=2;x(j)=farm(i,j)-cc;
else if farm(i,j)>cc*2&farm(i,j)<=cc*3
z(j)=3;x(j)=farm(i,j)-cc*2;
else if farm(i,j)>cc*3&farm(i,j)<=cc*4
z(j)=4;x(j)=farm(i,j)-cc*3;
else if farm(i,j)>cc*4&farm(i,j)<=cc*5
z(j)=5;x(j)=farm(i,j)-cc*4;
else if farm(i,j)>cc*5&farm(i,j)<=cc*6
z(j)=6;x(j)=farm(i,j)-cc*5;
else if farm(i,j)>cc*6&farm(i,j)<=cc*7
z(j)=7;x(j)=farm(i,j)-cc*6;
else if farm(i,j)>cc*7&farm(i,j)<=cc*8
z(j)=8;x(j)=farm(i,j)-cc*7;
else if farm(i,j)>cc*8&farm(i,j)<=cc*9
z(j)=9;x(j)=farm(i,j)-cc*8;
else
z(j)=10;x(j)=farm(i,j)-cc*9;
end
end
end
end
end
end
end
end
end
end
p2=[1.5/4 1];
q=[x;z];
hh=p2*q;
A(i)=hh*T1;
M1=M';
B(i)=z*M1;
k(i,:)=x;
o(i,:)=z;
if A(i)
mina=A(i);
l=farm(i,:);
x1=k(i,:);
z1=o(i,:);
end
end
%计算初始种群仲目标函数的适应度值
A1=A'
sum=0;
for i=1:rr
sum=sum+A1(i,1);
end
for i=1:rr
p(i)=A1(i,1)/sum;
end
for i=1:rr
if B(i)<1.2*minb
p(i)= p(i)+0.015;
else
p(i)= p(i);
end
end
sum1=0;
for i=1:rr
sum1=sum1+p(i);
end
for i=1:rr
p1(i)= p(i)/sum1;
end
pp=cumsum(p1);
for i=1:rr
t=rand;
if t<=pp(1)
farm1(i,:)=farm(1,:);
else
for j=2:rr
if (t>pp(j-1))&&(t<=pp(j))
farm1(i,:)=farm(j,:);
end
end
end
end
farm1;
a=zeros(rr/2,zz);
b=zeros(rr/2,zz);
a1=zeros(rr/2,zz);
b1=zeros(rr/2,zz);
for i=1:rr/2
a(i,:)=farm1(i,:);
b(i,:)=farm1(i+rr/2,:);
a1(i,:)=farm1(i,:);
b1(i,:)=farm1(i+rr/2,:);
end
h=1;
while h
if rand
n=unidrnd(zz-1,1,1);
for i=1:n
for j=1:zz
a(h,i)=a(h,i);
if a(h,i)==b1(h,j)
b1(h,j)=0;
end
end
end
j=n+1;
if j<=zz
for i=1:zz
if b1(h,i)~=0
a(h,j)=b1(h,i);
j=j+1;
end
end
end
for i=1:n
for j=1:zz
b(h,i)=b(h,i);
if b(h,i)==a1(h,j)
a1(h,j)=0;
a1(h,j);
end
end
end
j=n+1;
if j<=zz
for i=1:zz
if a1(h,i)~=0
b(h,j)=a1(h,i);
j=j+1;
end
end
end
end
if rand
t=unidrnd(zz,1,2);
c=a(h,t(1));
a(h,t(1))=a(h,t(2));
a(h,t(2))=c;
t=unidrnd(zz,1,2);
d=b(h,t(1));
b(h,t(1))=b(h,t(2));
b(h,t(2))=d;
a;
b;
end
h=h+1;
end
for i=1:rr/2
aa(i,:)=a(i,:);
aa(i+rr/2,:)=b(i,:);
end
A1=zeros(1,rr);
B1=zeros(1,rr);
for i=1:rr
for j=1:zz
if aa(i,j)<=cc
z(j)=1;x(j)=aa(i,j);
else if aa(i,j)>cc&aa(i,j)<=cc*2
z(j)=2;x(j)=aa(i,j)-cc;
else if aa(i,j)>cc*2&aa(i,j)<=cc*3
z(j)=3;x(j)=aa(i,j)-cc*2;
else if aa(i,j)>cc*3&aa(i,j)<=cc*4
z(j)=4;x(j)=aa(i,j)-cc*3;
else if aa(i,j)>cc*4&aa(i,j)<=cc*5
z(j)=5;x(j)=aa(i,j)-cc*4;
else if aa(i,j)>cc*5&aa(i,j)<=cc*6
z(j)=6;x(j)=aa(i,j)-cc*5;
else if aa(i,j)>cc*6&aa(i,j)<=cc*7
z(j)=7;x(j)=aa(i,j)-cc*6;
else if aa(i,j)>cc*7&aa(i,j)<=cc*8
z(j)=8;x(j)=aa(i,j)-cc*7;
else if aa(i,j)>cc*8&aa(i,j)<=cc*9
z(j)=9;x(j)=aa(i,j)-cc*8;
else
z(j)=10;x(j)=aa(i,j)-cc*9;
end
end
end
end
end
end
end
end
end
end
p2=[1.5/4 1];
q=[x;z];
hh=p2*q;
A1(i)=hh*T1;
end
aa=reins(aa,1,1,1,A1');
for i=1:rr
farm(i,:)=aa(i,:);
end
trace1(gen,1)=min(A);
trace1(gen,2)=mean(A);
gen=gen+1;
end
figure(1);clf;
plot(trace1(:,1));hold on;plot(trace1(:,2),'-.');
legend('解的变化','种群均值的变化')
xlabel('迭代次数');ylabel('两个目标函数值')
错误提示:
??? Undefined command/function 'reins'.
求解决办法。。急啊。。。。。。
[本帖最后由 later 于 2009-4-17 20:54 编辑]