AMPL (programmeringsspråk)

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 13 april 2017; kontroller kräver 12 redigeringar .
AMPL
Språkklass Multiparadigm : Deklarativ , imperativ
Framträdde i 1985  ( 1985 )
Utvecklaren AMPL Optimization, Inc.
Filtillägg _ .mod, .dateller.run
Släpp 20220323 (23 mars 2022 ) ( 2022-03-23 ​​)
Blivit påverkad A.W.K. , C
påverkas Pyomo
Licens Freemium (översättare),
öppen källkod (AMPL Solver Library)
Hemsida ampl.com
OS Plattformsoberoende : Linux , macOS , Solaris , AIX , Windows

AMPL (förkortning för A Mathematical Programming Language) är ett högnivåspråk för algebraisk modellering och representation av storskaliga problem med hög komplexitet. AMPL utvecklades av Robert Fourer, David Gay och Brian Kernighan vid Bell Laboratories 1985 för att beskriva och lösa komplexa optimerings- och schemaläggningsproblem. Författarna till AMPL tilldelades Operations Research Society of America Prize 1993. AMPL löser inte problem direkt, utan anropar lämpliga externa "lösare" både med öppen källkod och kommersiella (CBC, CPLEX, FortMP, MINOS, IPOPT, SNOPT, KNITRO och LGO). Problem överförs till lösare i form av nl-filer. AMPL används av över 200 företagskunder samt statliga myndigheter och akademiska institutioner. En av fördelarna med AMPL är likheten mellan dess syntax och den matematiska notationen av optimeringsproblem. Detta möjliggör en mycket kortfattad och lättläst definition av ett optimeringsproblem. Många moderna lösare tillgängliga på NEOS-servern (tidigare värd på Argonne National Laboratory, nu värd vid University of Wisconsin, Madison University of Wisconsin, Madison[3]) accepterar AMPL-indata. Enligt NEOS statistik är AMPL det mest populära formatet för att presentera matematiska programmeringsproblem.

Funktioner

AMPL kombinerar deklarativa och imperativa programmeringsstilar . Optimeringsmodeller formuleras med hjälp av delar av ett deklarativt språk: uppsättningar, skalära och flerdimensionella parametrar, beslutsvariabler, objektiva funktioner och begränsningar, som gör det möjligt att kortfattat beskriva de flesta problem inom området matematisk optimering. De procedurer och operatörer som finns tillgängliga i AMPL tillåter dig att: - utbyta data med externa datakällor såsom kalkylblad, databaser, XML, CSV och textfiler; - Utföra för- och efterbearbetning av optimeringsmodelldata; - Distribuera hybridalgoritmer för att lösa typer av problem för vilka det inte finns några direkta effektiva lösare; - Separat modell och data, vilket avsevärt förenklar återanvändningen av modeller och lösningar och förenklar konstruktionen av storskaliga optimeringsproblem;

AMPL stöder ett brett utbud av uppgiftstyper, inklusive:

Interaktion med lösaren sker genom ett väldefinierat gränssnitt nl .

Tillgänglighet

AMPL är tillgängligt för många populära 32-bitars och 64-bitars operativsystem , inklusive Linux , macOS , Solaris , AIX och Windows . [2] Translator är proprietär programvara som underhålls av AMPL Optimization LLC. Det finns dock flera onlinetjänster som tillhandahåller gratis modelleringsverktyg och lösningar med AMPL. [3] [4] En gratis studentversion med begränsad funktionalitet och en gratis fullfjädrad version för akademiska kurser är också tillgängliga. [5]

AMPL kan användas från Microsoft Excel via SolverStudio Excel-tillägget.

AMPL Solver-biblioteket (ASL), som låter dig läsa nl-filer och ger automatisk differentiering, är öppen källkod. Det används i många lösare för att implementera AMPL-anslutningen.

Historik

Denna tabell representerar viktiga milstolpar i AMPL:s historia.

