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

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

💥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天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
103 80
|
26天前
|
机器学习/深度学习 算法 Serverless
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。
|
14天前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如&quot;How are you&quot;、&quot;I am fine&quot;、&quot;I love you&quot;等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。
|
23天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-GRU网络的数据分类识别算法matlab仿真
本项目展示了使用MATLAB2022a实现的贝叶斯优化、CNN和GRU算法优化效果。优化前后对比显著,完整代码附带中文注释及操作视频。贝叶斯优化适用于黑盒函数,CNN用于时间序列特征提取,GRU改进了RNN的长序列处理能力。
|
1天前
|
机器学习/深度学习 人工智能 算法
基于GRNN广义回归网络和MFCC的语音情绪识别matlab仿真,对比SVM和KNN
该语音情绪识别算法基于MATLAB 2022a开发,可识别如悲伤等情绪,置信度高达0.9559。核心程序含中文注释及操作视频。算法采用MFCC特征提取与GRNN广义回归网络,通过预加重、分帧、加窗、FFT、梅尔滤波器组、对数运算和DCT等步骤处理语音信号,实现高效的情绪分类。
|
1月前
|
机器学习/深度学习 算法 关系型数据库
基于PSO-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目展示了利用粒子群优化(PSO)算法优化支持向量机(SVM)参数的过程,提高了分类准确性和泛化能力。包括无水印的算法运行效果预览、Matlab2022a环境下的实现、核心代码及详细注释、操作视频,以及对PSO和SVM理论的概述。PSO-SVM结合了PSO的全局搜索能力和SVM的分类优势,特别适用于复杂数据集的分类任务,如乳腺癌诊断等。
|
1月前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
2月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-LSTM网络的数据分类识别算法matlab仿真
本项目展示了基于贝叶斯优化(BO)的CNN-LSTM网络在数据分类中的应用。通过MATLAB 2022a实现,优化前后效果对比明显。核心代码附带中文注释和操作视频,涵盖BO、CNN、LSTM理论,特别是BO优化CNN-LSTM网络的batchsize和学习率,显著提升模型性能。
|
2月前
|
机器学习/深度学习 算法 数据挖掘
基于GWO灰狼优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了基于分组卷积神经网络(GroupCNN)和灰狼优化(GWO)的时间序列回归预测算法。算法运行效果良好,无水印展示。使用Matlab2022a开发,提供完整代码及详细中文注释。GroupCNN通过分组卷积减少计算成本,GWO则优化超参数,提高预测性能。项目包含操作步骤视频,方便用户快速上手。
|
2月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
该算法结合了遗传算法(GA)与分组卷积神经网络(GroupCNN),利用GA优化GroupCNN的网络结构和超参数,提升时间序列预测精度与效率。遗传算法通过模拟自然选择过程中的选择、交叉和变异操作寻找最优解;分组卷积则有效减少了计算成本和参数数量。本项目使用MATLAB2022A实现,并提供完整代码及视频教程。注意:展示图含水印,完整程序运行无水印。

热门文章

最新文章