Problema de Selección de Cartera de Proyectos a través de la Programación Entera

La Programación Entera provee una forma eficiente de enfrentar los problemas de selección de proyectos a ejecutar dentro de una cartera de potenciales proyectos a realizar, donde cada uno de éstos tiene asociado un tiempo de ejecución, requerimientos de fondos de inversión y necesidades adicionales. El siguiente artículo aborda la formulación de un modelo de optimización de Programación Entera que permita seleccionar los proyectos a realizar que maximice el Valor Presente Neto (VPN) del conjunto, respetando restricciones presupuestarias, políticas de inversión y de disponibilidad de personal.

Problema de Selección de Cartera de Proyectos

Consideremos una empresa que tiene en carpeta 8 proyectos, cada uno de los cuales con una estimación del VPN, la necesidad de financiamiento (en dólares) y los requerimientos de personal. La información se resume en la siguiente tabla:

tabla-inversion-proyectos

Por ejemplo, el Proyecto 1 requiere de 120 profesionales para ser realizado, con una inversión inicial de 15 millones de dólares y representa un Valor Presente Neto (VPN) de 8 millones de dólares. Asumiremos que la empresa dispone de 155 profesionales, un presupuesto para inversión de 40 millones de dólares. Adicionalmente para efectos de minimizar el riesgo la empresa debe ejecutar al menos 4 proyectos. Los proyectos 3 y 6 son excluyentes, es decir, sólo uno de los 2 puede ejecutarse.

Variables de Decisión:

variable-invertir-proyecto

Probablemente el lector se pregunte si es equivalente definir Xi: dólares a invertir en el Proyecto i. El problema subyacente a dicha formulación es asumir que si, por ejemplo, se invierte 7,5 millones de dólares en el Proyecto 1 se obtiene un VPN de 4 millones de dólares, es decir, que el VPN es proporcional al dinero invertido. Recordar que la proporcionalidad es un supuesto básico de la Programación Lineal donde claramente no provee una forma realista de representación en este caso, donde la naturaleza de la decisión es realizar o no un proyecto, sin dejar espacio para decisiones “intermedias”.

Función Objetivo:

funcion-objetivo-inversion-

Consiste en maximizar la sumatoria del Valor Presente Neto de los proyectos (en millones de dólares). En este contexto el valor óptimo corresponderá a la suma del VPN de aquellos proyectos que finalmente se llevaran a cabo.

Restricciones:

Se debe respetar la disponibilidad de trabajadores:

restriccion-disponibilidad-

La inversión total no puede superar el presupuesto disponible:

restriccion-presupuesto-pro

Al menos se deben realizar 4 proyectos para efectos de diversificación del riesgo:

al-menos-4-proyectos

Los proyectos 3 y 6 son excluyentes:

proyectos-excluyentes

Luego de implementar computacionalmente el problema anterior con Solver se alcanza los siguientes resultados:

solucion-optima-proyectos

La solución óptima consiste en desarrollar los proyectos 2, 4, 5, 6 y 7 lo que reporta un VPN de 10,7 millones de dólares (valor óptimo).

¿Quieres tener el archivo Excel con la resolución en Solver de este problema?. Recomiéndanos en Facebook, Google+ o Twitter utilizando la herramienta de redes sociales a continuación y accede de forma gratuita e inmediata a la descarga del archivo (el enlace de descarga con el nombre “Descarga el Archivo” se mostrará abajo una vez que nos hayas recomendado).

[l2g name=”Descarga el Archivo” id=”4355″]

Ejemplo del Problema del Flujo Máximo en Programación Entera resuelto con Solver

Este tipo de problemas (Problema del Flujo Máximo) es similar al Problema de Ruta más Corta, pero ahora se busca determinar el flujo máximo entre un nodo fuente y un nodo destino, los que están enlazados a través de una red, con arcos con capacidad finita, tal como se presenta en la siguiente figura. Notar que los números asignados a cada uno de los arcos representan los flujos máximos o capacidades correspondientes a cada arco.

ruta-flujo-maximo

Problema del Flujo Máximo

