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