【问题标题】:Matlab non-linear binary MinimisationMatlab非线性二进制最小化
【发布时间】:2016-03-06 11:17:40
【问题描述】:

我必须建立一个具有特定概率分布的音素表来编码事物。 现在有 22 个基本元素(每个都有一个指定的概率,总和 100%),它们应映射到一个 12 元素表上,该表具有 所需的元素概率(总和 100%)。

所以最小化的一部分是合并几个基本元素以获得 12 个表格元素。每个基本元素必须只出现一次。

此外,该表有 3 行。因此,22 个基本元素的相同 12 个元素组成必须最小化 3 个目标向量的误差。假设给定的目标向量是 b1,b2,b3(维度 12x1),给定的基向量是 x(维度 22x1),它们通过 连接未知矩阵 A (12x22) by:

b1+err1=Ax

b2+err2=Ax

b3+err3=Ax

总结一下:要找到 A 使得 dot_prod(err1+err2+err3, err1+err2+err3)=min(最小二乘)。而且 - 根据上面的解释 - A 必须只包含 1 和 0,而每列只有一个 1。

不幸的是,我不知道如何解决这个问题。它可以用不同于矩阵向量形式的方式表达吗? matlab中有哪些工具可以做到?

【问题讨论】:

  • 你在找A还是x?
  • 典型的解决方案是x'\b',但这不会将 A 的条目限制为 1-0 整数。这是一个更困难的问题,名为 0-1 线性规划。如果您有更多约束,那么您可以尝试添加它们 column sum is 1 row sum 1 etc 以帮助优化。
  • 对,x'\b' 可以对任意矩阵 A 执行此操作。关于如何实现 A 的 2 个要求的任何想法?

标签: matlab multidimensional-array minimization


【解决方案1】:

我想我在解析 Matlab 文档的某些部分时找到了答案。

首先,问题可以改写为:

errSum=err1+err2+err3=3Ax-b1-b2-b3

=> dot_prod(errSum, errSum) = min(A)

应用点积(最小二乘)产生二次标量表达式。

在语法方面,优化框中的 fmincon 工具可以完成这项工作。它具有约束参数,允许强制 Aij 为二进制且每列总和为 1。

但显然 fmincon 对于算法方面的二进制问题并不理想,应该使用 ga 工具代替,它可以以类似的方式调用。

由于在我的情况下等式会很长并且需要写出,所以我还没有尝试过。请纠正我,如果我错了。或添加更多解决方案方法(如果有)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多