AMPL

AMPL
AMPL (textbook cover).jpg
Paradigm Multiparadigm : deklarativ , imperativ
Designad av


Robert Fourer David Gay Brian Kernighan Bell Labs
Utvecklare AMPL Optimization, Inc.
Dök först upp 1985 ; 38 år sedan ( 1985 )
Stabil frisättning
20221013 / 13 oktober 2022 ; 4 månader sedan ( 2022-10-13 )
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 www .ampl .com
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:

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  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

externa länkar