AMPL
Парадигма | Мультипарадигмальность : декларативная , императивная. |
---|---|
Разработано | Роберт Фурер Дэвид Гей Брайан Керниган Белл Лаборатории |
Разработчик | AMPL Оптимизация, Inc. |
Впервые появился | 1985 год |
Стабильная версия | 20230430
/ 30 апреля 2023 г |
ТЫ | Кроссплатформенность : Linux , macOS , Solaris , AIX , Windows. |
Лицензия | Собственный (переводчик), бесплатный и с открытым исходным кодом (библиотека решателей AMPL) |
Расширения имен файлов | .mod, .dat, .run |
Веб-сайт | www |
Под влиянием | |
АВК , С | |
Под влиянием | |
Пёмо |
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 для
- обмен данными с внешними источниками данных, такими как электронные таблицы , базы данных , XML и текстовые файлы.
- задачи предварительной и постобработки данных вокруг моделей оптимизации
- построение гибридных алгоритмов для типов задач, для которых нет прямых эффективных решателей.
Чтобы поддержать повторное использование и упростить построение крупномасштабных задач оптимизации, AMPL позволяет разделить модель и данные.
AMPL поддерживает широкий спектр типов задач, среди них:
- Линейное программирование
- Квадратичное программирование
- Нелинейное программирование
- Смешанно-целочисленное программирование
- Смешанно-целочисленное квадратичное программирование с выпуклыми квадратичными ограничениями или без них
- Смешанно-целочисленное нелинейное программирование
- Программирование конуса второго порядка
- Глобальная оптимизация
- Задачи полуопределенного программирования с билинейными матричными неравенствами
- Проблемы теории дополнительности (MPEC) в дискретных или непрерывных переменных
- Программирование ограничений [4]
AMPL вызывает решатель в отдельном процессе, который имеет следующие преимущества:
- Пользователь может прервать процесс решения в любой момент
- Ошибки решателя не влияют на интерпретатор
- 32-битную версию AMPL можно использовать с 64-битным решателем и наоборот.
Взаимодействие с решателем осуществляется через четко определенный интерфейс nl .
Наличие [ править ]
AMPL доступен для многих популярных 32- и 64-разрядных операционных систем , включая Linux , macOS , Solaris , AIX и Windows . [5] Переводчик является проприетарным программным обеспечением, поддерживаемым ООО «АМПЛ Оптимизация». Однако существует несколько онлайн-сервисов, предоставляющих бесплатные средства моделирования и решения с использованием AMPL. [6] [7] Также доступна бесплатная студенческая версия с ограниченной функциональностью и бесплатная полнофункциональная версия для академических курсов. [8]
AMPL можно использовать из Microsoft Excel через SolverStudio надстройку Excel.
Библиотека решателей AMPL (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 в случаях
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]
Решатель | Поддерживаемые типы проблем |
---|---|
АПОПТ | смешанное целочисленное нелинейное программирование |
Артелис Книтро | линейное, квадратичное и нелинейное программирование |
Бонмин | смешанное целочисленное нелинейное программирование |
БПМПД | линейное и квадратичное программирование |
МОНЕТА-ИЛИ CBC | смешанное целочисленное программирование |
МОНЕТА-ИЛИ CLP | линейное программирование |
КОНОПТ | нелинейное программирование |
Ринд [17] | смешанное целочисленное нелинейное программирование (MINLP) |
Комплексный комплекс | линейное, квадратичное, конусное программирование второго порядка и смешанное целочисленное программирование |
CPLEX CP Оптимизатор [18] | программирование ограничений |
ФИЛЬТР | нелинейное программирование |
ФортМП | линейное, квадратичное и смешанное целочисленное программирование |
Закодированный [19] | программирование ограничений |
ИПОРТ | нелинейное программирование |
ДаКоП [20] | программирование ограничений |
ЛГО [21] | глобальная и локальная нелинейная оптимизация |
lp_solve [22] | линейное и смешанное целочисленное программирование |
МИНОС | линейное и нелинейное программирование |
МИНТО | смешанное целочисленное программирование |
МОИСЕЙ | линейное, смешанное целочисленное линейное, квадратичное, смешанное целочисленное, квадратичное, квадратично ограниченное , коническое и выпуклое нелинейное программирование |
Октерактовый движок | Все типы задач оптимизации без дифференциальных или интегральных членов, включая разрывные задачи с минимальными и максимальными элементарными функциями. |
SCIP | смешанное целочисленное программирование |
СНОПТ | нелинейное программирование |
Каждый раз [23] | линейное и смешанное целочисленное программирование |
ВОРХП | нелинейное программирование |
ШАХ | линейное и смешанное целочисленное программирование |
Экспресс | линейная и выпуклая квадратичная оптимизация и их смешанные целочисленные аналоги |
См. также [ править ]
- соль (формат)
- GNU MathProg (ранее известный как GMPL) — это подмножество AMPL, поддерживаемое GNU Linear Programming Kit. [24]
Ссылки [ править ]
- ^ Перейти обратно: а б Фурер, Роберт ; Гей, Дэвид М; Керниган, Брайан В. (2003). AMPL: язык моделирования для математического программирования . США: Duxbury Press/Brooks/Cole Publishing Company. ISBN 978-0-534-38809-6 .
- ^ «Доступная позиция» . Архивировано из оригинала 11 сентября 2011 года . Проверено 29 июля 2011 г.
- ^ "О" . Проверено 11 августа 2015 г.
- ^ Перейти обратно: а б Фурер, Роберт ; Гей, Дэвид М. (2002). «Расширение языка алгебраического моделирования для поддержки программирования с ограничениями» . ИНФОМС Журнал по вычислительной технике . 14 (4): 322–344. CiteSeerX 10.1.1.8.9699 . дои : 10.1287/ijoc.14.4.322.2825 .
- ^ «Платформы» . AMPL Optimizations Inc. Архивировано из оригинала 14 мая 2022 года . Проверено 1 ноября 2019 г.
- ^ «Сервер NEOS для оптимизации» . Проверено 11 августа 2015 г.
- ^ «Попробуй AMPL!» . Проверено 11 августа 2015 г.
- ^ «Загрузки AMPL» . Архивировано из оригинала 26 мая 2015 года . Проверено 11 августа 2015 г.
- ^ Фурер, Роберт ; Гей, Дэвид М.; Керниган, Брайан В. (1990). «Язык моделирования для математического программирования» (PDF) . Наука управления . 36 (5): 519–554–83. дои : 10.1287/mnsc.36.5.519 .
- ^ ИНФОРМ. «ИКС-ИНФОРМС» (PDF) . Архивировано из оригинала (PDF) 7 октября 2006 года . Проверено 11 августа 2015 г.
- ^ «Группы Google» .
- ^ ИНФОРМ. «Приз ИНФОРМС Импакт» . Архивировано из оригинала 22 октября 2013 года . Проверено 11 августа 2015 г.
- ^ «Книга AMPL: комплексное руководство по построению моделей оптимизации для начинающих и опытных пользователей» . Проверено 5 марта 2021 г.
- ^ «Группы Google» . Проверено 11 августа 2015 г.
- ^ Данциг, Джордж (2016) [1963]. «3. Формулирование модели линейного программирования» . Линейное программирование и расширения . Издательство Принстонского университета. стр. 32–62. ISBN 978-1-4008-8417-9 .
- ^ «Решатели – AMPL» . Архивировано из оригинала 27 февраля 2014 года . Проверено 21 января 2018 г.
- ^ «Куэнн» . Архивировано из оригинала 29 октября 2013 года . Проверено 27 октября 2013 г.
- ^ «mp/solvers/ilogcp в мастере · ampl/mp · GitHub» . Гитхаб . Проверено 11 августа 2015 г.
- ^ «mp/solvers/gecode at master · ampl/mp · GitHub» . Гитхаб . Проверено 11 августа 2015 г.
- ^ «mp/solvers/jacop at master · ampl/mp · GitHub» . Гитхаб . Проверено 11 августа 2015 г.
- ^ «ЛГО-АМПЛ» . Проверено 11 августа 2015 г.
- ^ «Использование lpsolve из AMPL» . Проверено 11 августа 2015 г.
- ^ «mp/solvers/sulum at master · ampl/mp · GitHub» . Гитхаб . Проверено 11 августа 2015 г.
- ^ «Официальный сайт ГЛПК» . Проверено 17 сентября 2020 г.
Внешние ссылки [ править ]
- программное обеспечение 1990 года
- Системы компьютерной алгебры
- Математическое моделирование
- Программное обеспечение для математической оптимизации
- Языки числового программирования
- Языки сценариев
- Текстоориентированные языки программирования
- Языки программирования, созданные в 1985 году.
- Собственное кроссплатформенное программное обеспечение.