2015-12-11 2 views
-1

Ищу для R решателя, чтобы минимизировать функцию F (X) при ограничении Ax < = В и х> = 0минимизировать функцию при ограничениях

где А представляет собой матрица, а х и В являются векторами ,

Знаете ли вы, пожалуйста?

Спасибо!

+0

Да, спасибо, B также является вектором, я исправил его – Nik

+0

Посмотрите на 'constrOptim' –

+0

является' f' линейной функцией? ;-) – jogo

ответ

1

Поскольку ваша программа включена в квадратичную целевую функцию, но имеет линейные ограничения, она является выпуклой. Следовательно, вам не нужно прибегать к расширенным нелинейным библиотекам.

Посмотрите на пакет quadprog. Из документации, первый пример должен работать как хороший шаблон для

## First example from documentation of `quadprog`: 
## 
## Assume we want to minimize: -(0 5 0) %*% b + 1/2 b^T b 
## under the constraints:  A^T b >= b0 
## with b0 = (-8,2,0)^T 
## and 
## 
## 
## we can use solve.QP as follows: 
## 
Dmat  <- matrix(0,3,3) 
diag(Dmat) <- 1 
dvec  <- c(0,5,0) 
Amat  <- matrix(c(-4,-3,0,2,1,0,0,-2,1),3,3) 
bvec  <- c(-8,2,0) 
solve.QP(Dmat,dvec,Amat,bvec=bvec) 

В этом случае комментарии описывают программу, где b вектор содержит переменные решения. Ограничения находятся в форме Ax >= b (A^Tb> = b0), тогда как у вас есть ограничения формы Ax <= b; последнее легко трансформируется в первое с E = -A и f = -b, давая Ex >= f. Обратите внимание, что в этом примере матрица коэффициентов Dmat для квадратичного члена является единичной матрицей, тогда как в вашем случае вам нужно будет установить Dmatdvec) в соответствии с вашей целевой функцией.

Для уточнения (еще больше), из документации по программе quadprog:

Эта процедура реализует двойной метод Гольдфарб и Idnani (1982, 1983) для решения задач квадратичного программирования вида мин (-dT b + 1/2bT Db) с ограничениями AT b> = b0.

Следовательно, выразить свою целевую функцию (здесь х, используя вместо Ь для принятия переменного вектора)

f(x) = -d^T x + 1/2 x^T D x 
where, d: coefficient *vector* for linear part of obj. function 
     D: coefficient *matrix* for quadratic 
     x: decision variable *vector* 
and where ^T denotes the vector transpose. 

В приведенном выше примере, д и О обозначены dvec и DMAT, соответственно.

+0

Я тоже видел эту функцию, но я не понимал. Означает ли это, что я должен выразить f (x) согласно Dmat и dvec таким образом, что f (x) = t (dvec) .Dmat.dvec? – Nik

+0

(Я буду использовать x здесь как вектор переменной решения). Вы выражаете свою целевую функциональную комбинацию линейной формы и квадратичной формы (https://en.wikipedia.org/wiki/Quadratic_form), т. Е. F (x) = dvec * x + x^T * Dmat * x/2. I Изменим в ответ, чтобы уточнить. – dfri

Смежные вопросы