置换流水车间调度问题的MATLAB求解

合集下载

求解置换流水车间调度问题的memetic算法

求解置换流水车间调度问题的memetic算法

求解置换流水车间调度问题的memetic算法
Memetic算法是一种基于遗传算法和局部搜索算法结合的混合
算法,在求解置换流水车间调度问题时,可以通过将遗传算法和局部搜索算法结合,以提高求解效率。

步骤一:初始化参数
首先,需要初始化算法的参数,包括种群规模、变异率、交叉率、迭代次数等。

步骤二:初始化种群
然后,初始化种群,即产生一组初始解,用于进行后续的搜索。

步骤三:进行遗传算法迭代
接着,进行遗传算法的迭代,即对当前种群进行变异、交叉、选择等操作,以获得新的种群,并计算当前种群的适应度。

步骤四:进行局部搜索
然后,对当前种群中的某个解进行局部搜索,以求得更优的解。

步骤五:更新种群
最后,将局部搜索得到的更优解替换原有解,更新当前种群,并重复以上步骤,直至达到迭代次数为止。

求解置换流水车间调度问题的改进遗传算法

求解置换流水车间调度问题的改进遗传算法

求解置换流水车间调度问题的改进遗传算法作者:李小缤白焰耿林霄来源:《计算机应用》2013年第12期摘要:目前求解置换流水车间调度问题的遗传算法中,加工顺序编码方法导致交叉、变异算子复杂,且子代与父代不相似,算法易陷入局部最优为解决以上问题,提出了一种基于优先权值编码并含有限优算子的改进遗传算法利用各工件的优先权值进行编码,避免遗传算子中不合法编码的出现;加入限优算子限制种群中最优个体的繁殖数量,防止种群陷入局部最优点,改善寻优质量实验结果表明,该算法中的编码方法可行且易于应用于求解紧急工件优先加工的实际问题;同时用基准算例验证了具有限优算子的改进算法求解结果相对误差小且求解稳定性高关键词:置换流水车间调度;遗传算法;优先权值;最大完工时间;局部收敛中图分类号: TP18 文献标志码:A0引言置换流水车间调度问题(Permutation Flow shop Scheduling Problem,PFSP)是流水车间调度中的典型问题之一,也是实际制造系统中重要的规划问题该调度问题被广泛应用于实际生产,尤其适用于单件大批量生产制造企业,可以有效提高企业生产效率与设备利用率由于工件加工顺序的多样性置换流水车间调度问题属于典型的NP问题[1],开发和研究高效的求解算法具有非常重要的理论和实际意义已有的研究成果表明粒子群算法[2]、禁忌搜索算法[3]、遗传算法[4]以及蚁群优化算法[5]等智能算法均对此调度优化问题得到了最优解或接近最优解本文在目前已有成果的基础上,进一步研究置换流水车间调度问题,提高解的质量和求解稳定性首先,目前应用的遗传算法均采用工件加工顺序编码作为算法中的染色体,由于重复基因将导致不合法编码,故算法中交叉和变异算子都比较复杂本文提出了基于工件优先权值的编码方法,能避免不合法编码的出现,简化交叉、变异算子该编码方法还可以由人工定义工件优先权值,通过实验证实这一特性易于实现紧急工件优先加工等实际生产需求问题考虑到置换流水车间调度问题存在多个局部最优的特点以及遗传算法求解易陷入局部最优的缺陷,提出了一种限优算子,限制种群中最优个体繁殖数量,本文将该遗传算法称为限优遗传算法(Optimum Limited Generic Algorithm, OLGA),最后通过对基准算例仿真实验验证算法性能1问题描述置换流水车间调度问题的目的是根据设定的目标,确定工件的加工顺序,使所有工件最大完工时间(Makespan)最短置换流水车间调度问题具有以下特征:n个工件以相同顺序在m台机器上加工,所有工件在每台机器上的加工顺序也是相同的;同一工件在任一时刻只允许在一台机器上加工;每台机器同时只能加工一个工件;工件在上一个机器加工完成后,立即送到下一台机器加工;工件在每台机器上加工的过程不允许中断[6]2限优遗传算法置换流水车间调度问题是组合优化的典型问题,可行解的数量随工件数的增多而骤增,工件数目为n的加工方案数为n!遗传算法是一种以自然进化和选择机制为基础的算法,在很多领域得到应用,优点有全局近优、快速、易实现等[7],同时也有易陷入局部最优和编码困难的缺点目前相关文献中置换流水车间调度问题的遗传算法都使用工件加工顺序进行编码[8-11],即把一个染色体编码为一组元素为1到n的排列,例如4个工件,n=4,一个染色体编码为(3,4,2,1),表示各台机器先加工工件3,再依次加工工件4、2、1此编码方法若采用常规的交叉、变异算子会使染色体中出现重复基因,导致不合法的编码为防止不合法编码出现,各文献中使用的交叉算子都比较复杂,变异算子则由禁忌搜索、退火等综合方法构成,并且,这些复杂算子得到的子代有极大的可能性与父代不具有相似性,很难保留父代的优良特性本文提出一种基于工件优先权值的编码方法,简化求解过程,并能保证子代与父代的相似性另外,针对遗传算法易陷入局部最优的缺陷,提出一种具有限优算子的遗传算法——限优遗传算法(OLGA)2.1基于优先权值的编码方法置换流水车间调度问题求解,首先要解决编码问题,编码的主要目的是使优化问题解的表现形式适宜于用遗传算法运算本文提出基于工件优先权值的编码方法,设vi为工件i的优先权值,为保证交叉算子的有效性,考虑一般问题的工件数量,经测试后将vi的定义域设置为vi∈[0,2]n个工件的优先权值v={v1,v2,…,vn},即为本文遗传算法的染色体编码若va>vb(a,b∈[1,n]),则加工顺序中工件a在工件b之前例如n=4,一种加工顺序πq下的编码vπq={01234 05675 17342 13765},按大小排序可知,该个体解码得加工顺序为πq={3,4,2,1}若染色体中出现重复基因vc=vd,则按工序编号排列,如c该编码方法使遗传算法中可以使用常规交叉、变异算子,保证交叉、变异产生的子代继承父代特性;同时,该编码方法易于应用于实际工程中紧急工件优先加工问题目前研究中的遗传算法由于其交叉、变异算子的复杂性,用于紧急工件优先加工问题的限制较多,而本文提出的编码方法中,当要求某一工件Xj紧急加工时,将该工件的优先权值vj设为大于2的数,且该工件不参与遗传操作,该算法求解结果即能满足Xj在各工序均优先加工,得到满足紧急工件优先加工条件的最短最大完工时间和对应的加工顺序2.2初始种群的产生根据实际问题规模,选定种群大小N,并根据基于优先权值的编码方法,以0到2的随机数,对种群中的染色体个体进行初始化,保证种群个体的多样性2.3适应度函数2.4选择算子本文算法中,把父代种群和交叉、变异操作后的种群(称为预子代种群)合并为一个待选择种群,在种群中随机两两配对比较,根据适应度函数保留适应度函数大的个体,作为子代种群,比赌轮选择法、最优保存策略法等传统方法能更好地保证种群多样性在选择的同时,记录下该代种群中最优的个体v*2.5交叉算子2.6变异算子对预子代个体中所有染色体个体,循环每一个基因位,以变异概率pm对该位基因进行变异操作2.7限优算子本文提出限优算子,以解决遗传算法易陷入局部最优解的问题在连续g代种群的最优适应度不变时,计算当前种群中每个个体解码所得加工顺序与该种群中最优个体v*解码所得加工顺序的汉明距离,将汉明距离等于0的个体的每个基因重新以0到2之间的随机数赋值,即把与当前最优种群相同的个体消灭,让新产生的个体与剩余个体继续进行交叉、变异操作,保证种群个体多样性,避免陷入局部最优点在消灭最优个体的同时,将记录下的v*放入操作后的种群中,即保留且仅保留一个当前最优个体继续与其他个体进行遗传操作,防止当前优秀基因丢失基于以上条件,本文提出的改进遗传算法的流程如图1所示3实验结果与分析3.1求解紧急工件优先加工问题能力测试实验1:求解Car7最短Makespan,输出对应最优值的甘特图甘特图横坐标表示加工时间,各行为各机器加工顺序,方框表示工件加工时长,方框内数字表示工件编号实验2:设定工件3的优先权值为2.5,使算法求解工件3优先加工时的最短Makespan,输出甘特图实验3:从实验1甘特图得无紧急工件时首先加工的工件为X,在此将此工件权值设为2.5,求解工件X优先加工时的最短Makespan,输出甘特图,与实验1结果进行对比分析实验结果:1)由图3可知,实验2设定工件3的优先权值为2.5,得到的加工顺序满足工件3优先加工,证明该编码方法可以实现求解紧急工件优先加工问题2)由图2可知,实验1得到的最短完工时间与文献[12]中提供的Car7最优值(6590)一致,求解正确,且得到实验1中对应最优值的加工顺序中工件5为首先加工工件故实验3设定工件5的优先权值为2.5,由图4知,实验3所得求解结果和甘特图与实验1一致,证明了该编码方法在求解紧急工件优先加工问题应用的可行性和正确性3.2算法性能测试为测试本文算法的性能,选择Carlier提出的Car系列的基准测试问题[12],以及Reeves提出的Rec基准测试问题[13]进行仿真实验用Matlab软件编程实现,硬件环境的处理器主频为2.13GHz,内存为2GB,操作系统为Windows 7;参数设置根据问题的规模调整,如Car8问题中,进化次数M=50,种群规模N=100,交叉概率pc=1,变异概率pm=0.01,限优操作判断代数g=5C*为问题最优值或目前已知下界值,RE表示算法求出的最优值C与C*的相对误差(RE=(C-C*)/C*×100%)BRE表示最佳相对误差,ARE表示平均相对误差,WRE表示最差相对误差,分别表示对算例独立运行20次得到的最佳值、平均值以及最差值与C*的相对误差,以这三个指标评价算法性能表1为本文提出的OLGA与目前已有研究中综合性能相对优越的一种综合遗传算法(Comprehensive Generic Algorithm, CGA)[14]和一种混合遗传算法(Hybrid Heuristic Generic Algorithm, HGA)[15]的性能比较由实验结果可知:1)本文算法OLGA具有很好的优化质量,对20×10及以下规模的问题均能得到最优解,尤其对Car系列的基准测试问题能100%得到最优解对较大规模的问题能够获得较好的近似最优解,除Rec31、Rec33的最佳值比CGA、HGA略差外,其他算例最佳值均大大优于CGA、HGA并且,计算得三种算法对29组算例的平均BRE分别为0.48%、0.69%、062%,平均ARE分别为0.92%、1.23%、1.16%;平均WRE分别为1.33%、2.27%、1.89%,可以明显看出本文算法在总体求解质量上的优越性2)本文算法OLGA具有很好的稳定性,对较大规模的问题也能保持平均相对误差很小,除Rec33算例略差外,ARE均为三种算法中最优并且,三种算法的最差与最佳相对误差之差(WRE-ARE)分别为0.84%,1.58%,1.26%,可以看出本文算法的稳定性更优3)本文算法OLGA避免陷入局部最优点的能力较好,除Rec31算例求解比HGA略差外,最差相对误差全面地大大优于CGA、HGA,自身波动性小,利于实际应用分析Rec31、Rec33算例算法效果不明显的原因应该是其局部最优点过深而难以跳出,限优算子中消灭最优个体后剩下的次优个体群极易带动种群再次陷入局部最优点,但现实中这样的情况不多CGA和HGA提出时已证明能够大幅度优于传统GA,而本文实验数据证明OLGA的求解质量优于CGA和HGA4结语本文提出了求解置换流水车间调度问题的一种基于工件优先权值编码的改进遗传算法(OLGA),通过实验证明了本文提出的编码方法的可行性及其在求解紧急工件优先加工问题的有效性经Car和Rec基准问题测试表明本文提出的改进遗传算法的相对误差比现有算法大幅缩小,验证了该改进算法在求解质量、求解稳定度上的优越性基于该改进算法的良好性能,下一步研究中,可经过适当改进,将算法运用于解决置换流水车间的动态调度等问题参考文献:[1]GAREY M R, JOHNSON D S, SHTHI R. The complexity of flowshop and jobshop scheduling[J]. Mathematics of Operations Research, 1976,1(2):117-129.[2]张其亮,陈永生,韩斌等.改进的粒子群算法求解置换流水车间调度问题 [J].计算机应用,2012,32(4):1022-1024,1029.[3]NOWICKI E, SMUTNICKI C. A fast tabu search algorithm for the permutation flowshop problem [J]. European Journal of Operational Research, 1996, 91(1): 160-175.[4]求解置换Flowshop调度问题的改进遗传算法[J].计算机工程与应用,2007,43(22):41-44.[5]刘延风,刘三阳. 置换流水车间调度的蚁群优化算法[J].计算机应用, 2008,28(2):302-304.[6]SVIRIDENKO M, WOEGINGER G J. Approximability and inapproximability results for nowait shop scheduling[C]// FOCS 00: Proceedings the 41st Annual Symposium on Foundations of Computer Science. Washington, DC: IEEE Computer Society, 2000:116-124.[7]RUIZ R, MAROTO C. A comprehensive review and evaluation of permutation flowshop heuristics[J]. European Journal of Operational Research, 2005,165(2):479-494.[8]涂雪平,施灿涛,李铁克.求解置换流水车间调度问题的改进遗传算法[J].计算机工程与应用, 2009,45(36):50-53,70.[9]DUAN J H, ZHANG M, QIAO G Y, et al. A genetic algorithm for permutation flowshop scheduling with total flowtime criterion[C]// CCDC 2011: Proceedings of the 2011 Chinese Control and Decision Conference. Piscataway: IEEE, 2011:1514-1517.[10]IYER S K, SAXENA B. Improved genetic algorithm for the permutation flowshop scheduling problem [J]. Computer and Operations Research, 2004,31(4):593-606.[11]A block mining and recombination enhanced genetic algorithm for the permutation flowshop scheduling problem[J]. Economics,2013,141(1):45-55.[12]CARLIER J. Ordonnancements à contraintes disjonctives [J]. RAIRO — Operations Research — Recherche Opérationnelle, 1978,12(4): 333-350.[13]REEVES C R. A genetic algorithm for flowshop sequencing [J]. Computers and Operations Research, 1995,22(1): 5-13.[14]王凌.车间调度及其遗传算法[M].北京:清华大学出版社, 2003:114-122.[15]ZHENG D Z, WANG L. An effective hybrid heuristic for flow shop scheduling [J]. International Journal of Advanced Manufacturing Technology, 2003, 21(1):38-44.。

