Lección 03 — El grafo Roy (método de los potenciales)
Actividades en los nodos, cálculo hacia delante y hacia atrás, esperas y solapes
Qué se aprende
A representar el proyecto con el grafo Roy (actividades en los nodos, prelaciones en los arcos), a calcular sobre él las fechas más tempranas y más tardías actividad a actividad, a compararlo con el PERT y a modelar relaciones que no son «fin-comienzo» (esperas y solapes).
Conceptos
Representación AoN (activity on node). Cada actividad es un nodo, rectangular, en el que se anotan sus fechas; cada prelación inmediata \(P \to A\) es un arco. Se añaden dos nodos auxiliares, inicio y fin, de duración cero, conectados a las actividades iniciales y finales. No hay ficticias: una prelación es un arco y nada más.
Equivalencia con el PERT. Los dos grafos describen el mismo orden parcial y dan el mismo calendario. El PERT tiene menos nodos y necesita ficticias; el Roy tiene tantos nodos como actividades y ningún arco artificial. En el Roy las fechas se escriben en la actividad; en el PERT, en los sucesos.
Fechas de una actividad. Con \(d_A\) la duración:
- Inicio más temprano: \(ES_A = \max_{P \in \text{pred}(A)} EF_P\) (0 si es inicial).
- Fin más temprano: \(EF_A = ES_A + d_A\).
- Duración del proyecto: \(T = \max_{A \text{ final}} EF_A\).
- Fin más tardío: \(LF_A = \min_{S \in \text{suc}(A)} LS_S\) (\(T\) si es final).
- Inicio más tardío: \(LS_A = LF_A - d_A\).
- Holgura total: \(H_A = LS_A - ES_A\) (lección 05).
Esperas y solapes. El Roy admite arcos con valor: un arco \(P \to A\) de valor \(\ell\) significa \(ES_A \ge ES_P + \ell\). Con \(\ell = d_P\) es la prelación ordinaria; con \(\ell > d_P\) hay una espera (secado, curado) y con \(\ell < d_P\) un solape (A puede empezar cuando P lleva \(\ell\) unidades). De ahí el nombre «método de los potenciales»: las fechas son los potenciales que satisfacen todas las desigualdades de los arcos. Con prelaciones ordinarias, una espera se modela también añadiendo una actividad «espera» de duración \(\ell - d_P\) entre P y A, y un solape dividiendo P en dos tramos.
Algoritmo
Paso hacia delante (en orden topológico): \(ES\) de las iniciales es 0; para cada actividad, \(ES = \max\) de los \(EF\) de sus predecesoras y \(EF = ES + d\). Al terminar, \(T\) es el mayor \(EF\).
Paso hacia atrás (orden topológico inverso): \(LF\) de las finales es \(T\); para cada actividad, \(LF = \min\) de los \(LS\) de sus sucesoras y \(LS = LF - d\).
El orden topológico es imprescindible: no se puede calcular \(ES_A\) hasta tener el \(EF\) de todas sus predecesoras.
Ejemplo guía
| Act. | d | pred. | ES = máx EF pred. | EF | suc. | LF = mín LS suc. | LS | H |
|---|---|---|---|---|---|---|---|---|
| A | 3 | — | 0 | 3 | C, D | mín(3, 6) = 3 | 0 | 0 |
| B | 2 | — | 0 | 2 | D, E | mín(6, 6) = 6 | 4 | 4 |
| C | 4 | A | 3 | 7 | F | 7 | 3 | 0 |
| D | 1 | A, B | máx(3, 2) = 3 | 4 | F | 7 | 6 | 3 |
| E | 2 | B | 2 | 4 | G | 8 | 6 | 4 |
| F | 3 | C, D | máx(7, 4) = 7 | 10 | — | 10 | 7 | 0 |
| G | 2 | E | 4 | 6 | — | 10 | 8 | 4 |
\(T = 10\); críticas (holgura 0): A, C, F. Son exactamente los mismos números que da el PERT con los tiempos de los nodos (lección 04): \(ES_A\) es el tiempo temprano del nodo del que sale A y \(LF_A\) el tiempo tardío del nodo al que llega.
Predecesora dominante. En D, la predecesora que fija su inicio es A (\(EF_A = 3 > EF_B = 2\)): un retraso de B de hasta 1 unidad no mueve a D. Saber qué predecesora domina en cada máximo es lo que permite predecir, sin recalcular, qué retrasos importan.
Con pmULE
proyecto.roy(durations=datos['duration']) # dibujo con fechas y camino crítico
proyecto.calendar(datos['duration']) # ES, EF, LS, LF y las tres holguras
proyecto.pert(durations=datos['duration']) # el PERT equivalente, con los mismos tiemposPreguntas de comprobación
- ¿Puede una actividad tener \(LS < ES\)? Sólo si se impone un plazo menor que \(T\) (holguras negativas, lección 04).
- Si B se retrasa 1 unidad, ¿cambia algo? D sigue empezando en 3 (A domina) y E empieza en 3 en vez de 2, pero tiene holgura 4: nada cambia en el plazo.
- ¿Cómo se ve en el Roy una espera de 2 unidades entre C y F? Un arco C → F de valor \(d_C + 2 = 6\), o una actividad «espera» de duración 2 entre ambas.
Qué practica cada variante
roy-vs-pert: dibujar los dos grafos, contar nodos y arcos, calendario y camino crítico. esperas-y-solapes: modelar una espera y un solape con actividades auxiliares y ver su efecto. predecesora-dominante: calcular a mano hacia delante y atrás anotando qué predecesora fija cada máximo, y predecir el efecto de retrasos. desde-sucesoras: el cuadro viene como sucesoras; invertirlo y dibujar.