Está en la página 1de 6

Caminos

crí�cos

Algoritmo y
Estructura de
Datos II
Análisis de caminos críticos

Grafos de actividades

Un grafo de actividades es un grafo acíclico en el que cada vértice representa una actividad a ser
realizada, y las aristas representan relaciones de precedencia entre las actividades. Estos grafos
son muy comunes en la planificación de tareas asociadas a un proyecto. En la Figura 1, podemos
observar un ejemplo de una lista de tareas, y sus precedencias, tomadas de un software de
administración de proyectos como Microsoft Project, u OpenProj. En este caso, aunque
representado de una manera diferente, la estructura de datos utilizada por este tipo de software
para representar actividades y dependencias entre las mismas, sigue siendo un grafo acíclico.

Figura 1. Actividades y precedencias en un proyecto de Software.

-1-
Fuente: http://www.arquitectuba.com.ar/curso-microsoft-project-gratis/el-ambiente-de-trabajo-de-microsoft-
project-2000/tabla-tareas-curso-microsoft-project.gif

En la Figura 2 observamos un grafo similar al de la Figura 1, empleando una representación


similar a la que hemos empleado en las lecturas anteriores. En este caso, cada vértice representa
una actividad del proyecto, y el subíndice mostrado en el nombre del vértice indica el tiempo que
lleva en completar dicha actividad, en alguna unidad determinada (por ejemplo, meses o
semanas).

C3 F3

A3

D2 G2 H1

B2

E1 K4

Figura 2. Actividades y precedencias en un proyecto de Software.

Los grafos de actividades son muy interesantes ya que permiten contestar varias preguntas muy
importantes en proyectos de estas características, tales como por ejemplo:

 ¿Cuál es el menor tiempo de terminación del proyecto? Ya veremos algoritmos para


responder a esta pregunta. En el ejemplo de la Figura 2, la respuesta sería 10 unidades de
tiempo.

 ¿Qué actividades se pueden retrasar, y por cuanto tiempo, sin afectar el tiempo mínimo de
terminación? También estudiaremos en esta Lectura algoritmos para responder este tipo
de preguntas. Para el ejemplo de la Figura 2, no se pueden retrasar A, C, F, o H. B es
menos crítica y puede retrasarse hasta 2 unidades

-2-
Grafos de eventos
Con el objetivo de realizar cómputos sobre los grafos de actividades que respondan a las
preguntas mencionadas en la sección anterior, debemos transformar el grafo de actividades en un
grafo de eventos. En un grafo de eventos, cada vértice determina un evento, el cual indica la
terminación de una actividad y sus actividades dependientes, mientras que las aristas muestran
qué actividad debe ser completada para avanzar de un vértice al siguiente.

El grafo de eventos se puede construir automáticamente o a mano, para lo cual puede ser
necesario insertar aristas y/o vértices falsos. En la publicación "Transformación de grafos de
actividades en grafos de eventos" podemos observar cómo funciona un algoritmo que transforma
un grafo de actividades en un grafo de eventos. En esta animación, comenzamos con un evento
1 que marca el inicio del proyecto. En este punto, las actividades que pueden realizarse son A y
B. El evento 2 marca el fin de la actividad A. En este punto, puede comenzarse la actividad C,
pero no se puede comenzar la actividad D, ya que para tal fin, la actividad B también debe haber
sido completada, lo que es indicado por el evento 3. Para poder mostrar esta sincronización en
la ocurrencia de los eventos 2 y 3 antes de comenzar la actividad D, introducimos un vértice
falso 6b, el cual es adyacente a los vértices 2 y 3. Cuando ambas actividades estén completas,
entonces se producirá el evento 6b que indicara que la actividad D puede comenzar. Las aristas
falsas deben tener, por lo tanto, costo 0, ya que la ejecución de dichas actividades no conlleva
costo alguno.

Tiempo de terminación mínimo