Matlab/Visual C++混合编程求解单件车间调度问题

Matlab/Visual C++混合编程求解单件车间调度问题

m e n ta r
y

o
f
the
he d u lin g
the
y , bu t
tc
ha
c
gre
a
in f l

m o
r
de
r n
iz
a
g
e m e n s c
t in
e n
te
p is
it h
a n c o m v e
in g le
it e
tin
m
v a r
ie ty
p
r o
du d
c
ts
o n


则 约束条件为 :


任 务 所 需 的 各 种 约 束 ( 加 工 次 序 所 需 机 器 ) 使所 有 的


( 1 ) 每 个 工 件 的 各 道 工 序 的 加 工 顺 序 预 先 确 定 且 保持 有
任 务 能尽 量 如期 完 成 就 成 为 十 分 现 实 和 迫 切 的 问 题 这
, ,
s m a e
ll ba
n c
h p r o du
n c
t io
to
u
m o
s o
de
e
T his p a p e
p
r e s e n
ts
a n n
im p r
the the
e
d
he du lin g
s w e r e
lg o r it hm
o
d
dj u
e
s
g
a
lg o r ith m

matlab鸟群算法求解车间调度问题详解及实现源码

matlab鸟群算法求解车间调度问题详解及实现源码

matlab鸟群算法求解车间调度问题详解及实现源码⽬录⼀、车间调度简介1 车间调度定义2 传统作业车间调度3 柔性作业车间调度⼆、蝴蝶优化算法(MBO)简介1 介绍2 ⾹味3 具体算法三、部分源代码五、matlab版本及参考⽂献⼀、车间调度简介1 车间调度定义车间调度是指根据产品制造的合理需求分配加⼯车间顺序,从⽽达到合理利⽤产品制造资源、提⾼企业经济效益的⽬的。

