最优流水作业调度问题
0018算法笔记——【动态规划】流水作业调度问题与Johnson法则

0018算法笔记——【动态规划】流水作业调度问题与Johnson 法则1、问题描述:n个作业{1,2,…,n}要在由2台机器M1和M2组成的流水线上完成加工。
每个作业加工的顺序都是先在M1上加工,然后在M2上加工。
M1和M2加工作业i所需的时间分别为ai和bi。
流水作业调度问题要求确定这n个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。
2、问题分析直观上,一个最优调度应使机器M1没有空闲时间,且机器M2的空闲时间最少。
在一般情况下,机器M2上会有机器空闲和作业积压2种情况。
设全部作业的集合为N={1,2,…,n}。
S是N的作业子集。
在一般情况下,机器M1开始加工S中作业时,机器M2还在加工其他作业,要等时间t后才可利用。
将这种情况下完成S中作业所需的最短时间记为T(S,t)。
流水作业调度问题的最优值为T(N,0)。
设π是所给n个流水作业的一个最优调度,它所需的加工时间为aπ(1)+T’。
其中T’是在机器M2的等待时间为bπ(1)时,安排作业π(2),…,π(n)所需的时间。
记S=N-{π(1)},则有T’=T(S,bπ(1))。
证明:事实上,由T的定义知T’>=T(S,bπ(1))。
若T’>T(S,bπ(1)),设π’是作业集S在机器M2的等待时间为bπ(1)情况下的一个最优调度。
则π(1),π'(2),…,π'(n)是N的一个调度,且该调度所需的时间为aπ(1)+T(S,bπ(1))<aπ(1)+T’。
这与π是N的最优调度矛盾。
故T’<=T(S,bπ(1))。
从而T’=T(S,bπ(1))。
这就证明了流水作业调度问题具有最优子结构的性质。
由流水作业调度问题的最优子结构性质可知:从公式(1)可以看出,该问题类似一个排列问题,求N个作业的最优调度问题,利用其子结构性质,对集合中的每一个作业进行试调度,在所有的试调度中,取其中加工时间最短的作业做为选择方案。
流水作业调度问题

流水作业调度问题描述:N个作业{1,2, ..... ,n}要在由两台机器M1和M2组成的流水线上完成加工。
每个作业加工的顺序都是先在M1上加工,然后在M2上加工。
M1和M2加工作业i所需的时间分别为ai和bi , 1 < i < n。
流水作业高度问题要求确定这n个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。
可以假定任何任务一旦开始加工,就不允许被中断,直到该任务被完成,即非优先调度。
输入:输入包含若干个用例, 第一行为一个正整数K(1<=K<=1000), 表示用例个数, 接下来K 个用例,每个用例第一个为作业数N(1<=N<=1000),接下来N行,每行两个非负整数,分别表示在第一台机器和第二台机器上加工时间。
输出:每个用例用一行输出采用最优调度所用的总时间,即从第一台机器开始到第二台机器结束的时间。
样例输入:145 612 24 148 7样例输出:33假定直接按顺序进行完成,则机器1 可以不用考虑,因为作业1 完成后就可以完成作业2,直到作业n,需要的时间为所有作业在机器1上的时间总和。
但是,机器2 上完成的时间呢?机器2上完成的时间显示除了作业在机器2上完成的时间总和, 还要加上等待时间, 即要求先在机器1 上完成后,才能在机器2 上开始。
例如5 612 2两个作业,顺序如下:按顺序,则在机器1 上进行作业1 需要5小时,后进行作业2, 需要12小时,和为17 小时;机器2 上,作业1 只能从第5 小时开始,第11 小时完成,等待了5 小时,等到作业2 在机器1 上完成后(已经是第17时),再完成2小时,共19小时。
机器2的等待时间总计为11 小时。
逆序,在机器1上进行作业2需要12小时,后进行作业1 需要5小时,和为17小时,和前面一样;机器2上,作业2完成后开始,等待了12小时,然后再等3小时开始作业1的6小时, 共计21小时,共等待了15小时。
问题描述n个作业{1,2,…,n}要在由2台机器M1和M2组成的流

