может ли кто-нибудь показать мне примеры или обзоры для ограниченной нелинейной оптимизации в Microsoft Solver Foundation 3.0? Как это по сравнению с Matlab fmincon? Или есть ли лучшая библиотека .net для ограниченной нелинейной оптимизации? спасибо,
Ограниченная нелинейная оптимизация в базе данных Microsoft Solver vs Matlab fmincon
Ответ 1
ВАЖНОЕ ОБНОВЛЕНИЕ 25 февраля 2012 года:
MSF 3.1 теперь поддерживает нелинейную оптимизацию с ограниченными переменными через свой решатель NelderMeadSolver: http://msdn.microsoft.com/en-us/library/hh404037(v=vs.93).aspx
Для общих линейных ограничений основатель Microsoft solver поддерживает только линейное программирование и квадратичное программирование через свой внутренний решатель. Для этого решателя см. Сообщение SVM, упомянутое Томасом.
MSF имеет общий нелинейный программный решатель, Limited-Memory-BFGS, однако он не поддерживает никаких ограничений. Этот решатель также требует явной функции градиента. Для этого решателя см.:
Логистическая регрессия в F # с использованием MSF
F # ODSL, упомянутый Томасом, поддерживает только линейное программирование. У меня есть расширение QP для него, доступное по адресу codexplex.
Вернуться к вашему вопросу - оптимизируйте f (x) с линейными ограничениями (аналогично fmincon
), я не видел никакой бесплатной библиотеки, которая обладает этой способностью. NMath.NET (коммерческий), похоже, один. Я пробовал это для решения сильно нелинейной оптимизации, но это не работает для меня. Наконец, я прибегнул к B-LBFGS, реализованному в DotNumerics.
Я думаю, вас также будет интересовать следующий вопрос SO:
Альтернатива с открытым исходным кодом для функции fmincon MATLAB?
Ответы указывают на SciPy.optimize.cobyla
, что похоже на fmincon
. Но главное сообщение заключается в том, что для вашей конкретной проблемы, возможно, fmincon
является слишком общим. Вы можете использовать более конкретный решатель, например. LBFGS или QP. Также обычные решатели иногда не работают, если ваше начальное значение не является хорошим.
Ответ 2
У меня нет большого опыта работы с Microsoft Solver Foundation, но есть хорошая статья, в которой показано, как использовать ее из F #:
Для F # существует также встроенный язык моделирования - это позволяет просто писать ваши ограничения как обычные выражения F # (завернутые в цитаты), а интерпретатор для этого языка вызывает Microsoft Solver Foundation с соответствующими ограничениями (я думаю, что это абсолютно потрясающе!):
Ответ 3
Недавно я портировал на С# не содержащие производных коды кода COBYLA2 (нелинейная целевая функция, нелинейные ограничения) и BOBYQA (нелинейная целевая функция, переменные границы). Когда проблема оптимизации содержит только границы переменных, алгоритм BOBYQA существенно быстрее.
У меня есть открытый код обоих кодов; вы можете найти их в Github: cscobyla и csbobyqa.
Если вы предпочитаете алгоритм на основе производных, я также внедрил адаптер для IPOPT. Он называется csipopt и может быть получен из Github.
Интерфейс Solver Foundation не разработан для любого из этих алгоритмов, и я не могу сказать, насколько хорошо они сравниваются с fmincon (я сам не пользователь Matlab), но, надеюсь, коды могут помочь вам в оптимизации.
Ответ 4
Я понимаю, что это старый вопрос, но ответы здесь неточны и/или устарели. Вот окончательный учебник о том, как использовать ограниченный нелинейный решатель в MSSF:
В этом примере используется нелинейный решатель по умолчанию, который называется HybridLocalSearchSover.
(Тем не менее, я не знаком с fmincon, поэтому я не могу говорить об этом.)