最近实验室一个同学研究分时电价下的车间调度问题,我看了她的程序后对电价矩阵的生成进行了修改,原来的代码太长太多余了。作为一个初学者边百度边想办法解决的,欢迎大家交流,提出意见。
该函数的目标是通过每个时段的电价
c=[1 5 1 5 1]
以及每个时段的长度
tz=[20 20 20 20 20]
计算出电价矩阵,即[1 1 1 ...(20个1) 5 5 5...(20个5)...]
最初的代码如下:
c=[1 5 1 5 1];
tz=[20 20 20 20 20];
[~,tzn]=size(tz);
ttz(1)=tz(1);
cc=ones(1,sum(tz));
for i=2:tzn
ttz(i)=ttz(i-1)+tz(i);
end
ttz;
for i=1:ttz(1)
cc(i)=c(1)*cc(i);
end
for i=ttz(1)+1:ttz(2)
cc(i)=c(2)*cc(i);
end
for i=ttz(2)+1:ttz(3)
cc(i)=c(3)*cc(i);
end
for i=ttz(3)+1:ttz(4)
cc(i)=c(4)*cc(i);
end
for i=ttz(4)+1:ttz(5)
cc(i)=c(5)*cc(i);
end
修改后为:
c=[1 5 1 5 1];
tz=[20 20 20 20 20];
[~,tzn]=size(tz); %获取tz的列数,忽略行数
for i=1:tzn
cc=[cc,c(i)*ones(1,tz(i))]; %为cc赋值i时段的电价
end
提示未预分配内存,所以由将其改为:
c=[1 5 1 5 1];
tz=[20 20 20 20 20];
[~,tzn]=size(tz); %获取tz的列数,忽略行数
cc=zeros(1,sum(tz)); %用于储存每个时刻的电价
for i=1:tzn
en=sum(tz(:,1:i)); %找到赋值的终点
st=en-tz(:,i)+1; %找到赋值的起点
cc(:,st:en)=c(i)*ones(1,tz(i)); %为cc赋值i时段的电价
end