ограниченная нелинейная оптимизация в Microsoft Solver foundation vs Matlab fmincon


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

4 11

4 ответа:

Важное обновление от 25 февраля 2012 года:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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