求解调度问题的启发式算法(1)讲课教案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一种改进的关键工序算法
刘智勇 徐昕
江苏科技大学经济管理学院,江苏 镇江 212003
摘要:针对max ///n m p F 问题,改进了关键工序法法,该算法同时注重关键工件与关键工序,通过对关键工件与非关键工件在关键工序前后的加工时间计算、比较来获得各工件加工的先后顺序,缩短最长流程时间。并将该启发式算法与关键工序法进行了对比分析,最后利用仿真的方法来验证所提出的方法的可行性。
关键词:Flow-shop 关键工件 关键工序 启发式算法 最长流程时间 0引言
Flow-shop 调度问题(flow shop scheduling problem,FSP )是许多实际流水线生产调度问题的简化模型,它无论是在离散制造工业还是在流程工业中都具有广泛的应用,因此其研究具有重要的理论意义和工程价值。n/m/p/F max 问题是Flow-shop
调度问题中的一种特殊情况,即所有工件在各台机器上的加工顺序都相同,也称流水作业排列排序问题或同顺序排序问题。其求解方法有精确方法
[1](分支定界法、穷举法等)、智能搜索法
[2,3,4](神经网络法、遗传算法、蚁群算法等)、启发式算法[4,5,6,7](Palmer 算法、C-D-S 法、关键工序法、最小排序系数法等)等等。由于Flow-shop 调度问题一般都属于NP 难题(nondeterministic polynomial)。精确方法只能求解小规模问题,对于大规模问题几乎被认为是无效算法,智能搜索法在求解上虽比启发式算法更接近最有解,但由于设计针对具体问题的智能搜索法对于许多人来说比较困难,特别是对于实际工程人员更是如此。所以启发式算法仍是用的很多的方法。主要的启发式算法有Palmer 算法、关键工序法和最小排序系数法等。其中,关键工序法贯穿着当前先进的管理思想,能够很好的对现实情况进行解释和分析。然而关键工序法所求的可行解很可能与最优解相差甚远,鉴于此,本文对其进行了改进。
1 max ///n m p F 问题描述
max
///n m p F 问题可以描述为:有n 个工件在m 台机器上加工,各工件有完全相
同的工艺路线,每一台机器上加工工件的先后顺序也完全相同;一个工件不能同时在不同的机器上加工;每台机器同时只能加工一个工件;各工件在加工完后立即送下一道工序;工件在机器上开始加工,必须一直进行到该工序完工,中途不允许停下来插入其它工件;所有工件在0时刻已准备就绪,机器调整时间包括在加工时间内;
允许工件在工序之间等待,允许机器在任务未到达时闲置;优化目标是求出这n 个任务的一个全排列,使其最长流程时间(也称加工周期)max F 最短,则max F 的计算方
法如下:
,00,,11,1,1,,11,,max
,00max(,)(1,2,,1,2,,i j i i i i j
i j i j i j n m C C C C t C C C t F C i n j m ---==⎧⎪=+⎪⎨=+⎪⎪==⋅⋅⋅=⋅⋅⋅⎩;其中;) 上式中,i j C 代表工件i 在机器j 上的完工时间,
,i j t 代表工件i 在机器j 上的加工时间。
2改进的关键工序法
改进的关键工序法要求抓住关键工序和关键工件,定义关键工序为各道工序上加工各个工件总时间最长的工序;定义关键工件为各个工件在各道工序加工总时间最长的工件。若关键工件都多个,则按照各关键工件首道工序加工时间与尾道工序加工时间的大小分组,首道工序加工时间小于尾道的工件为第一组,首道工序加工时间等于尾道的工件第二组,首道工序加工时间大于尾道的工件为第三组,优先顺序为{第一组,第二组,第三组},对于第一组中的各关键工件之间的排序则按关键工序前各道工序总加工时间从小到大排序,对于第三组的各关键工件之间的排序则按关键工序后各道工序总加工时间从大到小排序,第二组的各关键工件的排序时需先比较第一组与第三组内的工件个数,当第一组的工件个数少于或等于第三组时,第二组内工件按第一组规则排,否则按第三组的规则排。
对关键工件以外的所有工件同样比较首道工序加工时间与尾道工序加工时间,按小于、等于、大于分为三组,其组内排序规则与关键工件个组内排序规则相同。最后按{非关键工件第一组,非关键工件第二组,关键工件第一组,关键工件第二组,关键工件第三组,非关键共建第三组}的顺序进行总排序,即可获得满意的max F 。对于关键工序为首道工序的情形,就把次关键工序看成是上述的关键工序,排序步骤不变。
用数学语言表示如下:
Step1: 对i ∀,计算,*,1m i i j j t t ==∑,对j ∀,计算*,,1n
j i j i t t ==∑,
定义{}",*1,*2,*,*|max(,,,)i n i A i t t t t ∈==⋅⋅⋅为关键工件,
定义{}"*,*,1*,2*,|max(,,,)j m j B j t t t t ∈==⋅⋅⋅ 为关键工序。
Step2::若()1Card A >(其中()Card 表示括号中集合包含元素的个数),
则⑴{}"""1,1,|i i m A i t t =<≠∅,则计算""1,1
j i j j t -=∑的值,按该值从小到大排列获得"i 一
个排序优先1C 。
⑵{}"""2,1,|i i m A i t t =>≠∅,则计算
"",1m i j j j t =+∑的值,按该值从大到小排列获得"i 一个排序优先序列2C 。
⑶{}"""3,1,|i i m A i t t ==≠∅,则①当12()()Card A Card A ≤时,那么按⑴的规则获得3A 中元素的排序;②当12()()Card A Card A >时,那么按⑵的规则获得3A 中元素的排序;设3A 中元素的排序优先序列为3C 。
将Step2:中的各种排序优先序列一起排序,得到1C →3C →2C 。
Step3::若i A ∉,则
⑴{}4,1,|i i m A i t t =<≠∅,则计算"1
,1j i j j t -=∑的值,按该值从小到大排列获得i 一个排
序优先4C 。
⑵{}5,1,|i i m A i t t =>≠∅,则计算
",1m i j j j t =+∑的值,按该值从大到小排列获得i 一个排
序优先序列5C 。
⑶{}6,1,|i i m A i t t ==≠∅,则①当45()()Card A Card A ≤时,那么按Step3中⑴的规则获得6A 中元素的排序;②当45()()Card A Card A >时,那么按Step3中⑵的规则获得6A 中元素的排序;设6A 中元素的排序优先序列为6C 。
Step4::将上述结果进行总排序优先级:4C →5C →1C →3C →2C →6C 。
经过上述四步,获得的结果就是满意解。 3算法示例
设有8个零件A 、B 、C 、D 、E 、F 、G 、H 在8台机器M1、M2、M3、M4、M5、M6、M7、M8上同顺序加工,其工艺过程及工时定额见表1,试求出最长流程时间F max .