La complejidad adicional que representan los modelos de Programación No Lineal en comparación a los modelos de Programación Lineal, justifica el desarrollo de algoritmos especializados que permitan abordar de forma más eficiente la resolución de este tipo de modelos.
En este contexto, uno de los lenguajes de programación matemática más conocidos y confiable para formular diversos modelos de optimización es AMPL (www.ampl.com). Su popularidad ha sido sustentada adicionalmente por el desarrollo de distintos algoritmos de resolución (o solvers) que son compatibles con AMPL y que permiten resolver modelos de Programación Lineal, Programación No Lineal, Programación Entera, entre otras.
Estos solvers han sido resultado del trabajo de prestigiosas universidades y centros de investigación, en algunos casos en conjunto con empresas de software. El servidor NEOS consolida esta información en Internet.
A continuación mostraremos cómo resolver un modelo de Programación No Lineal sencillo utilizando la versión estudiantil de AMPL y utilizando el solver de resolución MINOS versión 5.5. Para ello debemos descargar el archivo «amplcml.zip» a nuestro computador, descomprimir éste y luego ejecutar el archivo de nombre «ampl».
Consideremos el siguiente modelo de Programación No Lineal:
La sintaxis utilizada por AMPL es bastante intuitiva como se aprecia a continuación en la resolución del ejemplo:
- var x1>=0; # definición de la variable x1 estableciendo condición de no negatividad.
- var x2>=0; # definición de la variable x2 estableciendo condición de no negatividad.
- minimize funcionobjetivo: (x1-2)^2+(x2-4)^2; # definición de la función objetivo. El nombre de la misma es arbitrario.
- subject to restriccion1: 2*x1+4*x2<=12; # se define la inecuación correspondiente a la restricción 1.
- subject to restriccion2: 4*x1+3*x2<=16; # se define la inecuación correspondiente a la restricción 2.
- solve; # una vez implementado el modelo se ejecuta su resolución haciendo uso de MINOS 5.5 (opción por defecto)
La solución óptima es X1=1,2 y X2=2,4 con valor óptimo V(P)=3,2. (Puedes consultar aquí la Resolución Gráfica de este modelo). Adicionalmente se pueden corroborar los resultados a través de la aplicación de las condiciones de optimalidad de Karush-Kuhn-Tucker (KKT).