置换流水车间调度问题的MATLAB求解
求解置换流水车间调度问题的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++混合编程求解单件车间调度问题
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鸟群算法求解车间调度问题详解及实现源码⽬录⼀、车间调度简介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算法摘要:置换流水车间调度问题(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算法苏志雄;伊俊敏【摘要】针对以最小化最大完工时间为目标的置换流水车间调度问题,建立了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集成求解车间调度优化问题
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是 视 化 设计 语 言 之 一 , 在 数 据 处 理 方 面 却 非 常 繁 琐 , 码 冗 长 但 代
置换流水车间调度问题的MATLAB求解
置换流⽔车间调度问题的MATLAB求解物流运筹实务课程设计题⽬:置换流⽔车间调度问题的MATLAB求解置换流⽔车间调度问题的MATLAB求解⽬录⼀、前⾔ (5)⼆、问题描述 (6)三、算法设计 (7)四、实验结果 (15)摘要⾃从Johnson 1954年发表第⼀篇关于流⽔车间调度问题的⽂章以来.流⽔车间调度问题引起了许多学者的关注。
安排合理有效的⽣产调度是⽣产活动能井然有序开展,⽣产资源得到最佳配置,运作过程简明流畅的有⼒保证。
流⽔车间调度问题是许多实际流⽔线⽣产调度问题的简化模型。
它⽆论是在离散制造⼯业还是在流程⼯业中都具有⼴泛的应⽤。
因此,对进⾏研究具有重要的理论意义和⼯程价值。
流⽔线调度问题中⼀个⾮常典型的问题,⽽置换流⽔线调度问题作为FSP 问题的⼦问题,是⼀个著名的组合优化问题。
该问题是⼀个典型的NP难问题,也是⽣产管理的核⼼内容。
随着⽣产规模的扩⼤,流⽔线调度问题的优化对提⾼资源利⽤率的作⽤越来越⼤,因此对其研究具有重要的理论和现实意义。
关键字:流⽔车间,单件⼩批量⽣产,jsp模型,Matlab前⾔企业资源的合理配置和优化利⽤很⼤程度上体现在车间⼀层的⽣产活动中,所以加强车间层的⽣产计划与控制⼀直在企业⽣产经营活动中占有⼗分重要的地位。
车间⽣产计划与控制的核⼼理论是调度理论。
车间调度问题是⼀类重要的组合优化问题。
为适应订货式、多品种、⼩批量⽣产的需要,引进了置换流⽔车间调度概念。
在置换流⽔车间调度优化后,可以避免或⼤⼤减少流程⼯作时间、提⾼⽣产效率。
因此,研究成组技术下车间调度问题是很有必要的。
⽣产调度,即对⽣产过程进⾏作业计划,是整个个先进⽣产制造系统实现管理技术、优化技术、⽩动化与计算机技术发展的核⼼。
置换流⽔车间调度问题是许多实际⽣产调度问题的简化模型。
⽣产计划与调度直接关系着企业的产出效率和⽣产成本,有效的计划与调度算法能最⼤限度地提⾼企业的效益。
调度问题是组合优化问题,属于NP问题,难以⽤常规⼒⼀法求解。
粒子群算法解决置换流水车间调度问题方法综述
lsfrsaceso ov i ego igaddvl igop rceSO not i i grh .eet o erhr tsle t t rwn ee pn a i WI i z o a oi mR cn— to e w hh n o f tl T p m a nl t t - l, eea t m to s n e f rhs rbe .o rm t te ut r v l m n p r c w r y t r r ul eh d di a o ip olmT o oe h f r e eo e tf at l s am h e oo f a ds t p h d e p o ie ot i i loim n ov emuao f wso ceuigpolm dpoi e rne o e piz o a rh adsl p r tin o hpshdl m a n g t t e t l n rbe sa rv er eec fr — n d f d s nn e e g rh smm r e em to dpe fr ahs pi li epo ut nsh d l g i i b t r oi m, g g t a t l u ai st h d a o t o c e s vn t rd ci e ui z he s d e t no gh o c n
机 械 设 计 与 制 造
8 4
文章 编 号 :0 1 39 (0 2 0 — 0 4 0 10 — 9 7 2 1 )8 0 8 — 3
02流水线车间生产调度的遗传算法MATLAB源代码
流水线车间生产调度的遗传算法MATLAB源代码n个任务在流水线上进行m个阶段的加工,每一阶段至少有一台机器且至少有一个阶段存在多台机器,并且同一阶段上各机器的处理性能相同,在每一阶段各任务均要完成一道工序,各任务的每道工序可以在相应阶段上的任意一台机器上加工,已知任务各道工序的处理时间,要求确定所有任务的排序以及每一阶段上机器的分配情况,使得调度指标(一般求Makespan)最小。
function [Zp,Y1p,Y2p,Y3p,Xp,LC1,LC2]=JSPGA(M,N,Pm,T,P)%--------------------------------------------------------------------------% JSPGA.m% 流水线型车间作业调度遗传算法% GreenSim团队——专业级算法设计&代写程序% 欢迎访问GreenSim团队主页→/greensim%--------------------------------------------------------------------------% 输入参数列表% 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;endfarm{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)};end%记录最佳个体和收敛曲线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(0.5*mPoint1+0.5*mPoint2,mText-0.5,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,0.5,1]);text(0.5*mPoint1+0.5*mPoint2,mText-0.5,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)]);。
带多处理器的混合流水车间调度matlab程序
function [Zp,Y1p,Y2p,Y3p,Xp,LC1,LC2]=JSPGA(M,N,Pm,T,P)T=[8 90 0 0 0 0 0 0 0 0;0 0 99 62 0 0 0 0 0 0;0 0 0 0 76 94 0 0 0 0;0 0 0 0 0 0 14 68 0 0;0 0 0 0 0 0 0 0 88 27];P=[2;1;4;2;4;1;1;2;4;2];N=100;M=400;Pm=0.75;%--------------------------------------------------------------------------% JSPGA.m% 流水线型车间作业调度遗传算法% 输入参数列表% 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)};%父代个体B=farm{Ser(i+1)};%父代相邻个体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);%随机选择交叉点a=[A(:,1:cp),B(:,(cp+1):n)];%双亲双子单点交叉 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:Nf1=FITNESS(Ser(2*i-1));f2=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)};fitness(i)=FITNESS(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+1;end%输出结果并绘图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(0.5*mPoint1+0.5*mPoint2,mText-0.5,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,0.5,1]);text(0.5*mPoint1+0.5*mPoint2,mText-0.5,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)]);。
求解置换流水车间调度问题的混合鸟群算法
求解置换流水车间调度问题的混合鸟群算法闫红超;汤伟;姚斌【期刊名称】《计算机应用》【年(卷),期】2022(42)9【摘要】针对置换流水车间调度问题(PFSP),提出了一种混合鸟群算法(HBSA)以更加有效地最小化最大完工时间。
首先,为了改善初始种群的质量和多样性,结合一种基于NEH(Nawaz-Enscore-Ham)的启发式算法和混沌映射提出了一种新的种群初始化方法;其次,为了使算法能够处理离散的调度问题,采用最大排序值(LRV)规则将连续的位置值转换为离散的工件排序;最后,为了强化算法对解空间的探索能力,借鉴变邻域搜索(VNS)和迭代贪婪(IG)算法的思想针对个体最佳工件排序和种群最佳工件排序分别提出了局部搜索方法。
针对广泛使用的Rec标准测试集进行了仿真测试,并与目前有效的元启发式算法——刘等提出的混合差分进化算法(L-HDE)、混合共生生物搜索算法(HSOS)、离散狼群算法(DWPA)、多班级教学优化算法(MCTLBO)相比较,结果表明,HBSA取得的最佳相对误差(BRE)、平均相对误差(ARE)的平均值比上述四种算法至少下降了73.3%、76.8%,从而证明HBSA具有更强的寻优能力和更好的稳定性。
尤其是针对测试算例Rec25和Rec27,仅HBSA的求解结果达到了目前已知最优解,进一步证明了其优越性。
【总页数】8页(P2952-2959)【作者】闫红超;汤伟;姚斌【作者单位】陕西科技大学电气与控制工程学院;陕西科技大学电子信息与人工智能学院【正文语种】中文【中图分类】TP39;TP301.6【相关文献】1.一种新的混合粒子群算法求解置换流水车间调度问题2.混合共生生物搜索算法求解置换流水车间调度问题3.应用改进混合进化算法求解零空闲置换流水车间调度问题4.基于混合电磁算法求解置换流水车间调度问题5.新混合鸟群算法求解零空闲流水车间调度问题因版权原因,仅展示原文概要,查看原文内容请购买。
置换流水车间调度问题的中心引力优化算法求解
置换流水车间调度问题的中心引力优化算法求解刘勇;马良【摘要】目前求解置换流水车间调度问题的智能优化算法都是随机型优化方法,存在的一个问题是解的稳定性较差.针对该问题,本文给出一种确定型智能优化算法——中心引力优化算法的求解方法.为处理基本中心引力优化算法对初始解选择要求高的问题,利用低偏差序列生成初始解,提高初始解质量;利用加速度和位置迭代方程更新解的状态;利用两位置交换排序法进行局部搜索,提高算法的优化性能.采用置换流水车间调度问题标准测试算例进行数值实验,并和基本中心引力优化算法、NEH 启发式算法、微粒群优化算法和萤火虫算法进行比较.结果表明该算法不仅具有更好的解的稳定性,而且具有更高的计算精度,为置换流水车间调度问题的求解提供了一种可行有效的方法.%The existing intelligent optimization algorithms for permutation flow-shop scheduling problem are all stochastic optimization methods.One problem with these approaches is that they have poor solution stability.In this paper,a method based on central force optimization algorithm which is a deterministic intelligent optimization algorithm is proposed to resolve this problem.The basic algorithm depends upon the choice of the initial solutions.To deal with this problem,low-discrepancy sequences are used to generate initial solutions to improve the quality of initial solutions.The acceleration and position equations are employed to update the solutions.A sorting method to swap two positions in a solution is used to conduct local searches,to enhance the performance of the algorithm.The benchmarks are used to perform numerical experiments.The presented algorithm is compared with basiccentral force optimization algorithm,NEH heuristic algorithm,particle swarm optimization algorithm,and firefly algorithm.The results demonstrate that the proposed method not only has better solution stability but also higher accuracy.The presented approach provides a feasible and effective way to solve the permutation flowshop scheduling problem.【期刊名称】《运筹与管理》【年(卷),期】2017(026)009【总页数】6页(P46-51)【关键词】置换流水车间调度;最大完工时间;中心引力优化算法;确定性【作者】刘勇;马良【作者单位】上海理工大学管理学院,上海200093;上海理工大学管理学院,上海200093【正文语种】中文【中图分类】O221.3置换流水车间调度问题(Permutation Flow-Shop Scheduling Problem,PFSP)是一种典型的生产调度问题,有着广泛的工程应用背景,大概10%的产品制造系统、装配线系统和信息服务设施都可以转换为PFSP模型[1]。
置换流水车间调度问题的两阶段分布估计算法
置换流水车间调度问题的两阶段分布估计算法孙良旭;曲殿利;刘国莉【摘要】Aiming to solve the permutation flow shop scheduling problem, minimizing the total flow time as the objective function, it proposes a novel two-stage estimation of distribution algorithm. In the first stage, it firstly uses NEH (Nawaz-Enscore-Ham, NEH)heuristic to construct a relatively optimal initial individual, and then generates initial popu-lation randomly. To keep the diversities of the population, it puts forward a preferred mechanism to select individuals and establish the probability model, and at the same time, uses elite mechanism to keep the optimal individual in the contem-porary populations. Finally it uses probability model to sample and generate the next generation of population. In the second stage, it uses the insert and interchange operator to do neighborhood search around the optimal individual which is got in the first stage in order to improve the global search ability of estimation of distribution algorithm and prevent it from entrapping the local optimal. Through sufficient experiments, contrast and analysis for outcome of the examples, it proves the feasibility and effectiveness of the proposed algorithm.%针对置换流水车间调度问题,以最小化总流水时间为目标,提出了一种新颖的两阶段分布估计算法。
matlab生产调度问题及其优化算法
生产调度问题及其优化算法(采用遗传算法与MATLAB编程)信息014 孙卓明二零零三年八月十四日生产调度问题及其优化算法背景及摘要这是一个典型的Job-Shop动态排序问题。
目前调度问题的理论研究成果主要集中在以Job-Shop问题为代表的基于最小化完工时间的调度问题上。
一个复杂的制造系统不仅可能涉及到成千上万道车间调度工序,而且工序的变更又可能导致相当大的调度规模。
解空间容量巨大,N个工件、M台机器的问题包含M(N)!种排列。
由于问题的连环嵌套性,使得用图解方法也变得不切实际。
传统的运筹学方法,即便在单目标优化的静态调度问题中也难以有效应用。
本文给出三个模型。
首先通过贪婪法手工求得本问题最优解,既而通过编解码程序随机模拟优化方案得出最优解。
最后采用现代进化算法中有代表性发展优势的遗传算法。
文章有针对性地选取遗传算法关键环节的适宜方法,采用MATLAB 软件实现算法模拟,得出优化方案,并与计算机随机模拟结果加以比较显示出遗传算法之优化效果。
对车间调度系列问题的有效解决具有一定参考和借鉴价值。
一.问题重述某重型机械厂产品都是单件性的,其中有一车间共有A,B,C,D四种不同设备,现接受6件产品的加工任务,每件产品接受的程序在指定的设备上加工,条件:1、每件产品必须按规定的工序加工,不得颠倒;2、每台设备在同一时间只能担任一项任务。
(每件产品的每个工序为一个任务)问题:做出生产安排,希望在尽可能短的时间里,完成所接受的全部任务。
要求:给出每台设备承担任务的时间表。
注:在上面,机器 A,B,C,D 即为机器 1,2,3,4,程序中以数字1,2,3,4表示,说明时则用A,B,C,D二.模型假设1.每一时刻,每台机器只能加工一个工件,且每个工件只能被一台机器所加工 ,同时加工过程为不间断; 2.所有机器均同时开工,且工件从机器I 到机器J 的转移过程时间损耗不计; 3.各工件必须按工艺路线以指定的次序在机器上加工多次; 4.操作允许等待,即前一操作未完成,则后面的操作需要等待,可用资源有限。
Matlab与Visual C++混合编程求解车间调度问题
0 引 言
制 造 车 间 作 为 先 进 制 造 系 统 的 核 心 , 其 构 建 高 为 效 的调 度 方 案 与 优 化 技 术 已成 为 提 高 先 进 制 造 系 统 性 能 的主导 因素 , 间调 度 问题 应 运 而 生 。 随着 制 造 业 车
的快速 发 展 , 规模 定制 生产 、 球 化制 造 等思 想 的提 大 全
维普资讯
2 6 第2 0 年 期 0
文章 编号 :O 1— 2 5 20 )2— 0 1— 3 l0 26 (0 6 0 0 3 0
・ 设计与研 究 ・
M tb与 Vsa C +混合编程求解车 间调度 问题 aa l i l + u
常建娥 , 燕 何
p o igt e p o a s g s o e a d a p i t n V U S rv n h r g ms u i c p p l a i a e . r n n c o l
Ke o d : t b v u +;o b e rga n ;o c eue Gat y w r s mal ; i a C+ c m i p o mmigjbsh l; n t a sl n d r d
srcin o c e uef n s u cin r be , s a h w c e ued a clGa t pi u e h si tit sJ b S h o d l i e sfn t sp o lms a o C s o sh t o l n d l yn mia n t c rst u m- t
Co i e o r mmi g Mal b a d Vi a ++ t ov o c e u ePr b e mb n d Pr g a n ta n s lC u o S l eJ b S h d l o lms
基于改进鲸群算法的置换流水车间调度问题的应用研究
中文摘要置换流水车间调度问题通过合理的安排工件在机器上的加工顺序实现最大完工时间的最小化,从而达到提高生产效率和机器利用率的目的。
然而,置换流水车间调度问题从本质上讲属于整数规划问题,是一类NP-Hard问题,它的求解方法一直受到研究者的关注。
为此,本文以置换流水车间调度问题为研究对象,并采用鲸群算法来求解置换流水车间调度问题。
本文的主要工作包括:首先,传统的鲸群算法中搜索猎物行为是通过在解空间中随机选取一个点作为猎物位置,然后执行包围猎物操作。
既然猎物位置是随机选择的,则通过包围行为产生的鲸鱼位置也是随机的,因此新产生的鲸鱼就有可能落在鱼群密度较大的区域,而不利于提高算法的全局搜索能力。
为了克服上述的问题,本文提出基于拥挤度检测结果来调整鲸鱼位置,从而提高鲸鱼落在鱼群稀疏区域的概率,在一定程度上,平衡鲸群算法的全局开发性和局部勘探性。
其次,由于鲸群算法是针对求解连续问题提出的,但实际流水车间调度问题属于整数规划问题。
为此,本文采用按鲸鱼位置大小进行排序的整数编码,建立鲸鱼位置与调度可行解之间的一一对应关系,将改进鲸鱼算法应用到求解置换流水车间调度问题。
再次,为了进一步提高鲸群算法解决整数规划问题的能力,本文改进鲸群算法中搜索猎物的策略,提出采用适应于整数规划的局部搜索策略(互换法、插入法和逆序法)生成鲸鱼位置,并采用基于拥挤度的选择策略选择鲸鱼,在一定程度上提高鲸群的多样性,改善鲸群算法的全局搜索能力。
最后,为了验证本文所提出算法的有效性,将算法应用到求解不同规模的Taillard类和car类标准调度问题中,仿真结果证明了本文算法的有效性。
关键词:置换流水车间调度;鲸群算法;局部搜索策略;智能计算iiABSTRACTPermutation flow-shop scheduling realizes the minimization of the maximum completion time by reasonably arranging the processing sequence of workpieces on the machine, so as to improve production efficiency and machine utilization. However, permutation flow shop scheduling problem is essentially an integer programming problem, and it is a NP-Hard problem. Its solution method has been concerned by researchers. Therefore, this paper takes the permutation flow shop scheduling problem as the research object, and uses the whales swarm algorithm to solve the permutation shop scheduling problem. The main work of this paper includes:Firstly, the traditional whales swarm algorithm realizes searches for prey by randomly selecting a point in the solution space as the prey position, and then performing the surround operation. Since the location of prey is chosen randomly, the location of whale generated by enclosure behavior is also random, so the newly generated whale may fall in the area where the density of the whales is high, which is not conducive to improving the global search ability of the algorithm. In order to overcome the above problems, this paper proposes to adjust the location of whale based on crowding detection results, so as to improve the probability of whale landing in sparse areas, and to some extent, balance the global exploration and local exploration of whale swarm algorithm.Secondly, the whale swarm algorithm is proposed to solve the continuous problem, but the actual permutation flow shop scheduling problem belongs to the integer programming problem. For this reason, this paper uses integer coding sorted by whale location size to establish the one-to-one correspondence between whale location and scheduling feasible solution, and applies the improved whale algorithm to solve the permutation flow shop scheduling problem.Thirdly, in order to further improve the ability of whale swarm algorithm to solve integer programming problems, this paper improves the strategy of searching for prey in whale swarm algorithm, proposes a local search strategy (swap method, insertion method and reverse sequence method) adapting to integer programming to generate whale locations, and adopts a selection strategy based on crowding degree to select whales, which improves the diversity and global search capability of whale swarm algorithm to a certain extent.Finally, in order to verify the effectiveness of the proposed algorithm, the algorithm is applied to solve the standard scheduling problems of Taillard class and car class in different scales. The simulation results show the effectiveness of theiiiproposed algorithm.Key Words: Permutation Flow Shop Scheduling,Whale Swarm Algorithms,Local Search Strategy,Intelligent Computingiv目录独创性声明 (i)关于论文使用授权的说明 (i)中 文 摘 要 (ii)ABSTRACT (iii)1.绪论 (1)1.1 课题研究背景及意义 (1)1.2 置换流水车间调度问题的国内外研究现状 (2)1.2.1 置换流水车间调度问题 (2)1.2.2 流水车间调度问题的特点 (4)1.2.3置换流水车间调度问题描述 (5)1.2.4置换流水车间调度问题的发展 (5)1.2.5求解置换流水车间调度问题方法 (6)1.3 鲸群算法研究现状 (7)1.4 本文的主要内容及结构安排 (8)1.5本章小结 (8)2.鲸群算法基本原理 (9)2.1 启发式算法 (9)2.2 鲸群算法 (10)2.2.1 鲸群算法基本原理 (10)2.2.2 鲸群算法与典型智能群体优化算法的对比 (12)2.2.3 鲸群算法特征 (12)2.2.4 鲸群算法与其他算法的结合方式 (13)2.3 鲸群算法在置换流水车间调度问题中的应用 (13)2.4 本章小结 (16)3.基于拥挤度的改进鲸群算法 (17)3.1 引言 (17)3.2 基于拥挤度的改进鲸群算法 (17)3.2.1 传统鲸鱼算法 (17)3.2.2 基于拥挤度的改进鲸群算法(AWSA)原理 (19)3.2.3 基于拥挤度的改进鲸群算法(AWSA) (21)3.3 AWSA与WSA在标准及偏移函数上的对比 (20)3.3.1 实验环境 (21)3.3.2 实验参数 (21)3.3.3 仿真结果分析 (22)3.4 本章小结 (33)4.改进鲸群算法在置换流水车间调度问题中的应用 (34)4.1 置换流水车间调度问题的描述 (34)4.2 改进鲸群算法在车间调度问题中应用 (36)4.2.1 整数编码方式 (36)4.4.2 带整数编码的改进鲸群算法 (37)4.3 基于局部搜索策略的改进鲸群算法 (39)v4.3.1 局部搜索策略 (39)4.3.2 基于局部搜索策略的改进鲸群算法 (41)4.4 仿真实验 (42)4.5 本章小结 (47)5.总结与展望 (48)5.1 总结 (48)5.2 展望 (48)参考文献 (50)致 谢 (52)作者简介 (53)vi1.绪论1.1 课题研究背景及意义近年来以互联网、人工智能和大数据引领全球制造业的大背景下,生产制造企业是我国国民经济发展的基石,国家对现在我国的生产企业也是投入很多的人力和财力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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期。