2013-06-21 6 views
1

Я бегу на R 3.0. У меня есть квадратичная функция, как:Оптимизация многовариантного квадратичного уравнения в R с ограничениями

2*x[1]*x[1] -5 * x[1] + 8 * x[2] * x[2] - 7*x[3]*x[2] -5 * x[3] * x[3].. 

Функция имеет различные квадратичные члены и имеет некоторые линейные ограничения, такие как:

1 <= x[1] <= 7 
-2 <= x[2] <= 9 
0 <= x[3] <= 32 

Дополнительно

x[1]+ x[2]+ x[3] = 100 

Какой пакет в R я должен Посмотрите на решение этой проблемы оптимизации? Это большое уравнение со многим неравенством и я бег ¨R 3.0.Can некоторые вещи, как:

x[1]+ x[2]+ x[3] = 100 

быть сделан с Optim?

Я как-то не могу понять, как передать параметры constrOptim или solve.QP в quadprog.

+0

Дайте нам воспроизводимый пример, и вам будет легче ответить на код о том, как использовать solve.QP, например – dickoa

ответ

2

Как quadprod::solve.QP, так и limSolve::lsei будет решать QP s с линейными ограничениями. Они отличаются тем, как цель сформулирована:

  1. мин (-d^Т Ь + 1/2 Ь ТД б) для solve.QP
  2. мин (|| Ах-Ь ||^2) для lsei

Глядя на то, как вы написали вашу целевую функцию, solve.QP звучит как лучший выбор, но учтите, что вам придется переписать вашу проблему в матричной форме.

Edit: Я не понял, что ваша целевая функция не была выпуклой (иначе говоря, матрица D выше не является положительно определенной), которая является необходимым условием для этих решателей. Итак, да, вы должны полагаться на нелинейный решатель, такой как optim, но более общий, который позволяет добавлять линейные ограничения: constrOptim, кажется, один из них.

+0

Не будет оптимизировать, просто сделайте это для меня? Или есть проблема в том, чтобы просто использовать для этого оптимизм? – Arc

+0

Дайте 'optim' попытку, если хотите, она также может работать (может быть, не так быстро). Решатели, о которых я говорил, специально разработаны для решения вашего типа проблемы (квадратичное программирование). – flodel

+0

Вы отредактировали свой вопрос. До сих пор ваши «линейные ограничения» были просто переменными границами, с которыми может справиться 'optim'. Теперь похоже, что у вас есть «реальные» линейные ограничения, которые 'optim' не обрабатывает. Там могут быть похожие инструменты для 'optim', которые также обрабатывают линейные ограничения, но на самом деле, если бы я был вами, я бы не тратил свое время на них: просто используйте QP-решатель, как и два, которые я предложил. – flodel

-1

Минимизация [{2 * x1^2 - 5 * x 1 + 8 * х2^2 - 7 * х3 * х2 - 5 * х3^2, = x1 < = 7 & & -2 < = х2 < = 9 & < = x3 = 32}, {x1, x2, x3}] Оптимальное значение: -51929/8 оптимальный вектор: (x1 -> 5/4, х2 -> 9, х3 -> 32) Затем проблема выпуклого квадратичного программирования улучшена методом Simplex.

+2

попробуйте улучшить форматирование вашего ответа. – stefan

+1

Что это, Mathematica? ОП спрашивает, как решить эту проблему в Р. – flodel