【问题标题】:MATLAB: Generate all possible combination of a binary matrix with only one '1' in each columnMATLAB:生成二进制矩阵的所有可能组合,每列只有一个“1”
【发布时间】:2015-03-01 19:53:12
【问题描述】:

MATLAB:我想了解如何生成矩阵的所有可能组合(N x M),其中: - 元素是“1”和“0”。 - 每列应该只有一个“1”。 - 行数没有限制。所以每行内可以有多个“1”。

一种可能的状态,例如N=5 , M=6

1 0 1 0 0 0
0 1 0 0 0 1
0 0 0 0 0 0
0 0 0 1 1 0
0 0 0 0 0 0

此外,我想生成每个可能的组合矩阵,然后像这样计算一些东西(例如我的问题中的效用函数):

generate one possible matrix C
.
  .
    for i=1:N
      for j=1:M
        do something on C(:,:)
      end
    end
  .
.

(以穷举的方式)

【问题讨论】:

    标签: arrays matlab matrix


    【解决方案1】:

    会有很多。通常当这里的一个问题涉及到:我如何生成所有可能的X,真正的答案是:不要这样做,有太多可能的X。为您的问题寻找不同的方法。

    不过,您可以在行数的基础上使用数字表示:

    方法使用:dec2base

    免责声明:由于dec2base 的限制,这仅适用于2<=rows<=36(希望足够了。否则我们将复制编辑文件dec2base.m 并删除它的最后两行和@ 行中的错误检查987654325@ 实现2<=rows 的任意值。出于版权原因,我不会发布此代码。)。

    rows = 5; 
    cols = 6;
    assert((2<=rows)&&(rows<=36),'The dec2base-approach will only work for 2<=rows<=36');
    symbols = dec2base(0:rows-1, rows, 1);
    for ii = 0:rows^cols-1
        % Compute ii in base rows.
        iibR = dec2base(ii, rows, cols);
        C = bsxfun(@eq, symbols, iibR);
        disp(C);
    end
    

    生成没有dec2base的元组:

    我们还可以使用ndgrid 生成这些表示我们数字的元组。

    %%// Data
    rows = 3;
    cols = 4;
    %%// Compute all k-tuples of numbers 1:n
    n = rows;
    k = cols;
    Cs = cell(1,k);
    [Cs{:}] = ndgrid(1:n);
    tuples = reshape(cat(n+1, Cs{:}),n^k,[]);
    %%// Compute matrices
    for ii = 1:size(tuples,1);
        C = bsxfun(@eq, (1:rows).', tuples(ii,:));
        disp(C);
    end
    

    【讨论】:

    • dec2base 很不错:)
    • 谢谢! :) 同意你的观点,但这里的可能性取决于“行”和“列”的数量,当然假设一个有限状态考虑每个值的小值,最终给出答案,而在这里我们不关心复杂性和运行时间, 由于我们将在考虑逻辑和有限输入的情况下彻底搜索所有可能的状态,以便找到最佳回答状态(最优),然后我们可以将其与我们自己方法的结果进行比较。在我的优化问题中,值在 1 和 8 之间变化。再次感谢@knedlsepp
    • @knedlsepp 代码有问题,对于row>9,运行rows=12和cols=5,然后在ii==10时显示C,你会发现最后一列中没有“1”,其余行的结果相同(例如 ii==11 ,依此类推)。所有列都应包含一个“1”
    • @fhm:感谢您发现错误。这个版本现在应该适用于2&lt;=rows&lt;=36。如果你想要更多,你必须通过edit dec2base复制粘贴dec2base的内容,删除最后两行和第24行的错误检查,并以新名称保存函数。
    • @knedlsepp ,希望你一切都好,老实说,你的回答对我来说是最好的,只是想问你关于二进制矩阵中其他两种形式的穷举搜索:1)只有一个“每行允许 1" 并且对 cols 没有限制,其他情况:2) 在所有行和 cols 中允许多个 "1" (每个 col 中应该少一个 "1"),我的电子邮件:foad.hajiaghajani [在] gmail.com 。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多