【问题标题】:How to generate all posible binary nxm matrices, where the sum of each row is 1如何生成所有可能的二进制 nxn 矩阵,其中每行之和为 1
【发布时间】:2019-10-14 22:17:27
【问题描述】:

我正在执行一项任务,我必须向美国所有州分配 1 至 10 个配送中心。我在 excel 中制作了一个模型来计算所有成本,显然任务的目标是找到最便宜的方法。我有 50 行(每个州)和 10 列(所有可能的 DC 位置)。我的模型是基于这个矩阵的,如果我改变矩阵,成本会立即显示出来。唯一的限制是每个状态正好由 1 个 DC 提供。

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

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

【问题讨论】:

  • 几乎所有事情都可以使用编程语言实现。但我认为这不是真正的问题,对吧?否则答案只是“是”。但是,这不是代码编写服务,我们会帮助您解决问题,一般需要minimal reproducible example。阅读更多How to Ask
  • 所以它基本上是Travelling salesman problem。这是一个未解决的数学问题,但是有一些启发式和概率算法可以达到一些好的结果。

标签: python r matlab matrix


【解决方案1】:

TLDR:没有。


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

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

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

1125899906842624

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

(2**50) * 100 / 1024 / 1024 / 1024 / 1024 = 102400 TB 数据。

并且处理所有这些(对于普通计算机来说是最乐观的结果)将花费等于:

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

而且 10x50 会更多...

【讨论】:

  • 我害怕这样的事情......不过感谢您的澄清。我想我必须改变我的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多