AMPL ( A Mathematical Programming Language ) es un lenguaje de modelado algebraico para describir y resolver problemas de alta complejidad para computación matemática a gran escala (por ejemplo, problemas de optimización y programación a gran escala). [1] Fue desarrollado por Robert Fourer , David Gay y Brian Kernighan en Bell Laboratories . AMPL admite docenas de solucionadores , tanto de código abierto como de software comercial , incluidos CBC, CPLEX , FortMP , MOSEK , MINOS , IPOPT , SNOPT , KNITRO y LGO. Los problemas se pasan a los solucionadores como archivos nl . AMPL es utilizado por más de 100 clientes corporativos, agencias gubernamentales e instituciones académicas. [2]
Una ventaja de AMPL es la similitud de su sintaxis con la notación matemática de los problemas de optimización . Esto permite una definición muy concisa y legible de los problemas en el dominio de la optimización . Muchos solucionadores modernos disponibles en el servidor NEOS (anteriormente alojado en el Laboratorio Nacional Argonne , actualmente alojado en la Universidad de Wisconsin, Madison [3] ) aceptan la entrada AMPL. Según las estadísticas de NEOS, AMPL es el formato más popular para representar problemas de programación matemática.
AMPL presenta una combinación de estilos de programación declarativa e imperativa . La formulación de modelos de optimización se realiza a través de elementos del lenguaje declarativo, como conjuntos, parámetros escalares y multidimensionales, variables de decisión, objetivos y restricciones , que permiten una descripción concisa de la mayoría de los problemas en el dominio de la optimización matemática.
Los procedimientos y las declaraciones de flujo de control están disponibles en AMPL para
Para apoyar la reutilización y simplificar la construcción de problemas de optimización a gran escala, AMPL permite la separación del modelo y los datos.
AMPL admite una amplia gama de tipos de problemas, entre ellos:
AMPL invoca un solucionador en un proceso separado que tiene estas ventajas:
La interacción con el solucionador se realiza a través de una interfaz nl bien definida .
AMPL está disponible para muchos sistemas operativos populares de 32 y 64 bits, incluidos Linux , macOS , Solaris , AIX y Windows . [5] El traductor es un software propietario mantenido por AMPL Optimization LLC. Sin embargo, existen varios servicios en línea que brindan funciones gratuitas de modelado y resolución mediante AMPL. [6] [7] También están disponibles una versión gratuita para estudiantes con funcionalidad limitada y una versión gratuita con todas las funciones para cursos académicos. [8]
AMPL se puede utilizar desde Microsoft Excel a través del complemento SolverStudio Excel.
La biblioteca de resolución AMPL (ASL), que permite leer archivos nl y proporciona la diferenciación automática, es de código abierto. Se utiliza en muchos solucionadores para implementar la conexión AMPL.
Esta tabla presenta pasos significativos en la historia de AMPL.
Se utiliza un problema de transporte de George Dantzig para proporcionar un modelo AMPL de muestra. Este problema busca el programa de envío de menor costo que cumpla con los requisitos de los mercados y los suministros de las fábricas. [15]
establecer Plantas ; establecer Mercados ; # Capacidad de la planta p en casos param Capacidad { p en Plantas }; # Demanda en el mercado m en casos param Demand { m en Mercados }; # Distancia en miles de millas param Distancia { Plantas , Mercados }; # Flete en dólares por caja por mil millas param Flete ; # Costo de transporte en miles de dólares por caja param TransportCost { p en Plantas , m en Mercados } : = Flete * Distancia [ p , m ] / 1000 ; # Cantidades de envío en casos var envío { Plantas , Mercados } >= 0 ; # Los costos totales de transporte en miles de dólares minimizan el costo : suma { p en Plantas , m en Mercados } CostoDeTransporte [ p , m ] * envío [ p , m ]; # Respetar el límite de suministro en la planta p s.t. suministro { p en Plantas }: suma { m en Mercados } envío [ p , m ] <= Capacidad [ p ]; # Satisfacer la demanda del mercado m s.t. demanda { m en Mercados }: suma { p en Plantas } envío [ p , m ] >= Demanda [ m ]; datos ; establecer Plantas : = seattle san - diego ; establecer Mercados : = nueva - york chicago topeka ; param Capacidad : = seattle 350 san - diego 600 ; param Demanda : = nueva - york 325 chicago 300 topeka 275 ; param Distancia : nueva - york chicago topeka : = seattle 2.5 1.7 1.8 san - diego 2.5 1.8 1.4 ; param Carga : = 90 ;
A continuación se muestra una lista parcial de solucionadores compatibles con AMPL: [16]