【车间调度】基于卷积神经网络的柔性作业车间调度问题的两阶段算法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🌈3 Matlab代码实现

🎉4 参考文献


💥1 概述

该文提出一种基于卷积神经网络的有效两阶段算法,以求解具有机器故障的柔性作业车间调度问题(FJSP)。建立了以最大完成时间和鲁棒性为目标的双目标动态柔性作业车间调度问题(DFJSP)模型。提出了CNN构建的预测模型,并开发了一个名为RMn的替代指标来评估鲁棒性。实验结果表明,所提两阶段算法对求解DFJSP有效,RMn能够更快、更高效、更准确地评估调度的鲁棒性。

📚2 运行结果

 

 部分代码:
 

function     [makespan1,RMn]=caltimen(S,pop)

Jm=pop.Jm;
T=pop.T;
PNumber=pop.PNumber;
MPNumber=pop.MPNumber;
JmNumber=pop.JmNumber;
WNumber=pop.WNumber;
Number=pop.Number;
Number_s = cumsum(Number);
NINDA=1;       
NINDB=0;        
%%
S1=S(1,1:WNumber); 
MU=zeros(PNumber,MPNumber);
PJT=zeros(PNumber,MPNumber);

s=1;
for i=1:PNumber      
    val=Number(i);
    for j=1:val      
        M=S1(1,s);
        s=s+1;
        Temp1=Jm{i,j};
        m=Temp1(M);   
        MU(i,j)=m;
        
        Temp2=T{i,j};
        t=Temp2(M);   
        PJT(i,j)=t;
        
    end
end

%%
S2=S(1,(1+WNumber):2*WNumber);
temp=zeros(1,PNumber);     
P=zeros(1,WNumber);    

for i=1:WNumber
    temp(S2(i))=temp(S2(i))+1;
    P(i)=S2(i)*100+temp(S2(i));      
end


%% 
TM=zeros(1,JmNumber);          
TP=zeros(1,PNumber);          
PVal=zeros(2,WNumber);       

t1=zeros(JmNumber,WNumber);    
t2=zeros(JmNumber,WNumber);   
TSE=zeros(5*JmNumber,WNumber);     
MPN=zeros(1,JmNumber);     