Desde el punto de vista de la Programación Entera podemos plantear la situación de la siguiente forma:

Variables de Decisión:

variables-flujo-maximo

Función Objetivo: Maximizar las unidades que salen del nodo de origen (1) a los que éste conecta (2, 4 y 5) o alternativamente maximizar las unidades que llegan al nodo de destino (8) desde los que conectan a él (3, 6 y 7).

funcion-flujo-maximo

Restricciones:

Restricciones de Flujo Máximo: La cantidad de unidades que sale de cada nodo de origen a un nodo de destino no puede superar la capacidad detallada en el arco, por ejemplo, del nodo 1 al nodo 2 sólo se pueden enviar 7 unidades.

restricciones-flujo-maximo

Restricciones de Balance de Flujo en los Nodos: Debe existir un equilibrio entre la cantidad de unidades que llega a un nodo y las que de éste salen, por ejemplo el número de unidades que se envía desde el nodo 1 al 4 (si es que así fuese el caso) debe ser igual a lo que desde el nodo 4 se envían al nodo 3 y 6.

balance-flujo-maximo

No Negatividad e Integralidad: Las variables de decisión de decisión deben cumplir las condiciones de no negatividad. Adicionalmente exigiremos que éstas adopten valores enteros aún cuando se podría flexibilizar dicha situación lo que daría origen a un problema de Programación Lineal.

no-negatividad-flujo-maximo

Luego de implementar el modelo de optimización anterior con Solver se alcanza la siguiente solución óptima y valor óptimo:

solucion-flujo-maximo

Notar que el flujo máximo de unidades que puede llegar al nodo de destino son 32 unidades (valor óptimo) donde cualquiera de las funciones objetivos propuestas proporciona el mismo resultado (en particular hemos utilizado la primera de ellas). Los valores de las celdas en color amarillo representan la solución óptima, es decir, la cantidad de unidades que fluyen en cada combinación de un nodo origen destino.

En el siguiente tutorial de nuestro canal de Youtube se detalla la implementación computacional que permite alcanzar los resultados anteriormente expuestos:

¿Quieres tener el archivo Excel con la resolución en Solver de este problema?. Recomiéndanos en Facebook, Google+ o Twitter utilizando la herramienta de redes sociales a continuación y accede de forma gratuita e inmediata a la descarga del archivo (el enlace de descarga con el nombre “Descarga el Archivo” se mostrará abajo una vez que nos hayas recomendado).

[l2g name=”Descarga el Archivo” id=”4352″]

Como resolver un modelo de Programación Lineal con LINGO 14.0

LINGO es un popular software de optimización matemática para uso tanto académico como empresarial desarrollado por LINDO Systems Inc (quienes desarrollaron What’sBest!) que provee una alternativa para enfrentar el problema de modelamiento matemático e implementación computacional en una plataforma distinta a Excel (en contraste a los complementos que han tenido un lugar preferente en nuestro sitio como Solver, Premium Solver Pro, What’sBest! y OpenSolver).

En el siguiente artículo detallaremos cómo descargar e instalar el programa LINGO para luego utilizar éste en la resolución de un modelo de Programación Lineal con 2 variables de decisión. Dado lo anterior consideremos el siguiente problema:

ejemplo-lingo-programacion-

Paso 1: Descarga e instalar la última versión disponible de LINGO desde la sección de descargas del sitio web de LINDO Systems. Se debe tener especial atención en seleccionar de forma correcta la versión compatible con nuestro sistema operativo (Windows o Linux) y la cantidad de bits asociado a dicho sistema. Para verificar este último aspecto te recomendamos leer el artículo “Cómo descargar e instalar la versión de Prueba de What’sBest! 11.1 en Excel 2010”. En dicho artículo se detalla adicionalmente el procedimiento de registro y activación de la licencia.

descarga-lingo

Paso 2: Una vez instalado LINGO en nuestro computador ejecutamos el programa y luego implementamos el modelo de optimización. El software es compatible con distintos tipos de sintaxis las cuales iremos abordando en próximos artículos en el Blog). Por el momento a continuación detallamos una notación intuitiva que nos permite representar nuestro ejemplo:

