AMPL – Wikipedia
Paradigma | Multi-Paradigma: deklarativ, imperativ |
---|---|
Entworfen von | Robert Fourer David Gay Brian Kernighan Bell Labs |
Entwickler | AMPL Optimization, Inc. |
Erstmals erschienen | 1985 ((1985) |
Stabile Version |
20131012 / 12. Oktober 2013 ((2013-10-12) |
Betriebssystem | Plattformübergreifend: Linux, MacOS, Solaris, AIX, Windows |
Lizenz | Proprietär (Übersetzer), kostenlos und Open Source (AMPL Solver Library) |
Dateinamenerweiterungen | .mod, .dat, .run |
Webseite | www |
Beeinflusst von | |
AWK, C. | |
Beeinflusst | |
Pyomo |
AMPL ((Eine mathematische Programmiersprache) ist eine algebraische Modellierungssprache zur Beschreibung und Lösung hochkomplexer Probleme für mathematisches Rechnen in großem Maßstab (dh Optimierungs- und Planungsprobleme in großem Maßstab).[1]
Es wurde von Robert Fourer, David Gay und Brian Kernighan in den Bell Laboratories entwickelt. AMPL unterstützt Dutzende von Lösern, sowohl Open Source- als auch kommerzielle Software, einschließlich CBC, CPLEX, FortMP, Gurobi, MINOS, IPOPT, SNOPT, KNITRO und LGO. Probleme werden als nl-Dateien an Solver übergeben. AMPL wird von mehr als 100 Firmenkunden sowie von Regierungsbehörden und akademischen Institutionen verwendet.[2]
Ein Vorteil von AMPL ist die Ähnlichkeit seiner Syntax mit der mathematischen Notation von Optimierungsproblemen. Dies ermöglicht eine sehr präzise und lesbare Definition von Problemen im Bereich der Optimierung. Viele moderne Löser sind auf dem NEOS-Server verfügbar (früher im Argonne National Laboratory, derzeit an der University of Wisconsin, Madison)[3]) AMPL-Eingabe akzeptieren. Laut NEOS-Statistik ist AMPL das beliebteste Format zur Darstellung mathematischer Programmierprobleme.
Eigenschaften[edit]
AMPL bietet eine Mischung aus deklarativen und imperativen Programmierstilen. Die Formulierung von Optimierungsmodellen erfolgt über deklarative Sprachelemente wie Mengen, skalare und mehrdimensionale Parameter, Entscheidungsvariablen, Ziele und Einschränkungen, die eine präzise Beschreibung der meisten Probleme im Bereich der mathematischen Optimierung ermöglichen.
Prozeduren und Kontrollflussanweisungen sind in AMPL für verfügbar
- den Datenaustausch mit externen Datenquellen wie Tabellenkalkulationen, Datenbanken, XML und Textdateien
- Datenvor- und -nachbearbeitungsaufgaben rund um Optimierungsmodelle
- die Konstruktion von Hybridalgorithmen für Problemtypen, für die keine direkten effizienten Löser verfügbar sind.
Um die Wiederverwendung zu unterstützen und die Erstellung umfangreicher Optimierungsprobleme zu vereinfachen, ermöglicht AMPL die Trennung von Modell und Daten.
AMPL unterstützt eine Vielzahl von Problemtypen, darunter:
AMPL ruft einen Löser in einem separaten Prozess auf, der folgende Vorteile bietet:
- Der Benutzer kann den Lösungsprozess jederzeit unterbrechen
- Solver-Fehler wirken sich nicht auf den Interpreter aus
- Die 32-Bit-Version von AMPL kann mit einem 64-Bit-Solver verwendet werden und umgekehrt
Die Interaktion mit dem Solver erfolgt über eine genau definierte nl-Schnittstelle.
Verfügbarkeit[edit]
AMPL ist für viele gängige 32- und 64-Bit-Betriebssysteme verfügbar, darunter Linux, MacOS, Solaris, AIX und Windows.[5]
Der Übersetzer ist eine proprietäre Software, die von AMPL Optimization LLC verwaltet wird. Es gibt jedoch mehrere Online-Dienste, die kostenlose Modellierungs- und Lösungsfunktionen mit AMPL bereitstellen.[6][7] Eine kostenlose Studentenversion mit eingeschränkter Funktionalität und eine kostenlose Vollversion für akademische Kurse sind ebenfalls verfügbar.[8]
AMPL kann in Microsoft Excel über das SolverStudio Excel-Add-In verwendet werden.
Die AMPL Solver Library (ASL), die das Lesen von nl-Dateien ermöglicht und die automatische Unterscheidung ermöglicht, ist Open Source. Es wird in vielen Solvern verwendet, um eine AMPL-Verbindung zu implementieren.
Statusverlauf[edit]
Diese Tabelle enthält wichtige Schritte in der AMPL-Historie.
Ein Beispielmodell[edit]
Ein Transportproblem von George Dantzig wird verwendet, um ein AMPL-Mustermodell bereitzustellen. Bei diesem Problem wird der kostengünstigste Versandplan gefunden, der die Anforderungen auf den Märkten und die Lieferungen in den Fabriken erfüllt.[14]
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;
Löser[edit]
Hier ist eine unvollständige Liste der von AMPL unterstützten Löser:[15]
Löser | Unterstützte Problemtypen |
---|---|
APOPT | gemischte ganzzahlige nichtlineare Programmierung |
Artelys Knitro | lineare, quadratische und nichtlineare Programmierung |
Bonmin | gemischte ganzzahlige nichtlineare Programmierung |
BPMPD | lineare und quadratische Programmierung |
MÜNZE ODER CBC | gemischte Ganzzahlprogrammierung |
MÜNZE ODER CLP | Lineares Programmieren |
CONOPT | nichtlineare Programmierung |
Couenne[16] | gemischte ganzzahlige nichtlineare Programmierung (MINLP) |
CPLEX | lineare, quadratische, Kegel zweiter Ordnung und gemischte ganzzahlige Programmierung |
CPLEX CP Optimizer[17] | Einschränkungsprogrammierung |
FILTER | nichtlineare Programmierung |
FortMP | lineare, quadratische und gemischte Ganzzahlprogrammierung |
Gecode[18] | Einschränkungsprogrammierung |
Gurobi | lineare, quadratische, Kegel zweiter Ordnung und gemischte ganzzahlige Programmierung |
IPOPT | nichtlineare Programmierung |
JaCoP[19] | Einschränkungsprogrammierung |
LGO[20] | globale und lokale nichtlineare Optimierung |
lp_solve[21] | lineare und gemischte Ganzzahlprogrammierung |
MINOS | lineare und nichtlineare Programmierung |
MINTO | gemischte Ganzzahlprogrammierung |
MOSEK | lineare, gemischte ganze Zahl lineare, quadratische, gemischte ganze Zahl quadratische, quadratisch beschränkte, konische und konvexe nichtlineare Programmierung |
Octeract Engine | Alle Arten von Optimierungsproblemen ohne differenzielle oder integrale Terme, einschließlich diskontinuierlicher Probleme mit Mindest und max Elementarfunktionen. |
SCIP | gemischte Ganzzahlprogrammierung |
SNOPT | nichtlineare Programmierung |
Sulum[22] | lineare und gemischte Ganzzahlprogrammierung |
WORHP | nichtlineare Programmierung |
XA | lineare und gemischte Ganzzahlprogrammierung |
Xpress | lineare und konvexe quadratische Optimierung und ihre gemischten ganzzahligen Gegenstücke |
Siehe auch[edit]
Verweise[edit]
Externe Links[edit]
Recent Comments