%计算个体适应度
%思路:先计算每行1-10的个数,再判断每行是否满足约束条件
function [fitvalue]=calfitvalue(pop,popsize,chromlength)
[px,py]=size(pop);
%A=rand(px,py); %暂且设为随机数
A=[0.8,0.95,0.75,0.6,0.7,0.8,0.6,0.7,0.5,0.2,0.0,0.2,0.3,0.4,0.3;
0.95,0.7,0.6,0.8,0.75,0.9,0.85,0.75,0.7,0.8,0.9,0.8,0.3,0.2,0.4;
0.2,0.0,0.3,0.3,0.4,0.0,0.5,0.7,0.8,0.6,0.4,0.5,0.6,0.5,0.9;
0.2,0.5,0.6,0.9,0.5,0.4,0.4,0.6,0.4,0.8,0.4,0.3,0.5,0.6,0.4;
0.9,0.6,0.5,0.4,0.6,0.3,0.8,0.5,0.3,0.4,0.6,0.2,0.5,0.5,0.3;
0.4,0.5,0.3,0.2,0.5,0.6,0.7,0.3,0.6,0.6,0.9,0.8,0.5,0.4,0.6;
0.7,0.6,0.4,0.6,0.3,0.5,0.3,0.6,0.6,0.8,0.9,0.8,0.5,0.3,0.6;
0.8,0.7,0.4,0.4,0.6,0.3,0.5,0.6,0.7,0.4,0.6,0.6,0.3,0.5,0.7;
0.7,0.5,0.3,0.4,0.5,0.7,0.7,0.3,0.5,0.7,0.9,0.3,0.5,0.7,0.6;
0.6,0.4,0.3,0.5,0.5,0.6,0.7,0.3,0.4,0.8,0.3,0.5,0.5,0.2,0.5];
fitvalue=zeros(1,px);
m1=zeros(px,1);m2=zeros(px,1);m3=zeros(px,1);m4=zeros(px,1);m5=zeros(px,1);
m6=zeros(px,1);m7=zeros(px,1);m8=zeros(px,1);m9=zeros(px,1);m10=zeros(px,1);
for i=1:px
for j=1:py
if pop(i,j)==1
m1(i)=m1(i)+1;
end
if pop(i,j)==2
m2(i)=m2(i)+1;
end
if pop(i,j)==3
m3(i)=m3(i)+1;
end
if pop(i,j)==4
m4(i)=m4(i)+1;
end
if pop(i,j)==5
m5(i)=m5(i)+1;
end
if pop(i,j)==6
m6(i)=m6(i)+1;
end
if pop(i,j)==7
m7(i)=m7(i)+1;
end
if pop(i,j)==8
m8(i)=m8(i)+1;
end
if pop(i,j)==9
m9(i)=m9(i)+1;
end
if pop(i,j)==10
m10(i)=m10(i)+1;
end
end
end
%for i=1:px
%for j=1:py
% if ((m1(i)>2) || (m2(i)>2) || (m3(i)>2) || (m4(i)>2) || (m5(i)>2) || (m6(i)>2) || (m7(i)>2) || (m8(i)>2) ||(m9(i)>2) || (m10(i)>2))
% fitvalue(i)=-0.01;
% pop(i,:)=randint(1,chromlength,[1,10]);
% else
% fitvalue(i)=fitvalue(i)+A(pop(i,j),j);
% end
%end
%end
for i=1:px
for j=1:py
m=min(0,abs(3-m1(i)))+min(0,abs(3-m2(i)))+min(0,abs(3-m3(i)))+min(0,abs(3-m4(i)))+min(0,abs(3-m5(i)))+ min(0,abs(3-m6(i)))+min(0,abs(3-m7(i)))+min(0,abs(3-m8(i)))+min(0,abs(3-m9(i)))+min(0,abs(3-m10(i)));
fitvalue(i)=fitvalue(i)+A(i,pop(i,j))-10000*m;
end
end
- 1
- 2
前往页