ejemplo-lingo

Una vez incorporado definido el problema ejecutamos el botón “Solve”:
solve-lindo

Paso 3: Se obtienen los resultados para el modelo. La ventana “Lingo 14.0 Solver Status” detalla las características del problema: LP (Programación Lineal) con Valor Óptimo de 2.025.

lingo-solver-status

El detalle de los resultados se aprecia en el informe de respuestas que genera el programa de forma automática. La salida computacional se muestra a continuación:

analisis-de-sensibilidad-li

La Solución Óptima es A=60 y C=27,5 con Valor Óptimo V(P)=2.025. Notar adicionalmente que los resultados son consistentes con los que obtendríamos de utilizar Solver para este ejemplo y haciendo uso del Informe de Confidencialidad (Sensibilidad).

informe-sensibilidad-del-mo

Con color verde destacamos el precio sombra de cada una de las restricciones del problema. Estos valores se identifican en la columna etiquetada “Dual Price” en el informe de resultados de LINGO en las Filas (Row) 2, 3 y 4, respectivamente.

Una representación gráfica del problema anterior con Geogebra nos permite corroborar los resultados anteriores de forma intuitiva, por ejemplo la restricción C<=50 no está activa, en consecuencia su precio sombra es igual a cero.

solucion-grafica-ejemplo-li

Cambio en un coeficiente de la Función Objetivo asociado a una Variable Básica

En el contexto del Análisis de Sensibilidad o Postoptimal en Programación Lineal y una vez alcanzada la tabla (tableau) final en la aplicación del método simplex, resulta de interés evaluar el impacto en la solución óptima del problema si cambia un coeficiente o parámetro en la función objetivo asociado a una variable básica. Se busca dar respuesta a este escenario sin la necesidad de reoptimizar, es decir, de resolver el problema original nuevamente.

Para conservar la solución óptima identificada inicialmente, se debe cumplir que el costo reducido de todas las variables debe ser mayor o igual a cero (recordar que el costo reducido de las variables básicas es cero por tanto dicha condición en la práctica se establece sobre las variables no básicas). Lo anterior se garantiza si el incremento es cualquiera en el siguiente intervalo:

formula-variable-basica-fun

Donde rj es el costo reducido de la respectiva variable no básica en la actual solución óptima y los coeficientes yij denotan las entradas en la tabla final del método simplex asociadas a la variable básica x(cuyo costo cambia) y la respectiva variable no básica xj.

Para presentar el concepto anteriormente expuesto consideremos el siguiente problema de Programación Lineal:

problema-dual

Luego de llevar a la forma estándar, incorporando S1, S2 y S3 como las variables de holgura de las restricciones 1, 2 y 3 respectivamente y resolver el modelo lineal anterior a través del método simplex se alcanza la siguiente tabla óptima:

tabla-metodo-simplex-funcio

La solución básica factible óptima es Y1=40 e Y2=40 con valor óptimo V(P)=100. A continuación determinaremos un intervalo de variación para los coeficientes que ponderan a las variables Y1 e Y2 en la función objetivo de modo que conservar la actual solución óptima. En este sentido tanto Y1 como Y2 son variables básicas en el óptimo según se aprecia en la tabla anterior.

Luego el intervalo de variación para C1 (en adelante coeficiente asociado a la variable Y1 en la función objetivo de minimización) que mantiene la solución óptima original es:

intervalo-c1-funcion-objeti

Del cálculo anterior se obtiene que C1 (coeficiente que multiplica a la variable Y1 en la función objetivo de minimización) puede variar en el intervalo entre C1℮[-1-1/2, -1+1/4], es decir, C1℮[-3/2, -3/4] y se conserva la actual solución óptima. Si hacemos la equivalencia en la función objetivo de maximización original el intervalo corresponde a C1℮[3/4, 3/2], es decir, existe una reducción permisible de 1/4 y un aumento permisible de 1/2 para el valor actual del parámetro que mantiene la solución óptima inicial. De forma análoga se puede verificar que el intervalo de variación para C2 (en la función objetivo de maximización) corresponde a C2℮[1, 2], con un aumento y disminución permisible de 1/2 en cada caso.

