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

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

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

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

При использовании 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

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

Спасибо


person OBT    schedule 23.05.2019    source источник
comment
Аналогично, как бы вы заставили p быть целым числом? Я пробовал p %% 1 == 0 и (p-floor (p)) == 0 ...   -  person OBT    schedule 23.05.2019


Ответы (1)


Пытаться

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

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

person Stéphane Laurent    schedule 23.05.2019