Максимизация квадратичных c форм в R относительно вектора весов - PullRequest
3 голосов
/ 04 мая 2020

У меня есть матрица расстояния (сходства) 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) такой, что сумма ( w ) == 1. Значения в векторе w действительны и составляют от 0 до 1 включительно. Мне нужно найти вектор w такой, чтобы сумма w * D * t ( w ) была максимизирована. Где t ( w ) - транспонирование w , а символ "*" обозначает умножение матриц.

Удивительно, но я не могу найти решатель, который может сделать это в R.

Спасибо

1 Ответ

3 голосов
/ 04 мая 2020

Может быть, вы можете попробовать 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
...