【车间调度】基于matlab遗传算法求解置换流水车间调度问题【含Matalb源码 176期】

Matlab科研 2021-08-10 09:13:21 阅读数:167

本文一共[544]字,预计阅读时长:1分钟~
MATLAB 甘特图 约束条件 迭代 最大流

一、背景

在这里插入图片描述
在这里插入图片描述
算法设计
(一)
假设工件在机器上的加工顺序是相同的,同时假定各工件准备就绪,机器一开动就投入生产,开工时间为0,则最大完工时间等于最大流程时间。同时3台机器以上的流水车间调度是NP难问题,所以本文只考虑了2台、3台机器的情况,解决3台机器以上的问题方法也可运用人工智能算法,解的质量更高,但因该类算法需良好的软件编程能力,故本文不加探究。n个工件在m台机器上的加工顺序相同。工件在机器上的加工时间是给定的。问题的目标是求n个工件在每合机器上的最大完工时间等于最大流程时间。这种流水线调度问题要在满足以下两个约束条件的前提下,使得加工完所有
的工件所花的时间尽可能地少:
1、工件约束
每个工件在每台机器上恰好加工一次,每个工件在各机器上加工顺序相同。不失一般性,假设各工件按机
器1至m的顺序进行加工。各工件在各机器上的加工时间已知。
2、机器约束
每台机器在任何时刻至多加工一个工件,每台机器加工的各工件的顺序相同。
置换流水线调度问题实质是如何调整加工工件的序列,提高机器的利用率的问题,即在同一时刻正在加工的机攫数越多,机器利用率越大口根据该原则,我们根据下面规则安排
工件的加工顺序:
(l)在前面机器加工时间较短、后面机器加工时间较长的工件,安排在序列前。这样可以使得后面的机器尽快参加工作,并且后面的机器不需要作空等待,
(2)机器加工时间较为平均且加工时间较长的工件,安排在序列的中部。这样可以使得各个机器在中期的时候都能得到运作。
(3〕前面加工时间较长,后面加一〔时间较短的上件女排在序列尾部。这样使得前面的机器能“延迟”完工,后面的机器尽快完工。

二、源代码

function [Zp,Y1p,Y2p,Y3p,Xp,LC1,LC2]=JSPGA(M,N,Pm,T,P)
% 输入参数列表
% M 遗传进化迭代次数
% N 种群规模(取偶数)
% Pm 变异概率
% T m×n的矩阵,存储m个工件n个工序的加工时间
% P 1×n的向量,n个工序中,每一个工序所具有的机床数目
% 输出参数列表
% Zp 最优的Makespan值
% Y1p 最优方案中,各工件各工序的开始时刻,可根据它绘出甘特图
% Y2p 最优方案中,各工件各工序的结束时刻,可根据它绘出甘特图
% Y3p 最优方案中,各工件各工序使用的机器编号
% Xp 最优决策变量的值,决策变量是一个实数编码的m×n矩阵
% LC1 收敛曲线1,各代最优个体适应值的记录
% LC2 收敛曲线2,各代群体平均适应值的记录
% 最后,程序还将绘出三副图片:两条收敛曲线图和甘特图(各工件的调度时序图)
%第一步:变量初始化
[m,n]=size(T);%m是总工件数,n是总工序数
Xp=zeros(m,n);%最优决策变量
LC1=zeros(1,M);%收敛曲线1
LC2=zeros(1,N);%收敛曲线2
%第二步:随机产生初始种群
farm=cell(1,N);%采用细胞结构存储种群
for k=1:N
X=zeros(m,n);
for j=1:n
for i=1:m
X(i,j)=1+(P(j)-eps)*rand;
end
end
farm{k}=X;
end
counter=0;%设置迭代计数器
while counter<M%停止条件为达到最大迭代次数
%第三步:交叉
newfarm=cell(1,N);%交叉产生的新种群存在其中
Ser=randperm(N);
for i=1:2:(N-1)
A=farm{Ser(i)};%父代个体
Manner=unidrnd(2);%随机选择交叉方式
if Manner==1
cp=unidrnd(m-1);%随机选择交叉点
%双亲双子单点交叉
a=[A(1:cp,:);B((cp+1):m,:)];%子代个体
b=[B(1:cp,:);A((cp+1):m,:)];
else
cp=unidrnd(n-1);%随机选择交叉点
b=[B(:,1:cp),A(:,(cp+1):n)];
end
newfarm{i}=a;%交叉后的子代存入newfarm
newfarm{i+1}=b;
end

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.

三、运行结果

在这里插入图片描述

四、备注

版本:2014a

版权声明:本文为[Matlab科研]所创,转载请带上原文链接,感谢。 https://blog.51cto.com/u_15324424/3328550