甘特图
求解车间调度问题的时候经常会用到甘特图来表示结果,因此,贴出来我经常使用的画甘特图的MATLAB代码
数据格式
这里的EXCEL文件名称是:时间表,Sheet名称是:时间;
数据为5列,从左到右依次是:工件号、工序号、机器号、开始时间、结束时间
注:其中机器号是从0开始的,即 M0、M1 …
MATLAB代码
运行以下MATLAB代码,会在 时间表.xsx 文件中的 时间 Sheet表中读取数据,然后绘图
%% 读取 时间表
time_info = xlsread('时间表.xlsx', '时间');
machine = [];
startTime = [];
durationTime = [];
job = [];
jobOs = [];
for i = 1: size(time_info, 1)
job = [job, time_info(i, 1)];
jobOs = [jobOs, time_info(i, 2)];
machine = [machine, time_info(i, 3) + 1];
startTime = [startTime, time_info(i, 4)];
durationTime = [durationTime, time_info(i, 5) - time_info(i, 4)];
end
machineNum = max(machine);
% 机器名称
str_ = ['''0'''];
for i = 1: machineNum
str_ = [str_, ',''M_{', num2str(i - 1),'}'''];
end
str_=str_(2:length(str_));
end_time = startTime + durationTime;
end_time = max(end_time) + 5;
axis([0 end_time 0 machineNum + 0.8]); % x轴 y轴的范围
set(gca,'xtick', 0: 25: end_time); % x轴的增长幅度
set(gca,'ytick',0: 1: machineNum + 0.8) ; % y轴的增长幅度
set(gca,'box','on');
xlabel('时间','FontName','宋体','Color','black','FontSize',12)
ylabel('机器编号','FontName','宋体','Color','black','FontSize',12,'Rotation',90)
command_line=['yticklabels({',str_,'})'];
eval(command_line);
rec=[0, 0, 0, 0];
for i = 1: length(job)
rec(1) = startTime(i); % 矩形的横坐标
rec(2) = machine(i) - 0.35; % 矩形的纵坐标
rec(3) = durationTime(i); % 矩形的x轴方向的长度
rec(4) = 0.7;
txt = sprintf('J%d-%d', job(i), jobOs(i)); % 显示的文字 J-工件-工序
rectangle('Position',rec,'LineWidth',1,'LineStyle','-','FaceColor',[1 1 1]); % [1 1 1]为白色
text(startTime(i),machine(i),txt,'FontWeight','Bold','FontSize',10);
end
运行效果
修改 rectangle(‘Position’,rec,‘LineWidth’,1,‘LineStyle’,‘-’,‘FaceColor’,[1 1 1]); % [1 1 1]为白色 中的 FaceColor 对应的RGB数组即可 加上任意颜色
权利声明:
未经本人允许,本文所有内容禁止搬运,严禁盗图盗文!
代码传送门
本文代码及各种车间调度问题可咨询:
(1)扣扣:3249992049
(2)链接:https://pan.baidu.com/s/1L-Z3-86zBG2vWpV8jKSVzg 提取码:2whu