Problema de Manejo de Aves en Programación Lineal

El siguiente artículo aborda la formulación y resolución computacional haciendo uso de AMPL y el solver CPLEX de un modelo de Programación Lineal que trata sobre el manejo óptimo de aves en un criadero con el objetivo de maximizar el valor comercial de su explotación transcurrido un horizonte de planificación de 4 semanas. Se busca dar un especial énfasis al modelamiento matemático y la interpretación intuitiva de la solución óptima y valor óptimo alcanzado de modo de visualizar de forma más sencilla la naturaleza del problema.

Suponga que a un ave de criadero le toma dos semanas poner 12 huevos para la venta o, alternativamente, tener 4 pollos (al empollar 4 huevos). Formule y resuelva un modelo de optimización que provea el mejor programa de manejo de las aves si al cabo de la cuarta semana todas las aves y pollos acumulados son vendidos a USD 0.60 cada unidad y los huevos a USD 0.10 cada unidad. Suponga un inventario inicial de 100 aves y 100 huevos.

Variables de Decisión:

xe0: cantidad de aves empolladoras de huevos inicial
xe2: cantidad de aves empolladoras de huevos al término de la semana 2
xe4: cantidad de aves empolladoras de huevos al término de la semana 4

xp0: cantidad de aves ponedoras de huevos inicial
xp2: cantidad de aves ponedoras de huevos al término de la semana 2
xp4: cantidad de aves ponedoras de huevos al término de la semana 4

ye0: cantidad de huevos inicial para ser empollados
ye2: cantidad de huevos empollados al término de la semana 2
yi0: cantidad de huevos inicial para inventario
yi2: cantidad de huevos en inventario al término de la semana 2

Función Objetivo:

Se desea maximizar el valor comercial del manejo de las aves, donde se obtendrá USD 0.60 por cada una de las 100 aves iniciales y los pollos que se obtienen al empollar (un pollo por cada huevo empollado). Adicionalmente se percibe un ingreso de USD 0.10 por los huevos obtenidos por las aves ponedoras y aquellos que quedan en inventario.

Max 0.6 (100 + ye0 + ye2) + 0.1 (12 xp2 + yi2)

Restricciones:

La cantidad de aves destinadas a empollar (o poner huevos, denominadas también ponedoras) deben ser menor o igual a 100 tanto al inicio del horizonte de planificación como al final de la segunda y cuarta semana. Por supuesto adicionalmente se debe satisfacer las condiciones de no negatividad.

0 ≤ xp0 ≤ 100
0 ≤ xp2 ≤ 100
0 ≤ xp4 ≤ 100
0 ≤ xe0 ≤ 100
0 ≤ xe2 ≤ 100
0 ≤ xe4 ≤ 100

La cantidad de aves destinadas para poner huevos o empollar durante al inicio del horizonte de planificación, al final de la semana 2 y al final de la semana 4, debe ser igual a 100 aves (que son las aves iniciales). Por supuesto los pollitos que puedan haber nacido durante el período de evaluación no están en condiciones de empollar o poner huevos.

xp0 + xe0 = 100
xp2 + xe2 = 100
xp4 + xe4 = 100

Los 100 huevos iniciales pueden ser destinados sólo para 2 propósitos: almacenar en inventario o ser utilizados para ser empollados.

ye0 + yi0 = 100

Por cada ave destinada a empollar (al inicio del horizonte de planificación o al término de la semana 4) se necesitarán exactamente 4 huevos.

ye0 = 4 xe0
ye2 = 4 xe2

La cantidad de huevos inicial para inventario, más los que se obtengan de las aves destinadas inicialmente como ponedoras (12 huevos por cada una de ellas), menos aquellos huevos empollados al término de la semana 2, deberá ser igual a la cantidad de huevos en inventario al término de la semana 2.

yi0 + 12xp0 – ye2 = yi2

Una vez definido el modelo de optimización lineal para el problema de manejo de las aves de criadero, se propone una formulación matemática del mismo en el lenguaje de programación matemática AMPL que da origen al siguiente código (se ha utilizado para estos efectos el software Notepad como editor de texto y el archivo se debe guardar con la extensión .mod).

modelo aves ampl

A continuación podemos seleccionar algunos de los solvers compatibles con AMPL disponibles en la plataforma NEOS Solvers, en particular uno ad hoc a un modelo de Programación Lineal como resulta ser este caso. En este contexto hemos seleccionado CPLEX, cargando el archivo del modelo (que hemos llamado modeloaves.mod) de forma similar a la que usualmente se utiliza para adjuntar un archivo a un correo electrónico. Finalmente ingresamos un email donde deseamos recibir los resultados.

cplex ampl

Al cabo de unos segundos recibiremos un correo electrónico con la solución óptima y valor óptimo del problema. Un extracto del mismo se muestra a continuación:

