Интересно, кто-нибудь может предложить несколько пакетов для решения задачи нелинейной оптимизации, которые могут предоставить целочисленные переменные для оптимального решения? Проблема состоит в том, чтобы минимизировать функцию с ограничением равенства, подчиняющимся некоторым ограничениям нижней и верхней границы.
Я использовал пакет 'nloptr' в R для задачи нелинейной оптимизации, которая хорошо работала, но теперь хотела бы расширить метод, чтобы некоторые переменные были целыми числами. Из моего использования и понимания nloptr до сих пор он может возвращать только непрерывные, а не целочисленные переменные для оптимального решения.
Я полагаю, что эту проблему необходимо решить с помощью смешанного целочисленного нелинейного программирования.
Один из примеров проблемы в форме для nloptr:
min f(x) (x-y)^2/y + (p-q)^2/q
so that (x-y)^2/y + (p-q)^2/q = 10.2
where
x and p are positive integers not equal to 0
and
y and q may or may not be positive integers not equal to 0
Код nloptr для этого в R будет выглядеть так:
library('nloptr')
x1 <- c(50,25,20,15)
fn <- function(x) {
(((x[1] - x[2])^2)/x[2]) + (((x[3] - x[4])^2)/x[4])
}
heq <- function(x) {
fn(x)-10.2
}
lower_limit <- c(0,0,0,0)
upper_limit <- c(67.314, 78, 76.11, 86)
slsqp(x1, fn, lower = lower_limit, upper = upper_limit, hin = NULL, heq = heq, control = list(xtol_rel = 1e-8, check_derivatives = FALSE))
Это выведет следующее:
$par
[1] 46.74823 29.72770 18.93794 16.22137
$value
[1] 10.2
$iter
[1] 6
$convergence
[1] 4
$message
[1] "NLOPT_XTOL_REACHED: Optimization stopped because xtol_rel or xtol_abs (above) was reached."
Это результат, который я ищу, но как указано выше, мне нужны x и p как целые числа.
Я посмотрел на https://cran.r-project.org/web/views/Optimization.html, в котором есть действительно хороший список пакетов для смешанного целочисленного нелинейного программирования, но просто Интересно, имел ли кто-нибудь опыт работы с кем-либо из них и что, по их мнению, может быть наиболее подходящим для решения проблемы, как указано выше.
Был похожий вопрос об этом, опубликованный около 7 лет назад go здесь, но он закончился ссылкой на страницу крана, так что подумал, что стоит спросить снова.
Спасибо очень за ваш вклад.
ура,
Андрей