Парадигма | Мультипарадигма : декларативная , императивная |
---|---|
Разработано | Роберт Фурер Дэвид Гей Брайан Керниган Bell Labs |
Разработчик | AMPL Optimization, Inc. |
Впервые появился | 1985 ( 1985 ) |
Стабильный релиз | 20230430 / 30 апреля 2023 г. ( 2023-04-30 ) |
ОС | Кроссплатформенность : Linux , macOS , Solaris , AIX , Windows |
Лицензия | Запатентованная (транслятор), бесплатная и с открытым исходным кодом (библиотека решателя AMPL) |
Расширения имени файла | .mod, .dat, .run |
Веб-сайт | www.ampl.com |
Под влиянием | |
АВК , С | |
Под влиянием | |
JuMP , Пиомо |
AMPL ( язык математического программирования ) — это алгебраический язык моделирования для описания и решения сложных задач для крупномасштабных математических вычислений (например, крупномасштабных задач оптимизации и планирования ). [1] Он был разработан Робертом Фурером , Дэвидом Гэем и Брайаном Керниганом в Bell Laboratories . AMPL поддерживает десятки решателей , как с открытым исходным кодом , так и коммерческих , включая CBC, CPLEX , FortMP , MOSEK , MINOS , IPOPT , SNOPT , KNITRO и LGO. Задачи передаются решателям в виде файлов nl . AMPL используют более 100 корпоративных клиентов, а также государственные учреждения и академические институты. [2]
Одним из преимуществ AMPL является сходство его синтаксиса с математической нотацией задач оптимизации . Это позволяет очень кратко и читабельно определять задачи в области оптимизации . Многие современные решатели, доступные на сервере NEOS (ранее размещенном в Аргоннской национальной лаборатории , в настоящее время размещенном в Университете Висконсина, Мэдисон [3] ), принимают входные данные AMPL. Согласно статистике NEOS, AMPL является самым популярным форматом для представления задач математического программирования.
AMPL представляет собой смесь декларативного и императивного стилей программирования. Формулирование моделей оптимизации происходит с помощью декларативных языковых элементов, таких как множества, скалярные и многомерные параметры, переменные решения, цели и ограничения , которые позволяют кратко описывать большинство проблем в области математической оптимизации.
Процедуры и операторы потока управления доступны в AMPL для
Для поддержки повторного использования и упрощения построения масштабных задач оптимизации AMPL допускает разделение модели и данных.
AMPL поддерживает широкий спектр типов задач, среди которых:
AMPL вызывает решатель в отдельном процессе, что имеет следующие преимущества:
Взаимодействие с решателем осуществляется через четко определенный интерфейс nl .
AMPL доступен для многих популярных 32- и 64-разрядных операционных систем , включая Linux , macOS , Solaris , AIX и Windows . [5] Транслятор является фирменным программным обеспечением, поддерживаемым AMPL Optimization LLC. Однако существует несколько онлайн-сервисов, предоставляющих бесплатные возможности моделирования и решения с использованием AMPL. [6] [7] Также доступны бесплатная студенческая версия с ограниченной функциональностью и бесплатная полнофункциональная версия для академических курсов. [8]
AMPL можно использовать в Microsoft Excel с помощью надстройки SolverStudio Excel.
Библиотека AMPL Solver Library (ASL), которая позволяет читать файлы nl и обеспечивает автоматическую дифференциацию, имеет открытый исходный код. Она используется во многих решателях для реализации соединения AMPL.
В этой таблице представлены важные этапы в истории AMPL.
Год | Основные моменты |
---|---|
1985 | AMPL был разработан и реализован [1] |
1990 | Статья, описывающая язык моделирования AMPL, была опубликована в журнале Management Science [9] |
1991 | AMPL поддерживает нелинейное программирование и автоматическое дифференцирование |
1993 | Роберт Фоуэр , Дэвид Гей и Брайан Керниган были награждены премией ORSA/CSTS [10] Американским обществом исследования операций за труды по проектированию систем математического программирования и языка моделирования AMPL. |
1995 | Расширения для представления кусочно-линейных и сетевых структур |
1995 | Скриптовые конструкции |
1997 | Расширенная поддержка нелинейных решателей |
1998 | AMPL поддерживает проблемы теории дополнительности |
2000 | Доступ к реляционной базе данных и электронным таблицам |
2002 | Поддержка программирования ограничений [4] |
2003 | Компания AMPL Optimization LLC была основана изобретателями AMPL Робертом Фурером, Дэвидом Геем и Брайаном Керниганом. Новая компания взяла на себя разработку и поддержку языка моделирования AMPL от Lucent Technologies, Inc. |
2005 | Группа Google по языку моделирования AMPL открыта [11] |
2008 | Kestrel: представлен интерфейс AMPL для сервера NEOS |
2012 | Роберт Фоуэр , Дэвид Гей и Брайан Керниган были награждены премией INFORMS Impact Prize 2012 года как создатели одного из важнейших языков алгебраического моделирования. [12] |
2012 | Книга AMPL становится свободно доступной онлайн [13] |
2013 | Становится доступной новая кроссплатформенная интегрированная среда разработки (IDE) для AMPL [14] |
Транспортная проблема Джорджа Данцига используется для предоставления образца модели AMPL. Эта проблема находит график доставки с наименьшей стоимостью, который соответствует требованиям рынков и поставкам на заводах. [15]
установить Растения ; установить Рынки ; # Мощность завода p в случаях параметр Мощность { p в Растения }; # Спрос на рынке m в случаях param Demand { m in Markets }; # Расстояние в тысячах миль param Distance { Plants , Markets }; # Стоимость перевозки в долларах за ящик на тысячу миль param Freight ; # Стоимость транспортировки в тысячах долларов за случай param TransportCost { p в Plants , m в Markets } : = Груз * Расстояние [ p , m ] / 1000 ; # Количество отгрузки в случаях var shipment { Plants , Markets } >= 0 ; # Общие транспортные расходы в тысячах долларов минимизируем стоимость : сумма { p в Plants , m в Markets } TransportCost [ p , m ] * shipment [ p , m ]; # Соблюдайте лимит поставок на заводе p ст. поставка { p в Заводах }: сумма { m в Рынках } отгрузка [ p , m ] <= Мощность [ p ]; # Удовлетворить спрос на рынке m ст. спрос { m в Рынках }: сумма { p в Заводах } отгрузка [ p , m ] >= Спрос [ m ]; данные ; установить Растения : = Сиэтл Сан - Диего ; установить Рынки : = Нью - Йорк Чикаго Топика ; параметр Вместимость : = сиэтл 350 сан - диего 600 ; параметр Спрос : = нью - йорк 325 чикаго 300 топика 275 ; param Расстояние : нью - йорк чикаго топика : = сиэтл 2,5 1,7 1,8 сан - диего 2,5 1,8 1,4 ; параметр Грузовые перевозки : = 90 ;
Вот частичный список решателей, поддерживаемых AMPL: [16]
Решатель | Поддерживаемые типы проблем |
---|---|
АПОПТ | смешанное целочисленное нелинейное программирование |
Артелис Книтро | линейное, квадратичное и нелинейное программирование |
Бонмин | смешанное целочисленное нелинейное программирование |
БПМПД | линейное и квадратичное программирование |
МОНЕТА-ИЛИ CBC | смешанное целочисленное программирование |
МОНЕТА-ИЛИ CLP | линейное программирование |
КОНОПТ | нелинейное программирование |
Куэнн [17] | смешанное целочисленное нелинейное программирование (MINLP) |
CPLEX | линейное, квадратичное, конусное программирование второго порядка и смешанное целочисленное программирование |
CPLEX CP-оптимизатор [18] | программирование ограничений |
ФИЛЬТР | нелинейное программирование |
ФортМП | линейное, квадратичное и смешанное целочисленное программирование |
Гекод [19] | программирование ограничений |
ИПОПТ | нелинейное программирование |
ЯКоП [20] | программирование ограничений |
ЛГО [21] | глобальная и локальная нелинейная оптимизация |
lp_solve [22] | линейное и смешанное целочисленное программирование |
МИНОС | линейное и нелинейное программирование |
МИНТО | смешанное целочисленное программирование |
МОСЭК | линейное, смешанное целочисленное линейное, квадратичное, смешанное целочисленное квадратичное, квадратично ограниченное , коническое и выпуклое нелинейное программирование |
Двигатель Octeract | Все типы задач оптимизации без дифференциальных или интегральных членов, включая разрывные задачи с минимальными и максимальными элементарными функциями. |
СКИП | смешанное целочисленное программирование |
СНОПТ | нелинейное программирование |
Сулум [23] | линейное и смешанное целочисленное программирование |
WORHP | нелинейное программирование |
ХА | линейное и смешанное целочисленное программирование |
Экспресс | линейная и выпуклая квадратичная оптимизация и их смешанные целочисленные аналоги |