业集S在机器M2的等待时间为b(1)情况下的一个最优调度。则
(1),’(2),…,’(n)是N的一个调度,这个调度所需的时间 为a(1)+T(S,b(1))<a(1)+T’。这与是N的最优调度矛盾。故
T’T(S,b(1))。从而T’=T(S,b(1))。即流水作业调度问题具有
最优子结构的性质。
3
流水作业调度
2. 递归结构
由流水作业调度问题的最优子结构性质可知:
T ( N ,0) min{a i T ( N {i}, bi )}
1 i n
T ( S , t ) min{ai T ( S {i}, bi max{ t ai ,0})}
iS
T(S,t)中的bi+max{t-ai,0}:
的最优值为m(i,j),即m(i,j)是背包容量为j,可选 择物品为i,i+1,…,n时0-1背包问题的最优值。由01背包问题的最优子结构性质,可以建立计算m(i,j)的 递归式如下:
j wn vn m(n, j ) 0 0 j wn
j wi max{m(i 1, j ),m(i 1, j wi ) vi } m(i, j ) 0 j wi m(i 1, j )
2
流水作业调度
1. 最优子结构性质
设是n个流水作业的一个最优调度,所需的加工时间为 a(1)+T’。其中T’是在机器M2的等待时间为b(1)时,安 排作业(2),…,(n)所需的时间。 记S=N-{(1)},则有T’=T(S,b(1))。
由T的最优性可知,T’T(S,b(1))。若T’>T(S,b(1)),设’是作
流水作业调度问题

