Использование gurobi с java против gurobi с ampl

Каковы преимущества использования Gurobi с AMPL по сравнению с прямым API Gurobi (java, C#, C++ и т. д.) для решения больших задач MIP? Есть ли преимущества в производительности при использовании Gurobi API вместо AMPL?


person Tomato    schedule 11.11.2014    source источник


Ответы (2)


Вплоть до середины 90-х единственными практическими вариантами использования решателя MIP для крупномасштабных задач (за исключением электронных таблиц) были

В то время для моделей MIP нетривиальной сложности модели AMPL были бы гораздо более лаконичными, удобочитаемыми и простыми в обслуживании. Даже сегодня модель AMPL будет больше похожа на математическую формулировку, чем на что-либо еще.

Одним из преимуществ AMPL являются его структуры данных, однако сегодня стандартные библиотеки для C#, Java и C++ имеют отличные структуры данных. Еще одним преимуществом AMPL является то, что его синтаксис выглядит очень интуитивно понятным.

subject to {j in J} sum {i in I} x[i,j] <= b[j]

но новый C++0x и последние версии Java имеют синтаксис, который более точно имитирует этот.

AMPL переносим между решателями, однако интерфейсы между решателями не сильно различаются. Хотя перенос приложения с одного решателя на другой — нетривиальная задача, для меня это не было такой большой проблемой, как попытка переключения баз данных (скажем, с MySQL на Postgres).

У AMPL есть некоторые специфические недостатки. Для большинства бизнес-приложений внедрение AMPL в проект означает добавление еще одного языка программирования. Время, потраченное на изучение AMPL, будет полезно только для написания моделей математического программирования. AMPL имеет крошечную пользовательскую базу по сравнению с Java, C# или даже C++, а усовершенствования базовой технологии исходят только от одной небольшой компании (полной очень умных людей, но, тем не менее, одной маленькой компании). Если вы хотите использовать гибридный подход к решению вашей проблемы оптимизации (например, стратегию генерации столбцов с эвристикой для создания дополнительных столбцов), вам остается только кое-что. Если вы хотите сделать что-то вроде запуска вашего решателя до 1% оптимальности, но работать не менее 10 секунд, вы не можете сделать это с AMPL, но можете сделать это с обратными вызовами, используя один из API Gurobi.

Python может предложить лучшее из обоих миров. Это язык программирования общего назначения, который имеет широкий спектр областей применения. У Gurobi есть собственный Python API, но есть и внутренние языки для предметной области, такие как PuLP и Pyomo, переносимый между решателями.

person David Nehme    schedule 12.11.2014

Есть несколько преимуществ использования AMPL с Gurobi по сравнению с Gurobi API:

  1. Возможность легко переключаться на другие решатели, если вам это понадобится в будущем.
  2. Декларативные модели AMPL обычно проще для чтения и являются более высокоуровневыми, чем процедурный код, который используется для создания задач через API.
  3. AMPL изолирует процесс решателя, что может быть полезно для больших задач. Например, если решателю не хватает памяти, это не повлияет на AMPL.
  4. AMPL предоставляет встроенные функции для импорта данных и экспорта в базы данных и электронные таблицы.
  5. AMPL имеет активное сообщество, которое, возможно, больше, чем у любого отдельного решателя, включая Gurobi. Например, Группа Google AMPL насчитывает более 1700 участников и быстро растет. Конечно, AMPL не может конкурировать с языками общего назначения, такими как C++ или Java, с точки зрения пользовательской базы, но только небольшая часть пользователей C++ или Java занимается математической оптимизацией.

При прямом использовании Gurobi API могут быть преимущества в производительности, по крайней мере, собственный C API. Однако накладные расходы, добавляемые AMPL, обычно невелики по сравнению со временем решения, особенно в случае проблем MIP.

Отказ от ответственности: я разработчик программного обеспечения в AMPL.

person vitaut    schedule 11.11.2014