AMPL - AMPL

AMPL
AMPL (обложка учебника) .jpg
Парадигма Мультипарадигма : декларативная , императивная
Разработано Роберт Фурер
Дэвид Гей
Брайан Керниган
Bell Labs
Разработчик AMPL Optimization, Inc.
Впервые появился 1985 ; 36 лет назад ( 1985 )
Стабильный выпуск
20210906/6 сентября 2021 г . ; 35 дней назад ( 2021-09-06 )
Операционные системы Кроссплатформенность : Linux , macOS , Solaris , AIX , Windows.
Лицензия Собственная (переводчик),
бесплатная и с открытым исходным кодом (AMPL Solver Library)
Расширения имени файла .mod, .dat, .run
Веб-сайт www .ampl .com
Под влиянием
AWK , C
Под влиянием
Pyomo

AMPL (язык математического программирования ) - это язык алгебраического моделирования, предназначенный для описания и решения задач высокой сложности для крупномасштабных математических вычислений (например, задач крупномасштабной оптимизации и планирования ). Его разработали Роберт Фурер , Дэвид Гей и Брайан Керниган из Bell Laboratories . AMPL поддерживает десятки решателей , как с открытым исходным кодом, так и с коммерческим программным обеспечением , включая CBC, CPLEX , FortMP , Gurobi , MINOS , IPOPT , SNOPT , KNITRO и LGO. Проблемы передаются решателям в виде файлов nl . AMPL используется более чем 100 корпоративными клиентами, а также государственными учреждениями и академическими учреждениями.

Одним из преимуществ AMPL является сходство его синтаксиса с математической записью задач оптимизации . Это позволяет дать очень краткое и удобочитаемое определение проблем в области оптимизации . Многие современные решатели, доступные на сервере NEOS (ранее размещенном в Аргоннской национальной лаборатории , а в настоящее время размещенном в Университете Висконсина, Мэдисон ), принимают входные данные AMPL. Согласно статистике NEOS, AMPL - самый популярный формат для представления задач математического программирования.

Функции

AMPL представляет собой сочетание декларативного и императивного стилей программирования. Формулирование моделей оптимизации происходит с помощью элементов декларативного языка, таких как множества, скалярные и многомерные параметры, переменные решения, цели и ограничения , которые позволяют кратко описать большинство проблем в области математической оптимизации.

Процедуры и операторы потока управления доступны в AMPL для

  • обмен данными с внешними источниками данных, такими как электронные таблицы , базы данных , XML и текстовые файлы
  • задачи предварительной и постобработки данных вокруг моделей оптимизации
  • построение гибридных алгоритмов для типов задач, для которых отсутствуют прямые эффективные решатели.

Для поддержки повторного использования и упрощения построения крупномасштабных задач оптимизации AMPL позволяет разделить модель и данные.

AMPL поддерживает широкий спектр типов проблем, среди которых:

AMPL вызывает решатель в отдельном процессе, который имеет следующие преимущества:

  • Пользователь может в любой момент прервать процесс решения
  • Ошибки решателя не влияют на интерпретатор
  • 32-разрядная версия AMPL может использоваться с 64-разрядным решателем и наоборот.

Взаимодействие с решателем осуществляется через четко определенный интерфейс nl .

Доступность

Статистика ввода NEOS за январь 2011 г.

AMPL доступен для многих популярных 32- и 64-разрядных операционных систем, включая Linux , macOS , Solaris , AIX и Windows . Переводчик представляет собой проприетарное программное обеспечение, поддерживаемое AMPL Optimization LLC. Однако существует несколько онлайн-сервисов, предоставляющих бесплатные средства моделирования и решения с использованием AMPL. Также доступны бесплатная студенческая версия с ограниченной функциональностью и бесплатная полнофункциональная версия для академических курсов.

AMPL можно использовать из Microsoft Excel через надстройку SolverStudio Excel.

Библиотека решателя AMPL (ASL), которая позволяет читать файлы nl и обеспечивает автоматическое различение, является открытым исходным кодом. Он используется во многих решателях для реализации соединения AMPL.

История статуса

В этой таблице представлены важные шаги в истории AMPL.

