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
- 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).
- Calendario (lecciones 03 y 04): \(ES\), \(EF\), \(LS\), \(LF\) y holguras.
- 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).
- 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.
- 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:
Gantt de inicios más tempranos (semanas), con una flecha por prelación inmediata y la holgura total en la última columna:
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.
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.