关于#流水线车间flow shop调度问题#的问题,如何解决?

流水车间调度问题
这种并行+串行用什么方法比较好?——混合流水线?还是其他……
流水线车间加工:
1.4个工件,同时4台机器开始加工
2.加工完成后,2个工件顺序进入流水线的下一个机器,另外2个工件顺序进入流水线的下一个机器
3.2个工件顺序进入流水线的再次下一个机器,2个工件再次顺序进入流水线的一个机器
4.此时4个工件已加工完成,顺序进入1台机器加工
5.4个工件已加工完成,顺序再次进入1台机器加工
6.加工完成

见下图

img

这种流水线车间加工的情况可以使用混合流水线调度算法来解决。
详细的混合流水线调度算法的步骤:
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)

你这不存在调度问题吧,又没有环路。从机器1到机器5的工程最短时间取决于四个工件每台机器最长的加工时间。

遗传算法(GA)求解带约束的流水车间(flow shop)调度问题——python
可以借鉴下
https://blog.csdn.net/weixin_46346676/article/details/117857279

参考一下https://blog.csdn.net/seagullLol/article/details/107056348