for i=1:SH if(s2(i)==1) mt{mm(i)}=mt{mm(i)}+time{s1(i),s2(i),mm(i)};%累计计算每一台机器的加工时间 finish{s1(i),s2(i)}= mt{mm(i)};%改工件当前工序的完成时间是当前机器的累计时间 total=total+time{s1(i),s2(i),mm(i)};%总的机器负载 else if(~com(mt{mm(i)},finish{s1(i),s2(i)-1}))%如果机器最大完成时间小于该工序上一步完成时间 mt{mm(i)}= finish{s1(i),s2(i)-1}+time{s1(i),s2(i),mm(i)};%一定是去上一步完成时间和该机器结束加工时间的最大者 finish{s1(i),s2(i)}= mt{mm(i)}; total=total+time{s1(i),s2(i),mm(i)}; else%如果机器完成时间大于等于该工件上一个工序的完成时间 mt{mm(i)}= mt{mm(i)}+time{s1(i),s2(i),mm(i)}; finish{s1(i),s2(i)}= mt{mm(i)}; total=total+time{s1(i),s2(i),mm(i)}; end end end
时间: 2024-04-27 19:22:08 浏览: 6
这段代码是一个关于分布式混合流水车间调度问题的MATLAB实现。具体来说,该代码通过累计计算每一台机器的加工时间,更新工件当前工序的完成时间,计算总的机器负载等方式,对车间调度进行求解。
其中,变量SH表示车间中机器数量,s1、s2、mm表示车间中的工件、工序和机器,time表示工件在不同工序和机器上的加工时间,mt、finish表示机器的累计时间和工件当前工序的完成时间。通过对每个工件的加工工序、加工时间、机器设备等因素进行建模,使用离散事件仿真的方式模拟车间生产过程,然后使用遗传算法、模拟退火等优化算法对车间调度进行求解,以达到最优化的生产效果。
总之,该段代码实现了对分布式混合流水车间调度问题的求解,为车间生产提供了科学的决策支持。
相关问题
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表示每个工序对应的机器。
s1=pchrom; 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
这段代码是用来将个体中的工序顺序映射到对应的机器上的。具体来说,代码将个体中的每个工序映射到一个机器上,生成一个新的个体。其中,s1表示个体中的工序顺序,s2表示映射后的机器顺序,p表示每个工序对应的机器已经分配了多少次。对于每个工序,代码首先将其对应的机器分配次数加1,然后将新的机器顺序记录在s2中。最终,代码将映射后的机器顺序保存在s2中,返回给调用者。