如何生成所有可能的二进制nxm矩阵,其中每一行的总和为1

时间:2019-05-29 10:18:37

标签: python r matlab matrix

我正在做一个分配工作,我必须向美国所有州分配最多10个配送中心中的1个。我已经在excel中建立了一个模型来计算所有成本,显然,分配的目标是找到最便宜的方法。我有50行(每种状态)和10列(所有可能的DC位置)。我的模型基于该矩阵,如果我更改矩阵,成本将立即显示。唯一的限制是每个状态都由1个DC供电。

很明显,我无法手动进行所有可能的组合,我试图将我的模型转换为优化程序(AIMMS),但这需要花费我已经放入excel模型中的时间。我在想如果我有所有可能的矩阵(用R,Matlab或Python生成,不在乎),我可以遍历电子表格,让程序读取成本,以确定最佳选择。从理论上讲,它可以通过1个DC提供最多的状态,最多可以提供10个状态,因此需要每个可能的1x50、2x50、3x50 ... 10x50矩阵来确定最佳状态。

那么简而言之,是否有可能生成每个nxm二进制矩阵,并且最好在R的每一行上生成总和为1的矩阵,否则可以在Matlab或Python中生成?

1 个答案:

答案 0 :(得分:1)

TLDR:否。


让我们看一个最简单的示例:2 DC。您可能的行将是:

  • (1,0)
  • (0,1)

现在,您要构造所有可能的2x50矩阵。它们的数量为2 ^ 50(50行中可能有2行)。等于:

1125899906842624

我们假设每个矩阵存储100个字节。所有2x50矩阵将存储:

(2**50) * 100 / 1024 / 1024 / 1024 / 1024 = 102400兆字节数据。

要处理所有这些问题(对于普通计算机而言,最乐观的结果)将花费等于:

(2**50) / 10**9 / 60 / 60 = 312小时。

10x50甚至会更多...