【车间调度】基于模拟退火求解车间调度问题matlab源码

292 阅读2分钟

1 模型介绍

 

模型参考这里

2 部分代码

  • clc
    clear
    %=========数据录入,参数调整=================
    swarminitNum=20;%初始生成的粒子数;
     
    MM=[1 2 3 4 5 6 
        6 6 6 6 6 6];%工件、工序数量矩阵,MM第一行表示工件,第二行表示每个工件的工序数;
     
    machineNum=6;   %加工机器数;
     
    initT=1000;          %模拟退火初始温度;
     
    gen=500;        %循环迭代数;
     
    w1=0.35;          %变异率;
     
    changeNum=3;     %变异变换对数;
     
    restrictmatrixM=[3     1     2     4     6     5
                     2     3     5     6     1     4
                     3     4     6     1     2     5
                     2     1     3     4     5     6
                     3     2     5     6     1     4
                     2     4     6     1     5     3];%job-shop机器约束矩阵;
                 
    restrictmatrixT=[1     3     6    7      3     6
                     8     5     10   10     10    4
                     5     4     8     9     1     7
                     5     5     5     3     8     9
                     9     3     5     4     3     1
                     3     3     9     10    4     1];%job-shop时间约束矩阵;
                 
    %===============PSO算法==========================
    swarminit=cell(1,swarminitNum);
    swarminitLong=sum(MM(2,:));          %所有工序数即粒子长度;
    for i=1:swarminitNum,
        swarminit{i}=randomparticle(MM) ;
    end                                  %随机生成初始粒子群体
    [popu,s] = size(swarminit); 
    trace = ones(1,gen); 
    trace(1) = 10000; % 初始全局最佳适应度设为足够大 
    for i = 1:s,
        bestfit(i) = 10000; % 初始个体历史最佳适应度设为足够大 
    end
    bestpar = swarminit; % 个体历史最佳粒子初始化
    for u=1:swarminitNum,
        fitlist=[0]; 
    end
    T=initT;
    for step = 1:gen,
        for q=1:swarminitNum,
                
           swarminit{j}=cross(bestparticle1,swarminit{j},l4,l3);%粒子交叉;
       end 
    end
    [a,b,c]=timedecode2(bestparticle,restrictmatrixM,restrictmatrixT,machineNum);
    disp(['优化目标: 最小平均流动时间'])
    disp(['粒子数:' int2str(swarminitNum)  '   循环代数:' int2str(gen)])
    disp(['变异率:' num2str(w1)  '   变异变换对数:' int2str(changeNum)])
    disp(['模拟退火初始值:' int2str(initT)  '  模拟退火终值:' int2str(T)])
    disp(['迭代循环值:' int2str(trace)])
    disp(['最小平均流动时间:' int2str(a)  '   最大完工时间:'  int2str(b)  '   最小间隙时间:' int2str(c) ])
    disp(['最优粒子' int2str(bestparticle)])
    pause
    gant(bestparticle,swarminitLong,restrictmatrixM,restrictmatrixT,b)
    

    3 仿真结果

    img

    4 参考文献

    [1]潘全科, 段俊华, 赵清理,等. 解决车间调度问题的改进模拟退火算法[J]. 机械科学与技术, 2007(01):112-114.

    博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

    部分理论引用网络文献,若有侵权联系博主删除。