%% 
for ii=1:WNumber

    if ii==1
        PNval=P(1,ii);
        a=(mod(PNval,100));     
        b=((PNval-a)/100);      

        m=MU(b,a);

        t=PJT(b,a);

        TMval=TM(1,m);    
        TPval=TP(1,b);       
        

        if TMval>TPval
            val=TMval;

        else
            val=TPval;
        end
        

        PVal(1,ii)=val;         
        PVal(2,ii)=val+t;    

        TM(1,m)=PVal(2,ii);  
        TP(1,b)=PVal(2,ii);   
        MPN(1,m)=MPN(1,m)+1;  
        t1(m,ii)=TM(1,m)-t;   
        t2(m,ii)=TM(1,m);     
        
        TSE(5*m-4,1)=PNval;         
        TSE(5*m-3,1)=PVal(1,1);      
        TSE(5*m-2,1)=PVal(2,1);      
        TSE(5*m-1,1)=0;              
        TSE(5*m-0,1)=PVal(1,1);     
        
    else

        PNval=P(1,ii);
        a=(mod(PNval,100)); 
        b=((PNval-a)/100);  

        m=MU(b,a);

        t=PJT(b,a);

        TMval=TM(1,m);      
        TPval=TP(1,b);       
        TSEok=0;

        %% 
        for w=1:MPN(1,m)
            TSval=TSE(5*m-1,w);   
            TEval=TSE(5*m,w);     
            SJM=max(TSval,TPval);
            if (SJM+t<=TEval)
                TSEok=1;
                
                
                if TSval<=TPval
                  
                    PVal(1,ii)=TPval;                 
                    PVal(2,ii)=TPval+t;               

                    t1(m,ii)=PVal(2,ii)-t;        
                    t2(m,ii)=PVal(2,ii);          
                   
                    TP(1,b)=PVal(2,ii);        
                    MPN(1,m)=MPN(1,m)+1;       
                    TSE(5*m-4:5*m,w+1:WNumber)=TSE(5*m-4:5*m,w:WNumber-1);
                    TSE(5*m-4,w)=PNval;                  
                    TSE(5*m-3,w)=PVal(1,ii);             
                    TSE(5*m-2,w)=PVal(2,ii);             
                    if w-1==0
                        TSE(5*m-1,w)=0;
                    else
                        TSE(5*m-1,w)=TSE(5*m-2,w-1);         
                    end
                    TSE(5*m,w)=PVal(1,ii);               
                    TSE(5*m-1,w+1)=PVal(2,ii);          
                    
                else
                    PVal(1,ii)=TSval;                 
                    PVal(2,ii)=TSval+t;               
                  
                    t1(m,ii)=PVal(2,ii)-t;        
                    t2(m,ii)=PVal(2,ii);          
                   
                    TP(1,b)=PVal(2,ii);       
                    MPN(1,m)=MPN(1,m)+1;       
                  
                    TSE(5*m-4:5*m,w+1:WNumber)=TSE(5*m-4:5*m,w:WNumber-1);
                  
                    TSE(5*m-4,w)=PNval;                  
                    TSE(5*m-3,w)=PVal(1,ii);             
                    TSE(5*m-2,w)=PVal(2,ii);             
                    if w-1==0
                        TSE(5*m-1,w)=0;
                    else
                        TSE(5*m-1,w)=TSE(5*m-2,w-1);          
                    end
                    TSE(5*m,w)=PVal(1,ii);               
                    
                    TSE(5*m-1,w+1)=PVal(2,ii);          
                end
            end
            if TSEok==1
                break
            end
        end
        if  TSEok~=1
           
            if TMval<=TPval
                PVal(1,ii)=TPval;                 
                PVal(2,ii)=TPval+t;                
                
                TM(1,m)=PVal(2,ii);        
                TP(1,b)=PVal(2,ii);        
                MPN(1,m)=MPN(1,m)+1;      
                t1(m,ii)=TM(1,m)-t;        
                t2(m,ii)=TM(1,m);          
                
                TSE(5*m-4,MPN(1,m))=PNval;                  
                TSE(5*m-3,MPN(1,m))=PVal(1,ii);             
                TSE(5*m-2,MPN(1,m))=PVal(2,ii);            
                if MPN(1,m)==1
                    TSE(5*m-1,MPN(1,m))=0;
                else
                    TSE(5*m-1,MPN(1,m))=TSE(5*m-2,MPN(1,m)-1);  
                end
                TSE(5*m,MPN(1,m))=PVal(1,ii);               

            else
                PVal(1,ii)=TMval;                  
                PVal(2,ii)=TMval+t;               
              
              
                TM(1,m)=PVal(2,ii);
                TP(1,b)=PVal(2,ii);
                MPN(1,m)=MPN(1,m)+1;  
                t1(m,ii)=TM(1,m)-t;     
                t2(m,ii)=TM(1,m);         
                
            
                TSE(5*m-4,MPN(1,m))=PNval;                 
                TSE(5*m-3,MPN(1,m))=PVal(1,ii);             
                TSE(5*m-2,MPN(1,m))=PVal(2,ii);             
                if MPN(1,m)==1
                    TSE(5*m-1,MPN(1,m))=0;
                else
                    TSE(5*m-1,MPN(1,m))=TSE(5*m-2,MPN(1,m)-1);  
                end
                TSE(5*m,MPN(1,m))=PVal(1,ii);              
            end
        end
    end
end

makespan1=max(max(PVal));

%% float time ftc

TSE_1 = zeros(3*JmNumber,WNumber);
TSE_2 = zeros(4,WNumber);       
kongxitime1=zeros(2,WNumber);  
Tlates = zeros(2,WNumber);          
ftc = zeros(2,WNumber);          
Avecft = zeros(2,WNumber);     

