Lección 16 — Gantt y grafos: ida y vuelta

Del PERT o el Roy al diagrama de Gantt, y del Gantt con flechas al cuadro, al Roy y al PERT

Qué se aprende

A leer y construir las tres representaciones de un mismo proyecto (cuadro de prelaciones, grafos y diagrama de Gantt) y a pasar de cualquiera de ellas a las otras, sabiendo qué información conserva cada una y cuál pierde.

Las tres representaciones

Qué muestra Qué no muestra
Cuadro de prelaciones la relación de orden, exacta nada visual: ni tiempos ni estructura
Grafo PERT la estructura con nodos-suceso; las rutas se ven; los tiempos van en los nodos necesita ficticias; no está a escala
Grafo Roy una actividad por nodo, una prelación por arco; fechas en el nodo no está a escala; con muchas prelaciones se enreda
Gantt (con flechas) la escala temporal: duración, huecos, solapes; cada prelación inmediata es una flecha las holguras totales (sólo se ven las libres); sin flechas, ni siquiera las prelaciones

Del grafo al Gantt

  1. Leer el cuadro del grafo. En el Roy, las predecesoras de una actividad son los nodos de los que recibe arcos. En el PERT, son los arcos que llegan a su nodo inicial; si llega una ficticia, se sigue hacia atrás hasta las actividades reales que la originan (la ficticia transporta esa prelación sin ser una actividad).
  2. Calendario (lecciones 03 y 04): \(ES\), \(EF\), \(LS\), \(LF\) y holguras.
  3. Gantt de inicios más tempranos: una barra por actividad de \(ES\) a \(EF\); una flecha del fin de cada predecesora al inicio de cada sucesora; las críticas se marcan (en la librería, barras y flechas rojas).
  4. Leer las holguras en el Gantt: el hueco entre el fin de una barra y el inicio de su sucesora más próxima es la holgura libre. La holgura total no se ve: requiere saber cuánto podrían retrasarse también las sucesoras.
  5. Gantt de inicios más tardíos: cada barra de \(LS\) a \(LF\). Ojo: no se construye retrasando cada actividad su holgura total, porque la holgura de una cadena es compartida (si la gasta la predecesora, la sucesora ya no la tiene); se construye insertando delante de cada actividad una espera igual a \(LS_A - \max_P LF_P\) (o \(LS_A\) si es inicial) y recalculando. En el Gantt tardío no queda hueco entre ninguna actividad y sus sucesoras.

Del Gantt al grafo

Si el Gantt lleva flechas de prelación, contiene toda la información: la duración de cada actividad es la longitud de su barra; sus predecesoras inmediatas son las actividades de las que recibe flecha; las iniciales no reciben ninguna (y empiezan en 0); las finales no emiten. De ahí al cuadro, al Roy (inmediato) y al PERT (con el mínimo de ficticias, lección 02). El PERT necesita ficticias donde el Gantt no, porque dibuja cada prelación como una flecha independiente mientras el PERT obliga a que un arco salga de un único nodo.

Si el Gantt no lleva flechas, el cuadro no queda determinado: sólo se sabe que \(P\) puede ser predecesora de \(A\) si \(EF_P \le ES_A\), y que toda actividad no inicial tiene al menos una predecesora «ajustada» (\(EF_P = ES_A\)) en un calendario de inicios tempranos. Las prelaciones con hueco son invisibles, y una coincidencia de fechas puede parecer una prelación sin serlo (lección 04, variante gantt-dado).

Ejemplo guía

Los dos grafos del proyecto guía, dibujados por la librería:

Grafo PERT con tiempos de los nodos y camino crítico

Grafo Roy con fechas y camino crítico

Gantt de inicios más tempranos (semanas), con una flecha por prelación inmediata y la holgura total en la última columna:

Gantt de inicios más tempranos

Flechas: A → C, A → D, B → D, B → E, C → F, D → F, E → G (rojas: A → C y C → F). Huecos: D termina en 4 y F empieza en 7 (holgura libre 3); G termina en 6 y el proyecto en 10 (libre 4); B termina en 2 y E empieza en 2 (libre 0, aunque su holgura total es 4). Gantt tardío: B en 5–6, E en 7–8, G en 9–10, D en 7; las esperas insertadas son 4 para B (\(LS_B = 4\), inicial), 0 para E (\(LS_E - LF_B = 6 - 6\)), 0 para D (\(LS_D - \max(LF_A, LF_B) = 6 - 6\)) y 0 para G (\(LS_G - LF_E = 8 - 8\)). Se ve que la espera de E y la de D son cero aunque sus holguras totales sean 4 y 3: la holgura la ha consumido B.

Gantt de inicios más tardíos (las filas 💤 son las esperas insertadas)

Con pmULE

g, dibujo = proyecto.gantt(datos, 'duration', holguras=True, tikz=True)   # flechas por defecto; columna H_total
pinta_tikz(dibujo)
# Gantt tardío: proyecto auxiliar con esperas como actividades (ver la variante roy-a-gantt)

Qué practica cada variante

pert-a-gantt y roy-a-gantt: del grafo sin tiempos (más duraciones) al cuadro, el calendario y los Gantt temprano y tardío. gantt-a-roy y gantt-a-pert: del Gantt con flechas al cuadro y al grafo; qué holguras se leen en el Gantt y por qué el PERT necesita ficticias.