装配线调度问题

# 装配线调度问题
# 问题描述:
# 某个工厂生产一种产品,有两种装配线选择,每条装配线都有n个装配站。
# 可以单独用装配线1或2加工生产,也可以使用装配线i的第j个装配站后,
# 进入另一个装配线的第j+1个装配站继续生产。现想找出通过工厂装配线的最快方法。
# 装配线i的第j个装配站的装配时间为ai,j,从一个装配线生产后转移到另一个装配线所耗费的时间为ti,j
# 进入装配线的时间为ei,生产完成后离开装配线的时间为xi

在这里插入图片描述

import numpy as np
# 动态规划法
# 算法思想:
# 对于装配站S1,j来说,通过装配站的最快线路只能以下二者之一:
# 通过装配线S1,j-1的最快线路,然后直接通过装配站Si,j;
# 通过装配站S2,j-1的最快线路,从装配线2移动到装配线1,然后通过装配线S1,j。
# 用fi[j]表示从入口到装配站Si,j的最快路径。则有
# f1[1] = e1 + a1,1
# f1[j] = min{f1[j-1] + a1,j, f2[j-1] + t2,j-1 + a1,j}, j>1
# f2[1] = e2 + a2,1
# f2[j] = min{f2[j-1] + a2,j, f1[j-1] + t1,j-1 + a2,j}, j>1
def assembly_line(a, t, e, x, n):
    f = np.zeros((2, n))
    f[0][0] = e[0] + a[0][0]
    f[1][0] = e[1] + a[1][0]
    for j in range(n):
        f[0][j] = min(f[0][j - 1] + a[0][j], f[1][j - 1] + t[1][j - 1] + a[0][j])
        f[1][j] = min(f[1][j - 1] + a[1][j], f[0][j - 1] + t[0][j - 1] + a[1][j])
    min_t = min(f[0][n - 1] + x[0], f[1][n - 1] + x[1])
    # 返回最小的时间
    return min_t

测试数据

a = np.array([[7, 9, 3, 4, 8, 4], [8, 5, 6, 4, 5, 7]])
t = np.array([[2, 3, 1, 3, 4], [2, 1, 2, 2, 1]])
e = [2, 4]
x = [3, 2]
n = 6
print(assembly_line(a, t, e, x, n))

测试结果

在这里插入图片描述

Guess you like

Origin blog.csdn.net/weixin_49346755/article/details/121517876