% 2.2.3 计算目标函数值
% calobjvalue.m函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。
%遗传算法子程序
%Name: calobjvalue.m
%实现目标函数的计算
function [objvalue]=calobjvalue(pop)
%首先设置罚值(由约束条件转化而来)淘汰不低质种群(消除不可行解),再求可行种群的目标函数值
%*********首先引入由问题一提供的数据表得到的老师和学生班的对应关系矩阵tc1***********************
[NUMERIC,TXT,RAW]=xlsread('yuanshuju');
tc1=NUMERIC;
[px1,py1]=size(pop);
newin1=1;
pop1=zeros(size(pop))
%*****************第一轮淘汰************约束条件一(教室容量要求转化)
for i=1:px1
for j=1:py1
r=0;
T=0;
t=0;
if pop(i,j)=='1'
[r1,T1,t1]=bianma(j); %i种群j基因解码(得出对应的教室r,教师T,课时t)
[class1,studentnumber1,weeklesson1,droom1]=tc(T1,tc1'); %得出T教师对应的class1,studentnumber1,weeklesson1,droom1
[rnumber1,rongliang1,dr1]=jiaoshixinxi(r1); %rnumber教室编码
%rongliang教室容量
%dr教室功能指数
if studentnumber1<=rongliang1 %教室容量约束,满足要求者进入下一代
pop1(newin1,:)=pop(i,:);
newin1=newin1+1;
end
end
end
end
%***************第二轮淘汰***************特殊教室使用资源约束
[px2,py2]=size(pop1);
r2=zeros(px2,py2);
T2=zeros(px2,py2);
t2=zeros(px2,py2);
rnumber2=zeros(px2,py2);
rongliang2=zeros(px2,py2);
dr2=zeros(px2,py2);
for i=1:py2
for j=1:px2
if pop1(i,j)=='1'
[r2(j,i),T2(j,i),t2(j,i)]=bianma(i);
[rnumber2(j,i),rongliang2(j,i),dr2(j,i)]=jiaoshixinxi(r2(j,i));
end
end
end
%****对同一次课使用的多媒体教师进行约束
sumdr=zeros(161,40); %将dr2分成161*40的矩阵,以便于求出
droomnumber2=[9,16,20,21,23,25]; %多媒体教室编号
for k=1:px2
for i=1:length(droomnumber2)
%提取编码
j=droomnumber2(i)*6440;
k2=1;
while j<(droomnumber2(i)+1)*6440
newdr21(i,k2)=dr2(k,j);
k2=k2+1;
j=j+1;
end
newdr2=newdr21(i,:);
sumdr2=zeros(40);
for ii=1:40
for jj=1:161
sumdr2(ii)=sumdr2+newdr2(ii+(jj-1)*40);
end
end
iii=0;
while ii>0
if sumdr2(ii)<6 %得到的同一次课同时占用的多媒体教室不能超过总的多媒体资源(6)
iii=iii+1;
end
ii=ii-1;
end
if iii==length(sumdr2)
pop2(k,:)=pop1(k,:);
end
end
end
%***************第3轮淘汰***************任一课时使用的总教室数不超过学校拥有的总量
[px3,py3]=size(pop2);
r3=zeros(px3,py3);
T3=zeros(px3,py3);
t3=zeros(px3,py3);
tongjir3=zeros(px3,py3);
for i=1:py3
for j=1:px3
if pop2(i,j)=='1'
[r3(j,i),T3(j,i),t3(j,i)]=bianma(i);
%先将r3中的非0值转化为1,从而将r3转化为一个(0,1)矩阵,便于统计
tongjir3(j,i)=1;
end
end
end
for k3=1:px3
sumr3=0;
for i=1:40
for j=1:27*161
sumr3=sumr3+tongjir3(k3,i+(j-1)*40);
end
end
if sumr3<27
pop3(k3,:)=pop2(k3,:);
end
end
%*******************计算目标函数******************
[px4,py4]=size(pop3);
r4=zeros(px4,py4);
T4=zeros(px4,py4);
t4=zeros(px4,py4);
class4=zeros(px4,py4);
studentnumber4=zeros(px4,py4);
weeklesson4=zeros(px4,py4);
droom4=zeros(px4,py4);
rnumber4=zeros(px4,py4);
rongliang4=zeros(px4,py4);
dr4=zeros(px4,py4);
objvalue=zeros(px4);
for i=1:px4
mubiao1=0;
mubiao2=0;
mubiao3=0;
mubiao5=0;
for j=1:py4
if pop3(i,j)=='1'
[r4(i,j),T4(i,j),t4(i,j)]=bianma(j);
[class4(i,j),studentnumber4(i,j),weeklesson4(i,j),droom4(i,j)]=tc(T4(i,j),tc1');
[rnumber4(i,j),rongliang4(i,j),dr4(i,j)]=jiaoshixinxi(r4(i,j));
%目标函数一max
%输出课程权值(教学效果)
[y,y1]=lessonname(T4(i,j));%y课程名,y1课程权值
mubiao1=mubiao1+shijianxishu(t4(i,j))*y1/15;%除以总权重“15”是将得到的时间系数化为(0,1)之间的数
%目标函数二max(教学资源的充分利用)
mubiao2=mubiao2+studentnumber4(i,j)/rongliang4(i,j);
%目标函数五min(可见学生流动量最少)一天中相邻课时上课的学生就是相邻课时的学生流动量
if t4(i,j)/8==1
mubiao5=mubiao5+0;
elseif t4(i,j)/8==2
mubiao5=mubiao5+0;
elseif t4(i,j)/8==3
mubiao5=mubiao5+0;
elseif t4(i,j)/8==4
mubiao5=mubiao5+0;
elseif t4(i,j)/8==5
mubiao5=mubiao5+0;
else
mubiao5=mubiao5+(studentnumber4(i,j)+studentnumber4(i,j+1))/7112;%7112为统计的个班级的学生认输总和
end
end
objvalue(i)=mubiao1+mubiao2-mubiao5;%计算目标函数值
end
%目标函数三min(同一课时使用的教室最少,且未占用教室的容量越大越好)
%******首先求出同一课时使用的教室(因为是求最小值,因此叠加到总目标函数时是减而不是加)
for iiii=1:40
for jjjj=1:27*161
mubiao3=mubiao3+rongliang4(i,iiii+(jjjj-1)*40)/1077;%1077各种容量教室的容量和
end
end
objvalue(i)=-mubiao3;
end
%目标函数四min(同一课程尽量只用一个教室)
%目标函数六min(相邻授课间隔尽量均匀):以相隔课时差的平方为目标
r41=zeros(px4,py4);
T41=zeros(px4,py4);
t41=zeros(px4,py4);
for i=1:px4
for j=1:py4
if pop3(i,j)=='1'
[r41(i,j),T41(i,j),t41(i,j)]=bianma(j);
end
end
mubiao6=0;
for j=2:py4
for jj=1:j
if T41(i,j)==T41(i,jj)
mubiao6=mubiao6+(jj-j)^2;
end
end
end
objvalue(i)=-mubiao6/1600;
end
for k4=1:px4
mubiao4=0;
for i=1:40
for j=1:27*161
if r41(k4,i+j*40)==r41(k4,i+(j-1)*40)
mubiao4=mubiao4+1;
end
end
end
objvalue(i)=-mubiao4/27;%27是总的教室资源,用同一课程用的教室数量除以总的教室数量得到该门课程的占用率,取极小
end
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
排课算法MATLAB实现.zip (37个子文件)
moni2程序
moni21.asv 1KB
calfitvalue.m 296B
mainprog.m 1KB
initpop.m 835B
yuanshuju.xls 21KB
shijianxishu.asv 279B
calobjvalue.asv 6KB
selection.m 1KB
bianma1.m 162B
yueshu1.m 942B
yueshu1.asv 881B
weeklesson.asv 2KB
jiaoshixinxi.asv 311B
moni22.asv 3KB
moni22.m 3KB
tc.asv 2KB
bianma.asv 351B
lessonname.asv 3KB
initpop.asv 926B
decodechrom.m 629B
jiaoshixinxi.m 528B
bianma.m 318B
selection.asv 1KB
decodebinary.m 548B
shijianxishu.m 721B
crossover.asv 2KB
moni21.m 1KB
tc.m 325B
mutation.m 2KB
calobjvalue.m 6KB
best.m 313B
lessonname.m 3KB
mutation.asv 2KB
bianma1.asv 161B
shujubiao.m 3KB
crossover.m 2KB
shujubiao.asv 3KB
共 37 条
- 1
资源评论
- 川川菜鸟2021-12-14搬的代码,也没说明,无语
wenming0903
- 粉丝: 3
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功