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. [6] [7] Также доступны бесплатная студенческая версия с ограниченной функциональностью и бесплатная полнофункциональная версия для академических курсов. [8]
AMPL можно использовать из Microsoft Excel через надстройку SolverStudio Excel.
Библиотека решателей AMPL (ASL), которая позволяет читать файлы nl и обеспечивает автоматическое дифференцирование, имеет открытый исходный код. Он используется во многих решателях для реализации соединения AMPL.
В этой таблице представлены важные этапы в истории AMPL.
Транспортная задача Джорджа Данцига используется для создания примера модели AMPL. Эта задача позволяет найти наименее затратный график поставок, отвечающий потребностям рынков и поставкам на заводах. [15]
набор «Растения» ; установить рынки ; # Мощность завода p в случаях param Мощность { p in Plants }; # Спрос на рынке m в случаях param Demand { m in Markets }; # Расстояние в тысячах миль param Distance { Plants , Markets }; # Фрахт в долларах за ящик на тысячу миль param Freight ; # Стоимость перевозки в тысячах долларов за ящик param TransportCost { p в Plants , m в Markets } : = Freight * Distance [ p , m ] / 1000 ; # Количества отгрузки в случаях var Shipping { Plants , Markets } >= 0 ; # Общие транспортные расходы в тысячах долларов минимизируют стоимость : sum { p in Plants , m in Markets } TransportCost [ p , m ] * доставка [ p , m ]; # Соблюдайте лимит подачи на заводе p s.t. поставка { p на заводах }: сумма { м на рынках } отгрузка [ п , м ] <= Мощность [ п ]; # Удовлетворение спроса на рынке м.ст. спрос { м на рынках }: сумма { п на растениях } отгрузка [ п , м ] >= Спрос [ м ]; данные ; set Plants : = Сиэтл Сан - Диего ; набор Рынки : = Нью - Йорк , Чикаго, Топика ; Параметр Емкость : = Сиэтл 350 Сан - Диего 600 ; параметр Спрос : = Нью - Йорк 325 Чикаго 300 Топика 275 ; param Расстояние : Нью - Йорк, Чикаго, Топика : = Сиэтл 2,5 1,7 1,8 Сан - Диего 2,5 1,8 1,4 ; параметр Грузовые перевозки : = 90 ;
Вот неполный список решателей , поддерживаемых AMPL: [16]