AMPL - AMPL
Парадигма | Мультипарадигма : декларативная , императивная |
---|---|
Разработано |
Роберт Фурер Дэвид Гей Брайан Керниган Bell Labs |
Разработчик | AMPL Optimization, Inc. |
Впервые появился | 1985 |
Стабильный выпуск | 20210906/6 сентября 2021 г .
|
Операционные системы | Кроссплатформенность : Linux , macOS , Solaris , AIX , Windows. |
Лицензия |
Собственная (переводчик), бесплатная и с открытым исходным кодом (AMPL Solver Library) |
Расширения имени файла | .mod, .dat, .run |
Веб-сайт | www |
Под влиянием | |
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 поддерживает широкий спектр типов проблем, среди которых:
- Линейное программирование
- Квадратичное программирование
- Нелинейное программирование
- Смешанное целочисленное программирование
- Смешанно-целочисленное квадратичное программирование с выпуклыми квадратичными ограничениями или без них
- Смешано-целочисленное нелинейное программирование
- Программирование конуса второго порядка
- Глобальная оптимизация
- Задачи полуопределенного программирования с билинейными матричными неравенствами
- Проблемы теории дополнительности (MPEC) в дискретных или непрерывных переменных
- Ограниченное программирование
AMPL вызывает решатель в отдельном процессе, который имеет следующие преимущества:
- Пользователь может в любой момент прервать процесс решения
- Ошибки решателя не влияют на интерпретатор
- 32-разрядная версия AMPL может использоваться с 64-разрядным решателем и наоборот.
Взаимодействие с решателем осуществляется через четко определенный интерфейс nl .
Доступность
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 | линейная и выпуклая квадратичная оптимизация и их смешанные целочисленные аналоги |
Смотрите также
- sol (формат)
- GNU MathProg (ранее известный как GMPL) - это подмножество AMPL, поддерживаемое GNU Linear Programming Kit.