车间调度问题从数学上可以描述为有n个待加⼯的零件要在m台机器上加⼯。

问题需要满⾜的条件包括每个零件的各道⼯序使⽤每台机器不多于1次,每个零件都按照⼀定的顺序进⾏加⼯。

2 传统作业车间调度传统作业车间带调度实例有若⼲⼯件,每个⼯件有若⼲⼯序,有多个加⼯机器,但是每道⼯序只能在⼀台机器上加⼯。

对应到上⾯表格中的实例就是,两个⼯件,⼯件J1有三道⼯序,⼯序Q11只能在M3上加⼯,加⼯时间是5⼩时。

约束是对于⼀个⼯件来说,⼯序的相对顺序不能变。

O11->O12->O13。

每时刻,每个⼯件只能在⼀台机器上加⼯;每个机器上只能有⼀个⼯件。

调度的任务则是安排出⼯序的加⼯顺序,加⼯顺序确定了,因为每道⼯序只有⼀台机器可⽤,加⼯的机器也就确定了。

调度的⽬的是总的完⼯时间最短(也可以是其他⽬标)。

举个例⼦,⽐如确定了O21->O22->O11->O23->O12->O13的加⼯顺序之后,我们就可以根据加⼯机器的约束,计算出总的加⼯时间。

M2加⼯O21消耗6⼩时,⼯件J2当前加⼯时间6⼩时。

