【问题标题】:weighted sum of matrices optimization矩阵优化的加权和
【发布时间】:2015-06-18 11:48:56
【问题描述】:

我是优化初学者,欢迎任何该领域的指导。

我有 15 个矩阵(即,Di,大小为 (n*m))并希望找到最佳权重(即,wi)对它们进行加权平均,并制作一个与给定矩阵更相似的更好矩阵(即Dt)。

其实我的目标函数是这样的:

min [norm2(sum(wi * Di) - Dt) + norm2(W)]
for i=1 ... 15    s.t. sum(wi) = 1 , wi >= 0

如何在 Matlab 中优化这个函数?

【问题讨论】:

    标签: matlab optimization mathematical-optimization quadratic-programming


    【解决方案1】:

    您正在描述一个简单的Quadratic programming,可以使用 Matlab 的quadprog 轻松优化。

    这是怎么回事:

    你的目标函数是[norm2(sum(wi * Di) - Dt) + norm2(W)],受到w 的一些线性约束。让我们用一些简化的符号重写它。让w 是一个 15×1 的未知向量。让D 是一个n*m-by-15 矩阵(每一列是您拥有的Di 矩阵之一 - 写成单列),Dt 是一个n*m-by-1 向量(与您的Dt 相同,但写为列向量)。现在一些线性代数(使用 ||x||^2 = x'*x 和 argmin x 等价于 argmin x^2)

    [norm2(sum(wi * Di) - Dt)^2 + norm2(W)^2] =
    (D*w-Dt)'*(D*w-Dt) + w'*w =
    w'D'Dw - 2w'D'Dt + Dt'Dt + w'w =
    w'(D'D+I)w - 2w'D'Dt + Dt'Dt
    

    最后一项 Dt'Dtw 保持一致,因此可以在最小化期间​​丢弃,留下

    H = 2*(D'*D+eye(15));
    f = -2*Dt'*D;
    

    至于约束sum(w)=1,这可以很容易地定义为

    Aeq = ones(1,15);
    beq = 1;
    

    而下限lb = zeros(15,1) 将确保所有w_i>=0

    以及二次优化:

    w = quadprog( H, f, [], [], Aeq, beq, lb );
    

    应该为您解决问题!

    【讨论】:

    • @NereaGonzalezVazquez 在这种特殊情况下,二次规划比遗传算法更适合。
    • 非常感谢!你的解释对我很有用。
    • 但是我对 H 有疑问。为了计算项 D' * D,我有两个 3d 矩阵(即 (m * n * 15) * (n * m * 15))。我做了 D(:,:,i)' * D(:,:,i) for i:1...15 在一个循环中,结果是一个 m * m * 15 矩阵。这是真的吗?如果是,我如何用 eye(15) 添加它?
    • @roya - 请仔细阅读我的解决方案:我将 m-by-n 矩阵转换为 m*n-by-1 向量(简单地重塑它们)这将简化代数和允许简单的解决方案。
    • 哦。你说的对!我不明白。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2021-10-20
    • 2015-02-23
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    相关资源
    最近更新 更多