Cómo determinar la Duración Óptima de un Proyecto a través del Análisis de Crashing

La Programación Lineal como hemos analizado anteriormente provee una forma eficiente para enfrentar el problema de cómo reducir la duración de un proyecto de la forma más económica posible (Análisis de Crashing) en el contexto de la aplicación del Método de Ruta Crítica (CPM) para la gestión de proyectos. Adicionalmente en algunas situaciones se suele enfrentar costos de penalización en la medida que el proyecto se entregue más tarde de lo comprometido o estimado, como también incentivos por entregas anticipadas que no vayan en desmedro de la calidad del proyecto.

Consideremos el siguiente ejemplo para el cálculo de la Duración Óptima de un Proyecto (el tiempo está medido en días y el costo en dólares):

tabla-datos-proyecto-crashi

Por ejemplo la Actividad F tiene una duración normal de 4 días a un costo de 600 dólares y se puede comenzar una vez terminadas las Actividades B y E (predecesores). Si se desea apurar (hacer “crash”) en la Actividad F, el menor tiempo que se puede adoptar es de 2 días (es decir, la reducción máxima es 2 días), donde por cada día que se reduce la duración de dicha actividad se incurre en un costo adicional de 175 dólares. De esta forma, por ejemplo, si se quisiera reducir la duración de la Actividad F de 4 a 3 días, el costo sería de 775 dólares (600+175).

Asuma que la fecha de entrega del proyecto es el día 10. La compañía debe pagar 170 dólares por cada día de atraso. Encuentre el número óptimo de días que debe durar el proyecto a través del análisis de crashing y el costo total del proyecto (incluyendo posibles multas por atraso).

Indique claramente las actividades donde realice crashing. Dibuje el diagrama del proyecto de la alternativa que se propone (el proyecto con el costo más bajo), representando el nombre de cada actividad al interior de los respectivos nodos. Para cada actividad calcule los siguientes indicadores: IC, TC, IL, TL. Luego obtenga explícitamente la holgura de cada actividad y la(s) ruta(s) crítica(s) del proyecto.

A continuación se define un modelo de optimización lineal propuesto para abordar el problema:

Variables de Decisión:

variables-crashing

Parámetros:

parametros-crashing-optimo

Función Objetivo: Consiste en minimizar el costo de terminar el proyecto en K días, donde 3.175 corresponde al costo en dólares de desarrollar el proyecto con las actividades en tiempo normal y la expresión en la sumatoria es el costo incremental de disminuir la duración del proyecto.

funcion-objetivo-crashing-o

Restricciones:

Cada actividad se puede reducir (de ser posible) dentro del límite máximo de reducción permisible:

xi-menor-o-igual-a-mi

Relaciones de predecesores entre las actividades y el tiempo de inicio y reducción:

relacion-predecesores-crash
Definición del tiempo objetivo para el proyecto:
tiempo-objetivo-crashing
No negatividad de las variables de decisión:
no-negatividad-crash

Una vez definido el modelo de Programación Lineal se implementa computacionalmente haciendo uso de Solver de Excel. Para ello será necesario sensibilizar los resultados del modelo para valores del parámetro K en el intervalo de [10,15] días (el lector puede corroborar que la duración del proyecto si cada actividad mantiene su duración normal es de 15 días). La solución óptima se resume a continuación:

solucion-crashing-solver

El tiempo óptimo para completar el proyecto corresponde a 12 días, con un costo total (incurriendo multas por atraso) de 3.890 dólares. El gráfico a continuación muestra el valor de la función objetivo (costo total) para distintos valores de duración del proyecto.

costo-proyecto-versus-tiemp

A continuación desarrollamos el diagrama del proyecto donde se observa que existen 2 rutas críticas: A-B-F y A-C-E-F, con una duración de 12 días. Notar que la única actividad que no es crítica con holgura positiva (de 1 día) es la Actividad D.

ruta-critica-crashing

¿Quieres tener el archivo Excel con la resolución en Solver de este problema?

[sociallocker]Crashing Óptimo[/sociallocker]

Teorema Fundamental de la Programación Lineal

En el siguiente artículo abordaremos a través de una discusión conceptual y ejemplos prácticos y sencillos las propiedades que establece el Teorema Fundamental de la Programación Lineal. Estas propiedades son indispensables tener en consideración al momento de la resolución algorítmica de este tipo de modelos de optimización matemática, destacando entre ellos el Método Simplex como así también la resolución de modelos lineales a través del Método Gráfico.

Teorema Fundamental de la Programación Lineal

Cada problema de Programación Lineal en su forma estándar cumple con las siguientes tres propiedades:

  • Propiedad 1: “Si el problema no tiene solución óptima entonces es no-acotado o infactible”

Notar que un problema lineal con dominio de soluciones factible no acotado puede (o no) admitir solución óptima, es decir, el hecho de enfrentar un modelo de estas características no determina a priori la presencia (o ausencia) de solución óptima.

En la aplicación del Método Simplex se detecta un problema no acotado sin solución óptima cuando al realizar el cálculo de la variable que deja la base, todos los elementos ykj de la columna j en la tabla, son negativos para j el índice de una variable no básica con costo reducido negativo. Por ejemplo consideremos el siguiente problema de Programación Lineal:

modelo lineal no acotado

Luego de llevar a la forma estándar el modelo anterior, agregando X3 y X4 como variables de holgura para la restricción 1 y 2, respectivamente, se obtiene la siguiente tabla inicial.
método simplex no acotado

X2 es una variable no básica con costo reducido negativo y en consecuencia la incorporamos a la base. Sin embargo no es factible calcular el criterio de factibilidad o mínimo cuociente debido a que las entradas en la columna de X2 son negativas o cero. Lo anterior deja en evidencia que el problema es no acotado sin solución óptima.

Por otra parte un modelo lineal es infactible (dominio de soluciones factibles vacío y por tanto no admite solución) si el valor de la función objetivo al finalizar la Fase I del Método Simplex de 2 Fases es distinto a cero.

  • Propiedad 2: “Si tiene una solución factible, tiene una solución básica factible”

Una propiedad básica de los modelos de Programación Lineal es que en caso de admitir solución óptima, ésta se encontrará necesariamente en un vértice o tramo en la frontera del dominio de soluciones factibles.

En este contexto en la aplicación del Método Simplex como estrategia algorítmica de resolución, se busca proveer soluciones que cumplan con Ax=b (restricciones de la forma estándar) y x≥0, definiendo una solución básica factible (no necesariamente óptima).

Por ejemplo en el siguiente gráfico que representa un modelo lineal en 2 variables se puede apreciar que los vértices A, B, C, D y E son soluciones básicas factibles.

modelo-lineal-2-v
solucion-grafica-nueva-rest

  • Propiedad 3: “Si el problema tiene solución óptima, tiene una solución básica factible óptima”

Siguiendo con el ejemplo anterior el vértice C no sólo es una solución básica factible sino también una solución básica factible óptima. Si todos los costos reducidos (de las variables no básicas: S1 y S3) son mayores o iguales que cero y estamos en presencia de una solución básica factible (X=100, S2=400, Y=350 todas ≥0), se cumple con el criterio de parada del Método Simplex y en consecuencia la actual solución básica factible es óptima.

tabla-optima-simplex

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.