Los resultados obtenidos son consistentes con los que provee el informe de confidencialidad o sensibilidad de Solver según se resume a continuación:

informe-confidencialidad-ce

Una alternativa para corroborar los resultados anteriores de una forma intuitiva consiste en realizar una representación gráfica del problema anterior. La solución óptima se encuentra en el vértice C, donde la línea punteada de color rojo representa la curva de nivel que intersecta dicha solución. Por otra parte la línea punteada de color verde se obtiene al modificar C1 a 3/4 (reducción permisible de 1/4), lo cual conserva la solución óptima actual pero deja de ser única (en efecto se genera el caso de infinitas soluciones óptimas en el tramo entre los vértices B y C). Finalmente la línea color azul representa la curva de nivel que resulta de cambiar el coeficiente de C1 a 3/2 (aumento permisible de 1/2) que también conserva la solución actual y denota el caso de infinitas soluciones en el tramo CD).

representacion-grafica-inte

Problema de Corte Ensamblado y Producción de Sillas resuelto con Solver

Una empresa de Rústicos “El Viejo Baúl” fabrica entre muchos otros productos tres tipos de sillas A, B y C, las cuales se venden a precio de 11, 13 y 12 dólares cada una y respectivamente. Las sillas pasan por tres procesos, Corte, Ensamblado y Pintado, para lo cual se dispone máximo de 17, 13 y 15 horas respectivamente a la semana para dedicar a estas operaciones a estos productos. La silla tipo A requiere 3 horas para corte, 1 hora para ensamblado y 3 horas para pintura. La silla tipo B requiere 1 hora para corte, 4 horas para ensamblado y 3 horas para pintura. Y finalmente la silla tipo C, requiere de 5 horas para corte, 2 para ensamblado y 2 horas para pintura. De acuerdo a la anterior información:

a. Resuelva el problema con variables continuas  y señale los resultados para cada variable.

Variables de Decisión: Se estable el nivel de producción semanal para cada una de las variedades de silla según se detalla a continuación:

variables-decision-sillas

Función Objetivo: Maximizar los ingresos semanales asociados a la producción y venta de las sillas.

funcion-objetivo-sillas

Restricciones: En los procesos de corte, ensamblado y pintura se debe respetar la disponibilidad de horas semanales. Adicionalmente se deben satisfacer las condiciones de no negatividad.

restricciones-sillas

La implementación computacional del problema anterior con Solver de Excel permite alcanzar los siguientes resultados:

solucion-optima-problema-li

Donde la solución óptima es A=1,914286, B=1,828571 y C=1,885714 con valor óptimo V(P)=67,45714.

b. Modifique las condiciones de las variables y elíjalas enteras (integer) y observe el cambio entre la respuesta del punto a y esta nueva hallada.

Al definir las variables de decisión enteras estamos frente a un modelo de Programación Entera (siendo el escenario inicial un problema de Programación Lineal). Los resultados son:

solucion-optima-problema-en

La solución óptima es A=1B=2 y C=2 con valor óptimo V(PE)=61.

c. Concluya qué sucedió entre variables continuas y variables enteras.

Es importante observar que el dominio de soluciones factibles del problema entero (parte b) es un subconjunto del dominio de soluciones factibles del problema lineal (parte a). Por tanto es natural que al no obtener una solución con valores enteros para las variables de decisión en el problema inicial, el valor óptimo necesariamente disminuirá en la variante entera de dicho problema de maximización (V(PE)<V(P)). También se puede destacar que la solución entera no necesariamente se alcanza al aproximar los resultados fraccionarios de una solución de un problema lineal al entero inferior o superior más cercano. En consecuencia, para abordar de forma eficiente la resolución de un modelo que considere valores enteros para las variables de decisión requiere de una alternativa algorítmica específica como por ejemplo el Método Branch and Bound.

A continuación encontrarás un enlace de descarga del archivo Excel utilizado para la resolución del problema de corte, ensamblado y producción de sillas. En el archivo se incluyen 2 hojas que corresponden a la parte a) y b) del problema propuesto. Produccion de Sillas.