Год Особенности
1985 г. AMPL был разработан и реализован
1990 г. Статья с описанием языка моделирования AMPL опубликована в журнале Management Science.
1991 г. AMPL поддерживает нелинейное программирование и автоматическое дифференцирование
1993 г. Роберт Фурер , Дэвид Гей и Брайан Керниган были удостоены премии ORSA / CSTS Американского общества исследования операций за работы по разработке систем математического программирования и языка моделирования AMPL.
1995 г. Расширения для представления кусочно-линейных и сетевых структур
1995 г. Скриптовые конструкции
1997 г. Расширенная поддержка нелинейных решателей
1998 г. AMPL поддерживает проблемы теории дополнительности
2000 г. Доступ к реляционной базе данных и электронным таблицам
2002 г. Поддержка программирования ограничений
2003 г. Компания AMPL Optimization LLC была основана изобретателями AMPL Робертом Фурером, Дэвидом Гей и Брайаном Керниганом. Новая компания взяла на себя разработку и поддержку языка моделирования AMPL от Lucent Technologies, Inc .
2005 г. Открыта группа Google по языку моделирования AMPL
2008 г. Kestrel: представлен интерфейс AMPL для сервера NEOS
2012 г. Роберт Фурер , Дэвид Гей и Брайан Керниган были удостоены премии INFORMS Impact Prize 2012 года как создатели одного из важнейших языков алгебраического моделирования.
2012 г. Книга AMPL стала доступна в свободном доступе онлайн
2013 Доступна новая кроссплатформенная интегрированная среда разработки (IDE) для AMPL.

Образец модели

Проблема транспортировки от Джорджа Данцига используется для предоставления образца модели AMPL. Эта задача позволяет найти график отгрузки с наименьшими затратами, который соответствует требованиям на рынках и поставкам на заводах.

 set Plants;
 set Markets;

 # Capacity of plant p in cases
 param Capacity{p in Plants};

 # Demand at market m in cases
 param Demand{m in Markets};

 # Distance in thousands of miles
 param Distance{Plants, Markets};

 # Freight in dollars per case per thousand miles
 param Freight;

 # Transport cost in thousands of dollars per case
 param TransportCost{p in Plants, m in Markets} :=
     Freight * Distance[p, m] / 1000;

 # Shipment quantities in cases
 var shipment{Plants, Markets} >= 0;

 # Total transportation costs in thousands of dollars
 minimize cost:
     sum{p in Plants, m in Markets} TransportCost[p, m] * shipment[p, m];

 # Observe supply limit at plant p
 s.t. supply{p in Plants}: sum{m in Markets} shipment[p, m] <= Capacity[p];

 # Satisfy demand at market m
 s.t. demand{m in Markets}: sum{p in Plants} shipment[p, m] >= Demand[m];

 data;

 set Plants := seattle san-diego;
 set Markets := new-york chicago topeka;

 param Capacity :=
     seattle   350
     san-diego 600;

 param Demand :=
     new-york 325
     chicago  300
     topeka   275;

 param Distance : new-york chicago topeka :=
     seattle        2.5      1.7     1.8
     san-diego      2.5      1.8     1.4;

 param Freight := 90;

Решатели

Вот неполный список решателей, поддерживаемых AMPL:

Решатель Поддерживаемые типы проблем
APOPT смешанное целочисленное нелинейное программирование
Artelys Knitro линейное, квадратичное и нелинейное программирование
Бонмин смешанное целочисленное нелинейное программирование
BPMPD линейное и квадратичное программирование
МОНЕТА-ИЛИ CBC смешанное целочисленное программирование
МОНЕТА ИЛИ CLP линейное программирование
КОНОПТ нелинейное программирование
Couenne смешанное целочисленное нелинейное программирование (MINLP)
CPLEX линейное, квадратичное, конусное программирование второго порядка и смешанное целочисленное программирование
Оптимизатор CPLEX CP программирование в ограничениях
ФИЛЬТР нелинейное программирование
FortMP линейное, квадратичное и смешанное целочисленное программирование
Gecode программирование в ограничениях
Гуроби линейное, квадратичное, конусное программирование второго порядка и смешанное целочисленное программирование
IPOPT нелинейное программирование
JaCoP программирование в ограничениях
LGO глобальная и локальная нелинейная оптимизация
lp_solve линейное и смешанное целочисленное программирование
МИНОС линейное и нелинейное программирование
MINTO смешанное целочисленное программирование
МОСЕК линейное, смешанное целочисленное линейное, квадратичное, смешанное целочисленное квадратичное, квадратично ограниченное , коническое и выпуклое нелинейное программирование
Octeract Engine Все типы задач оптимизации без дифференциальных или интегральных членов, включая разрывные задачи с минимальными и максимальными элементарными функциями.
SCIP смешанное целочисленное программирование
СНОПТ нелинейное программирование
Сулум линейное и смешанное целочисленное программирование
WORHP нелинейное программирование
XA линейное и смешанное целочисленное программирование
Xpress линейная и выпуклая квадратичная оптимизация и их смешанные целочисленные аналоги

Смотрите также

использованная литература

внешние ссылки