欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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函数,需另存为函数文件调用。

结果图:
Matlab画机器作业甘特图(区间数)

相关标签: Matlab 甘特图