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 planificación a gran escala). [ 1 ] Fue desarrollado por Robert Fourer , David Gay y Brian Kernighan en los Laboratorios Bell . AMPL admite docenas de solucionadores , tanto de código abierto como software comercial , incluyendo 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, así como por 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 ámbito de la optimización . Muchos solucionadores modernos disponibles en el servidor NEOS (anteriormente alojado en el Laboratorio Nacional Argonne , actualmente en la Universidad de Wisconsin, Madison [ 3 ] ) aceptan entrada AMPL. Según las estadísticas de NEOS, AMPL es el formato más popular para representar problemas de programación matemática.
Características
AMPL combina estilos de programación declarativos e imperativos . La formulación de modelos de optimización se realiza mediante elementos declarativos del lenguaje, como conjuntos, parámetros escalares y multidimensionales, variables de decisión, objetivos y restricciones , lo que permite una descripción concisa de la mayoría de los problemas en el ámbito de la optimización matemática.
Los procedimientos y las declaraciones de flujo de control están disponibles en AMPL para
- el intercambio de datos con fuentes de datos externas como hojas de cálculo , bases de datos , XML y archivos de texto
- Tareas de preprocesamiento y postprocesamiento de datos relacionadas con modelos de optimización
- la construcción de algoritmos híbridos para tipos de problemas para los que no existen solucionadores directos eficientes.
Para facilitar 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:
- Programación lineal
- Programación cuadrática
- Programación no lineal
- Programación entera mixta
- Programación cuadrática de enteros mixtos con o sin restricciones cuadráticas convexas.
- Programación no lineal de enteros mixtos
- Programación de conos de segundo orden
- Optimización global
- Problemas de programación semidefinida con desigualdades matriciales bilineales
- Problemas de teoría de la complementariedad (MPEC) en variables discretas o continuas
- Programación con restricciones [ 4 ]
AMPL invoca un solucionador en un proceso separado que tiene estas ventajas:
- El usuario puede interrumpir el proceso de solución en cualquier momento.
- Los errores del solucionador no afectan al intérprete.
- La versión de 32 bits de AMPL se puede usar con un solucionador de 64 bits y viceversa.
La interacción con el solucionador se realiza a través de una interfaz nl bien definida .
Disponibilidad
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 ofrecen herramientas gratuitas de modelado y resolución utilizando AMPL. [ 6 ] [ 7 ] También está disponible una versión gratuita para estudiantes con funcionalidad limitada y una versión gratuita con todas las funciones para cursos académicos. [ 8 ]
AMPL también proporciona API de código abierto que permiten la integración con lenguajes de programación de propósito general. Hay API oficiales disponibles para Python , R, C++, C#, MATLAB y Java, lo que permite a los usuarios generar, actualizar y resolver modelos mediante programación. [ 9 ]
AMPL se puede utilizar desde Microsoft Excel a través del complemento SolverStudio para Excel.
La biblioteca AMPL Solver Library (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.
AMPL/MP proporciona otra biblioteca de código abierto para construir solucionadores de programación lineal, de enteros mixtos y de restricciones , reemplazando a ASL para aquellos que no requieren diferenciación automática. [ 10 ]
Historial de estado
Esta tabla presenta los pasos más importantes en la historia de AMPL.
Un modelo de muestra
Se utiliza un problema de transporte de George Dantzig para proporcionar un modelo AMPL de ejemplo. Este problema encuentra el programa de envío de menor costo que satisface las necesidades de los mercados y los suministros de las fábricas. [ 17 ]
establecer Plantas ; establecer Mercados ;# Capacidad de la planta p en los casos param Capacity { p en Plants };# Demanda en el mercado m en casos param Demanda { m en Mercados };# Distancia en miles de millas param Distancia { Plantas , Mercados };# Flete en dólares por caja por cada mil millas param Flete ;# Costo de transporte en miles de dólares por caso param TransportCost { p en Plants , m en Markets } : = Freight * Distance [ p , m ] / 1000 ;# Cantidades de envío en cajas var envío { Plantas , Mercados } >= 0 ;# Costos totales de transporte en miles de dólares minimizar costo : suma { p en Plantas , m en Mercados } CostoTransporte [ p , m ] * envío [ p , m ];# Observar el límite de suministro en la planta p tal que suministro { p en Plantas }: suma { m en Mercados } envío [ p , m ] <= Capacidad [ p ];# Satisfacer la demanda en el mercado m sujeto a 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 ;parámetro Flete : = 90 ;Solucionadores
Aquí hay una lista parcial de solucionadores que admiten AMPL: [ 18 ]
Véase también
- sol (formato)
- GNU MathProg (anteriormente conocido como GMPL) es un subconjunto de AMPL compatible con el Kit de Programación Lineal de GNU [ 26 ].
Referencias
- 1 2 Fourer, Robert ; Gay, David M; Kernighan, Brian W (2003). AMPL: un lenguaje de modelado para programación matemática . EE. UU.: Duxbury Press/Brooks/Cole Publishing Company. ISBN 978-0-534-38809-6.
- ↑ "Puesto disponible" . Archivado del original el 11 de septiembre de 2011. Consultado el 29 de julio de 2011 .
- ↑ "Acerca de" . Consultado el 11 de agosto de 2015 .
- 1 2 Fourer, Robert ; Gay, David M. (2002). "Extending an Algebraic Modeling Language to Support Constraint Programming" . INFORMS Journal on Computing . 14 (4): 322– 344. CiteSeerX 10.1.1.8.9699 . doi : 10.1287/ijoc.14.4.322.2825 .
- ↑ "Plataformas" . AMPL Optimizations Inc. Archivado del original el 14 de mayo de 2022. Consultado el 1 de noviembre de 2019 .
- ↑ "Servidor NEOS para optimización" . Consultado el 11 de agosto de 2015 .
- ↑ "¡Prueba AMPL!" . Consultado el 11 de agosto de 2015 .
- ↑ "Descargas de AMPL" . Archivado del original el 26 de mayo de 2015. Consultado el 11 de agosto de 2015 .
- 1 2 "API de AMPL" . Optimización de AMPL . Consultado el 11 de septiembre de 2025 .
- 1 2 "AMPL/MP" . Optimización de AMPL . Consultado el 11 de septiembre de 2025 .
- ↑ Fourer, Robert ; Gay, David M.; Kernighan, Brian W. (1990). "Un lenguaje de modelado para la programación matemática" (PDF) . Management Science . 36 (5): 519–554–83. doi : 10.1287/mnsc.36.5.519 .
- ↑ INFORMS. "ICS - INFORMS" (PDF) . Archivado del original (PDF) el 7 de octubre de 2006. Consultado el 11 de agosto de 2015 .
- ↑ "Grupos de Google" .
- ↑ INFORMS. "Premio INFORMS Impact" . Archivado del original el 22 de octubre de 2013. Consultado el 11 de agosto de 2015 .
- ↑ "El libro de AMPL: Una guía completa para la creación de modelos de optimización, para usuarios principiantes o experimentados" . Consultado el 5 de marzo de 2021 .
- ↑ "Grupos de Google" . Consultado el 11 de agosto de 2015 .
- ↑ Dantzig, George (2016) [1963]. "3. Formulación de un modelo de programación lineal" . Programación lineal y extensiones . Princeton University Press. págs. 32–62 . ISBN 978-1-4008-8417-9.
- ↑ "Solvers - AMPL" . Archivado del original el 27 de febrero de 2014. Consultado el 21 de enero de 2018 .
- ↑ "Couenne" . Archivado del original el 29 de octubre de 2013. Consultado el 27 de octubre de 2013 .
- ↑ "mp/solvers/ilogcp en master · ampl/mp · GitHub" . GitHub . Consultado el 11 de agosto de 2015 .
- ↑ "mp/solvers/gecode en master · ampl/mp · GitHub" . GitHub . Consultado el 11 de agosto de 2015 .
- ↑ "mp/solvers/jacop en master · ampl/mp · GitHub" . GitHub . Consultado el 11 de agosto de 2015 .
- ↑ "LGO - AMPL" . Consultado el 11 de agosto de 2015 .
- ↑ "Uso de lpsolve de AMPL" . Consultado el 11 de agosto de 2015 .
- ↑ "mp/solvers/sulum en master · ampl/mp · GitHub" . GitHub . Consultado el 11 de agosto de 2015 .
- ↑ "Sitio oficial de GLPK" . Consultado el 17 de septiembre de 2020 .
Enlaces externos
- Sitio web oficial
- Página web del profesor Fourer en la Universidad Northwestern.
- Software de 1990
- Sistemas de álgebra computacional
- Modelado matemático
- Software de optimización matemática
- Lenguajes de programación numérica
- Lenguajes de scripting
- Lenguajes de programación orientados a texto
- Lenguajes de programación creados en 1985