AMPL
Paradigm | Multiparadigm : deklarativ , imperativ |
---|---|
Designad av |
Robert Fourer David Gay Brian Kernighan Bell Labs |
Utvecklare | AMPL Optimization, Inc. |
Dök först upp | 1985 |
Stabil frisättning | 20221013 / 13 oktober 2022
|
OS | Plattformsoberoende : Linux , macOS , Solaris , AIX , Windows |
Licens |
Proprietär (översättare), gratis och öppen källkod (AMPL Solver Library) |
Filnamnstillägg | .mod, .dat, .run |
Hemsida | |
Influerad av | |
AWK , C | |
Influerad av | |
Pyomo |
AMPL ( A Mathematical Programming Language ) är ett algebraiskt modelleringsspråk för att beskriva och lösa problem med hög komplexitet för storskalig matematisk beräkning (dvs storskaliga optimerings- och schemaläggningsproblem ). Det utvecklades av Robert Fourer , David Gay och Brian Kernighan vid Bell Laboratories . AMPL stöder dussintals lösare , både öppen källkod och kommersiell programvara , inklusive CBC, CPLEX , FortMP , MINOS , IPOPT , SNOPT , KNITRO och LGO. Problem skickas till lösare som nl -filer. AMPL används av mer än 100 företagskunder och av statliga myndigheter och akademiska institutioner.
En fördel med AMPL är likheten mellan dess syntax och den matematiska notationen av optimeringsproblem . Detta möjliggör en mycket kortfattad och läsbar definition av problem inom området optimering . Många moderna lösare tillgängliga på NEOS-servern (tidigare värd på Argonne National Laboratory , för närvarande värd vid University of Wisconsin, Madison) accepterar AMPL-indata. Enligt NEOS-statistiken är AMPL det mest populära formatet för att representera matematiska programmeringsproblem.
Funktioner
AMPL har en blandning av deklarativa och imperativa programmeringsstilar. Formulering av optimeringsmodeller sker via deklarativa språkelement såsom uppsättningar, skalära och multidimensionella parametrar, beslutsvariabler, mål och begränsningar , vilket möjliggör en kortfattad beskrivning av de flesta problem inom området matematisk optimering.
Procedurer och kontrollflödesbeskrivningar finns tillgängliga i AMPL för
- utbyte av data med externa datakällor såsom kalkylblad , databaser , XML och textfiler
- dataför- och efterbearbetningsuppgifter kring optimeringsmodeller
- konstruktionen av hybridalgoritmer för problemtyper för vilka inga direkta effektiva lösare finns tillgängliga.
För att stödja återanvändning och förenkla konstruktion av storskaliga optimeringsproblem tillåter AMPL separation av modell och data.
AMPL stöder ett brett utbud av problemtyper, bland annat:
- Linjär programmering
- Kvadratisk programmering
- Icke-linjär programmering
- Blandat heltalsprogrammering
- Kvadratisk programmering med blandat heltal med eller utan konvexa kvadratiska begränsningar
- Blandat heltals icke-linjär programmering
- Andra ordningens konprogrammering
- Global optimering
- Semidefinita programmeringsproblem med bilinjär matris ojämlikheter
- Komplementaritetsteoriproblem (MPEC) i diskreta eller kontinuerliga variabler
- Begränsningsprogrammering
AMPL anropar en lösare i en separat process som har dessa fördelar:
- Användaren kan avbryta lösningsprocessen när som helst
- Lösningsfel påverkar inte tolken
- 32-bitarsversionen av AMPL kan användas med en 64-bitars lösare och vice versa
Interaktion med lösaren görs genom ett väldefinierat nl-gränssnitt .
Tillgänglighet
AMPL är tillgängligt för många populära 32- och 64-bitars operativsystem inklusive Linux , macOS , Solaris , AIX och Windows . Översättaren är proprietär programvara som underhålls av AMPL Optimization LLC. Det finns dock flera onlinetjänster som tillhandahåller gratis modellerings- och lösningsmöjligheter med AMPL. En gratis studentversion med begränsad funktionalitet och en gratis fullfjädrad version för akademiska kurser finns också.
AMPL kan användas från Microsoft Excel via SolverStudio Excel-tillägget.
AMPL Solver Library (ASL), som tillåter läsning av nl-filer och ger den automatiska differentieringen, är öppen källkod. Det används i många lösare för att implementera AMPL-anslutning.
Statushistorik
Denna tabell visar viktiga steg i AMPL-historiken.
År | Höjdpunkter |
---|---|
1985 | AMPL designades och implementerades |
1990 | Artikel som beskriver AMPL-modelleringsspråket publicerades i Management Science |
1991 | AMPL stöder olinjär programmering och automatisk differentiering |
1993 | Robert Fourer , David Gay och Brian Kernighan tilldelades ORSA/CSTS-priset av Operations Research Society of America för skrifter om design av matematiska programmeringssystem och AMPL-modelleringsspråket |
1995 | Tillägg för att representera styckvis linjära och nätverksstrukturer |
1995 | Skriptkonstruktioner |
1997 | Förbättrat stöd för olinjära lösare |
1998 | AMPL stödjer komplementaritetsteoretiska problem |
2000 | Relationell databas och åtkomst till kalkylblad |
2002 | Stöd för begränsningsprogrammering |
2003 | AMPL Optimization LLC grundades av AMPLs uppfinnare, Robert Fourer, David Gay och Brian Kernighan. Det nya företaget tog över utvecklingen och supporten av modellspråket AMPL från Lucent Technologies, Inc. |
2005 | AMPL Modeling Language Google-gruppen har öppnats |
2008 | Kestrel: Ett AMPL-gränssnitt till NEOS-servern introducerat |
2012 | Robert Fourer , David Gay och Brian Kernighan tilldelades 2012 INFORMS Impact Prize som upphovsmännen till ett av de viktigaste algebraiska modelleringsspråken. |
2012 | AMPL-boken blir fritt tillgänglig online |
2013 | En ny plattformsöverskridande integrerad utvecklingsmiljö (IDE) för AMPL blir tillgänglig |
En exempelmodell
Ett transportproblem från George Dantzig används för att tillhandahålla ett exempel på AMPL-modell. Detta problem hittar det billigaste fraktschemat som uppfyller kraven på marknader och förnödenheter på fabriker.
0
set Växter ; ställa in Marknader ; # Kapacitet för anläggning p i fall param Kapacitet { p i växter }; # Efterfrågan på marknad m i fall param Efterfrågan { m på marknader }; # Distans i tusentals miles param Distance { Plants , Markets }; # Frakt i dollar per fall per tusen miles param Frakt ; # Transportkostnad i tusentals dollar per fall param TransportCost { p i växter , m i marknader } : = Frakt * Avstånd [ p , m ] / 1000 ; # Leveranskvantiteter i fall var shipment { Plants , Markets } >= ; # Totala transportkostnader i tusentals dollar minimerar kostnaden : summa { p in Plants , m in Markets } TransportCost [ p , m ] * shipment [ p , m ]; # Beakta utbudsgränsen vid anläggningen p s.t. försörjning { p in Plants }: summa { m in Markets } sändning [ p , m ] <= Kapacitet [ p ]; # Tillfredsställa efterfrågan på marknaden m s.t. demand { m in Markets }: summa { p in Plants } sändning [ p , m ] >= Demand [ m ]; data ; set Växter : = seattle san - diego ; set Marknader : = new - york chicago topeka ; param Kapacitet : = seattle 350 san - diego 600 ; param Efterfrågan : = new - york 325 chicago 300 topeka 275 ; param Avstånd : new - york chicago topeka : = seattle 2,5 1,7 1,8 san - diego 2,5 1,8 1,4 ; param Frakt : = 90 ;
Lösare
Här är en ofullständig lista över lösare som stöds av AMPL:
Lösare | Problemtyper som stöds |
---|---|
APOPT | blandad heltals icke-linjär programmering |
Artelys Knitro | linjär, kvadratisk och olinjär programmering |
Bonmin | blandad heltals icke-linjär programmering |
BPMPD | linjär och kvadratisk programmering |
MYNT-ELLER CBC | blandad heltalsprogrammering |
MYNT-ELLER CLP | linjär programmering |
CONOPT | icke-linjär programmering |
Couenne | blandad heltals icke-linjär programmering (MINLP) |
CPLEX | linjär, kvadratisk, andra ordningens kon och blandat heltalsprogrammering |
CPLEX CP Optimizer | begränsningsprogrammering |
FILTRERA | icke-linjär programmering |
FortMP | linjär, kvadratisk och blandad heltalsprogrammering |
Gekod | begränsningsprogrammering |
IPOPT | icke-linjär programmering |
JaCoP | begränsningsprogrammering |
LGO | global och lokal olinjär optimering |
lp_solve | linjär och blandad heltalsprogrammering |
MINOS | linjär och icke-linjär programmering |
MINTO | blandad heltalsprogrammering |
MOSEK | linjär, blandad heltal linjär, kvadratisk, blandad heltal kvadratisk, kvadratiskt begränsad , konisk och konvex olinjär programmering |
Octeract Engine | Alla typer av optimeringsproblem utan differentiella eller integrerade termer, inklusive diskontinuerliga problem med min och max elementära funktioner. |
SCIP | blandad heltalsprogrammering |
SNOPP | icke-linjär programmering |
Sulum | linjär och blandad heltalsprogrammering |
WORHP | icke-linjär programmering |
XA | linjär och blandad heltalsprogrammering |
Xpress | linjär och konvex kvadratisk optimering och deras blandade heltalsmotsvarigheter |
Se även
- sol (format)
- GNU MathProg (tidigare känd som GMPL) är en delmängd av AMPL som stöds av GNU Linear Programming Kit