Нелинейное Целочисленное Программирование

Я хотел бы знать, есть ли пакет в R, обрабатывающий нелинейную целочисленную оптимизацию.

"В основном", я хотел бы решить следующую проблему:

max f(x) s.t x in (0,10) and x is integer.

Я знаю, что некоторые алгоритмы ветвления способны обрабатывать линейную версию этой проблемы, но здесь моя функция f() может быть сложнее. (Я даже не могу убедиться, что это будет квадратичная форма f(x)=xQx).

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

4 ответов


у меня есть несколько вариантов для вас, но ни один из них не является серебряной пулей, хотя похоже, что ваша серебряная пуля работает под rino проект:http://r-forge.r-project.org/projects/rino/.

поскольку ваша функция сложна, вы можете использовать генетический алгоритм (т. е. оптимизаторы на основе градиента могут быть ненадежными). genoud на rgenoud библиотека может сделать трюк (текст ссылки). Если вы установите data.type.int=TRUE Это следует сделать трюк. Я не использовал эту библиотеку, но имею некоторый опыт работы с газом в matlab, и время конвергенции чувствительно к настройкам, поэтому вам будет полезно прочитать man-страницу несколько раз.

или, если ваша функция строго вогнута (маловероятно, так как вы говорите, что это может быть сложно), вы можете решить с помощью градиентного решателя (например,optim) затем проверьте окрестности вокруг оптимального (не может быть более 2^n точек для проверки).

Извините, я не могу быть больше помощь.


Если это вряд ли нелинейно, нет лучшего метода, чем грубая сила (вы никогда не узнаете, является ли минимум локальным или какой-то плоский фрагмент не имеет узких и глубоких долин), за исключением, конечно, символических вычислений (которые, вероятно, не будут работать, потому что функция слишком сложна) или мягких вычислений, я имею в виду такие вещи, как генетические алгоритмы, Монте-Карло, РОИ и т. д. (здесь у вас нет гарантии, что он найдет очень глобальный минимум, и потому что у вас есть целое число x может быть медленнее грубой силы).


http://cran.r-project.org/web/views/Optimization.html перечисляет пакеты Rdonlp2 и Rsolnp что может быть любой.


метод дискретных заполненных функций - один из последних методов, который может найти глобальное решение нелинейного целочисленного программирования С около 100 ограничениями и переменными.