r - 目标函数中有 a_i x_i^2 项的二次规划

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

这样的目标函数

min⁡ ∑a_i (x_i )^2

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

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

最佳答案

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

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

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

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

https://stackoverflow.com/questions/41288219/

相关文章:

php - 通过 Composer 只安装单个包而不更新其他包

angularjs - 运行功能和位置路径问题

numpy - 什么是 numpy pypi 包命名约定

xamarin.ios - 如何将 -FIRAnalyticsDebugEnabled 传递给 Xa

r - 如何在 R 中获取面板数据固定效应回归的 corr(u_i, Xb)

spring - 如何设置 Google Cloud 以使用 AngularJS 客户端和 Java

apache-spark - 从 spark RDD 中删除空字符串

scala - 如何递归获取 Scala map 中包含的每个列表的最后一个元素?

performance - numpy数组子维度上的python操作

r - 如何计算 r 中数据框中的特定子集并将计算保存在另一个列表中