solución cplex ampl

El valor óptimo corresponde a USD 410 que representa el valor comercial de las aves y huevos al final del período de planificación. En cuanto a la solución óptima esta corresponde a:

xe0: cantidad de aves empolladoras de huevos inicial = 25
xe2: cantidad de aves empolladoras de huevos al término de la semana 2 = 100
xe4: cantidad de aves empolladoras de huevos al término de la semana 4 = 0
xp0: cantidad de aves ponedoras de huevos inicial = 75
xp2: cantidad de aves ponedoras de huevos al término de la semana 2 = 0
xp4: cantidad de aves ponedoras de huevos al término de la semana 4 = 100
ye0: cantidad de huevos inicial para ser empollados = 100
ye2: cantidad de huevos empollados al término de la semana 2 = 400
yi0: cantidad de huevos inicial para inventario = 0
yi2: cantidad de huevos en inventario al término de la semana 2 = 500

Esquemáticamente y con el objetivo de facilitar la interpretación de la solución alcanzada, a continuación se presente una representación de la situación abordada.

Inicio: Se dispone de 100 aves y 100 huevos. De las 100 Aves, 25 de ellas son destinadas a empollar (utilizando cada una ella 4 huevos, por tanto se utiliza la totalidad del inventario inicial de huevos) y 75 aves serán ponedoras.

ave y huevo

Semana 2: Transcurridas las 2 primeras semanas se habrán obtenido 900 huevos (12*75) por parte de las Aves ponedoras y adicionalmente tendremos 100 pollitos (que nacieron luego de que 25 Aves empollaran 4 huevos cada una por un lapso de 2 semanas). Luego se destinan las 100 Aves (por supuesto omitiendo los pollitos) a empollar (requiriendo un total de 400 huevos) y quedando de esta forma 500 huevos en inventario.

aves huevos pollitos

Semana 4: Se dispondrá de 500 pollitos (400 de ellos recién nacidos y los 100 restantes aquellos que nacieron en la Semana 2) y 100 Aves (que son aquellas iniciales y que en suma a los pollitos da un total de 600 aves, cada una con un valor comercial de USD 0.60, es decir, un total de USD 360). Como no se destinaron aves como ponedoras al término de la semana 2, sólo se podrán vender de forma directa aquellos huevos que quedaron en inventario al final de la semana 2 (500 huevos) a un valor unitario de USD 0.10, es decir, USD 50 en total. Se concluye que la valorización total de las aves (incluyendo los pollitos) más los huevos alcanza por tanto USD 410 (360+50).

¿Quieres tener el archivo .mod con la formulación del modelo de optimización en AMPL resuelto en este artículo? (El archivo .mod estará al interior de un archivo comprimido .zip).

[sociallocker]MUCHAS GRACIAS. DESCARGA AQUÍ EL ARCHIVO CON EL MODELO EN AMPL[/sociallocker]

Algoritmo del Plano de Corte en el Problema del Vendedor Viajero

Según lo descrito en el artículo Solución del Problema del Vendedor Viajero, una de las situaciones potenciales a la que nos podemos enfrentar es que la solución de asignación obtenida represente un subcircuito, lo cual naturalmente no da respuesta a la problemática que el modelo de agente viajero desea abordar. En este contexto existen diversas estrategias algorítmicas que permiten enfrentar esta situación entre las cuales destaca el Algoritmo de Plano de Corte.

La idea del Algoritmo del Plano de Corte es agregar un conjunto de restricciones que, cuando se incorporan al Problema de Asignación garanticen evitar la formación de un subcircuito. Consideremos un problema con n ciudades, asociar una variable continua u_{j}\geq 0 con las ciudades 2,3,…,n. A continuación definir un conjunto de restricciones adicionales de la siguiente forma:

restricciones-plano-de-cort

Estas restricciones al añadirse al Modelo de Asignación, eliminarán todas las soluciones de subcircuito de forma automática, pero no eliminarán alguna solución de circuito.

A modo de ejemplo consideremos nuevamente el problema de secuenciamiento de la producción donde nos interesa determinar el orden en el cual se deben producir 4 colores de pintura.

tabla-tiempos-setup-pintura

A continuación se define un modelo de optimización haciendo uso del lenguaje de programación matemática AMPL. Para ello se puede utilizar un editor de texto como Bloc de Notas o WordPad. La siguiente imagen muestra la sintaxis utilizada en la definición del modelo del ejemplo propuesto donde se incorpora las restricciones que evitan los subcircuitos. Notar que es importante guardar el archivo con el formato adecuado (.mod) para lo cual simplemente en el caso de utilizar Bloc de Notas seleccionamos «Archivo», seguido de «Guardar como …» y luego en «Nombre» se ingresa un nombre arbitrario seguido de .mod (por ejemplo, modelo.mod).

