Matlab画机器作业甘特图(区间数)
程序员文章站
2022-05-22 12:41:02
...
Matlab画机器作业甘特图(区间数)
Input:
job_array: 工件编号
XX: 工序排序串
YY:机器分配串
ST:对应工序的开始时间
PT:对应工序的操作时间
fit: 适应值度值
TITLE :甘特图标题
input example:
job_array: 1 2 3
XX:3 1 3 2 1 2 2 3 1
YY:2 1 2 3 1 1 1 2 3
ST:
0 0 2 0 1 2 4 4 2
0 0 5 0 3 5 8 10 5
PT:
2 1 2 1 1 2 1 1 2
5 3 5 2 2 3 2 4 4
fit:5 14
TITLE :‘FJSP’
%% 个体甘特图
function round_GanntGraf(job_array,XX,YY,ST,PT,fit,TITLE)
%job_array--工件列表,
%XX---一条染色体,
%YY-----解码后的机器序列,
%ST-----对应工序的开始时间,
%PT-----对应工序的操作时间
%fit----适应值度值
num_j=max(job_array);
num_m=max(unique(YY));
num_op=numel(XX);%总工序数
fit_n=floor(log10(fit(2)))+1;%fit个数,根据fit值大小确定甘特图X轴上界
fit_str=num2str(fit(2));
if numel(fit_str)>1
if str2double(fit_str(2))>=5
maxX=(10^(fit_n-1))*(str2double(fit_str(1))+1);
elseif str2double(fit_str(2))<5
maxX=(10^(fit_n-1))*(str2double(fit_str(1)))+(10^(fit_n-2)*5);
end
elseif numel(fit_str)==1
maxX=(10^(fit_n-1))*(str2double(fit_str(1))+1);
end
% xlim([0,30]);ylim([0 3.5]);
figure(2);
axis([0,maxX,0,num_m+0.5]);%x轴 y轴的范围
set(gca,'xtick',0:maxX/10:maxX) ;%x轴的增长幅度
set(gca,'ytick',0:1:num_m+0.5) ;%y轴的增长幅度
xlabel('Processing Time','FontWeight','Bold','FontSize',15),ylabel('Machine Number','FontWeight','Bold','FontSize',15);%x轴 y轴的名称
% title('最佳调度(最短完工时间为60)');%图形的标题
%x轴 对应于画图位置的起始坐标x
%length 对应于每个图形在x轴方向的长度
%y轴 对应于画图位置的起始坐标y (设备号)
%工序号,可以根据工序号选择使用哪一种颜色
% %
color=[
0.9503 0.1669 0.4071
0.0077 0.9092 0.5791
0.4863 0.7758 0.4187
0.8415 0.0616 0.8317
0.6903 0.7108 0.3491
0.7798 0.5519 0.8137
0.5925 0.4321 0.9752
0.6505 0.1452 0.2776
0.7458 0.2480 0.8866
0.5382 0.2022 0.5197
0.4124 0.0269 0.5633
0.9119 0.3039 0.0125
0.9423 0.0790 0.2112
0.4246 0.3765 0.3313
0.9489 0.6026 0.1701
0.9225 0.8885 0.0108
0.5905 0.5817 0.5152
0.9253 0.0745 0.3962
0.9503 0.1669 0.4071
0.0077 0.9092 0.5791
0.4863 0.7758 0.4187
0.8415 0.0616 0.8317
0.6903 0.7108 0.3491
0.7798 0.5519 0.8137
0.5925 0.4321 0.9752
0.6505 0.1452 0.2776];
n_color=zeros(num_op,3);
for i=1:num_j
counter_j(i)=1;%记录每个工件的工序
end
for i=1:length(XX)
n_color(i,:)=color(i,:);
end
tri1=[0 0
0 0
0 0];
tri2=[0 0
0 0
0 0];
f1=[1 2 3];
f2=[1 2 3];
for i = 1:num_op
job=XX(i);
pos_j=find(job_array==job);
tri1(1,1)=ST(1,i);
tri1(1,2)=YY(i);
tri1(3,1)=ST(1,i)+PT(1,i);
tri1(3,2)=YY(i);
tri1(2,1)=(tri1(1,1)+tri1(3,1))/2;
tri1(2,2)=YY(i)+0.1;
tri2(1,1)=ST(2,i);
tri2(1,2)=YY(i);
tri2(3,1)=ST(2,i)+PT(2,i);
tri2(3,2)=YY(i);
tri2(2,1)=(tri2(1,1)+tri2(3,1))/2;
tri2(2,2)=YY(i)-0.1;
patch('Faces',f1,'Vertices',tri1,'FaceColor',n_color(i,:),'LineWidth',0.5,'LineStyle','-')
hold on
patch('Faces',f2,'Vertices',tri2,'FaceColor',n_color(i,:),'FaceAlpha',.3,'LineWidth',0.5,'LineStyle','-')
text((tri1(2,1)+tri2(2,1))/2,(YY(i))-0.15,txt,'FontWeight','Bold','FontSize',15,'Color',n_color(i,:));
counter_j(pos_j(1))=counter_j(pos_j(1))+1;
end
title(TITLE,'FontWeight','Bold','FontSize',15);
hold on;
grid on;
end
此代码为区间甘特图Matlab函数,需另存为函数文件调用。
结果图:
上一篇: unity 鼠标实时画箭头
下一篇: Python画调度甘特图
推荐阅读