流水车间调度问题
这种并行+串行用什么方法比较好?——混合流水线?还是其他……
流水线车间加工:
1.4个工件,同时4台机器开始加工
2.加工完成后,2个工件顺序进入流水线的下一个机器,另外2个工件顺序进入流水线的下一个机器
3.2个工件顺序进入流水线的再次下一个机器,2个工件再次顺序进入流水线的一个机器
4.此时4个工件已加工完成,顺序进入1台机器加工
5.4个工件已加工完成,顺序再次进入1台机器加工
6.加工完成
见下图
流水车间调度问题
这种并行+串行用什么方法比较好?——混合流水线?还是其他……
流水线车间加工:
1.4个工件,同时4台机器开始加工
2.加工完成后,2个工件顺序进入流水线的下一个机器,另外2个工件顺序进入流水线的下一个机器
3.2个工件顺序进入流水线的再次下一个机器,2个工件再次顺序进入流水线的一个机器
4.此时4个工件已加工完成,顺序进入1台机器加工
5.4个工件已加工完成,顺序再次进入1台机器加工
6.加工完成
见下图
这种流水线车间加工的情况可以使用混合流水线调度算法来解决。
详细的混合流水线调度算法的步骤:
1、输入:流水线上的机器数量 $n$,每台机器的加工时间 $t_1, t_2, \dots, t_n$,流水线上的工件数量 $m$。
2、初始化:
①设置工厂的总生产周期为 $T=0$。
②设置每台机器的剩余加工时间为 $r_i=t_i$,$i=1,2,\dots,n$。
3、循环:对于每个工件 $i$,执行以下步骤:
①对于每台机器 $j$,更新机器 $j$ 的剩余加工时间 $r_j$。
②使用贪心算法,在流水线的机器中选择当前最短的机器 $k$ 加工工件 $i$。
③计算工件 $i$ 的完成时间 $t_i$。
④更新工厂的总生产周期 $T=\max(T,t_i)$。
4、输出:工厂的总生产周期 $T$。
代码示例:
def hybrid_pipeline_scheduling(n, t, m):
# 初始化工厂的总生产周期 T 和每台机器的剩余加工时间 r
T = 0
r = [t[i] for i in range(n)]
# 循环加工每个工件
for i in range(m):
# 更新每台机器的剩余加工时间 r
for j in range(n):
if r[j] > 0:
r[j] -= 1
# 选择当前最短的机器 k 加工工件 i
k = min(range(n), key=r.__getitem__)
# 计算工件 i 的完成时间 t[i]
t[i] = T + t[k]
# 更新工厂的总生产周期 T
T = max(T, t[i])
# 输出工厂的总生产周期 T
return T
调用这个函数的示例:
# 流水线上有 4 台机器,每台机器的加工时间分别为 2, 3, 5, 7
n = 4
t = [2, 3, 5, 7]
# 流水线上有 5 个工件
m = 5
# 调用混合流水线调度算法
T = hybrid_pipeline_scheduling(n, t, m)
# 输出工厂的总生产周期
print(T)