一. 目的
原始的测试案例数据(如下图所示)
想要的是一个存放工件,工件工序,加工机器和对应的加工时间的矩阵(如下图所示)
二. 流程图
三. 实现思路
1. 把txt文件里面的测试案例的数据导入到matlab中
filename = 'Mk03.txt';
M = dlmread(filename);
2. 对M进行处理获取到测试案例的相关信息
工件数量:jobQuantity
机器数量:machQuantity
总工序数:totalProcQuantity
存放最终数据的矩阵:data
并且将data第三列到最后列的数据设置为NaN
代码如下:
jobQuantity = M(1,1); % 工件数量
machQuantity = M(1,2); % 机器数量
totalProcQuantity = sum(M(2:jobQuantity+1,1)); % 总的工序数量
data = zeros(totalProcQuantity, machQuantity+2); % 存放最终数据的矩阵
data(:,3:machQuantity+2) = NaN; % 将data第三列到最后列的数据设置为NaN
3. 从M第二行开始,依次读取数据,并且存放到data矩阵相应的位置上
第一层循环
M的行数循环
第二层循环
工序总数的循环(对应的是data里面的行数)
第三层循环
每一工序对应的可选机器位置的循环
代码如下:
beforeProcQuantity = 1; % 循环时记录工序数量的变量(起始)
for i = 2 : jobQuantity+1 % 获取到M的的二行(第一个工件的相关信息)
procQuantity = M(i,1); % 获取当前工件的工序数量
afterProcQuantity = beforeProcQuantity + procQuantity -1; % 更新循环时记录工序数量的变量(终止)
p = 1; % 记录每个工件工序的变量
k = 2 % 记录M中工序可选机器数所在的位置
for j = beforeProcQuantity : afterProcQuantity
% 更新data里面前两列的数据(工件号和工序号)
data(j, 1) = i-1; % 工件号
data(j, 2) = p; % 工序号
p = p + 1;
% 更新每一行工序可选的机器和对应的时间
optMachine = M(i,k); % 记录工序的可选机器数量
for l = k + 1 : 2 :k + optMachine * 2
switch M(i,l)
case 1
data(j, 3) = M(i,l+1);
case 2
data(j, 4) = M(i,l+1);
case 3
data(j, 5) = M(i,l+1);
case 4
data(j, 6) = M(i,l+1);
case 5
data(j, 7) = M(i,l+1);
case 6
data(j, 8) = M(i,l+1);
case 7
data(j, 9) = M(i,l+1);
case 8
data(j, 10) = M(i,l+1);
otherwise
disp('出错了!!');
end
end
k = k + optMachine * 2 + 1; % 更新M中工序可选机器数所在的位置
end
beforeProcQuantity = afterProcQuantity+1; % 更新循环时记录工序数量的变量(起始)
end