一、 问题描述给定n 个作业,每个作业有两道工序,分别在两台机器上处理。
一台机器一次只能处理一道工序,并且一道工序一旦开始就必须进行下去直到完成。
一个作业只有在机器1上的处理完成以后才能由机器2处理。
假设已知作业i 在机器j 上需要的处理时间为t[i,j]。
流水作业调度问题就是要求确定一个作业的处理顺序使得尽快完成这n 个作业。
二、 算法分析n 个作业{1,2,…,n}要在由2台机器1M 和2M 组成的流水线上完成加工。
每个作业加工的顺序都是先在1M 上加工,然后在2M 上加工。
1M 和2M 加工作业i 所需要的时间分别为t[i,1]和t[i,2], n i ≤≤1.流水作业调度问题要求确定这n 个作业的最优加工顺序,使得从第一个作业在机器1M 上开始加工,到最后一个作业在机器2M 上加工完成所需的时间最少。
从直观上我们可以看到,一个最优调度应使机器1M 没有空闲时间,且机器2M 的空闲时间是最少。
在一般情况下,机器2M 上会有机器空闲和作业积压两种情况。
设全部作业的集合为},....,2,1{n N =。
N S ⊆是N 的作业子集。
在一般情况下,机器1M 开始加工S 中作业时,机器2M 还在加工其他作业,要等时间t 后才能利用。
将这种情况下完成S 中作业所需的最短时间计为),(t S T 。
流水作业调度问题的最优解为)0,(N T 。
1. 证明流水作业调度问题具有最优子结构设a 是所给n 个流水作业的一个最优调度,它所需要的加工时间为']1),1([T a t +。
其中,'T 是在机器2M 的等待时间为]2),1([a t 时,安排作业)(),......,3(),2(n a a a 所需的时间。
记)}1({a N S -=,则我们可以得到])2),1([,('a t S T T =。
事实上,有T 的定义可知])2),1([,('a t S T T ≥.若])2),1([,('a t S T T >,设'a 是作业集S 在机器2M 的等待时间为]2),1([a t 情况下的一个最优调度。
计算机系统结构三四章作业及答案

3.1 简述流水线技术的特点。
(1) 流水线把一个处理过程分解为若干个子过程,每个子过程由一个专门的功能部件来实现。
因此,流水线实际上是把一个大的处理功能部件分解为多个独立的功能部件,并依靠它们的并行工作来提高吞吐率。
(2) 流水线中各段的时间应尽可能相等,否则将引起流水线堵塞和断流。
(3) 流水线每一个功能部件的前面都要有一个缓冲寄存器,称为流水寄存器。
(4) 流水技术适合于大量重复的时序过程,只有在输入端不断地提供任务,才能充分发挥流水线的效率。
(5) 流水线需要有通过时间和排空时间。
在这两个时间段中,流水线都不是满负荷工作。
3.2 解决流水线瓶颈问题有哪两种常用方法?答:细分瓶颈段与重复设置瓶颈段 3.3 有一条指令流水线如下所示:(1)求连续输入10条指令的情况下,该流水线的实际吞吐率和效率。
(2)该流水线的瓶颈在哪一段?请采用两种不同的措施消除此瓶颈。
对于你所给出的两种新的流水线,连续输入10条指令时,其实际吞吐率和效率各是多少?解:(1)2200(ns)2009200)10050(50t )1n (t T maxm1i i pipeline =⨯++++=∆-+∆=∑=)(ns 2201T nTP 1pipeline-==45.45%1154400TP mtTP E m1i i≈=⋅=∆⋅=∑= (2)瓶颈在3、4段。
⏹ 变成八级流水线(细分)850(ns)509850t 1)(n t T maxm1i i pipeline =⨯+⨯=∆-+∆=∑=)(ns 851T nTP 1pipeline-== 58.82%17108400TP mtiTP E m1i ≈=⋅=∆⋅=∑= ⏹ 重复设置部件)(ns 851T nTP 1pipeline-==58.82%1710885010400E ≈=⨯⨯=3.4 有一个流水线由4段组成,其中每当流过第三段时,总要在该段循环一次,然后才能流到第4段。
作业车间调度问题综述

330013)
摘 要: 介绍了作业车间调度问题的理论、模型,对当前求解作业车间调度问题的各种方法进行分类并逐一进行分析
比较,指出各种方法的优缺点。总结了今年来在该领域取得的研究成果和存在的问题,并对今后的发展方向进行了讨论。
关键词: 作业车间调度; 启发式; 调度算法; 近似算法
中图分类号:C931.2
整数规划模型由 Baker[1]提出,下面简单给出一个 n /
m/G/ Cmax调度问题的常用数学描述。
Min max{max c } ik
(3-1-1)
s.t.c -p +M(1-a )≥ c ,i=1,2,…,n,h,k=1,2,…,m
ik ik
ihk
ih
c -c +M(1-x )≥ p , i,j=1,2,…,n,k=1,2,…,m
但使用单一的优先规则得到的解不能满足要求如何把多个规则进行融合设置一个合理的满意度值是近期研究的方向同时为了得到更好的近似解研究者们都把基于优先分配规则得到的近似解作为初始解如禁忌搜索的初始422拉格朗日松弛法拉氏松弛技术作为一种求解复杂优化问题的近似算法由于其能在较短的时间内获得高质量的次优解并能进行性能评价等优点近年来受到学术界的广泛重视
弧(虚线)表示同一机器上加工各操作的连接。
LWKR(Least Work Remaining)法则,即优先选择余下加
施工组织计划技术之一-流水作业法

划分施工段
施工段划分原则
根据工程特点、施工条件和工期要求开 展。
施工段数量确定
根据工程规模和施工力量,确定合理 的施工段数量,确保施工进度和资源 利用效率。
确定施工流程
施工流程规划
根据工程设计和技术要求,确定各施 工段的先后顺序和衔接方式,形成完 整的施工流程。
案例二:道路桥梁施工中的流水作业法
总结词
高效率、高质量、低成本
详细描述
在道路桥梁施工中,流水作业法能够实现高效率、高 质量和低成本的施工目标。通过合理划分施工段,组 织不同工种的施工人员按照一定的顺序进行作业,能 够充分利用施工机械和劳动力资源,提高施工效率, 缩短建设周期。同时,流水作业法能够保证施工过程 的连续性和均衡性,有利于提高工程质量。此外,流 水作业法还能够降低施工成本,提高经济效益。
降低成本
流水作业法能够有效地控制 施工进度,减少不必要的延 误和浪费,从而降低施工成 本。
缺点
适应性差
流水作业法对施工环境和条件的要求较 高,一旦发生变化,需要对施工计划进
行调整,适应性较差。
对管理要求高
流水作业法需要精细化的施工管理, 对管理人员的要求较高,需要具备丰
富的经验和技能。
对工人的技术水平要求高
高效利用资源
当工程需要大量的人力和物力资源时 ,流水作业法能够实现资源的优化配 置和高效利用。
高质量要求
对于对工程质量要求较高的工程项目 ,流水作业法能够通过专业化的生产 和管理,确保工程质量。
连续性需求
对于需要连续施工的工程项目,流水 作业法能够保证施工的连续性和稳定 性。
02
CATALOGUE
流水步距优化
在满足工程要求的前提下,优化流水步距,提高流水作业的效率。
改进迭代贪婪算法求解可重入流水车间调度问题

改进迭代贪婪算法求解可重入流水车间调度问题可重入流水车间调度问题(reentrant flow shop scheduling problem)是指在多工序流水车间中,存在可重入现象的调度问题。
在车间中,每个作业需要按照一定的工序顺序加工,而每个工序都有不同的机器可以完成。
不同于一般流水车间问题,可重入流水车间问题允许同一作业在同一工序上重复进行,增加了调度的复杂性和难度。
迭代贪婪算法是一种常用于解决可重入流水车间调度问题的启发式算法。
它的基本思想是通过多次迭代,每次选择当前局部最优的决策来逐步优化最终调度结果。
然而,传统的迭代贪婪算法存在着一些不足之处,例如容易陷入局部最优解、收敛速度较慢等。
因此,本文将针对这些不足之处进行改进,以求更好地解决可重入流水车间调度问题。
一、改进之处在改进迭代贪婪算法求解可重入流水车间调度问题时,我们可以从以下几个方面进行改进:1. 变异操作策略的引入:传统的迭代贪婪算法只考虑选择当前局部最优解进行迭代更新,但这种策略存在着局限性。
我们可以引入变异操作策略,即在每次迭代中,按照一定概率引入一定程度的随机性,以避免陷入局部最优解。
通过引入变异操作,可以增强算法的全局搜索能力,提高算法的质量和效率。
2. 邻域搜索的扩展:邻域搜索是迭代贪婪算法中的关键步骤。
传统的迭代贪婪算法仅仅根据局部最优解进行邻域搜索,但这种策略可能无法充分探索搜索空间。
我们可以考虑扩展邻域搜索的范围,在搜索过程中引入一定程度的随机性,以增加解空间的探索度。
通过扩展邻域搜索的范围,可以更全面地搜索潜在解,提高算法的全局搜索能力。
3. 优化目标函数的定义:目标函数的定义直接关系到算法求解可重入流水车间调度问题的效果。
传统的迭代贪婪算法通常采用简单的目标函数,例如最小化总加工时间或最大化作业的完工时间。
然而,这样的目标函数并不能充分考虑到车间效率与资源利用率等因素。
我们可以重新定义目标函数,结合车间实际情况和约束条件,以综合考虑多个指标,从而求得更合理、更优的调度结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
该算法是如此经典以至于 ACM 界已经有该算法的题目,下面是北大 PKU POJ 第 2751 题 Saving Endeavour(我校的 BOJ 上也有,不过是从 POJ 上照搬过来的): 有 2 台机器,n 件任务,必须先在 S1 上做,再在 S2 上做。任务之间先做后做任意。求 最早的完工时间。 双机调度问题 Johnson 算法简析: 1) 把作业按工序加工时间分成两个子集, 第一个集合中在 S1 上做的时间比在 S2 上少, 其 它的作业放到第二个集合。 先完成第一个集合里面的作业, 再完成第二个集合里的作业。 2) 对于第一个集合,其中的作业顺序是按在 S1 上的时间的不减排列;对于第二个集合, 其中的作业顺序是按在 S2 上的时间的不增排列。
最优流水作业调度问题
摘要
本文给出了双机流水作业调度的 Johnson 算法, 并结合 POJ 上的一道题目详述了该算法 的具体编程实现和应用。 关键词: 双机流水作业调度 Johnson 算法
正文
流水作业是并行处理技术领域的一项关键技术,它是以专业化为基础,将不同处理对象的 同一施工工序交给专业处理部件执行,各处理部件在统一计划安排下,依次在各个作业面上完 成指定的操作。 流水作业调度问题是一个非常重要的问题, 其直接关系到计算机处理器的工 作效率。然而由于牵扯到数据相关、资源相关、控制相关等许多问题,最优流水作业调度问 题处理起来非常复杂。已经证明,当机器数(或称工序数)大于等于 3 时, 流水作业调度问 题是一个 NP-hard 问题(e.g 分布式任务调度) 。粗糙地说,即该问题至少在目前基本上没有 可能找到多项式时间的算法。只有当机器数为 2 时,该问题可有多项式时间的算法(机器数 为 1 时该问题是平凡的) 。 我们先给出流水作业调度的定义: 设有 n 个作业,每一个作业 i 均被分解为 m 项任务: Ti1 , Ti2 , … , Tim (1 ≤ i ≤ n,故 共有n × m个任务), 要把这些任务安排到 m 台机器上进行加工。 如果任务的安排满足下列 3 个条件, 则称该安排为流水作业调度: 1. 每个作业 i 的第 j 项任务Tij (1 ≤ i ≤ n, 1 ≤ j ≤ m) 只能安排在机器Pj 上进行加工; 2. 作业 i 的第 j 项任务Tij (1 ≤ i ≤ n, 2 ≤ j ≤ m)的开始加工时间均安排在第j − 1项任务 Ti,j −1 加工完毕之后,任何一个作业的任务必须依次完成,前一项任务完成之后才能开 始着手下一项任务; 3. 任何一台机器在任何一个时刻最多只能承担一项任务。 最优流水作业调度是指: 设任务Tij 在机器Pj 上进行加工需要的时间为t ij 。 如果所有的t ij (1 ≤ i ≤ n, 1 ≤ j ≤ m)均 已给出, 要找出一种安排任务的方法, 使得完成这 n 个作业的加工时间为最少。 这个 安排称之为最优流水作业调度。 前面已经说过,当m ≥ 3时该问题是 NP 问题,这里我们只给出m = 2时时间复杂度在多 项式以内的 Johnson 算法。 求解流水作业调度问题的 Johnson 算法具体描述如下: 1) 设a[i]和b i (0 ≤ i < ������)分别为作业 i 在两台设备上的处理时间。建立由三元组(作业 号,处理时间,设备号)组成的三元组表d。其中,处理时间是指每个作业所包含的两 个任务中时间较少的处理时间。
Johnson 算法的时间取决于对作业集合的排序,因此,在最怀情况下算法的时间复杂度 为O(nlogn),所需的空间复杂度为O(n)。
c 语言代码如下: #include <stdio.h> #include <memory.h> #include <algorithm> using namespace std; const int MAXN=10005; struct TNode { int s1,s2; }ws[MAXN]; int topf,tops; int n; bool operator<(TNode x,TNode y) { if (x.s1<x.s2&&y.s1>=y.s2) return true; if (x.s1<x.s2&&y.s1<y.s2) return x.s1<y.s1; if (x.s1>=x.s2&&y.s1>=y.s2) return x.s2>y.s2; return false; } int max(int x,int y) { return x>y?x:y; } void Work() { sort(ws,ws+n); int i,t1=0,t2=0; for (i=0;i<n;i++) { t1+=ws.s1; t2=max(t1,t2)+ws.s2; } printf("%dn",t2); }
设n = 4, a0 , a1 , a2 , a3 = (3,4,8,10)和 b0 , b1 , b2 , b3 = (6,2,9,15)的作业 0 的三元组为 (0,3,0),作业 1 的三元组为(1,2,1)。 如图(a)所示。 2) 对三元组表按处理时间排序,得到排序后的三元组表 d。如图(b)所示。 3) 对三元组表的每一项d[i](0 ≤ i < ������),从左右两端生成最优作业排列c[j](0 ≤ j < ������),c[j] 是作业号。如果d[i]设备号为 1,则将作业 i 置于 c 的左端末尾,否则置于 c 的右端 末尾。如图(c)所示,由两端向中间存放。 a) 三元组表 作业号 0 1 2 3 b) 按处理时间排序 作业号 1 0 2 3 c) 最优作业排列 (0, 2, 3, 1) d) 最优调度方案 p1 p2 3 6 8 9 10 15 4 2 处理时间 2 3 8 10 设备号 1 0 0 0 处理时间 3 2 8 10 设备号 0 1 0 0
void Read() { int i; while (scanf("%d",&n)&&n) { for (i=0;i<n;i++) scanf("%d%d",&ws.s1,&ws.s2); Work(); } } int main() { Read(); return 1; }
ห้องสมุดไป่ตู้