Microsoft Solver Foundation Ограничение переменной
Привет! Я использую Microsoft Solver Foundation для решения проблемы линейного программирования, но эта переменная превысила 1000, и она выдает следующую ошибку: {"Превышен лимит размера модели для этой версии продукта. Пожалуйста, свяжитесь с корпорацией Microsoft для вариантов лицензирования.\r\nLimits: NonzeroLimit = 100000, MipVariableLimit = 2000, MipRowLimit = 2000, MipNonzeroLimit = 10000, CspTermLimit = 25000, срок действия = нет."}
Есть ли лучший решатель, который эффективен и может принимать более 1000 переменных, которые могут работать в Visual Studio IDE? Благодарю.
4 ответа
Не уверены, что именно вы имеете в виду: решатель "может работать в Visual Studio IDE?"
Однако, если вам нужен крупномасштабный (с открытым исходным кодом) решатель LP с функциональным интерфейсом C#, я бы порекомендовал lp_solve, загрузка здесь. Решатель написан на C/C++, но есть всеобъемлющая и простая в использовании оболочка C#, которая использует P/Invoke для вызова различных методов lpsolve.
Тесты Ханса Миттельманна позволяют сравнить несколько программных решений для LP. Если вы ищете высокопроизводительные бесплатные решатели, то я рекомендую CLP или IPOPT. Они оба имеют интерфейсы в C++, поэтому не должно быть проблем с их использованием из Visual C++. Хорошие коммерческие решатели - CPLEX и Gurobi.
Как отметил Марк Гравелл, вы можете приобрести корпоративную версию Microsoft Solver Foundation, которая не ограничена, но, тем не менее, обратите внимание, что она больше не выпускается.
Фонд Солвер, похоже, заброшен - я сомневаюсь, увидим ли мы какие-либо новые его версии. Предел переменной слишком мал для многих проблем. Я нашел полезными Google OR Tools - они поместили.NET-оболочки вокруг решателей GLPK и CBC (среди прочих) и выпустили его как исходный код. Поиск "Google ИЛИ Инструменты". Эти решатели не такие быстрые, как коммерческие (см. Сравнительные тесты в посте выше), но коммерческие решатели обычно оцениваются в диапазоне от 6 до 12 тысяч фунтов.
Я не знаю, сколько у вас в данный момент ограничений, но (если у вас меньше 1000 ограничений), вы можете взять дуал и иметь 1000 ограничений вместо переменных, тогда по-прежнему использовать текущую версию Microsoft Solver Foundation. Взятие двойного не должно быть слишком сложным для автоматизации.