modelo-ampl-plano-de-corte

El siguiente paso es generar un nuevo archivo con los datos o parámetros del problema. Básicamente aquellos que resumen el tiempo (en minutos) necesarios para la limpieza al realizar un cambio de colores, según se describe al inicio de este artículo. Notar que para evitar aquellas asignaciones infactibles (como que a un color le precede el mismo en la secuencia) se asignan «constantes grandes» a los elementos en la diagonal. El archivo se procesa y guarda de forma similar al caso del modelo pero con la extensión .dat (por ejemplo, matriz.dat).

datos-ampl-plano-de-corte

Finalmente será necesario construir un tercer archivo con extensión .run que provee de instrucciones adicionales para efectos de la resolución computacional y que facilita la interpretación de los resultados (por ejemplo, solucion.run).

solucion-run-ampl-plano-de-

Una vez definido el modelo, datos y archivo run, podemos utilizar un solver de Programación Entera Mixta de los disponibles en el Servidor NEOS. En particular recomendamos utilizar el solver XpressMP donde se deberá adjuntar los archivos con extensión .mod, .dat y .run (respectivamente) según se muestra a continuación (recordar que el nombre asignado al archivo es arbitrario, no así su extensión).

xpressmp-neos

Luego seleccionamos «Submit to NEOS» y los resultados se mostraran en el navegador de Internet, además de recibir un informe de respuestas en la dirección de correo electrónico que ingresamos. La siguiente imagen muestra un extracto de dichos resultados:

solucion-ampl-plano-de-cort

Notar que XpressMP encuentra como recorrido óptimo la secuencia 1-2-4-3-1, es decir, corresponde a producir en el siguiente orden: Blanco, Amarillo, Rojo, Negro, con un tiempo total de setup de 98 minutos.

7 Recursos Gratuitos para el estudiante de Investigación de Operaciones

En Internet existen recursos gratuitos valiosos para los estudiantes de los cursos de Investigación de Operaciones (conocido también como Investigación Operativa) que son de gran ayuda para complementar los conceptos tratados en el aula y la bibliografía. En el siguiente artículo ponemos en disposición de nuestros lectores algunos recursos que recomendamos:

1. Solver: Es sin duda la principal herramienta para resolver modelos de optimización de tamaño reducido utilizado por los alumnos de cursos de ingeniería. Este complemento de Excel se puede descargar desde el sitio web de Frontline en su versión comercial (Premium Solver Pro) para implementar modelos de mayor tamaño.

premium-solver-interfaz

2. What’sBest!: Es la alternativa a Solver dado que funciona integrada en una planilla de cálculo (Excel). La interfaz es intuitiva y seguramente quién domine Solver no demorará mucho en aprender los elementos básicos de este programa. What’sBest! ha sido desarrollado por la empresa de software Lindo.

variables-whatbest

3. AMPL: Es un lenguaje de programación matemática que permite abordar la formulación y resolución de modelos de optimización de programación lineal, programación entera y programación no lineal (entre otros). Esta plataforma es popular para modelos de mayor complejidad que requieren para su resolución de algoritmos especializados.

solucion-ampl-problema-no-l

4. GAMS: Es una herramienta de formulación matemática alternativa a AMPL que permite formular y resolver modelos de optimización de complejidad mayor.

5. NEOS Solvers: Es un portal que consolida una gran variedad de solvers (algoritmos) que permiten resolver distintas categorías de modelos de optimización formulados en un lenguaje matemático determinado (como AMPL y GAMS). El procedimiento es el siguiente: se selecciona un solver que permita resolver nuestro modelo (depende del lenguaje de programación matemática y el tipo de modelo), se sube el archivo del  modelos (y/o datos) y se obtienen los resultados online.

Solver NEOS

6. Geogebra: Es un excelente programa que nos ayuda a graficar distintas formas geométricas y en particular resolver gráficamente modelos de optimización lineales o no lineales. Este programa se puede descargar gratuitamente e instalar en nuestro computador o alternativamente utilizar su aplicación web directamente sin necesidad de descargar el programa.

solucion-grafica-nueva-rest

7. Método Simplex (ProgramacionLineal.net): Es una herramienta que permite resolver modelos de programación lineal a través del método simplex, mostrando paso a paso las respectivas iteraciones, solución óptima y valor óptimo.

tabla-simplex-nueva-variabl

8. Linear Programming: Versión en inglés de los principales artículos de este Blog que trata sobre la Investigación de Operaciones y en particular de la Programación Lineal, con recursos educativos y ejercicios resueltos.

Cómo resolver un modelo de Programación No Lineal con AMPL

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.

página web ampl

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.

Solver NEOS

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:

Modelo Minimización PNL

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)

PNL en AMPL

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