Permutation Flow Shop总时间

时间:2014-02-18 20:37:31

标签: r algorithm permutation job-scheduling

考虑一个矩阵 M(i,j),它描述机器i完成作业j 的总时间和作业序列 S 执行作业的顺序。例如:

像这样: enter image description here

在这种情况下,S = j1, j2, j3的总时间为13。我使用以下代码来获取此值:

M = matrix(c(4, 2, 2, 5, 3, 2), ncol = 3)
total = 0

for (i in 2:nrow(M))
  total = total + sum( pmax(M[i, ], M[i - 1, ]) )

print(total)

它输出12并且应该是13.此外,我不确定如何将S合并到此。 关于如何获得正确价值的任何想法?谢谢!

1 个答案:

答案 0 :(得分:1)

我认为这可以满足您的需求:

M <- matrix(c(4, 2, 2, 5, 3, 2), ncol = 3)
M2 <- cbind(M, matrix(0, nrow=nrow(M), ncol=nrow(M) - 1))
vec <- seq(len=ncol(M2))
M2.ord <- M2
for(i in 1:nrow(M2)) {
  M2.ord[i, ] <- vec
  vec <- c(tail(vec, 1), head(vec, -1)) + ncol(M2)
}
M2.shift <- matrix(t(M2)[M2.ord], nrow=nrow(M2))
sum(do.call(pmax, split(M2.shift, row(M2.shift))))

烦人的步骤是创建M2.shift:

     [,1] [,2] [,3] [,4]
[1,]    4    2    3    0
[2,]    0    2    5    2

从那时起,它几乎就是你使用的逻辑。请注意,这假设我们使用M。

中定义的所有步骤