AMPL – Wikipedia

AMPL
Paradigma Multi-Paradigma: deklarativ, imperativ
Entworfen von Robert Fourer
David Gay
Brian Kernighan
Bell Labs
Entwickler AMPL Optimization, Inc.
Erstmals erschienen 1985;; vor 35 Jahren ((1985)
Stabile Version

20131012 / 12. Oktober 2013;; vor 7 Jahren ((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.ampl.com
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]

NEOS-Eingabestatistik für Januar 2011.

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]