Period Huvudevenemang
1985 AMPL designades och implementerades [6]
1990 En artikel som beskriver AMPL-modelleringsspråket publicerades i tidskriften Management Science [7] .
1991 AMPL stöder icke-linjär programmering och automatisk differentiering
1993 Robert Furer, David Gay och Brian Kernighan tilldelades utmärkelsen ORSA/CSTS [8] av Operations Research Society of America för deras arbete med design av matematiska programmeringssystem och AMPL-modelleringsspråket.
1995 Tillägg för att representera bitvis linjära strukturer och nätverksstrukturer
1995 Skriptkonstruktioner
1997 Utökat stöd för icke-linjära lösare
1998 AMPL stödjer problemen med komplementaritetsteorin
2000 Relationell databas och åtkomst till kalkylblad
2002 Stöd för begränsningsprogrammering [9]
2003 AMPL Optimization LLC grundades av AMPL-uppfinnarna Robert Furer, David Gay och Brian Kernighan. Det nya företaget tog över utvecklingen och underhållet av modellspråket AMPL från Lucent Technologies, Inc.
2005 Google Group on AMPL Modeling Language lanseras [10]
2008 Kestrel: AMPL-gränssnitt för NEOS-server introducerat
2011 AMPL för kurser
2012 Robert Furer, David Gay och Brian Kernighan tilldelades 2012 INFORMS Impact Prize som skaparna av ett av de viktigaste algebraiska modelleringsspråken. [elva]
2012 AMPL-boken går gratis online [12]
2012 AMPL "Logic" och Restricted Programming Extensions
2013 En ny plattformsoberoende integrerad utvecklingsmiljö (IDE) för AMPL blir tillgänglig [13]
2015 AMPL API för MATLAB
2016 AMPL-API för C++
2017 AMPL-API för Python
2018 AMPL-API för R
2020 Nytt AMPL Direct-kalkylbladsgränssnitt
2022 Implementera optimering i moln och containrar

Exempelmodell

Transportproblemet från George Dantzig används för att ge ett exempel på en AMPL-modell. Den här uppgiften hittar det billigaste fraktschemat som uppfyller marknadens och fabrikens leveranskrav. [fjorton]

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 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 ; # Leverans kvantitet i var pls . _ _ _ _ # 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: [15]

lösare Problemtyper som stöds
APOPT blandad heltals icke-linjär programmering
Artelys Knitro linjär, kvadratisk och icke-linjä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
[ 16] blandad heltals icke-linjär programmering (MINLP)
CPLEX linjär, kvadratisk, andra ordningens kon och blandat heltalsprogrammering
CPLEX CP Optimizer [17] begränsningsprogrammering
FILTRERA icke-linjär programmering
FortMP linjär, kvadratisk och blandad heltalsprogrammering
Gecode [18] begränsningsprogrammering
IPOPT icke-linjär programmering
JaCoP [19] begränsningsprogrammering
LGO [20] global och lokal olinjär optimering
lp_solve [21] 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 icke-linjä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 [22] linjär och blandad heltalsprogrammering
WORHP icke-linjär programmering
XA linjär och blandad heltalsprogrammering
uttrycka linjär och konvex kvadratisk optimering och deras blandade heltalsmotsvarigheter

Ekosystemkarta

Klicka på kartan för att öppna en interaktiv version

Se även

  • sol (format)
  • GNU MathProg (tidigare känd som GMPL) är en delmängd av AMPL som stöds av GNU Linear Programming Suite [23] .

Rekommendationer

