Решить нелинейную задачу выпуклой оптимизации с нелинейными ограничениями в R - PullRequest
0 голосов
/ 23 мая 2019

У меня есть простая задача оптимизации экономического количества заказа (EOQ), включающая много переменных и несколько ограничений.

Обобщенная целевая функция - сумма (ai * x [i] + bi / [xi]) иограничения:

  • x [i]> = 1 для всех «i» (не менее 1 порядка)
  • x [i] <= 24 для всех «i» (максимум 24 заказа) </li>
  • сумма (x [i]) <= 2000 (максимум 2000 заказов вместе взятых) </li>
  • сумма (ci / x [i]) <= 2000 (запас циклане более 2000 единиц) </li>

При использовании auglag () это занимает слишком много времени (даже для 100 переменных), поэтому в ходе некоторых исследований я обнаружил, что проблема является выпуклой, и попытался реализовать выпуклый решатель.

Я нашел эту ссылку:

Ошибка в задаче нелинейной оптимизации: бесконечные или отсутствующие значения в 'x'

Однако, похоже, что CVXR неучитывайте «x» в знаменателе, так как он выдает следующее сообщение об ошибке:

Ошибка в as.Constant (e1) / e2: может делиться только на скалярную константу

  ans2 <- auglag(par=rep(2,1000), fn=objfun, hin=confun) ##takes too long

  p <- Variable(1000)
  obj <- Minimize(sum(a*p+b/p)) ##prompts error

Я ожидаю, что решатель будет работать намного быстрее для такой "простой" задачи оптимизации ... Я что-то не так делаю со вторым вариантом?Или есть ли лучший решатель для выпуклых задач нелинейной оптимизации с нелинейными ограничениями?

Спасибо

1 Ответ

2 голосов
/ 23 мая 2019

Попробуйте

Minimize(sum(a*p+b*inv_pos(p)))

Я не пробовал, поскольку вы не предоставляете воспроизводимый код.

...