【问题标题】:Quadratic programme with a_ix_i^2 terms in objective function目标函数中具有 a_ix_i^2 项的二次规划
【发布时间】:2017-05-08 09:05:25
【问题描述】:

关于二次规划,我将如何设置像

这样的目标函数

min⁡ ∑a_i (x_i )^2

“quadprog”或“limSolve”包的矩阵形式(对于这个包我不确定它是否需要矩阵形式)?

从我目前看到的讨论来看,没有二次项的乘法。

【问题讨论】:

    标签: r matrix quadratic-programming quadprog


    【解决方案1】:

    让我们考虑一个您提到的形式的简单线性约束二次规划:

    min  0.5x^2 + 0.7y^2
    s.t. x + y = 1
         x >= 0
         y >= 0
    

    quadprog 包的解决方案

    quadprog 包接受以下形式的模型:

    min −d'b + 1/2b'Db
    s.t. A'b >= b0
    

    为了将我们的问题转化为这种形式,我们需要构造一个以(2*0.5 2*0.7)为主对角线的矩阵D,以及一个具有三个约束和右侧b0的矩阵A

    dvec <- c(0, 0)
    Dmat <- diag(c(1.0, 1.4))
    Amat <- rbind(c(1, 1), c(1, 0), c(0, 1))
    bvec <- c(1, 0, 0)
    meq <- 1  # The first constraint is an equality constraint
    

    现在我们可以将其提供给solve.QP

    library(quadprog)
    solve.QP(Dmat, dvec, t(Amat), bvec, meq=meq)$solution
    # [1] 0.5833333 0.4166667
    

    limSolve 包的解决方案

    limSolve 包的 lsei 函数接受以下形式的模型:

    min  ||Ax-b||^2
    s.t. Ex = f
         Gx >= h
    

    为了得到我们的目标函数,我们需要构造矩阵A,以(sqrt(0.5) sqrt(0.7))为主对角线,设置b为0向量,以及编码其他信息的矩阵和向量:

    A <- diag(c(sqrt(0.5), sqrt(0.7)))
    b <- c(0, 0)
    E <- rbind(c(1, 1))
    f <- 1
    G <- diag(2)
    h <- c(0, 0)
    

    现在我们可以将此信息提供给lsei

    library(limSolve)
    lsei(A, b, E, f, G, h)$X
    # [1] 0.5833333 0.4166667
    

    【讨论】:

    • 感谢您的帮助!我能否澄清一个领域:如果目标函数是 min⁡ ∑a_i (x_i )^2 这是否意味着我可以将这两个项(使用“limSolve”)相乘(a_i 不是平方的,因此对“ A"): A
    • @NeilC 恐怕我不明白。您是否尝试解决与我在答案中看到的不同的优化问题?
    • 再次感谢。我希望建立一个二次程序,其中对于目标函数,我将一个非二次项乘以一个二次项,例如 ∑a_i (x_i )^2 受线性约束。您的示例很有帮助,但我不想将这些术语加在一起,而是希望将它们相乘。你知道这在这两个 R 包中是否可行吗?所以不是 0.5x^2 + 0.7y^2 有可能有 0.5x * 0.7y^2
    • @NeilC 不再是二次程序(你有一个三次项)。在这种情况下, quadprog 和 limSolve 都无济于事。这是一个与当前问题截然不同的问题,因此我建议使用页面顶部的“”链接提出一个单独的问题。
    猜你喜欢
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    相关资源
    最近更新 更多