如何在Matlab中通过所有可能的排列运行公式?

时间:2014-10-18 21:43:57

标签: matlab permutation

所以我有一个包含订单数据的矩阵,如下所示:

Order   Due Date    Processing Time   Early Penalty   Late Penalty
 1        4              5                2               8
 2        7             10                4               7 
 3        5              1                8               9
 4        5              3                7               2
 ..      ...             ...              ..              .. 
 ..      ...             ...              ..             .. .

我正在尝试对这些订单执行作业车间排序算法,以通过将到期日和处理时间相互比较来最小化惩罚。如何通过所有可能的订单排列来运行公式?

例如,我想在每个订单序列上应用特定的公式。 (序列1:订单1 - >订单2 - >订单3 - >订单4,序列2:订单2 - >订单4 - >订单3 - >订单1等)

1 个答案:

答案 0 :(得分:0)

函数perms将帮助您完成此操作。 perms列出了向量的所有排列,例如:

烫发(1:4)

ans =

 4     3     2     1
 4     3     1     2
 4     2     3     1
 4     2     1     3
 % Cut 16 rows
 1     2     3     4
 1     2     4     3
 1     4     2     3
 1     4     3     2
然而,请注意,这将很快变得无法管理。列表的排列数随着列表长度的阶乘而增长。因此,对于4个订单,您有24个排列。有10个订单,你现在有3628800个排列。有15个订单,你有1.3077e + 12个排列(即1.3万亿)。如果您可以保证订单数量永远不会超过10,那么这种方法仍然有用。