Uno de los datos más relevantes que podemos calcular en un grafo de eventos, es el tiempo de
terminación mínimo de un proyecto dado. Sin duda, cada vez que comenzamos un nuevo
proyecto una pregunta recurrente es cuánto tiempo demandará dicho proyecto hasta que finalice.
La otra pregunta más importante es cuánto costará el mismo, lo cual puede estimarse a grosso
modo a partir de la duración del proyecto, más el costo de los recursos asociados al mismo,
incluyendo gente, hardware, software, etc. necesarios para llevar a cabo el proyecto.

El tiempo de terminación mínimo del proyecto se obtiene calculando la longitud del camino más
largo desde el primer evento al último, en el grafo de eventos. En grafos generales esto no tiene
sentido, ya que pueden existir ciclos de costo positivo. Afortunadamente, sabemos que el grafo de
eventos es acíclico, por lo que este cálculo puede hacerse.

-3-
Para realizar el cálculo, definimos como ECi al tiempo de terminación mínimo para el vértice i. Por
lo tanto, EC1=0 ya que el vértice 1 indica el inicio del proyecto. Por otra parte, para cualquier
vértice w, se cumple que:

ECw=Max(v,w)E(ECv+cv,w)

En otras palabras, para determinar el valor EC de un vértice w, tomaremos en cuenta los valores
EC de todos los vértices de los cuales se puede llegar a w, sumaremos el costo de las aristas a
través de las cuales se llega a w, y nos quedaremos con el máximo valor para determinar EC w. En
la publicación "Valor EC" se observa como se computa el valor EC para todos los vértices del
grafo. Note que en este caso, el vértice 10 indica el evento de finalización del proyecto, con lo cual
sabemos que este proyecto demandará un mínimo de 10 unidades de tiempo para completar.
Note el alumno que el tiempo de terminación mínimo para todos los eventos del proyecto, es decir,
para todos los vértices del grafo, se calcula en tiempo lineal siguiendo un orden topológico.

Tiempo de terminación máximo

Es posible que en algunas ocasiones, deseemos conocer cuánto tiempo puede retrasarse un
evento, sin que esto afecte el tiempo de terminación final del proyecto. Para ello, primero debemos
calcular los valores LC de cada evento, que indican el tiempo máximo en que un evento puede
terminar sin afectar el tiempo de terminación mínimo del proyecto. El valor de LC para el evento
que marca la finalización del proyecto es igual al valor EC para dicho evento. Es decir, si el vértice
N indica dicho evento, tenemos que LCN=ECN. Esto es así, por si LCN fuera mayor que ECN
indicaríamos que el tiempo de dicho evento se ha retrasado, y por lo tanto el proyecto finalizará
con retraso. Para otros eventos, su valor LC se calcula de la siguiente manera:

LCv = Min(v,w) E(LCw-cv,w)

En otras palabras, los valores LC para cada vértice del grafo de eventos se calcula en tiempo
lineal siguiendo un orden topológico inverso, comenzando por el evento que marca la finalización
del proyecto, y luego tomando todos los vértices que llegan al mismo. En la publicación "Valor LC"
se observa como se computan los valores LC para el grafo de eventos que hemos utilizado a lo
largo de la lectura.

-4-
Tiempo de espera

Una vez que sabemos calcular los tiempos EC y LC asociados a cada evento, estamos en
condiciones de calcular la cantidad de tiempo que una actividad puede retrasarse sin afectar la
terminación total. Este valor se conoce también como el tiempo máximo de espera de una
actividad, y se define como:

 Espera(v,w) = LCw – ECv – cv,w

Las actividades cuyo tiempo de espera es 0 son actividades críticas, y no pueden retrasarse.
Estas actividades determinan el camino crítico de un proyecto, el cual está formado
completamente por aristas de tiempo de espera 0, y unen el evento que marca el inicio del
proyecto con el evento que marca la finalización del mismo. Es importante destacar que en todo
proyecto existe al menos uno de estos caminos. En la publicación "Tiempo de espera" se puede
observar cómo se computa el tiempo de espera para cada actividad de un grafo de eventos,
donde como sabemos las actividades están representadas por las aristas del grafo, a partir de
los valores EC y LC de cada uno de los vértices del grafo.

-5-

También podría gustarte