нелинейная оптимизация с ограничениями в Microsoft Solver - PullRequest
11 голосов
/ 12 июня 2011

Может кто-нибудь показать мне примеры или обзоры для ограниченной нелинейной оптимизации в Microsoft Solver Foundation 3.0? Как это по сравнению с Fmincon Matlab? Или есть какая-нибудь лучшая библиотека .net для ограниченной нелинейной оптимизации? спасибо,

Ответы [ 4 ]

4 голосов
/ 12 июня 2011

ВАЖНОЕ ОБНОВЛЕНИЕ от 25 февраля 2012 г .:

MSF 3.1 теперь поддерживает нелинейную оптимизацию с ограниченными переменными с помощью решателя NelderMeadSolver: http://msdn.microsoft.com/en-us/library/hh404037(v=vs.93).aspx

Для общих линейных ограниченийMicrosoft Solver Foundation поддерживает только линейное программирование и квадратичное программирование с помощью своего внутреннего решения.Для этого решателя, пожалуйста, смотрите сообщение SVM, упомянутое Томасом.

MSF имеет общий решатель нелинейного программирования, Limited-Memory-BFGS, который не поддерживает никаких ограничений.Этот решатель также требует явной функции градиента.Для этого решателя см .:

Логистическая регрессия в F # с использованием MSF

F # ODSL, упомянутый Томасом, поддерживает только линейное программирование.У меня есть расширение QP для него, доступное в codexplex .

Возвращаясь к вашему вопросу - оптимизируйте f (x) с помощью линейных ограничений (аналогично fmincon), я не видел ни одной бесплатной библиотеки с такой способностью. NMath.NET (коммерческий), кажется, есть.Я пробовал это для решения очень нелинейной оптимизации, но это не работает для меня.Наконец я прибегнул к B-LBFGS, реализованному в DotNumerics.

Думаю, вас также заинтересует следующий вопрос:

Альтернатива с открытым исходным кодом функции fmincon в MATLAB?

Ответы указывают на SciPy.​optimize.​cobyla, что похоже на fmincon.Но главное сообщение в том, что для вашей конкретной проблемы, возможно, fmincon является слишком общим.Вы можете использовать более конкретный решатель, например, LBFGS или QP.Также общие решатели иногда не работают, если ваше начальное значение не является хорошим.

4 голосов
/ 12 июня 2011

У меня нет большого опыта работы с Microsoft Solver Foundation, но есть хорошая статья, демонстрирующая, как использовать его из F #:

Для F # также существует встроенный язык моделирования - это позволяет вам просто записывать свои ограничения в виде обычных выражений F # (заключенных в кавычки), а интерпретатор этого языка вызывает Microsoft Solver Foundation с созданными соответствующими ограничениями (я думаю, что это совершенно потрясающе!):

3 голосов
/ 04 мая 2012

Я недавно портировал беспроизводные коды Майкла Пауэлла COBYLA2 (нелинейная целевая функция, нелинейные ограничения) и BOBYQA (нелинейная целевая функция, переменные границы) на C #. Когда задача оптимизации содержит только переменные границы, алгоритм BOBYQA существенно быстрее.

У меня есть открытый код обоих кодов; Вы можете найти их на Github: cscobyla и csbobyqa .

Если вы предпочитаете алгоритм на основе производной, я также добавил адаптер для IPOPT . Он называется csipopt и может быть получен также от Github.

Интерфейс Solver Foundation не разработан ни для одного из этих алгоритмов, и я не могу сказать, насколько хорошо они сравниваются с fmincon (я сам не Matlab пользователь), но, надеюсь, коды могут оказать некоторую помощь в вашей работе по оптимизации.

2 голосов
/ 21 сентября 2016

Я понимаю, что это старый вопрос, но ответы здесь неточны и / или устарели. Вот окончательное руководство по использованию нелинейного решателя с ограничениями в MSSF:

В этом примере используется нелинейный решатель по умолчанию, который называется HybridLocalSearchSover .

(Однако я не знаком с fmincon, поэтому не могу говорить об этом.)

...