T = PVal(2,:)-PVal(1,:);
earlytime = [P;PVal(1,:);T];
earlytime = sortrows(earlytime')'; 

b1 = zeros(1,JmNumber);
for i = 1:JmNumber
    TSE1 = TSE(5*i-4,:);
    a1 = find(TSE1==0);
    b1(i) = a1(1)-1;
end
for k = 1:JmNumber
    for w = 1:b1(k)-1
        TSE_1(3*k-2,w)=TSE(5*k-4,w);
        TSE_1(3*k-1,w)=TSE(5*k-1,w+1);
        TSE_1(3*k,w)=TSE(5*k,w+1);
        TSE_1(3*k-2,b1(k))=TSE(5*k-4,b1(k));
        TSE_1(3*k-1,b1(k))=TSE(5*k-2,b1(k));
        TSE_1(3*k,b1(k))=makespan1;
    end
end
b1_S = cumsum(b1);
b1_S = [0,b1_S];
for j = 1:JmNumber
    TSE_2(1,b1_S(j)+1:b1_S(j+1)) = TSE_1(3*j-2,1:b1(j));
    TSE_2(2,b1_S(j)+1:b1_S(j+1)) = TSE_1(3*j-1,1:b1(j));
    TSE_2(3,b1_S(j)+1:b1_S(j+1)) = TSE_1(3*j,1:b1(j));
end
TSE_2 = sortrows(TSE_2')';
TSE_2(4,:) = TSE_2(3,:)-TSE_2(2,:);


Tlates(1,:) = TSE_2(1,:);
for n=1:WNumber
    if TSE_2(4,n)==0
        Tlates(2,n) = earlytime(2,n);
    else
        if ismember(n,Number_s)==1    
            kongxitime1(1,n) = TSE_2(1,n);
            kongxitime1(2,n) = TSE_2(4,n);
        else
            if TSE_2(3,n)<= earlytime(2,n+1)
                Tlates(2,n) = TSE_2(3,n)-earlytime(3,n);
            else
                Tlates(2,n) = earlytime(2,n+1)-earlytime(3,n);
            end
        end
    end
end

ftc(1,:) = Tlates(1,:);
ftc(2,:) = Tlates(2,:)-earlytime(2,:);
col=find(kongxitime1(1,:)~=0);
for m=1:length(col)
    ftc(1,col(m)) = kongxitime1(1,col(m));
    ftc(2,col(m)) = kongxitime1(2,col(m));
end

Avecft(1,:) = ftc(1,:);
xulie=find(ftc(2,:)~=0);
for r=1:length(xulie)
    Avecft(2,xulie(r)) = TSE_2(2,xulie(r))+ftc(2,xulie(r))/2;
end

%% 
Wc = reshape(PJT',1,pop.PNumber*pop.MPNumber);        
Wc(find(Wc==0))=[];
Wtot = sum(Wc);
ejc1 = Wc./Wtot.*ftc(2,:);         

%% Simulate machine breakdown

Tbusy = sum(PJT');
Pbk=Tbusy/Wtot;                
jiqi_0=find(Pbk==max(Pbk(:)));
jiqi=jiqi_0(1);                
 a1=0.5;        %a1=0; 
 a2=1;       %a2=0.5; 
 b1=0.35;      %b1=0.1; 
 b2=0.4;     %b2=0.15;
ts=unifrnd(a1*makespan1,a2*makespan1,1,1);
ts=roundn(ts,0);              
te=unifrnd(b1*Tbusy(jiqi),b2*Tbusy(jiqi),1,1);
te=roundn(te,0);              

%% Calculate the objective function value
Avekcmb=te/2+ts;         
ejc2=(1./exp(abs(Avecft(2,:)-Avekcmb))).*ftc(2,:);   
ej=[ejc1,ejc2];

%% Enter a predictive model
load ('net1-10-10.mat')  
pt=ej'; 
t1=sim(net,pt); 
RMn=t1';

end

🌈3 Matlab代码实现

🎉4 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]Guohui Zhang, Xixi Lu, Xing Liu, Litao Zhang, Shiwen Wei, Wenqiang Zhang (2022) An  two-stage algorithm based on convolutional neural network for flexible job shop scheduling problem

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于改进模因算法的考虑工人安排的分布式柔性作业车间调度问题主要是通过改进模因算法来解决对工人安排的优化问题。柔性作业车间调度问题是一个复杂的组合优化问题,在工人安排过程中需要考虑多个约束条件和目标函数,如最小化工人之间的空闲时间、最大化作业完成时间等。 改进模因算法是一种集成了遗传算法、局部搜索和模因算法思想的进化算法。它通过模仿生物进化过程中基因突变、交叉和选择的方式,对解空间进行搜索和优化。在考虑工人安排的分布式柔性作业车间调度问题中,可以使用改进模因算法来寻找最优工人安排方案。 具体实现上,可以使用Matlab编程语言来实现改进模因算法。首先,需要定义柔性作业车间调度问题的目标函数和约束条件。然后,根据算法流程,初始化种群并计算适应度值。接下来,使用交叉、变异等操作对种群进行进化。每一代进化后,根据适应度值选择新的种群,并更新最优解。重复上述步骤,直到达到停止条件为止。最终,获得最优的工人安排方案,使得目标函数最小化或最大化。 改进模因算法的优势在于其具有较强的全局搜索能力和快速收敛性,可以找到近似最优的解。然而,由于柔性作业车间调度问题的复杂性,算法的性能还取决于问题的规模和约束条件的设定。因此,在实际应用中,需要根据具体情况对算法进行参数调优和问题的精细建模。 总之,基于改进模因算法的考虑工人安排的分布式柔性作业车间调度问题是一个复杂的优化问题。通过使用Matlab编程语言实现改进模因算法,能够有效地求解该问题,得到最优的工人安排方案。 ### 回答2: 基于改进模因算法的考虑工人安排的分布式柔性作业车间调度问题是一个复杂的优化问题。这个问题的目标是在给定的时间段内,合理安排不同工人完成一系列作业任务,并使得整体的完成时间最短。 为了解决这个问题,可以使用matlab编写改进模因算法代码实现。以下是大致的步骤: 1. 初始化:生成初始调度方案。首先,需要进行作业任务的划分和工人的分配。可以使用某种启发式方法,如遗传算法或贪心算法等,将作业任务分配给不同的工人。然后,根据工人的能力和作业难度等因素,对作业任务进行排序,生成初始调度方案。 2. 评价函数:定义一个评价函数来衡量每个调度方案的优劣。评价函数的设计应考虑完成时间、工人能力匹配、工人负载均衡等因素。 3. 邻域搜索:基于当前的调度方案,进行邻域搜索来寻找更优的解。通过交换作业任务的工人分配,或者交换作业任务的顺序等方式进行搜索。 4. 模因算法的改进措施:引入模因算法的改进措施来增加搜索的多样性和增加局部搜索的能力。可以使用局部搜索方法,如Tabu搜索等,来克服搜索过早收敛的问题。 5. 迭代搜索:重复进行第3、4步,直到找到满意的调度方案或达到设定的停止条件。 6. 结果分析:对最终得到的调度方案进行效果评估,比较不同算法的结果,分析各因素对结果的影响。 总之,基于改进模因算法的考虑工人安排的分布式柔性作业车间调度问题是一个复杂的优化问题,通过使用matlab实现上述步骤,可以得到一个较优的调度方案,并提高作业效率和工人满意度。 ### 回答3: 基于改进模因算法的考虑工人安排的分布式柔性作业车间调度问题,可以通过以下步骤在MATLAB实现: 1. 定义问题:考虑工人安排的分布式柔性作业车间调度问题可以被视为一个多目标优化问题,包括工人的安排和作业车间调度。因此,需要定义目标函数和约束条件。 2. 生成初始种群:根据问题定义,生成一个初始的种群,代表不同的工人安排和作业车间调度方案。 3. 评估适应度:根据目标函数和约束条件,评估每个个体的适应度值。 4. 繁殖和选择:使用改进模因算法,选择适应度高的个体,并进行交叉和变异操作,生成新的个体。 5. 更新种群:将新的个体加入到种群中,同时淘汰适应度较低的个体。 6. 迭代优化:重复步骤3到步骤5,直到达到预定的停止条件,如迭代次数或者适应度值收敛。 7. 输出结果:根据最终的优化结果,输出工人安排和作业车间调度方案。 在MATLAB中,可以使用函数和优化工具箱来实现上述步骤。其中,函数可以根据问题的定义编写,包括目标函数、约束条件和适应度评估;优化工具箱可以用于选择、交叉、变异和种群更新等操作。 总结起来,基于改进模因算法的考虑工人安排的分布式柔性作业车间调度问题可以通过在MATLAB中编写相应的函数和使用优化工具箱来实现。通过迭代优化,得到最优的工人安排和作业车间调度方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值