1

Я действительно люблю R, но время от времени это действительно дает мне головную боль ...Решить Constrained квадратичного программирования с R

У меня есть следующий простой квадратичную задачу минимизации, которая может быть сформулирована и решена в кратчайшие сроки в Excel (нажмите на картинку, чтобы увеличить):

enter image description here

и

![enter image description here

сама проблема очень проста: я хочу, чтобы свести к минимуму (w1^2+w2^2)/2, находя наилучшее сочетание w1, w2 и b при ограничениях, что для всех Y*(w1*X1+w2*X2+b) >= 1

Я знаю, что есть quadprog пакет для решения такого рода проблем, но Я нахожу это так неинтуитивными, что я не в состоянии правильно определить проблему :-(Я не хочу сказать это, но Excel, кажется, лучше подходит для определения задач оптимизации, как это: - (((

Мой вопрос
Как сделать сформулируйте вышеуказанную проблему правильно, чтобы ее можно было решить с помощью R (независимо от того, какой пакет), и программа достигает правильных значений для w1, w2 и b (как видно на рисунке выше). Пожалуйста, не просто отправляйте ссылки, но дайте фактический код, который работает. Было бы здорово, если бы вы могли прокомментировать ваш код, чтобы стало ясно, почему вы делаете то, что делаете. Спасибо!

Необходимые данные здесь:

data <- matrix(c(2.947814,6.626878, 1, 
       2.530388,7.785050, 1, 
       3.566991,5.651046, 1, 
       3.156983,5.467077, 1, 
       2.582346,4.457777,-1, 
       2.155826,6.222343,-1, 
       3.273418,3.520687,-1),ncol=3,byrow=T) 
colnames(data) <- c("X1","X2","y") 

Добавление
Некоторые люди обиделись на мою просьбу предоставить код (а не просто ссылки). Я извинился за это и объяснил причины, по которым до сих пор я не нашел хороших подходов в ответах на SO. Более глубокая причина этого заключается в том, что проблема необычна в том смысле, что b находится только в ограничении, а не в целевой функции. Поэтому я все еще думаю, что этот вопрос подходит для SO.

+0

Это изображение Excel не говорит мне, чего вы на самом деле хотите достичь.Вы должны объяснить это в вопросе. Excel кажется несущественным для вашего фактического вопроса. – Roland

+0

Если вы думаете, что я собираюсь выяснить эти ссылки на ячейки Excel, подумайте еще раз. – Roland

+0

@ Роланд: Проблема сама по себе довольно проста, я отредактировал вопрос соответственно - это лучше сейчас? – vonjd

ответ

4

На самом деле проблема немного сложная, потому что b присутствует только в матрице ограничений неравенства, но не в целевой функции. Поэтому матрица в задаче о квадратичном программировании является только положительной полуопределенной, но не положительно определенной.

Мой подход заключается в том, чтобы установить матричный элемент, соответствующий b, на очень небольшое значение - в моем случае 1e-9. Кто-то еще более знакомы с такими проблемами оптимизации могли бы знать, как решить эту проблему правильно ...

Вычислить solve.QP вход

c1=data[,"X1"]*data[,"y"] 
c2=data[,"X2"]*data[,"y"] 

#I use 1e-9 for the b entry 
Dmat=matrix(`[<-`(numeric(9),c(1,5,9),c(1,1,1e-9)),3,3) 
dvec=rep(0,3) 
Amat=cbind(c1,c2,data[,"y"]) 
bvec=rep(1,nrow(Amat)) 

Решите с solve.QP

library(quadprog) 
sol=solve.QP(Dmat=Dmat,dvec=dvec,Amat=t(Amat),bvec=bvec)$solution 
sol 
#[1] 2.903910 1.201258 -14.734964 

То же, что первенствует.