Matlab非线性二进制最小化

时间:2016-03-06 11:17:40

标签: matlab multidimensional-array minimization

我必须设置一个具有特定概率分布的音素表来编码。 现在有22个基本元素(每个元素具有指定的概率,总和100%),它应映射到12元素表,其具有期望的元素概率(总和100%)。

因此,最小化的一部分是合并几个基本元素以获得12个表元素。每个基本元素必须恰好出现一次。

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

B1 + ERR1 =斧

B2 + ERR2 =斧

B3 + ERR3 =斧

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

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

1 个答案:

答案 0 :(得分:0)

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

首先,问题可以改写为:

errSum = ERR1 + ERR2 + ERR3 = 3AX-B1-B2-B3

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

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

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

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

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