【问题标题】:Maximization of quadratic forms in R with respect to a vector of weightsR中关于权重向量的二次形式的最大化
【发布时间】:2020-08-18 13:09:20
【问题描述】:

我有一个距离(相似度)矩阵D,例如,

D <- matrix(c(0.00, 1.00, 1.00, 0.10, 0.05, 1.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.90, 0.95, 0.10, 1.00, 0.90, 0.00, 0.15, 0.05, 1.00, 0.95, 0.15, 0.00),5,5)

和一个权重向量 w = (w1, ..., wn) 使得 sum(w) == 1。向量中的值 w 是实数,介于 0 和 1 之间,包括。我需要找到一个向量 w 使得总和 w*D*t(w) 最大化。其中t(w)是w的转置,符号“*”表示矩阵乘法。

令人惊讶的是,我在 R 中找不到可以做到这一点的求解器。

谢谢

【问题讨论】:

  • @chinsoon12,我认为你是对的。例如,参见“单位球面上的二次形式”here 部分。
  • @chinsoon12 我猜eigen(D)$vectors[,1] 忽略了约束sum(w)=10 &lt;=w&lt;=1
  • @chinsoon12 是的,如果最大化问题是无约束的,那么我相信你使用eigen 的方法是最优雅的

标签: r optimization algebra maximize quadratic-programming


【解决方案1】:

也许你可以试试 fmincon 从包 pracma,例如,

library(pracma)
D <- matrix(c(0.00, 1.00, 1.00, 0.10, 0.05, 1.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.90, 0.95, 0.10, 1.00, 0.90, 0.00, 0.15, 0.05, 1.00, 0.95, 0.15, 0.00),5,5)
n <- dim(D)[1]
res <- fmincon(rep(1,n),
               fn = function(w) -t(w)%*%D%*%w, 
               A = t(rep(1,n)), 
               b = 1,
               lb = rep(0,n),
               ub = rep(1,n))
w <- res$par

你会得到

> w
[1] 3.333331e-01 3.333338e-01 3.333331e-01 7.008297e-22 0.000000e+00

【讨论】:

  • 起始向量x0 = rep(1,n)所有解w都是正的。
  • @RuiBarradas 是的,是的!我更新了我的答案。我使用的是matrix(rep(1,n)/n),因为我不确定A*x0 = b 是否会在初始向量上进行检查,所以我想安全地使用它:)
  • 非常感谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
相关资源
最近更新 更多