关于权重向量的 R 中二次形式的最大化
Maximization of quadratic forms in R with respect to a vector of weights
我有一个距离(相似度)矩阵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 之间,包括 0 和 1。我需要找到一个向量 w 使得总和 w*D*t(w) 最大化。其中t(w)是w的转置,符号“*”表示矩阵乘法。
令人惊讶的是,我找不到可以在 R 中执行此操作的求解器。
谢谢
也许你可以试试包 pracma
中的 fmincon
,例如,
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
我有一个距离(相似度)矩阵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 之间,包括 0 和 1。我需要找到一个向量 w 使得总和 w*D*t(w) 最大化。其中t(w)是w的转置,符号“*”表示矩阵乘法。
令人惊讶的是,我找不到可以在 R 中执行此操作的求解器。
谢谢
也许你可以试试包 pracma
中的 fmincon
,例如,
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