该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
function fitness(pop_size,chrom_size,a,b,y)
%%赋予初始适应度的值
global pop;
global fitness_value;
global A;
global B;
global U;
for i=1:pop_size
for j=1:chrom_size
%%A矩阵为课程分值矩阵
fitness_value(i)=fitness_value(i)+A(pop(i,j),ceil(j/2));%%(位置1)计算每一条染色体的适应度
end
end
%%定义每个老师的初始课时为0
for k=1:pop_size
for kk=1:20
teacher(k,kk)=0;
end
end
%%teacher,每个老师的课时
teacher_total=0;
teacher_avg=0;
for ii=1:pop_size
for jj=1:chrom_size
teacher(ii,pop(ii,jj))= teacher(ii,pop(ii,jj))+C(ceil(jj/2));%%计算染色体中每个老师的课时
teacher_total(ii)=teacher_total(ii)+teacher(ii,pop(ii,jj));%%计算累计课时
end
teacher_avg(ii)=teacher_total(ii)./20;%%计算平均课时
end
for zzz=1:20
newb=newb+B(zzz);%%计算每个老师的时长均值
end
for zzzz=1:pop_size
teacher_avg(zzzz)=teacher_avg(zzzz)-newb;
end
q1=0;%%用以衡量每个老师的课时,限制在合理区间
q2=0;%%用以衡量老师之间的不公平程度,值越大代表该老师的课时时间越不合理
q3=0;
q=0;
for z=1:pop_size
for zz=1:20
if teacher(z,zz)
q1(z,zz)=a*(B(zz)-teacher(z,zz));
end
if teacher(z,zz)>U(zz)
q1(z,zz)=b*(teacher(z,zz)-U(zz));
end
if teacher(z,zz)
q2(z,zz)=y*(B(zz)+teacher_avg(z)-teacher(z,zz));
end
if teacher(z,zz)>B(zz)+teacher_avg(z)
q2(z,zz)=y*(teacher(z,zz)-B(zz)-teacher_avg(z));
end
q3(z,zz)=q1(z,zz)+q2(z,zz);%%每个教师的惩罚值
q(z)=q(z)+q(z,zz);%%累计惩罚值
end
end
for iii=1:chrom_size
fitness_value(iii)= fitness_value(iii)-q(iii);%%适应度
end