Anteckningar

  1. Fourer, Robert (2002). "Utöka ett algebraiskt modelleringsspråk för att stödja begränsningsprogrammering" . INFORMERAR Journal on Computing . 14 (4): 322-344. DOI : 10.1287/ijoc.14.4.322.2825 .
  2. Plattformar . AMPL Optimizations Inc. . Hämtad 14 maj 2022. Arkiverad från originalet 14 maj 2022.
  3. NEOS-server för optimering . Hämtad 11 augusti 2015. Arkiverad från originalet 6 maj 2011.
  4. Prova AMPL! . Hämtad 11 augusti 2015. Arkiverad från originalet 18 juni 2011.
  5. AMPL-nedladdningar . Hämtad 11 augusti 2015. Arkiverad från originalet 26 maj 2015.
  6. Fel: parametern inte inställd i mallen {{ publication }} . - ISBN 978-0-534-38809-6 . Fourer, Robert ; Gay, David M ; Kernighan, Brian W (2003). AMPL: ett modelleringsspråk för matematisk programmering . USA: Duxbury Press/Brooks/Cole Publishing Company. ISBN |заглавие= 978-0-534-38809-6.
  7. Fourer, Robert (1990). "Ett modelleringsspråk för matematisk programmering" (PDF) . Management Science . 36 (5): 519–554–83. DOI : 10.1287/mnsc.36.5.519 . Arkiverad (PDF) från originalet 2011-07-16 . Hämtad 2022-05-14 . Utfasad parameter används |deadlink=( hjälp )
  8. INFORMERAR. ICS-INFORMER . Hämtad 11 augusti 2015. Arkiverad från originalet 7 oktober 2006.
  9. Fourer, Robert (2002). "Utöka ett algebraiskt modelleringsspråk för att stödja begränsningsprogrammering" . INFORMERAR Journal on Computing . 14 (4): 322-344. DOI : 10.1287/ijoc.14.4.322.2825 . Fourer, Robert ; Gay, David M. (2002). "Utöka ett algebraiskt modelleringsspråk för att stödja begränsningsprogrammering" . INFORMERAR Journal on Computing . 14 (4): 322–344. CiteSeerX  10.1.1.8.9699 . doi : 10.1287/ijoc.14.4.322.2825 .
  10. Google-grupper . Hämtad 14 maj 2022. Arkiverad från originalet 26 maj 2013.
  11. INFORMERAR. INFORMER Impact Prize . Hämtad 11 augusti 2015. Arkiverad från originalet 22 oktober 2013.
  12. Fritt nedladdningsbart - AMPL: Ett modelleringsspråk för matematisk programmering . Hämtad 5 mars 2021. Arkiverad från originalet 20 maj 2022.
  13. Google-grupper . Hämtad 11 augusti 2015. Arkiverad från originalet 31 maj 2019.
  14. Fel: parametern inte inställd i mallen {{ publication }} . ISBN 978-1-4008-8417-9 . |заглавие=
  15. Solvers-AMPL . Hämtad 21 januari 2018. Arkiverad från originalet 27 februari 2014.
  16. Couenne . Datum för åtkomst: 27 oktober 2013. Arkiverad från originalet 29 oktober 2013.
  17. mp/solvers/ilogcp på master ampl/mp GitHub . GitHub . Hämtad 11 augusti 2015. Arkiverad från originalet 14 maj 2022.
  18. mp/solvers/gecode vid master ampl/mp GitHub . GitHub . Hämtad 11 augusti 2015. Arkiverad från originalet 14 maj 2022.
  19. mp/solvers/jacop på master ampl/mp GitHub . GitHub . Hämtad 11 augusti 2015. Arkiverad från originalet 14 maj 2022.
  20. LGO-AMPL . Hämtad 11 augusti 2015. Arkiverad från original 11 augusti 2015.
  21. Använda lpsolve från AMPL . Hämtad 11 augusti 2015. Arkiverad från originalet 14 maj 2022.
  22. mp/solvers/sulum vid master ampl/mp GitHub . GitHub . Hämtad 11 augusti 2015. Arkiverad från originalet 14 maj 2022.
  23. GLPK officiella webbplats . Hämtad 17 september 2020. Arkiverad från originalet 30 maj 2022.

Externa länkar

Mall:Programvara för matematisk optimering