2014-02-06 8 views
1

я сделал это в Excel, но необходимо выполнить правильное моделирование в R.Оптимизация в R с произвольными ограничениями

мне нужно минимизировать функцию F(x) (x вектор) в то время как имеющие ограничения, sum(x)=1, все значения x: [0,1] и другая функция G(x) > G_0.

Я пробовал это с optim и constrOptim. Ни один из них не дает вам эту возможность.

+3

Это слишком расплывчатое в данный момент Вы должны предоставить пример для данных и целевой функции, которая представляет сложность проблемы. –

+0

@IShouldBuyABoat Я дал более подробную информацию по комментарию Тонитонова ниже. спасибо – mm441

ответ

2

Проблема, о которой вы говорите, является (предположительно) нелинейной оптимизацией с нелинейными ограничениями. Это одна из самых общих проблем оптимизации.

Пакет, который я использовал для этих целей, называется nloptr: see here. По моему опыту, он является универсальным и быстрым. Вы можете указать как константы равенства, так и неравенства, установив eval_g_eq и eval_g_ineq, соответственно. Если якобиан известен явно (может быть получен аналитически), укажите их для более быстрой сходимости; в противном случае используется численное приближение.

Использовать this list как общую ссылку на проблемы оптимизации.

+0

Спасибо @tonytonov. Похоже, что 'nloptr' - это то, что мне нужно. Однако я не могу понять, как передать аргументы пользовательским объектам и ограничениям. Например, мои значения, которые нужно оптимизировать, это x, eval_f (x, y, A), eval_g_ineq (x, A) и eval_g_eq (x). A - матрица. Похоже, что 'nloptr' не распознает, какой аргумент относится к какой функции. Я приведу вам пример: я оптимизирую f (x, y, A). x, y - векторы, A - матрица. 1-sum (x) = 0 - eval_g_eq. sum (y/3) -sum (y * x) <= 0. – mm441

+0

Все определения функций должны выглядеть как 'function (x)' для одного вектора 'x'. Если у вас есть два вектора: 'x' и' y', объедините их в 'c (x, y)' перед тем, как перейти к 'eval_f'. Тот же трюк применяется к матрице 'A'. – tonytonov

+0

Спасибо @tonytonov. «...» - это аргументы, которые будут переданы пользовательским объектам и ограничениям. В примерах они имеют функцию eval_f0 <- function (x, a, b) '. если я объединю x, y и A в один вход, как я могу указать, какие значения нужно оптимизировать? эти функции имеют дополнительные аргументы – mm441

0

Вы можете сделать это в OpenMx пакет (в настоящее время у себя на сайте, перечисленных ниже. Прицеливание для 2.0 разблокировки, на лесоматериало в этом году)

Это пакет общего назначения в основном используется для структурного уравнения моделирования, но обработка нелинейного ограничения.

В вашем случае, сделать mxModel() с алгебрами, выраженными в mxAlgebras() и ограничений в mxConstraints()

Когда вы mxRun() модель, алгебры будут решены в рамках ограничений, если возможное.

http://openmx.psyc.virginia.edu/

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