M1加⼯O22消耗9⼩时,⼯件J2当前加⼯时间6+9=15⼩时。

M3加⼯O11消耗5⼩时,⼯件J1当前加⼯时间5⼩时。

M4加⼯O23消耗7⼩时,⼯件J2加⼯时间15+7=22⼩时。

M1加⼯O12消耗11⼩时,但是要等M1加⼯完O22之后才开始加⼯O12,所以⼯件J1的当前加⼯时间为max(5,9)+11=20⼩时。

M5加⼯O13消耗8⼩时,⼯件J2加⼯时间20+8=28⼩时。

求解置换流水车间调度问题的一种混合算法

求解置换流水车间调度问题的一种混合算法

求解置换流水车间调度问题的一种混合算法0. 前言置换流水车间调度问题(PFSP是对经典的流水车间调度问题进行简化后得到的一类子问题,最早在石化工业中得到应用,随后扩展到制造系统、生产线组装和信息设备服务上[1] 。

该问题一般可以描述为,n个待加工工件需要在m台机器上进行加工。

问题的目标是求出这n 个工件在每台机器上的加工顺序,从而使得某个调度指标达到最优,最常用的指标为工件的总完工时间(makespar)最短。

PFSP最早由Johnson于1954年进行研究[2],具有NP难性质[3] 。

求解方法主要有数学规划,启发式方法和基于人工智能的元启发式算法[4] 。

数学规划等适用于小规模问题,启发式方法计算便捷,却又无法保证解的质量。

随着计算智能的发展,基于人工智能的元启发式优化算法成为研究的重点。

遗传算法(GA是研究与应用得最为广泛的智能优化算法,利用遗传算法求解PFSP问题的研究也有很多。

遗传算法具有操作简单、容易实现的优点,且求解时不受约束条件限制。

然而,遗传算法通常存在着过早收敛,容易陷入局部最优的现象。

导致这一现象的原因在于遗传算法的交叉、变异操作具有一定的随机性,在求解PFSP问题的过程中往往会破坏构造块,产生所谓的连锁问题。

为了克服遗传算法的缺陷,研究人员提出了一种不进行遗传操作的分布估计算法[5] (EDA。

EDA是一种运用统计学习的新型优化算法。

相比GA EDA在全局搜索上有较大的优势,而局部搜索能力不足,同样会导致局部最优[6][7] 。

以混合优化为思路,本文将设计一种EDA与GA吉合的混合算法来求解PFSP 问题,混合算法通过EDA的概率模型和GA的交叉变异操作两种方式来生成个体,并引入模糊控制理论[8] 来自适应调节两种算法生成个体的比例。

1. 置换流水车间调度问题PFSP问题通常假设:(1)n台工件在m台机器上加工。

(2)每个工件以相同的顺序在m台机器上加工。

(3)每个工件在每台机器上的加工时间是预先确定的。

解决多目标置换流水车间问题的改进MDPSO算法

解决多目标置换流水车间问题的改进MDPSO算法

解决多目标置换流水车间问题的改进MDPSO算法摘要:置换流水车间调度问题(flow-shop scheduling problem)是生产调度问题的一个子问题,是NP-hard组合优化离散问题之一,具有很强的实际研究意义。

在现代的生产制造过程中,单一的目标优化已经满足不了日益发展的工业需求,所以对多目标流水车间调度问题的研究显得尤为重要,已在实际生产中得到广泛应用。

本文在多目标进化算法粒子群算法PSO的基础上设计了一种多目标进化算法离散多目标粒子群优化算法MDPSO以求解该问题,用 MATLAB 编程实现该算法并对几个标准多目标flowshop 算例进行仿真测试。

实验结果表明,提出的算法比已有的NSGA_II算法具有更好的优化性能。

关键词:多目标flowshop问题;MDPSO算法;NSGA-II;Improved MDPSO method for Multi-objective flow-shop scheduling problemWu Ye, Li Xiaoyu, Yao Jun(Shanghai zhengfan technology co. Ltd , School of Mechatronics and Automation, Shanghai University, Shanghai, China)AbstractMulti-objective flow-shop scheduling problem is a sub problem of production scheduling problem. It is one of the discrete problems of NP-hard optimization and has strong theoretical and actual purpose.In the modern production and manufacturing process, single-objective optimization can’t meet the growing industrial demand, sothe research on the scheduling problem of multi-objective flow-shop is particularly important. This paper designs a Multi-objective evolutionary algorithm based on the PSO to solve this problem. It was implemented by MATLAB and simulation on a kind of benchmark functions. The experimental results show that the proposed algorithm hasa better optimization performance than the NSGA – II.Keywords: Multi-objective flow-shop scheduling problem; MDPSO; NSGA-II1 引言在现实生活中,许多问题都需要寻找一个最优决策或者是最佳解决方案,这类问题被统称为优化问题,仅有一个目标函数的最优化问题称为单目标优化问题,目标函数超过一个的最优化问题称为多目标优化问题(Multi-objective Optimization Problems,MOP)[1]。

求解置换流水车间调度问题的Memetic算法

求解置换流水车间调度问题的Memetic算法

求解置换流水车间调度问题的Memetic算法苏志雄;伊俊敏【摘要】针对以最小化最大完工时间为目标的置换流水车间调度问题,建立了0-1型混合整数线性规划模型.在对模型进行Benders分解的基础上,提出了问题的求解策略,进而设计了一种Memetic调度算法,并探讨了基于组合规则的种群初始化方法和混合遗传操作.为了提高算法的搜索效率,采用了更加高效的适应度值计算方法以及两种邻域搜索方法.最后,基于Benchmark算例的仿真实验结果表明了该算法的有效性,可以找到26个算例中的17个最优解(65.38%),且其平均相对误差的均值仅为0.88%.【期刊名称】《厦门理工学院学报》【年(卷),期】2015(023)006【总页数】5页(P25-29)【关键词】生产调度;置换流水车间;Memetic算法;邻域搜索【作者】苏志雄;伊俊敏【作者单位】厦门理工学院管理学院,福建厦门361024;厦门理工学院管理学院,福建厦门361024【正文语种】中文【中图分类】F273;TP278流水车间调度问题通常可以描述为n个工件要在m台机器上加工,每个工件有m 道工序,每道工序都要在不同的机器上加工,所有工件的加工顺序都相同,各工件在各机器上的加工时间已知,调度目标是确定每台机器上工件的加工顺序及开工时间,使得特定的性能指标最优。

置换流水车间调度问题(permutation flow shop scheduling problems,PFSP)是对流水车间调度问题的进一步约束,即约定每台机器上所有工件的加工顺序相同,其解空间的规模为n!,远远小于流水车间调度问题的规模(n!)m。

PFSP中的最小化最大完工时间问题,利用三元组表示法可以记为此类调度问题是研究流水车间调度问题最为自然的起点,其研究成果可以为更加复杂的实际调度问题研究提供基础,因此研究和开发高效的生产调度算法具有非常重要的理论意义和应用价值。

由于此类调度问题的NP难特性[1],精确算法只能求解很小规模的算例,而启发式算法[2-5]可以在很短的时间内获得调度解,但是其求解质量和通用性较差。

VB与Matlab集成求解车间调度优化问题

VB与Matlab集成求解车间调度优化问题

t e 技 术动态数 据交 换 ( D ) i X、 v D E 技术 、 态连接库 ( L )Ma 动 D L、 —
tx B C M 组 件 技 术 等 。前 两 种 方 法 最 大 的缺 点 是 不 能 脱 离 rV 、O i
Maa tb工作环境。D L技术是应用 Ma T os 司的 MieaT l L t ol公 h d v
求解 问题 时间复杂度 、 空间复杂度 的扩 大 , 组合优化 问题 的搜 索空间呈几何级数 急剧扩大 ,以目前一般计算机的处理能力 , 用枚举 法有时很难或者甚至不可能得到其精确最优解 。 对于这
来越 高 , 简单 的、 局部 的、 规的控 制和仅 凭经验 的管理 已经 常
不 能满足现代生产的要求 。构建 高效 的调度方案与优 化技术 已成为提 高制造系统性能的主导 因素 ,车间调度 问题应运 而 生 。车间调度问题具有建模 / 计算复 杂性 、 动态随机性 、 多约 束性 、 目标性 等特点 , 多 因此 在其应 用软件 的实现上 , 一方 面 要求具有 良好 的人 机交互和动态显示性 能 ,另一方面要考 虑 其数值计算能力。
具 软 件 ,借 用 c +编 译 器 将 Maa + tb的 M 函数 文件 转 换 为 l
D L在 V L , B中加载该 D L 但这种方法需要单独开发可执行文 L。 件。 a iV M tx B是 M tWo r a h r k针对 V B提供 的一个 Ma a , l fb库 它提
内容包括分配决策( 工件的加工顺 序 ) 和时间决策( 工件各工序
Mi oo i a B s c sfV s l ai 由微 软 公 司开 发 的 优 秀 的 程 序 可 r t u c是 视 化 设计 语 言 之 一 , 在 数 据 处 理 方 面 却 非 常 繁 琐 , 码 冗 长 但 代
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

物流运筹实务课程设计题目:置换流水车间调度问题的MATLAB求解置换流水车间调度问题的MATLAB求解目录一、前言 (5)二、问题描述 (6)三、算法设计 (7)四、实验结果 (15)摘要自从Johnson 1954年发表第一篇关于流水车间调度问题的文章以来.流水车间调度问题引起了许多学者的关注。

安排合理有效的生产调度是生产活动能井然有序开展,生产资源得到最佳配置,运作过程简明流畅的有力保证。

流水车间调度问题是许多实际流水线生产调度问题的简化模型。

它无论是在离散制造工业还是在流程工业中都具有广泛的应用。

因此,对进行研究具有重要的理论意义和工程价值。

流水线调度问题中一个非常典型的问题,而置换流水线调度问题作为FSP 问题的子问题,是一个著名的组合优化问题。

该问题是一个典型的NP难问题,也是生产管理的核心内容。

随着生产规模的扩大,流水线调度问题的优化对提高资源利用率的作用越来越大,因此对其研究具有重要的理论和现实意义。

关键字:流水车间,单件小批量生产,jsp模型,Matlab前言企业资源的合理配置和优化利用很大程度上体现在车间一层的生产活动中,所以加强车间层的生产计划与控制一直在企业生产经营活动中占有十分重要的地位。

车间生产计划与控制的核心理论是调度理论。

车间调度问题是一类重要的组合优化问题。

为适应订货式、多品种、小批量生产的需要,引进了置换流水车间调度概念。

在置换流水车间调度优化后,可以避免或大大减少流程工作时间、提高生产效率。

因此,研究成组技术下车间调度问题是很有必要的。

生产调度,即对生产过程进行作业计划,是整个个先进生产制造系统实现管理技术、优化技术、白动化与计算机技术发展的核心。

置换流水车间调度问题是许多实际生产调度问题的简化模型。

生产计划与调度直接关系着企业的产出效率和生产成本,有效的计划与调度算法能最大限度地提高企业的效益。

调度问题是组合优化问题,属于NP问题,难以用常规力一法求解。

随着制造业的快速发展,大规模定制生产、全球化制造等思想的提出,使车间调度问题呈现出以下的新特点:约束条件多,时间复杂度高,空问复杂度高。

这将导致在许多情况下,求解所建立的数学模型的快速性无法满足,如果采用适度线形化处理之后求解,将会因简化太多而使结果严承失真。

所以需选择功能强大的数值计算工具来实现这一问题的求解。

MATLAB恰好提供了这样的平台。

MATLAB是一个高度集成的系统,集科学计算、图像处理、声音处理于一体,具有极高的编程效率。

典型JSP模型分析与Matlab的应用结合使流水车间调度问题迎刃而解。

最大完工时间是生产调度中最常用的性能度量指标之一,最大完工时间越短,则说明产品总的生产周期越短,生产能力越大;此类调度问题的优化研究有助于提高企业的生产效率与资源利用率。

一、问题描述流水车间调度问题通常可以描述为n个工件要在m台机器上加工,每个工件有m道工序,每道工序都要在不同的机器上加工,所有工件的加工顺序都相同,问题的目标是确定每台机器上工件的加工顺序及开工时间,使得特定的性能指标最优。

置换流水车间调度问题PFSP是对流水车间调度问题的进一步约束,即约定每台机器上所有工件的加工顺序相同,其解空间的规模为!n,远远小于流水车间调n。

度问题的规模(!)m本次课程实验主要研究PFSP中的最小化最大完工时间问题,利用三元组表示F prmu C)求解Carlier (1978)提出的8个算例、以及Reeves (1995)提法(max出的21个算。

由于三台机器以上的调度问题被证明是NP难问题,对于大规模的调度,至今仍未出现求解最优的方法,常常采用启发式算法来求解近优解。

本案例主要采用instance car2进行求解。

案例:某产品,需要经过4道工序对13个工件进行加工,这13个工件的生产流程是一样的。

加工时间表见下:表4-3 某产品加工时间表计算步骤如下:首先确定n/m/F/C max 的最大完工时间为: 1,11)1,(c j t j =k j t k j c i j c 1)1,(),(11+-= k=2,...,m 111)1,(c )1,(c i j i t j j +=- i=2,...,n k j i i i i t k j c k j k j +-=-)}1,();,(c m ax {),(c 1则 C max =),(c n m j二、算法设计 (一)假设工件在机器上的加工顺序是相同的,同时假定各工件准备就绪,机器一开动就投入生产,开工时间为0,则最大完工时间等于最大流程时间。

同时3台机器以上的流水车间调度是NP 难问题,所以本文只考虑了2台、3台机器的情况,解决3台机器以上的问题方法也可运用人工智能算法,解的质量更高,但因该类算法需良好的软件编程能力,故本文不加探究。

n 个工件在m 台机器上的加工顺序相同。

工件在机器上的加工时间是给定的。

问题的目标是求n 个工件在每合机器上的最大完工时间等于最大流程时间。

这种流水线调度问题要在满足以下两个约束条件的前提下,使得加工完所有的工件所花的时间尽可能地少: 1、工件约束每个工件在每台机器上恰好加工一次,每个工件在各机器上加工顺序相同。

不失一般性,假设各工件按机器1至m 的顺序进行加工。

各工件在各机器上的加工时间已知。

2、机器约束每台机器在任何时刻至多加工一个工件,每台机器加工的各工件的顺序相同。

置换流水线调度问题实质是如何调整加工工件的序列,提高机器的利用率的问题,即在同一时刻正在加工的机攫数越多,机器利用率越大口根据该原则,我们根据下面规则安排工件的加工顺序:(l)在前面机器加工时间较短、后面机器加工时间较长的工件,安排在序列前。

这样可以使得后面的机器尽快参加工作,并且后面的机器不需要作空等待,(2)机器加工时间较为平均且加工时间较长的工件,安排在序列的中部。

这样可以使得各个机器在中期的时候都能得到运作。

(3〕前面加工时间较长,后面加一〔时间较短的上件女排在序列尾部。

这样使得前面的机器能“延迟”完工,后面的机器尽快完工。

(二)利用Matlab软件对上面的案例进行求解,编程如下:软件输出相应的结果,如下:(三)绘制甘特图编程如下:三、实验结果1、根据上面matlab的求解得到以下实验结果:最优排序为13 4 12 6 7 10 1 14 8 9 3 11 25min(Cmax)= 84232、甘特图如下所示:四、流水线型车间作业调度问题遗传算法MATLAB源码流水线型车间作业调度问题可以描述如下:n个任务在流水线上进行m个阶段的加工,每一阶段至少有一台机器且至少有一个阶段存在多台机器,并且同一阶段上各机器的处理性能相同,在每一阶段各任务均要完成一道工序,各任务的每道工序可以在相应阶段上的任意一台机器上加工,已知任务各道工序的处理时间,要求确定所有任务的排序以及每一阶段上机器的分配情况,使得调度指标(一般求Makespan)最小。

下面的源码是求解流水线型车间作业调度问题的遗传算法通用MATLAB源码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);%收敛曲线1LC2=zeros(1,N);%收敛曲线2%第二步:随机产生初始种群farm=cell(1,N);%采用细胞结构存储种群for k=1:NX=zeros(m,n);for j=1:nfor i=1:mX(i,j)=1+(P(j)-eps)*rand;endendfarm{k}=X;endcounter=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==1cp=unidrnd(m-1);%随机选择交叉点%双亲双子单点交叉a=[A(1:cp,:);B((cp+1):m,:)];%子代个体b=[B(1:cp,:);A((cp+1):m,:)];elsecp=unidrnd(n-1);%随机选择交叉点b=[B(:,1:cp),A(:,(cp+1):n)];endnewfarm{i}=a;%交叉后的子代存入newfarmnewfarm{i+1}=b;end%新旧种群合并FARM=[farm,newfarm];%第四步:选择复制FITNESS=zeros(1,2*N);fitness=zeros(1,N);plotif=0;for i=1:(2*N)X=FARM{i};Z=COST(X,T,P,plotif);%调用计算费用的子函数FITNESS(i)=Z;end%选择复制采取两两随机配对竞争的方式,具有保留最优个体的能力Ser=randperm(2*N);for i=1:Nf2=FITNESS(Ser(2*i));if f1<=f2farm{i}=FARM{Ser(2*i-1)};fitness(i)=FITNESS(Ser(2*i-1));elsefarm{i}=FARM{Ser(2*i)};endend%记录最佳个体和收敛曲线minfitness=min(fitness)meanfitness=mean(fitness)LC1(counter+1)=minfitness;%收敛曲线1,各代最优个体适应值的记录 LC2(counter+1)=meanfitness;%收敛曲线2,各代群体平均适应值的记录 pos=find(fitness==minfitness);Xp=farm{pos(1)};%第五步:变异for i=1:Nif Pm>rand;%变异概率为PmX=farm{i};I=unidrnd(m);J=unidrnd(n);X(I,J)=1+(P(J)-eps)*rand;farm{i}=X;endendfarm{pos(1)}=Xp;counter=counter+1end%输出结果并绘图figure(1);plotif=1;X=Xp;[Zp,Y1p,Y2p,Y3p]=COST(X,T,P,plotif);figure(2);plot(LC1);figure(3);plot(LC2);function [Zp,Y1p,Y2p,Y3p]=COST(X,T,P,plotif)% JSPGA的内联子函数,用于求调度方案的Makespan值% 输入参数列表% X 调度方案的编码矩阵,是一个实数编码的m×n矩阵% T m×n的矩阵,存储m个工件n个工序的加工时间% P 1×n的向量,n个工序中,每一个工序所具有的机床数目% plotif 是否绘甘特图的控制参数% 输出参数列表% Zp 最优的Makespan值% Y1p 最优方案中,各工件各工序的开始时刻% Y2p 最优方案中,各工件各工序的结束时刻% Y3p 最优方案中,各工件各工序使用的机器编号%第一步:变量初始化[m,n]=size(X);Y1p=zeros(m,n);Y2p=zeros(m,n);Y3p=zeros(m,n);%第二步:计算第一道工序的安排Q1=zeros(m,1);Q2=zeros(m,1);R=X(:,1);%取出第一道工序Q3=floor(R);%向下取整即得到各工件在第一道工序使用的机器的编号%下面计算各工件第一道工序的开始时刻和结束时刻for i=1:P(1)%取出机器编号pos=find(Q3==i);%取出使用编号为i的机器为其加工的工件的编号lenpos=length(pos);if lenpos>=1Q1(pos(1))=0;if lenpos>=2for j=2:lenposQ1(pos(j))=Q2(pos(j-1));Q2(pos(j))=Q2(pos(j-1))+T(pos(j),1);endendendendY1p(:,1)=Q1;Y3p(:,1)=Q3;%第三步:计算剩余工序的安排for k=2:nR=X(:,k);%取出第k道工序Q3=floor(R);%向下取整即得到各工件在第k道工序使用的机器的编号%下面计算各工件第k道工序的开始时刻和结束时刻for i=1:P(k)%取出机器编号pos=find(Q3==i);%取出使用编号为i的机器为其加工的工件的编号lenpos=length(pos);if lenpos>=1EndTime=Y2p(pos,k-1);%取出这些机器在上一个工序中的结束时刻POS=zeros(1,lenpos);%上一个工序完成时间由早到晚的排序for jj=1:lenposPOS(jj)=ppp(1);EndTime(ppp(1))=Inf;end%根据上一个工序完成时刻的早晚,计算各工件第k道工序的开始时刻和结束时刻Q1(pos(POS(1)))=Y2p(pos(POS(1)),k-1);Q2(pos(POS(1)))=Q1(pos(POS(1)))+T(pos(POS(1)),k);%前一个工件的结束时刻if lenpos>=2for j=2:lenposQ1(pos(POS(j)))=Y2p(pos(POS(j)),k-1);%预定的开始时刻为上一个工序的结束时刻if Q1(pos(POS(j)))<Q2(pos(POS(j-1)))%如果比前面的工件的结束时刻还早Q1(pos(POS(j)))=Q2(pos(POS(j-1)));endendendendendY1p(:,k)=Q1;Y2p(:,k)=Q2;Y3p(:,k)=Q3;end%第四步:计算最优的Makespan值Y2m=Y2p(:,n);Zp=max(Y2m);%第五步:绘甘特图if plotiffor i=1:mfor j=1:nmPoint1=Y1p(i,j);mPoint2=Y2p(i,j);mText=m+1-i;PlotRec(mPoint1,mPoint2,mText);Word=num2str(Y3p(i,j));%text*mPoint1+*mPoint2,,Word);hold onx1=mPoint1;y1=mText-1;x2=mPoint2;y2=mText-1;x4=mPoint1;y4=mText;%fill([x1,x2,x3,x4],[y1,y2,y3,y4],'r');fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,,1]);text*mPoint1+*mPoint2,,Word);endendendfunction PlotRec(mPoint1,mPoint2,mText)% 此函数画出小矩形% 输入:% mPoint1 输入点1,较小,横坐标% mPoint2 输入点2,较大,横坐标% mText 输入的文本,序号,纵坐标vPoint = zeros(4,2) ;vPoint(1,:) = [mPoint1,mText-1];vPoint(2,:) = [mPoint2,mText-1];vPoint(3,:) = [mPoint1,mText];vPoint(4,:) = [mPoint2,mText];plot([vPoint(1,1),vPoint(2,1)],[vPoint(1,2),vPoint(2,2)]); hold on ;plot([vPoint(1,1),vPoint(3,1)],[vPoint(1,2),vPoint(3,2)]); plot([vPoint(2,1),vPoint(4,1)],[vPoint(2,2),vPoint(4,2)]); plot([vPoint(3,1),vPoint(4,1)],[vPoint(3,2),vPoint(4,2)]);参考文献(1)《MATLAB基础教程》清华大学出版社第一版(2)《计算机工程与应用》 2009年第36期。

相关文档
最新文档