Поддерживает ли Microsoft Solver Foundation мои потребности?
Я изучаю параметры линейной и нелинейной структуры программирования (оптимизации).
Требования:
-
Поддержка линейных и нелинейных задач программирования с ок. 100-1000 переменных и до 1000 ограничений (я понимаю, что это довольно просто). Нелинейные задачи имеют ограничения, связанные с умножением или делением нескольких переменных - ничего сложнее, чем это.
-
Интеграция с средами MS (SQL Server, MS Access,.NET, Excel)
-
Приятно было бы поддерживать определение специальной задачи (например, какой-то язык сценариев или поддержку для определения и решения проблемы в интерфейсе Excel)
-
Я бы использовал только Excel, но мне также нужна возможность взаимодействовать с решателем программно (среда .NET) для больших проблем.
Для программного доступа я намеревался разработать абстрагирующий интерфейс для решателя (чтобы мы могли менять решатели, если это когда-либо понадобилось). Затем я наткнулся на MS Solver Foundation (http://code.msdn.microsoft.com/solverfoundation), который уже имеет этот интерфейс. Мне интересно, соответствует ли он законопроекту в отношении других наших требований и того, что у него есть.
Ответы
Ответ 1
Хорошо, что Microsoft Solver Foundation не поддерживает нелинейное программирование. По состоянию на январь 2010 года команда официальное слово в этом состоит в том, что они рассматривают это, но что это не в их немедленные планы.
Итак, я остановился на AMPL в качестве интерфейса языка моделирования и KNITRO для алгоритма решателя. KNITRO выглядит хорошо, потому что он apparantly состоит из трех алгоритмов в одном (2 варианта Метод внутренней точки и 1 из Active Set method). См. Также страницу Википедии KNITRO.
Я остановился на AMPL и KNITRO после тестирования оценочных версий обоих на превосходном веб-портале, который, по-видимому, финансировался Национальным научным фондом США и Американским отделом энергетики в США Национальная лаборатория Аргонна, называемая NEOS. NEOS предоставляет веб-интерфейс для загрузки вашей математической модели с использованием AMPL или GAMS (и для некоторых решателей, несколько других), а затем возвращает результаты на веб-странице результатов и по электронной почте. Возможно, есть интерфейс электронной почты для отправки проблем, но мне не удалось добиться этого.
Теперь все это стоит денег. KNITRO и AMPL - это коммерческие продукты. В итоге решение будет стоить около 8000 долларов США. Не дешево. Если вы ищете бесплатные решения, я думаю, что варианты в значительной степени ограничены IPOPT для решателя (который я также пробовал на NEOS и обнаружил, что он работает хорошо, но я не смог его выбрать из-за других нетехнических причин) и отказавшись от интерфейса AMPL. Вы можете настроить свою проблему с помощью API IPOPT. В отличие от Micrsoft Solver Foundation API, хотя интерфейс IPOPT немного сложнее и, что самое сложное, требует, чтобы ваше вызывающее приложение выполняло обратные вызовы, которые вычисляют первые (и, возможно, второй) производные ваших модельных нелинейных уравнений. Интерфейсы языка моделирования (например, AMPL) заботятся об этом для вас, потому что они способны вычислять символические производные от всех уравнений, написанных на их языке.
Ответ 2
Я пробовал Solver Foundation по проблеме, которую я пытался (безуспешно) решить в прошлом, и взломал ее через 2 дня, включая изучение Solver API.
Эффективность Solver отличная, а API SFS (Solver Foundation Services) AWESOME.
Ответ 3
В соответствии с вашими перечисленными требованиями он выглядит как Microsoft Solver Foundation отвечает всем вашим требованиям, а затем некоторым. Прочтите "Что такое Solver Foundation?" документ на сайте Solver Foundation. В нем упоминается линейное программирование, нелинейное программирование, разработка в .NET, может использоваться в Excel, Solver Foundation также поставляется с надстройкой Microsoft Office Excel для обеспечения полной среды моделирования в знакомом интерфейсе.
Ответ 4
Библиотека GLPK на основе GNU - отличный бесплатный вариант. Я бросил 1000s и 1000s проблем с колоннами, в этом нет беспокойства. Это требует нескольких различных форматов определения проблем, но для меня было проще всего использовать через C или С++ API. Усовершенствования движков за ним происходят все время. Я считаю, что некоторые оболочки также доступны (например, Perl, Python).