如何生成仅包含1和0的14x10矩阵的所有可能组合

Tif*_*ny 1 python arrays matlab matrix

我正在研究一个问题,一个解决方案需要每个14x10矩阵的输入,这可能由1和0组成......我如何生成这些以便我可以将每个可能的14x10矩阵输入到另一个函数中?谢谢!

3月21日补充说:看起来我没有恰当地说出我的帖子.抱歉.我想要做的是针对几种情况优化10种不同生产单元的输出(给定不同的速度和停机时间).我的目标是放置一系列停机时间,以最大限度地减少日常生产中的差异.给出了每个单元允许的停机时间和频率.我目前正在尝试评估一个为期三周的周期,这意味着每三周就会将每个生产单元拆除一段时间.我要求计算机根据线条每三周只下降一次的约束来确定单位的下订单,并且每日生产的差异是最小的.我的第一种方法是使用Excel(我试图在上面描述)并且它不起作用(在那里并不令人惊讶)......其中1-运行,0-关闭以及何时将它们相加以计算生产.从设定的最大日产量中减去计算的产量.然后,将这些差异从Mon-Tues,Tues-Wed等进行比较,持续三周的时间范围,并使用求解器最小化.我的下一个方法是编写一个Matlab代码,其输入是容差(每天允许设置变化).有没有一个程序已经做到这一点或一个方法来做到这一点最简单?这似乎很简单,但我仍然在考虑不同的方法来解决这个问题.任何见解都会非常感激.

gru*_*czy 6

生成每个可能的1和0 矩阵14*10将生成2**140矩阵.我不相信你会有足够的寿命.我不知道,如果太阳在你完成之前仍然会发光.这就是为什么不可能生成所有这些矩阵的原因.你必须寻找其他解决方案,这看起来像一个蛮力.


gno*_*ice 6

这绝对不可能!可能的矩阵数为2 140,约为1.4e42.但是,请考虑以下内容......

  • 如果你随机生成两个14×10矩阵,它们相同的几率是1.4e42中的1.
  • 如果你要生成10亿个独特的14×10矩阵,那么你生成的下一个矩阵与其中一个矩阵相同的几率仍然非常小:1.4e33中的1.
  • MATLAB中默认随机数流使用Mersenne twister算法,其周期为2 19936 -1.因此,随机数发生器不应该在任何时候开始重复.

因此,您的方法应该是:

  • 找一台没有人想再次使用的电脑.
  • 为其保存尽可能多的存储空间以保存结果.
  • 在其上安装MATLAB并启动它.
  • 像这样随机开始计算矩阵:

    while true
      newMatrix = randi([0 1],14,10);
      %# Process the matrix and output your results to disk
    end
    
    Run Code Online (Sandbox Code Playgroud)
  • 走开

由于组合太多,您不必newMatrix与之前的任何矩阵进行比较,因为重复之前可能发生的时间长度是天文数字大.由于其他原因,您的处理更有可能停止,例如(按可能发生的顺序):

  • 磁盘空间不足以存储结果.
  • 停电了.
  • 您的计算机遭受致命的硬件故障.
  • 你过世了.
  • 地球过世了.
  • 宇宙死于慢热死亡.

注意:虽然我在上面的答案中注入了一些幽默,但我想我已经说明了一个有用的选择.如果您只是想对可能组合的一小部分进行采样(由于组合的数量很多,甚至可以将10亿个视为"小"),那么您不必经历额外的时间和内存消耗步骤保存已经处理过的所有矩阵并将新的矩阵与它进行比较,以确保不重复矩阵.由于重复组合的几率非常低,您可以安全地执行此操作:

for iLoop = 1:whateverBigNumberYouWant
  newMatrix = randi([0 1],14,10);  %# Generate a new matrix
  %# Process the matrix and save your results
end
Run Code Online (Sandbox Code Playgroud)


Dav*_*ver 6

实际实现在很大程度上取决于您希望如何表示矩阵...但假设矩阵可以由14*10 = 140元素列表表示:

from itertools import product
for matrix in product([0, 1], repeat=140):
    # ... do stuff with the matrix ...
Run Code Online (Sandbox Code Playgroud)

当然,正如其他海报所指出的那样,这可能不是你想做的......但如果它真的是你想要做的,那就是最好的代码(根据你的要求)去做.

  • 仍然完全不切实际,但我很高兴有人终于发布了答案. (2认同)
  • 太糟糕了,一旦算法结束,Planet Earth就不会出现这种情况:) (2认同)