function draw(pro_m,mac_m)%采用传统的双层解码方式 求最大完工时间makespan 表示最后一个完成工序的时间 global N H SH TM time; e=[0 0 0]; O_Font='Bookman Old Style'; n_Font='Times New Roman'; number_size=8; O_size=9; dot_size=6; O_up=2.2; dot_up=1.8;
时间: 2024-03-04 18:51:02 浏览: 14
这段代码是一个 MATLAB 函数,用于绘制车间调度问题的甘特图。其中,pro_m 和 mac_m 分别表示生产任务矩阵和机器任务矩阵,N 和 H 分别表示生产任务数和机器数,SH 和 TM 分别表示生产任务的开始时间和完成时间,time 表示总的生产时间。
具体解码方式是双层解码,通过计算每个任务在每台机器上的完成时间,选择最早完成的时间作为任务的完成时间。最终求得的 makespan 表示最后一个完成工序的时间。
函数中定义了一些绘图相关的参数,如字体、字号、线条大小等,用于美化甘特图的显示效果。
需要注意的是,这段代码只是绘图部分,需要先通过其他算法求解车间调度问题的最优解,然后将最优解传入该函数进行绘图。
相关问题
function [fit1,fit2]=fit(pro_m,mac_m)%采用传统的双层解码方式 求最大完工时间makespan 表示最后一个完成工序的时间 global N H SH TM time; e=[0 0 0]; finish={}; for i=1:N%初始化完成时间矩阵 for j=1:H(i) finish{i,j}=e; end end mt=cell(1,N); for i=1:N%初始化机器最大完成时间数组 mt{i}=e; end s1=pro_m; s2=zeros(1,SH); p=zeros(1,N); for i=1:SH p(s1(i))=p(s1(i))+1;%记录过程是否加工完成 完成一次加一 s2(i)=p(s1(i));%记录加工过程中,工件的次数 end for i=1:SH t1=s1(i);%记录到当前是那个工件 t2=s2(i);%记录当前工件是加工到第几次 mm(i)=mac_m(1,sum(H(1,1:t1-1))+t2);%提取该工序该次加工的机器选择,因为机器码的排列表示该工件第几次加工所选的机器,是一段表示一个工件 end
这是一段MATLAB代码,根据变量名和注释,这段代码应该是实现了一个双层解码方式来求解最大完工时间的问题。其中,pro_m表示工件加工顺序,mac_m表示每个工件每个工序选择的机器,N表示工件数量,H表示每个工件的工序数量,SH表示总的工序数量,e表示初始时间,finish表示每个工件每个工序的完成时间,mt表示每个机器的最大完成时间,s1表示当前工件加工的顺序,s2表示当前工件加工的次数,p表示每个工件完成的次数,mm表示每个工序对应的机器。
绘制甘特图函数 function plot_gantt_chart(job_num, machine_num, start_time, makespan) matlab编写
好的,下面是一个简单的 Matlab 实现:
```matlab
function plot_gantt_chart(job_num, machine_num, start_time, makespan)
% 计算每个作业的结束时间
end_time = start_time + makespan;
% 绘制甘特图
for i = 1:machine_num
y = [i + 0.5, i + 1.5];
x = [start_time(i), end_time(i)];
patch(x([1 2 2 1]), y([1 1 2 2]), 'b', 'FaceAlpha', 0.5);
end
% 设置坐标轴标签和范围
ylim([0.5, machine_num + 0.5]);
xlim([0, makespan]);
xlabel('Time');
ylabel('Machine');
set(gca, 'YTick', 1:machine_num);
yticklabels(cellstr(strcat('Machine', num2str((1:machine_num)'))));
% 设置作业名称
for i = 1:job_num
text(0, i, strcat('Job', num2str(i)), 'HorizontalAlignment', 'right');
end
end
```
其中,`job_num` 表示作业数量,`machine_num` 表示机器数量,`start_time` 表示每个作业在各个机器上的开始时间(一个一维数组或行向量),`makespan` 表示所有作业完成的总时间。函数中使用了 Matlab 的 `patch` 函数来绘制矩形,实现甘特图的效果。你可以根据自己的需要进行修改。