Está en la página 1de 68

Teoría de grafos 137

7 Teoría de grafos

7.1 Introducción

En numerosos problemas cuantificables, en las organizaciones, intervienen una serie de elementos


entre los que se establecen unas relaciones: por ejemplo, los problemas relacionados con posibilidades
de comunicación (redes de comunicación y de transporte), relaciones de orden entre actividades
(planificación de proyectos mediante PERT) o estructuras de producto complejas (gestión de
inventarios mediante MRP).

Los grafos son una herramienta que permite modelizar relaciones de esta naturaleza, de modo que se
puedan resolver problemas asociados a esas circunstancias, frecuentemente de forma menos costosa
que utilizando otras técnicas como la programación lineal.

Una buena comprensión de la teoría de grafos pasa por dominar la nomenclatura y conceptos
asociados a estas representaciones de relaciones entre elementos, así como sus diversas formas de
representación.

Seguidamente se definirá formalmente un grafo, pasando posteriormente a mostrar las diversas


representaciones que admite. Con estos elementos podemos definir cómodamente los diversos
elementos conceptuales asociados a los grafos

7.1.1 Definición de grafo

Un grafo G(x,E) consta de un conjunto de elementos x, denominados nodos (en ocasiones,


especialmente cuando se usa su representación gráfica, también se les puede denominar vértices), y un
listado de parejas de nodos E que expresa las relaciones entre dichos elementos.

Desde la perspectiva las relaciones de los nodos, podemos encontrarnos con dos tipos de grafos:

- Si no se considera el orden de los nodos en cada pareja, dichos pares o relaciones se denominan
aristas, y decimos que el grafo es no orientado.

- Si se considera el orden de los nodos en cada pareja, cada una de la relaciones se llama arco y el
grafo es orientado. Un grafo no orientado puede siempre convertirse en orientado, sustituyendo
cada arista por dos arcos de sentidos opuestos.
138 Métodos cuantitativos en organización industrial I

7.1.2 Representación de grafos

Existen múltiples maneras de representar un grafo. Tomemos un grafo orientado G(x,E) definido como
con un conjunto de nodos y arcos, o aristas:

x = (1, 2, 3, 4, 5)
E = {(1,5), (1,2), (2,5), (5,4), (3,4), (3,2), (2,3), (4,5)}

Esta representación, pese a cumplir con los requerimientos de la definición, resulta poco práctica para
la interpretación del grafo y la comprobación de propiedades relevantes de éste. Por este motivo,
existen diferentes representaciones alternativas de los grafos:

1. La representación gráfica, adecuada para la interpretación y resolución de problemas en grafos


pequeños o medianos.

2. La representación mediante matriz asociada o de adyacentes, especialmente útil para el


tratamiento de problemas de grafos con programas informáticos.

3. Otras representaciones, como el diccionario de grafo, buscan definir el grafo de forma más
compacta, en términos de posiciones de memoria. Pueden ser útiles para representar grafos de
gran tamaño.

Representación gráfica

Tal como puede apreciarse, consiste en un gráfico en que los nodos se representan mediante puntos;
las conexiones se representarán de diferentes maneras, dependiendo de que el grafo sea orientado o no:

a. Si es relevante para la representación determinar cuál es el nodo origen y cuál el destino, las
conexiones entre nodos se representan mediante flechas (denominadas arcos): tendremos entonces
un grafo orientado.

El grafo definido anteriormente se trata de un grafo orientado, que admite la siguiente representación
gráfica:

E B

D C

Figura 1.2.a

b. Si no es relevante determinar el sentido de la relación entre nodos, tendremos un grafo no


orientado. Los nodos se unirán mediante segmentos, denominados aristas, que no tienen definido
el sentido.
Teoría de grafos 139

A B

C D

Figura 1.2.b

La figura 1.2.b muestra la representación de un grafo no orientado, en el que las conexiones no tienen
una dirección establecida. Como la definición de una arista muestra que no existe restricción en el
sentido, podemos establecer una equivalencia entre una arista y dos arcos. Según lo expuesto, la
siguiente figura tendría el mismo sentido que la figura 1.2.b.

A B

C D

Figura 1.2.c

Matriz asociada al grafo o de adyacentes

Es una matriz cuadrada G de orden n, donde n es el número de nodos. Cada una de los componentes
de la matriz representa una posibilidad de conexión: así, el componente gij representa la posibilidad de
conexión existente entre el nodo origen i y el nodo destino j.

Consideremos, por ejemplo, el grafo que se mostró al principio de la sección:

x = (1, 2, 3, 4, 5)
E = {(1,5), (1,2), (2,5), (5,4), (3,4), (3,2), (2,3), (4,5)}

La matriz de adyacentes G para este grafo será:

0 1 0 0 1
0 0 1 0 1
G= 0 1 0 1 0
0 0 0 0 1
0 0 0 1 0

En este caso, el grafo sólo tiene como objetivo mostrar las relaciones existentes entre los distintos
nodos, así que se ha optado por representar por unos las conexiones existentes, y por ceros la ausencia
140 Métodos cuantitativos en organización industrial I

de conexión. Puede ocurrir que, para la situación que deseemos representar, no sea relevante
determinar cuál de los dos nodos del grafo asociados a una conexión es el origen y cuál es el destino.
En este caso tendremos entonces un grafo no orientado. En estos grafos, se cumplirá que gij = gji; por
lo tanto, tendremos entonces una matriz G simétrica.

Si los arcos tienen asociado un valor (por ejemplo, distancias entre elementos), puede representarse en
la matriz G. La matriz siguiente, por ejemplo, muestra las distancias por carretera entre Barcelona
(BCN), Madrid (MAD), Bilbao (BIL) y Valencia (VAL). Por ser la distancia de ida igual a la de
vuelta, se trata de un grafo no orientado.

BCN MAD BIL VAL


BCN 621 620 349
MAD 621 395 352
BIL 620 395 633
VAL 349 352 633

Otras representaciones

Podemos tener representaciones más compactas, a precio de perder la posibilidad de representar


valores asociados a los arcos.

Por ejemplo, en el diccionario de grafo se enumeran los destinos de los arcos que parten de cada nodo.
El diccionario inverso enumera los orígenes de los arcos que inciden en cada nodo. Para el grafo
orientado del ejemplo, tenemos los siguientes diccionarios:

1 2 5 1
2 3 5 2 1 3
3 2 4 3 2
4 5 4 3 5
5 4 5 1 2 4

diccionario de grafo diccionario inverso

La lista de aristas, próxima a la definición formal de grafo expresada más arriba, permite una
representación compacta del grafo. Nuevamente para el ejemplo, la lista de arcos para el grafo del
ejemplo queda como:

Origen 1 1 2 2 3 3 4 5
Destino 2 5 3 5 2 4 5 4
lista de aristas

7.2 Topología de grafos

La determinación de las condiciones que ha de cumplir un grafo para representar determinadas


situaciones, o para que le sean aplicables determinados algoritmos, exige definir determinadas
propiedades topológicas que deben cumplir los grafos. Seguidamente se exponen algunas de estas
propiedades, tanto para grafos orientados como para no orientados.
Teoría de grafos 141

7.2.1 Caminos y circuitos (grafo orientado)

En un grafo orientado, dos nodos pueden no estar conectados directamente, pero sí indirectamente a
través de un camino. Más formalmente, un camino es una sucesión de arcos tal que el nodo extremo de
cada uno (exceptuando el último) coincide con el nodo extremo del siguiente en la sucesión.

Un nodo puede estar conectado a través de otros nodos mediante un circuito, definido como un
camino cuyos nodos origen y destino coinciden. Dichos conceptos pueden ilustrarse en el grafo de la
figura 2.1.a:

A C

D E

Figura 2.1.a

La figura 2.1.a se trata de un grafo orientado (por ejemplo, existe conexión directa entre A y D, pero
no entre D y A). Uno de los caminos del grafo es el que une los nodos A, B y C. Por otra parte,
encontramos un circuito que une B, C, E, D y B.

7.2.2 Cadenas y ciclos (grafo no orientado)

Una cadena puede definirse como un camino no orientado: es una sucesión de aristas tal que el nodo
extremo de cada una (exceptuando la última) coincide con el nodo extremo de la siguiente en la
sucesión. Dos nodos que no están conectados directamente pueden estarlo indirectamente mediante
una cadena.

Asimismo, un nodo puede estar conectado consigo mismo mediante un ciclo, definido como un
camino que se inicia y termina en el mismo nodo. Para los grafos orientados, puede definirse también
el concepto de ciclo como una relajación del concepto de circuito: así, para un grafo orientado, un
ciclo será un conjunto de arcos que unen una serie de nodos, prescindiendo de su orientación.

A B

C D

Figura 2.2.a

En el grafo de la figura 2.2.a, podemos observar que todos sus nodos están conectados mediante
142 Métodos cuantitativos en organización industrial I

cadenas: el nodo A está conectado con el D a través de la cadena A - B - D. También podemos


observar el ciclo A - B - C – D - A.

La siguiente tabla muestra un resumen de las principales diferencias entre los grafos orientados y los
grafos no orientados:

Tabla 2.a Conexiones entre vértices para grafos orientados y no orientados

Grafos orientados Grafos no orientados

Arcos Aristas

Caminos Cadenas

Circuitos Ciclo

7.2.3. Densidad, longitud y distancia

La densidad de un grafo se define como la proporción de pares combinados. En un grafo no orientado,


esta medida refleja la proporción de aristas que tiene el grafo en relación al número máximo de aristas
que podría tener. Para calcular el número máximo de pares se utiliza la siguiente fórmula: n·(n-1)/2,
donde n es el número de nodos.

Para el grafo de la figura 2.3.a, el número máximo de aristas es 5·(5-1)/2=10, por lo que la densidad
será 8/10=0,8.

A
E

D
C

Figura 2.3.a

Por otra parte, un grafo orientado equivale a un grafo no orientado en donde cada arista es sustituida
por dos arcos de sentidos opuestos. En este caso, el número máximo de pares será el doble que en el
grafo no orientado, por lo que el número máximo de pares se calcula con la siguiente forma: n·(n-1).

Para el grafo de la figura 2.3.b, el número máximo de aristas es 5·(5-1)=20, por lo que la densidad será
9/20=0,45.
Teoría de grafos 143

A
E

D
C

Figura 2.3.b

La longitud de una cadena en un grafo no orientado es el número de aristas que la forman, mientras
que la distancia geodésica entre dos nodos es la longitud de la cadena más corta. En un grafo
orientado, la longitud de un camino en un grafo es el número de arcos que la forman, mientras que la
distancia geodésica entre dos nodos es la longitud del camino más corto.

7.2.4 Centralidad

Una de las utilidades de los grafos es la de representar relaciones sociales entre actores. En los grafos
que representan este tipo de relaciones, los nodos representan individuos, y los arcos o aristas
relaciones entre ellos. Así, podemos representar, por ejemplo, las relaciones de amistad entre los
miembros de un grupo de trabajo o las relaciones comerciales entre las empresas de un sector de
actividad.

Para este tipo de grafos, se define el concepto de centralidad. La centralidad representa el grado en
que cada uno de los individuos (esto es, de cada uno de los nodos de un grafo) tiene un papel más o
menos central en el conjunto de las relaciones entre individuos. Muchas veces, la centralidad es la
medida del poder de un individuo insertado en una red de relaciones sociales. De entre las medidas
más elementales de centralidad, suelen utilizarse preferentemente tres: el grado nodal, el grado de
cercanía y el grado de intermediación.

Antes de analizar cada uno de los tres aspectos de centralidad, es necesario definir la matriz geodésica:
se trata de una matriz en la que se representan las distancias geodésicas entre los distintos nodos del
grafo. Así, para un grafo no orientado, será necesario encontrar la cadena más corta entre cada una de
las parejas de nodos.

A
E
F

D
C

Figura 2.4.a

La matriz geodésica del grafo de la figura 2.4.a es:


144 Métodos cuantitativos en organización industrial I

0 1 1 2 1 2
1 0 2 1 2 1
1 2 0 1 1 3
Gd=
2 1 1 0 1 2
1 2 1 1 0 3
2 1 3 2 3 0

Grado nodal

El grado de un nodo se define como el número total de arcos o aristas que inciden en dicho nodo, y
evalúa su la intensidad de las conexiones directas con el resto de nodos del grafo. Para un grafo
orientado, podemos definir también los semigrados interior y exterior:

a. El semigrado interior de un nodo es el número de arcos con destino en el nodo. Para determinadas
situaciones, un nodo con semigrado interior cero puede ser un origen del grafo.

b. El semigrado exterior de un nodo es el número de arcos con origen en el nodo. Un nodo con
semigrado exterior cero puede representar, en determinadas situaciones, un destino del grafo.

Para el grafo de la figura 2.4.b, el nodo α tiene semigrado interior cero, y representa el origen del
grafo. El nodo ω tiene semigrado exterior cero, y representa el destino del grafo.

A B
E G

α ω

F H

C D

Figura 2.4.b

Grado de cercanía

El grado de cercanía de un nodo se define como la suma de distancias al resto de los nodos. En un
grafo no orientado, se calcula el grado de cercanía como la suma de las filas de la matriz geodésica. El
grado de cercanía es una medida inversa a la centralidad: cuanto mayor es el grado de cercanía, menor
es la centralidad.

El grado de cercanía para los nodos del grafo de la figura 2.4.a es:

0 1 1 2 1 2 7
1 0 2 1 2 1 7
1 2 0 1 1 3 8
G= 
2 1 1 0 1 2 7
1 2 1 1 0 3 8
2 1 3 2 3 0 11
Teoría de grafos 145

Grado de intermediación

El grado de intermediación refleja con qué frecuencia aparece un nodo en la cadena más corta que
conecta otros dos nodos. Un nodo con una elevada centralidad de intermediación tendrá un tipo de
poder basado en su capacidad de actuar como intermediario entre otros nodos del grafo.

El grado de intermediación basado en la distancia geodésica se calcula de la siguiente forma:

donde gij es el número de cadenas geodésicas del nodo i al nodo j, y gikj es el número de esas cadenas
que pasan a través del nodo k.

A
E
F

D
C

Figura 2.4.c

A continuación, se calcula el grado de intermediación del nodo A de la figura 2.4.c. En este caso, se
tendrán que analizar las cadenas geodésicas entre los nodos B, C, D, E y F. Para cada par de nodos, se
calculará el número de cadenas geodésicas que pasan por A, y lo dividiremos por el número de
cadenas geodésicas que hay entre los dos nodos.

Cadena de B a C Cadena de B a D Cadena de B a E Cadena de B a F Cadena de C a D


1/1 1/1 1/1 0/1 0/1
Cadena de C a E Cadena de C a F Cadena de D a E Cadena de D a F Cadena de E a F
0/1 1/1 0/1 2/2 1/1

Si realizamos el sumatorio de los cocientes, obtendremos el grado de intermediación del nodo A: 6.

7.2.5 Conectividad en grafos

A diferencia de los conceptos anteriores, que afectaban a nodos del grafo, la conectividad es una
propiedad del grafo en su conjunto. Un grafo no orientado sólo puede ser conexo. En cambio, un grafo
orientado puede ser conexo o fuertemente conexo. Más concretamente:

- Diremos que un grafo es conexo si existe al menos una cadena entre toda pareja de nodos. El
concepto es aplicable tanto a grafos orientados como para no orientados.

- Diremos que un grafo orientado es fuertemente conexo si existe al menos un camino entre toda
pareja de nodos. Todo grafo orientado fuertemente conexo será también conexo.
146 Métodos cuantitativos en organización industrial I

El grafo de la figura 2.5.a, con el que se ejemplificó el concepto de camino, es un grafo fuertemente
conexo: podemos encontrar un camino entre cualquier pareja de nodos:
B

A C

D E

Figura 2.5.a

El grafo de la figura 2.5.b es un ejemplo de grafo conexo, pero no es, sin embargo, fuertemente
conexo: Existe una cadena entre D y A, pero no existe un camino entre ellos.

A B

C D

Figura 2.5.b

El grafo siguiente es un ejemplo de grafo conexo no orientado: podemos encontrar una cadena entre
cualquier pareja de nodos:

A B

C D

Figura 2.5.c

Finalmente, en la figura 2.5.d tenemos un grafo no orientado que no es conexo: D y E no están


conectados con A, B y C. Puede apreciarse la existencia de cadenas entre los nodos A, B y C, pero no
existe ninguna cadena hasta los nodos D y E que contenga los nodos A, B o C.
Teoría de grafos 147

A B

D E
C

Figura 2.5.d

7.2.6 Árboles y arborescencias

Los árboles y arborescencias son un tipo particular de grafos, útil para representar determinadas
situaciones.

Un árbol puede ser tanto orientado como no orientado, y no es más que un grafo conexo sin circuitos
(grafos orientados) o ciclos (grafos no orientados).

Las figuras siguientes representan dos grafos no orientados. El ciclo A - B - C - D hace que el grafo de
la figura 2.6.a no sea un árbol. El grafo de la figura 2.6.b, al no ser conexo y sin ciclos, sí es un árbol.

A B

C D

Figura 2.6.a

A B

C D

Figura 2.6.c

Una arborescencia es un grafo orientado, fuertemente conexo, sin ciclos, en que todos los nodos
tendrán semigrado interior igual a la unidad, excepto uno, raíz de la arborescencia, cuyo semigrado
interior es 0. Las arborescencias son útiles para representar, por ejemplo, procesos decisionales o el
sistema de directorios de un sistema operativo. El grafo de la figura 2.6.d es un ejemplo de
148 Métodos cuantitativos en organización industrial I

arborescencia, en la que la raíz es el nodo A.

B C

D E F G H

Figura 2.6.d

7.3 Modelado mediante grafos

Mediante el uso de grafos pueden representarse gran número de situaciones que supongan relaciones
entre diversos elementos. Seguidamente se exponen algunas de ellas.

7.3.1 Posibilidades de comunicación

De manera bastante natural, un grafo puede representar las posibilidades de comunicación existentes
entre diferentes puntos. Lo más frecuente es que los puntos estén representados en el grafo mediante
nodos y las posibilidades de comunicación mediante arcos (o en ocasiones aristas, si la comunicación
entre dos nodos es independiente del sentido). La representación de las posibilidades de comunicación
se completa asociando a cada arco una magnitud relevante para la representación (distancia, tiempo,
etc.).

33
B C
A 24

22
12
8 15

13
D E
12

Figura 3.1.a

El grafo de la figura 3.1.a representa las diferentes posibilidades de comunicación entre cinco ciudades
(A, B, C, D y E). Los valores sobre los arcos representan los tiempos de traslado de un punto a otro.

Mediante grafos de este tipo pueden resolverse problemas de conectividad (árbol parcial mínimo) o
problemas de caminos, en los que se trata de encontrar el camino de mínima distancia entre dos nodos
del grafo. El valor asociado a ese camino será la distancia geodésica entre los nodos del grafo.
Teoría de grafos 149

7.3.2 Flujos en redes de transporte

También es posible representar mediante un grafo orientado los flujos que circulan a través de una red
de transporte. Una red de transporte deberá tener uno o varios nodos origen (de semigrado interior
cero) y uno o varios nodos destino (de semigrado exterior cero). El resto de nodos, con semigrados
interior y exterior no nulos, serán nodos de trasbordo.

El grafo de la figura 3.2.a puede representar una red de distribución de agua entre diferentes puntos. El
nodo A es el origen de la red y el nodo E el destino.

A
8 4

12
B C

3 5

14
D E

Figura 3.2.a

En una red de transporte, se asociarán a los arcos los valores del flujo que circula por dicha
comunicación. Dichos flujos cumplirán algunas propiedades importantes:

1. En un nodo de trasbordo, el total de los flujos entrantes (valores de los arcos que tienen como
destino el nodo) será igual al de los flujos salientes (valores de los arcos que tienen como origen el
nodo).

2. La suma de los valores de los flujos de los arcos que tienen como origen los nodos origen será
igual al de la suma de los valores de los flujos de los arcos que tiene como destino los nodos
destino. Dicho valor será el flujo total de la red de transporte.

Además del flujo que circula por el arco, podemos asociar otros valores a los arcos:

a. El flujo máximo y el flujo mínimo que pueden y deben, respectivamente, circular por un arco. Con
dichos valores podremos resolver el problema del flujo total máximo que circula por una red de
transporte.

b. El coste de vehicular una unidad de flujo por cada uno de los arcos. Dichos valores permitirán
resolver el problema del flujo de coste mínimo, que consiste en vehicular por la red un determinado
valor de flujo total.

7.3.3 Relaciones de orden

También pueden representarse mediante un grafo las relaciones de sucesión entre las actividades de un
proyecto.

El cuadro muestra la secuencia de actividades a realizar para elaborar una tortilla de patatas. La
columna de la derecha representa las actividades inmediatamente anteriores para poder realizar la
150 Métodos cuantitativos en organización industrial I

actividad en cuestión: por ejemplo, antes de freír las patatas y la cebolla deben terminarse de pelar las
patatas (a) y la cebolla (b).

a Pelar patatas -
b Batir huevos -
c Pelar cebolla -
d Freír patatas+cebolla a, c
e Añadir huevo y freír b, d
f Servir e

Es usual representar estas situaciones en grafos en los que las actividades pueden estar representadas
por arcos (grafo PERT) o por nodos (grafo ROY):

Grafo PERT:

a d e f

c f1

Figura 3.3.a: grafo PERT

Los nodos del grafo representan etapas (instantes de tiempo en que se termina o empieza una
actividad). La actividad ficticia f1 se ha añadido para respetar las restricciones propias del grafo PERT
(entre dos etapas sólo puede haber una actividad).

El grafo ROY suministra la misma información que el PERT, diferenciándose de éste en que las
actividades están representadas por nodos. Deben añadirse dos nodos representativos del inicio (I) y
del final (F) del proyecto.

a d

I b e

c f F

Figura 3.3.b: grafo ROY.

Estos grafos se emplean frecuentemente para la gestión de proyectos. Mediante su uso podemos
determinar entre otros parámetros:
Teoría de grafos 151

1. Tiempo en que puede finalizarse el proyecto.

2. Holgura de las actividades (retraso máximo que no afecta a la duración del proyecto).

3. Camino crítico (conjunto de actividades de holgura cero, que determina la duración del proyecto).

7.3.4 Estructura de un producto

Puede representarse mediante un grafo la estructura de un producto complejo. La figura 3.4.a


representa la estructura de dos productos relacionados: una estantería de tres anaqueles y otra de seis
anaqueles.

EST - 3AN EST – 6AN

3 8
6 4
ANAQUEL PATA

2 4
3 12 24
CHAPA TORNILLOS CONECTOR

Figura 3.4.a

Este tipo de grafos se utiliza en procedimientos de previsión de la demanda dependiente de materia


prima (en este caso, de la chapa, tornillos y conectores) y de productos intermedios (en este caso,
anaqueles y patas) en función de la demanda de productos finales en el sistema de gestión de
inventarios MRP I (Material Requirements Planning).

En este documento trataremos dos tipos de problemas:

Problemas de caminos: se trata de algoritmos que permiten establecer la conexión entre todos los
nodos del grafo a mínimo coste (algoritmo de Prim), o bien encontrar el camino más corto entre dos
nodos del grafo (algoritmos de Dijkstra y de Bellman-Kalaba).

Problema de flujo total máximo: se trata de determinar cuál es el flujo máximo que puede circular por
una red de transporte (algoritmo de Ford-Fulkerson).

Finalmente, se presenta un problema más general (flujo de coste mínimo), que permite tratar los
problemas anteriormente indicados mediante programación lineal.

7.4 Problemas de caminos

En los problemas de caminos, se trabaja con grafos cuyos arcos o aristas tienen asociado un
determinado valor (que puede corresponder, aunque no necesariamente, a la distancia entre los nodos
unidos por un arco o arista). Dichos problemas suelen reducirse a encontrar:

El conjunto de aristas que conecta todos los nodos del grafo tal que la suma de los valores asociados a
152 Métodos cuantitativos en organización industrial I

las aristas sea mínimo. Dado que dicho conjunto ha de ser necesariamente un árbol, suele llamarse a
este problema de árbol parcial mínimo.

El camino más corto desde un nodo origen hasta otro extremo. Se denominará camino más corto a
aquel cuya suma de los valores asociados de los arcos que lo componen sea mínima.

A continuación se describen varios procedimientos para resolver estos dos problemas: el algoritmo de
Prim, para el problema del árbol parcial mínimo; y para el problema del camino más corto, los
algoritmos de Dijkstra y de Bellman-Kalaba.

7.4.1 Árbol parcial mínimo. Algoritmo de Prim

El problema del árbol parcial mínimo puede ser definido con precisión en los siguientes términos:

Dado un grafo de referencia no orientado y conexo, con unos determinados valores asociados a sus
aristas, se trata de hallar un subconjunto de aristas conexo tal que permita la conexión de toda pareja
de nodos del grafo de referencia, de modo que la suma de los valores asociados al subconjunto de
aristas sea mínima.

En otras palabras, se trata de conectar todos los nodos del grafo a un mínimo coste (suponiendo que
los valores asociados a una arista representen el coste de conectar de manera directa los dos nodos que
ésta une). La solución ha de ser forzosamente un árbol, dada su naturaleza de subgrafo conexo y que la
elección de una arista que haga ciclo con las restantes aumenta el coste del subgrafo, sin añadir nuevas
posibilidades de conexión. De ahí que la solución al problema sea el árbol parcial mínimo del grafo.

El problema puede resolverse de manera sencilla con el algoritmo de Prim, que se detalla a
continuación:

Paso 0: Inicio:
1. Asociar a cada arista aij un valor dij. Si no hay posibilidad de conexión directa entre los
vértices i y j, dicho valor será infinito.
2. Definir el conjunto S, que representará los vértices conectados en las iteraciones
anteriores. Inicialmente el conjunto S estará vacío.

Paso 1: Proceso:
Tomar un vértice cualquiera del grafo e incorporarlo a S.

Paso 2: Seleccionar la arista aij de menor valor dij, tal que el vértice i pertenece al conjunto S, y el
vértice j no pertenezca a S.

Definir el vértice i* como aquel seleccionado anteriormente.


Definir el vértice j* como aquel seleccionado anteriormente.

En caso de empate entre aristas, seleccionar cualquier de las opciones disponibles.

Paso 3: Incorporar (marcar) el vértice j* al conjunto S.

Paso 4: Si todos los vértice están conectados, entonces


Finalizar el proceso
Si no
Ir al paso 2
Para un grafo no orientado de n aristas, debemos realizar n-1 iteraciones para obtener el árbol parcial
mínimo.
Teoría de grafos 153

Como sucede con la mayoría de algoritmos para la resolución de problemas de caminos, se puede
aplicar el algoritmo Prim mediante una resolución gráfica (utilizando marcas), o a través de tablas en
donde se representan cada uno de los pasos del algoritmo. A continuación, se resolverá un ejercicio
aplicando el algoritmo Prim de las dos formas anteriores:

Ejemplo de algoritmo Prim

Encontrar el conjunto de aristas que permita la conexión de todos los vértices del siguiente grafo, de
forma que la suma de los valores asociados a cada arista sea mínima.
B

9 3
2

1 4
A F C

6
8 5
7
E D

Figura 4.1.a: grafo ejemplo para el algoritmo Prim

Resolución gráfica

Para resolver gráficamente un grafo no orientado mediante el algoritmo Prim es necesario la


utilización de marcas (representaciones gráficas que muestran la situación actual durante la resolución
del problema). En este caso, los vértices analizados y que son introducidos al conjunto S se marcarán
con una circunferencia. Mientras que las aristas seleccionadas en el segundo paso, se representarán
con una línea de mayor grosor.

En el grafo que se ha indicado anteriormente se le aplicará el algoritmo para obtener el árbol mínimo.
El lector puede seguir el procedimiento de forma gráfica cuando se comienza en el vértice A.

Paso 0: Inicio. El primer paso en la resolución del algoritmo Prim es asociar a cada arista aij su valor
correspondiente dij. Como estamos trabajando con un algoritmo no orientado, el valor correspondiente
a la arista que hay entre un vértice i y un vértice j es el mismo que el valor correspondiente entre el
vértice j y el vértice i. Entre aquellos vértices en que no exista conexión directa entre los vértices i y j
no se representará ninguna arista. Esto equivale a asignar una distancia infinita a las conexiones
directas. Así, dFD=∞.
B

dAB=9 dBC=3
dBF=2

dAF=1 dFC=4
A F C

dEF=6 dDC=5
dAE=8
dED=7
E D

Figura 4.1.b: definición de las dij para la aplicación del algoritmo


154 Métodos cuantitativos en organización industrial I

Paso 1: Escogemos el vértice A, y lo marcamos. La selección de vértice A es arbitraria; el lector puede


comprobar que se llega al mismo resultado partiendo de otro vértice.

n=1 (primera iteración)

Paso 2: Representamos todas las aristas que salen de un vértice marcado y acaban en un vértice no
marcado. Entre las aristas disponibles, escogemos la de menor valor, en este caso la arista AF.
B

dAB=9

dAF=1
A F

dAE=8

Figura 4.1.c: aplicación del algoritmo en la primera iteración

Paso 3: Mediante la arista seleccionada en el paso 2 (dAF=1), marcamos el nuevo vértice (F). Además
representamos dicha arista con una conexión más gruesa, como el resto de aristas que formarán parte
de solución.

Paso 4: Como no están marcados todos los vértices, volvemos al Paso 2.

n=2 (segunda iteración)

Paso 2: Representamos todas las aristas que salen de un vértice marcado y acaban en un vértice no
marcado. Entre las aristas disponibles, escogemos la de menor valor, en este caso la arista BF.
B

dAB=9
dBF=2

dFC=4
A F C

dEF=6
dAE=8

Figura 4.1.d: aplicación del algoritmo en la segunda iteración

Paso 3: Mediante la arista seleccionada en el paso 2 (dBF=2), marcamos el nuevo vértice (B). Además
representamos dicha arista con una conexión más gruesa.

Paso 4: Como no están marcados todos los vértices, volvemos al Paso 2.

n=3 (tercera iteración)

Paso 2: Representamos todas las aristas que salen de un vértice marcado y acaban en un vértice no
marcado. Entre las aristas disponibles, escogemos una vez más la de menor valor.
Teoría de grafos 155

dBC=3

dFC=4
A F C

dEF=6
dAE=8

Figura 4.1.e: aplicación del algoritmo en la tercera iteración

Paso 3: Mediante la arista seleccionada en el paso 2 (dBC=3), marcamos el nuevo vértice (C). Además
representamos dicha arista con una conexión más gruesa.

Paso 4: Como no están marcados todos los vértices, volvemos al Paso 2.

n=4 (cuarta iteración)

Paso 2: Representamos todas las aristas que salen de un vértice marcado y acaban en un vértice no
marcado. Entre las aristas disponibles, escogemos de nuevo la de menor valor.
B

A F C

dEF=6 dDC=5
dAE=8
dED=7
E D

Figura 4.1.f: aplicación del algoritmo en la cuarta iteración

Paso 3: Mediante la arista seleccionada en el paso 2 (dDC=5), marcamos el nuevo vértice (D). Además
representamos dicha arista con una conexión más gruesa.

Paso 4: Como no están marcados todos los vértices, volvemos al Paso 2.

n=5 (quinta iteración)

Paso 2: Representamos todas las aristas que salen de un vértice marcado y acaban en un vértice no
marcado. Entre las aristas disponibles, escogemos la de menor valor.

Paso 3: Mediante la arista seleccionada en el paso 2 (dEF=6), marcamos el nuevo vértice (E). Además
representamos dicha arista con una conexión más gruesa.
156 Métodos cuantitativos en organización industrial I

A F C

dEF=6
dAE=8
dED=7
E D

Figura 4.1.g: aplicación del algoritmo en la quinta iteración

Paso 4: Como todos los vértices están marcados, podemos finalizar el proceso y representar la
solución final.

La solución óptima, según el algoritmo Prim, es la que se muestra en la siguiente figura. Nótese como
las aristas que componen la solución forman un árbol: el grafo es conexo y sin ciclos.

dBC=3
dBF =2

dAF=1
A F C

dEF=6
dDC=5

E D

Figura 4.1.h: solución del algoritmo Prim

Resolución mediante la matriz de distancias

La resolución gráfica sólo es factible en problemas pequeños o medianos, y cuando el objetivo es


fundamentalmente pedagógico. En el caso de grafos de un tamaño considerable, la resolución gráfica
incrementa el tiempo de resolución de forma bastante rápida. Para modelos de gran tamaño, los
procedimientos a través de matrices resultan más adecuados debido a que son fáciles de implementar
en un ordenador.

A continuación se le aplicará el algoritmo Prim al grafo anterior para obtener el árbol mínimo. El
estudiante puede seguir el procedimiento a través de matrices cuando se comienza en el vértice A.

dij A B C D E F
A - 9 ∞ ∞ 8 1
B 9 - 3 ∞ ∞ 2
C ∞ 3 - 5 ∞ 4
D ∞ ∞ 5 - 7 ∞
E 8 ∞ ∞ 7 - 6
F 1 2 4 ∞ 6 -
Teoría de grafos 157

Paso 0: Inicio. Asociar a cada arista el valor correspondiente según el enunciado del ejercicio. Si no
hay posibilidad de conexión directa entre los vértices i y j, lo marcamos con un valor infinito. Al ser
un grafo no orientado, tendremos una matriz de distancias simétrica.

Paso 1: Escogemos el vértice A, y lo introducimos en el conjunto S. S = {A}

n=1 (primera iteración)

Paso 2: Es necesario calcular los costes o los valores de todas las aristas que salen de un vértice que
está en el conjunto S y acaba en un vértice que no está en el conjunto S. Es por este motivo que
representamos todos los vértices que están en el conjunto S en las filas de la tabla e introducimos todos
los vértices que no están en el conjunto S en las columnas de la tabla.

B C D E F
A 9 ∞ ∞ 8 1
Nuevo enlace: El mínimo valor es 1, y va desde i*=A hasta j*=F

Paso 3: Introducimos en el conjunto S el nuevo vértice (en este caso F). S = {A, F}

Paso 4: Como todos los vértices no están en el conjunto S, volvemos al Paso 2.

n=2 (segunda iteración)

Paso 2: Encontrar la arista de valor mínimo que relaciona un vértice que está en el conjunto S con un
vértice que no está en el conjunto S.

B C D E
A 9 ∞ ∞ 8
F 2 4 ∞ 6
Nuevo enlace: El mínimo valor es 2, y va desde i*=F hasta j*=B

Paso 3: Introducimos en el conjunto S el nuevo vértice (B). S = {A, F, B}

Paso 4: Como todos los vértices no están en el conjunto S, volvemos de nuevo al Paso 2.

n=3 (tercera iteración)

Paso 2: Encontrar la arista de valor mínimo que relaciona un vértice que está en el conjunto S con un
vértice que no está en el conjunto S.

C D E
A ∞ ∞ 8
F 4 ∞ 6
B 3 ∞ ∞
Nuevo enlace: El mínimo valor es 3, y va desde i*=B hasta j*=C

Paso 3: Introducimos en el conjunto S el nuevo vértice (C). S = {A, F, B, C}

Paso 4: Como todos los vértices no están en el conjunto S, volvemos una vez más al Paso 2.
158 Métodos cuantitativos en organización industrial I

n=4 (cuarta iteración)

Paso 2: Encontrar la arista de valor mínimo que relaciona un vértice que está en el conjunto S con un
vértice que no está en el conjunto S.

D E
A ∞ 8
F ∞ 6
B ∞ ∞
C 5 ∞
Nuevo enlace: El mínimo valor es 5, y va desde i*=C hasta j*=D

Paso 3: Introducimos en el conjunto S el nuevo vértice (D). S = {A, F, B, C, D}

Paso 4: Como todos los vértices no están en el conjunto S, pasamos al Paso 2.

n=5 (quinta iteración)

Paso 2: Encontrar la arista de valor mínimo que relaciona un vértice que está en el conjunto S con un
vértice que no está en el conjunto S.

E
A 8
F 6
B ∞
C ∞
D 7 ∞
Nuevo enlace: El mínimo valor es 6, y va desde i*=F hasta j*=E

Paso 3: Introducimos en el conjunto S el nuevo vértice (D). S = {A, F, B, C, D, E}

Paso 4: Como todos los vértices están en el conjunto S, podemos finalizar el proceso y representar la
solución final.

La solución corresponde a todas las aristas encontradas en cada iteración: {AF, FB, BC, CD y EF}. El
lector puede comprobar que el orden de obtención de las aristas que forman la solución ha sido el
mismo para los dos procedimientos.

7.4.2 Camino más corto entre dos vértices

El problema del camino más corto puede formularse del siguiente modo:

Dado un grafo conexo y orientado, a cuyos arcos se asocian determinados valores, encontrar un
camino entre dos vértices origen (O) y final (F), si existe alguno 1, de forma que la suma de los valores
asociados a los arcos que componen el camino sea mínima.

Para la resolución de este tipo de problemas existen varios algoritmos, basados todos ellos en el
procedimiento de Ford. Dicho procedimiento asocia a cada nodo etiquetas P i, que indican la distancia
1
Para asegurarnos de que el problema siempre tenga solución, debemos imponer la condición de que el grafo sea fuertemente
conexo.
Teoría de grafos 159

más corta hasta el origen obtenida hasta ese momento, y variables ti, que indican el nodo que precede a
i en el camino más corto obtenido hasta el momento.

Fase 1: Inicio:
3. Asociar una etiqueta y una variable a cada vértice (Pi y ti respectivamente).

Fase 2: Proceso:
Buscar un arco tal que Pi > Pj + dji.

En caso de encontrar un arco que cumpla la desigualdad anterior, recalcular el valor de P i y el


de ti.
Pi = Pj + dji
ti = j

Fase 3: Si no se ha encontrado ningún arco que cumpla Pi > Pj + dji, entonces


Finalizar el proceso.
En caso contrario,
Ir a la fase 2.

La exploración puede realizarse de diferentes formas en la matriz de distancias origen (filas) / destino
(columnas). Cada procedimiento de exploración dará lugar a un algoritmo, que será una variante del
procedimiento de Ford.

7.4.3 Camino más corto entre dos vértices. Algoritmo de Dijkstra

Uno de los algoritmos que aplican este procedimiento es el algoritmo de Dijkstra. El procedimiento
iterativo se basa en dos fases: la exploración de aquellos vértices en los que inciden arcos con origen
en algún vértice del conjunto S de vértices resueltos hasta el momento. Y la incorporación a S de aquel
vértice que resulte estar más cercano al origen después de la exploración. Por utilizar los arcos
emergentes de un vértice, decimos que el algoritmo de Dijkstra es un procedimiento de exploración
por filas de la matriz de distancias del grafo.

La ventaja de este algoritmo es que puede finalizarse la exploración cuando el vértice destino F se
haya incorporado al conjunto S, cosa que puede ser útil si no simplemente se desea obtener la distancia
entre dos vértices cualesquiera, y no resolver el problema de encontrar la distancia entre un vértice y
los restantes vértices del grafo. Su inconveniente principal es que se trata de un algoritmo lento: si el
grafo cuenta con n vértices, son necesarias n-1 exploraciones para tener el grafo cubierto.

Seguidamente se exponen el contenido del algoritmo, describiendo con detalle el proceso iterativo.
Los superíndices denotan la iteración que se está realizando.

Paso 0: Inicio:
1. Asociar a cada arco aij un valor dij. Si no hay posibilidad de conexión directa entre los
vértices i y j, dicho valor será infinito.
2. Definir el conjunto S, que representará los vértices conectados en las iteraciones
anteriores. Inicialmente en el conjunto S sólo estará el vértice de origen O.
3. Definir las etiquetas Pi: Se define una etiqueta P para cada vértice, y se inicializa la
etiqueta del vértice origen a cero (PO0=0), y el resto de etiquetas a infinito (Pi0=∞).
4. Definir las variables ti: Se define un variable t para cada vértice, y se inicializan con el
vértice origen (ti=O).

Inicializamos la variable que indica la iteración que se está realizando (k=1).


Paso 1: Proceso:
Definimos la variable y, y la inicializamos con el último vértice incorporado en S.
160 Métodos cuantitativos en organización industrial I

Definimos la variable z, y la inicializamos con un vértice no incorporado en S (y que no haya


sido analizado en la iteración actual):

Pzk = min {Pzk-1, Pyk-1 + dyz}

Si Pzk-1 > Pyk-1 + dyz En el caso de cumplirse la desigualdad anterior, actualizar


tz = y la variable t del vértice estudiado.

Si han sido analizados todos los vértices no incorporados en S, entonces


Ir al Paso 2
Si no,
Ir al Paso 1

Paso 2: De entre todos los vértices no incorporados en S, determinar aquel z* que tenga asociado una
Pz mínimo:

Pz*k= min {entre todos los Pzk}

Paso 3: Si Pz*k=∞
Finalizar porque no hay caminos de longitud finita entre el vértice origen y final.
Si no,
Ir al paso 4
Paso 4: Incorporar el vértice z* al conjunto S.

Paso 5: Si el último vértice incorporado a S (z*) es el vértice destino (F), entonces


Finalizar el proceso
Si no,
Incrementar la iteración (k=k+1)
Ir al paso 1

En una iteración determinada (por ejemplo: k), Pzk representa el valor del mejor camino desde el
vértice origen (O) hasta el vértice que se está analizando (en este caso z).

Como sucedía con el algoritmo Prim, con el que se determinaba el árbol parcial que conectaba a coste
mínimo todos los vértices de un grafo no orientado, la resolución de problemas de caminos mediante
el algoritmo Dijkstra puede llevarse a cabo mediante un desarrollo gráfico (utilizando marcas), o a
través de tablas en donde se representan cada uno de los pasos que se reflejan en el algoritmo.

Marcación de vértices

La marcación de vértices es un método para representar la situación de un vértice durante la resolución


gráfica de un problema de grafos. En el caso del algoritmo de Dijkstra, así como el de Bellman-Kalaba
y Bellman-Kalaba acelerado, se utilizan marcas compuestas por dos elementos: (1) el vértice de
procedencia ti y (2) una cota superior del coste para llegar desde el vértice origen hasta el vértice de la
marca Pi.

Una vez se ha terminado de aplicar un algoritmo de camino mínimo entre dos vértices, las marcas
muestran el camino óptimo que se tiene que seguir, y su coste asociado. Para ello, se tiene que
seleccionar el vértice destino e interpretar su marca. El primer elemento de la marca muestra cual debe
ser el vértice previo para conseguir el camino óptimo en el grafo, mientras que el segundo elemento de
la marca muestra el coste mínimo para llegar desde el vértice origen hasta el vértice.

La siguiente figura nos puede ayudar a entender el significado de una marca:


Teoría de grafos 161

3
(A, 0) A B (A, 3)

6 1
2

2
(B, 4) D C (B, 5)

Figura 4.3.a: ejemplo de marcación en algoritmos de caminos

Si queremos encontrar el camino más corto entre el vértice origen A y el vértice D, tendremos que
analizar la marca de este último. Según esta marca, el camino óptimo entre los vértices A y D tiene un
valor de cuatro unidades. Por otra parte, el camino óptimo pasará por el vértice B (tal y como indica la
marca). Si ahora analizamos la marca del vértice B, observamos que el camino óptimo pasará por el
vértice A. Por lo tanto, el camino que estamos buscando será el que pase por lo vértices A, B y D y
tendrá un valor de 4 unidades.

Si queremos buscar el camino óptimo entre el vértice origen A y el vértice C, estudiaremos otra vez
las marcas del grafo. Para empezar, la marca del vértice C nos informa que el camino óptimo tendrá un
valor de cinco unidades, y que el camino que buscamos pasará por el vértice B. La marca del vértice B
indica que el camino óptimo pasará por el vértice A. De todo esto, se extrae que el camino óptimo
pasará por los vértices A, B y C, con un coste de 5 unidades.

A continuación, se resolverá un ejercicio aplicando el algoritmo Dijkstra mediante una resolución


gráfica y mediante una resolución analíticas a través de matrices.

Ejemplo de algoritmo Dijkstra

Aplicaremos el algoritmo de Diestra al problema consistente en encontrar un camino entre los vértices
A y F, de forma que la suma de los valores asociados a los arcos que componen el camino sea mínima
para el grafo de la figura 7.4.3.b. Lo resolveremos primero gráficamente y luego usando la matriz del
grafo.
B

1 3

2 3
A C E

9 8
8 4
20
D F

Figura 4.3.b: grafo de ejemplo de algoritmo Dijkstra

Resolución gráfica

Para resolver gráficamente un grafo no orientado mediante el algoritmo Dijkstra es necesario la


utilización de marcas (representaciones gráficas que muestran la situación actual de un vértice durante
la resolución del problema).
162 Métodos cuantitativos en organización industrial I

Las marcas en el algoritmo Dijkstra están compuestas por dos partes: la primera representa la variable
t para el vértice, y la segunda el valor de la etiqueta P para el mismo vértice. Estas marcas, como
representaciones de las variables que aparecen en el algoritmo Dijkstra, deberán ser inicializadas antes
del proceso iterativo.

Por otra parte, los vértices que han sido analizados, y que han sido introducidos en el conjunto S se
representarán mediante una circunferencia. Como muestra el algoritmo Dijkstra, antes de empezar el
proceso iterativo se tiene que introducir el vértice origen (A) en el conjunto S.

En el grafo que se indica anteriormente se aplicará el algoritmo para calcular el camino mínimo según
el algoritmo Dijkstra. El lector puede seguir el procedimiento de forma gráfica cuando se comienza en
el vértice A.

Paso 0: Inicio. Inicializamos las marcas de cada vértice, tal y como se indica en el algoritmo Dijkstra,
así como el vértice A que estará dentro del conjunto S.
(A,∞)
B

1 3

(A,0)
2 (A,∞) 3 (A,∞)
A C E

9 8
8 4
20
D F
(A,∞) (A,∞)

Figura 4.3.c: definición de las marcas para cada vértice en el inicio del algoritmo

k=1 (primera iteración)

Paso 1: Representamos todos los vértices que están en el conjunto S, y todos los vértices que no
pertenecen al conjunto S pero a los que llega un arco procedente de un vértice que está en el conjunto
S. También representamos todos los arcos que salen de vértices que están en el conjunto S y que
acaban en los vértices que no están en el conjunto S.
(A,∞)
B (A,1)

0+1
(A,0)
0+2 (A,∞)
A C (A,2)

0+8
(A,∞)
D
(A,8)

Figura 4.3.d: aplicación del algoritmo en la primera iteración

Se calculan los nuevos valores asociados a cada arco del gráfico. El nuevo valor se calculará sumando
el valor de la marca del vértice origen del arco más la distancia o coste que hay entre los dos vértices
(Pyk-1 + dyz).

En el caso de que el valor del arco sea inferior al indicado por la marca del vértice destino (P zk-1 > Pyk-1
+ dyz), se tendrá que actualizar la marca. La nueva marca estará formada por el vértice del que le llega
el arco (tz), y del nuevo valor del arco (Pzk).
Teoría de grafos 163

Paso 2: Entre todos los vértices que no pertenecen al conjunto S, se selecciona aquel que tenga la
marca con el menor valor posible o aquel vértice al que le llega el arco de menor peso. (P z*k= min
{entre todos los Pzk}). En este caso, el resultado será el vértice B, que tendrá un valor de uno.

Paso 3: Al tratarse de un valor finito (uno), podemos continuar iterando.

Paso 4: Incorporamos el vértice B en el conjunto S, y lo representamos con una circunferencia.

Paso 5: Como el vértice destino (F) no está en el conjunto S (no tiene una circunferencia), volvemos al
paso 1.

k=2 (segunda iteración)

Paso 1: Representamos todos los vértices que están en el conjunto S y todos los vértices que no
pertenecen al conjunto S pero a los que llega un arco procedente de un vértice que está en el conjunto
S. También representamos todos los arcos que salen de vértices que están en el conjunto S y que
acaban en los vértices que no están en el conjunto S.
(A,1)
B

1+3

(A,0)
0+2 (A,2) (A,∞)
A C E (B,4)

0+8

D
(A,8)

Figura 4.3.e: aplicación del algoritmo en la segunda iteración

Tal y como se ha realizado en la primera iteración, se calculan los nuevos valores asociados a cada
arco. En los casos en que el valor del arco sea inferior al indicado por la marca del vértice destino, se
tendrá que actualizar la marca. En este caso, sólo se tiene que actualizar la marca E.

Paso 2: Entre todos los vértices que no pertenecen al conjunto S, se selecciona aquel que tenga la
marca con el menor valor posible. En este caso, tenemos tres arcos (AC, AD, y BE). El arco de menor
valor es el arco que va desde el vértice A hasta el vértice C, por lo que z*=C (con un peso de dos).

Paso 3: Como PC2= 2, diferente de infinito, continuamos iterando.

Paso 4: Incorporamos el vértice C en el conjunto S y lo representamos con una circunferencia.

Paso 5: Como el vértice destino (F) no está en el conjunto S (no tiene una circunferencia), volvemos al
paso 1.

k=3 (tercera iteración)

Paso 1: Representamos todos los vértices que están en el conjunto S y todos los vértices que no
pertenecen al conjunto S pero a los que llega un arco procedente de un vértice que está en el conjunto
S. También representamos todos los arcos que salen de vértices que están en el conjunto S y que
acaban en los vértices que no están en el conjunto S.
164 Métodos cuantitativos en organización industrial I

(A,1)
B

1+3

(A,0) (A,2)
2+3
A C E (B,4)

2+9 2+8
0+8

D F (A,∞)
(A,8) (C,10)

Figura 4.3.f: aplicación del algoritmo en la tercera iteración

Se recalculan todos los valores de los arcos del grafo según las normas de marcación. En el caso de
que la marca de un vértice destino y su arco sean iguales, no es necesario actualizar la marca. En esta
iteración, sólo se ha modificado la marca del vértice F.

Paso 2: Escogemos el vértice E como el más cercano al origen de los vértices no incluidos en S.
Hacemos que z*=E.

Paso 3: Como PE3=4, podemos continuar el proceso.

Paso 4: Incorporamos el vértice E en el conjunto S y lo representamos con una circunferencia.

Paso 5: Como el vértice destino (F) no está en el conjunto S (no tiene una circunferencia), volvemos al
paso 1.

k=4 (cuarta iteración)

Paso 1: Representamos el nuevo grafo teniendo en cuenta el nuevo vértice (E) que ha sido introducido
en el conjunto S.
(A,1)
B

(A,0) (A,2)
A C E
(B,4)
2+9 2+8
0+8 4+4

D F (C,10)
(A,8) (E,8)
Figura 4.3.g: aplicación del algoritmo en la cuarta iteración

Se recalculan todos los valores de los arcos y de las marcas del grafo según las normas de marcación.
En el caso de encontrar dos arcos (o dos nuevas marcas de vértices que no están en el conjunto S) con
el mismo valor, se puede seleccionar cualquiera de los dos vértices de forma indiferente. En nuestro
caso se ha seleccionado el vértice F, pues es el vértice al que queremos llegar.

Paso 2: En este caso, tenemos la posibilidad de seleccionar el vértice D o F, pues ambos son vértices
no incluidos en S y están igual de cerca del origen. Como deseamos encontrar el camino más corto
entre A y F, escogemos z*=F.

Paso 3: Como PF4 = 8, no es infinito, podemos seguir el proceso.


Teoría de grafos 165

Paso 4: Incorporamos el vértice F en el conjunto S y lo representamos con una circunferencia.

Paso 5: Como el vértice destino (F) está en el conjunto S podemos finalizar el proceso iterativo.

Solución

El siguiente grafo representa la solución final entre el vértice A y el vértice F después de cuatro
iteraciones (formalmente, no se ha encontrado la distancia más corta de A hasta D, puesto que se ha
detenido el proceso cuando se ha alcanzado el vértice F). A continuación se explica la interpretación
de la solución.

La marca del vértice destino (F) muestra que el coste mínimo para llegar desde el vértice origen hasta
el vértice destino es de ocho unidades. Para encontrar los vértices del camino mínimo es necesario
seguir las marcas, representadas por las variables ti, a partir del vértice destino.

En este caso, sólo se puede calcular el camino más corto entre el vértice origen (A) y los vértices
incluidos en el conjunto S. Por lo tanto, con las cuatro iteraciones realizadas no se podría calcular el
camino más corto entre el vértice A y el vértice D, ya que este último no está incluido en el conjunto
S. No obstante, sí que se puede encontrar el camino más corto entre el vértice A y el resto de vértices
incluidos en S (B, C, E y F).
(A,1)
B

1 3

(A,0) (A,2)
2 3
A C E
(B,4)
9 8
8 4
20
D F
(A,8) (E,8)

Figura 4.3.h: marcas después de finalizar el algoritmo Dijkstra

La marca del vértice destino (F) muestra que para llegar a él por el camino más corto es necesario
pasar antes por el vértice E. La marca del vértice E indica que hay que seguir hacia el vértice B. Por
último, la marca del vértice B revela que el vértice previo debe ser el vértice A. Por lo tanto, el camino
mínimo será aquel que pase por los vértices A-B-E-F, y tendrá un coste mínimo de ocho unidades.

Resolución mediante la forma matricial

La resolución gráfica permite trabajar de forma intuitiva con el algoritmo de Dijkstra, pero en la
resolución de problemas de tamaños medianos o grandes es preferible prescindir de la representación
gráfica para aplicar el algoritmo Dijkstra. En este caso se introducirá un procedimiento basado en la
utilización de matrices que representan todos los pasos y variables del algoritmo.

A continuación se le aplicará el algoritmo Dijkstra al grafo anterior para obtener el camino de coste
mínimo. El lector puede seguir el procedimiento a través de matrices cuando se intenta encontrar el
camino de menor coste entre el vértice A y el vértice F.

Paso 0: Inicio. Asociar a cada arista el valor correspondiente según el enunciado del ejercicio. Si no
hay posibilidad de conexión directa entre los vértices i y j, lo marcamos con un valor infinito.
166 Métodos cuantitativos en organización industrial I

dij A B C D E F
A - 1 2 8 ∞ ∞
B ∞ - ∞ ∞ 3 ∞
C ∞ ∞ - 9 3 8
D ∞ ∞ ∞ - ∞ 20
E ∞ ∞ ∞ ∞ - 4
F ∞ ∞ ∞ ∞ ∞ -

Definimos el conjunto S, y lo inicializamos con el vértice origen, S = {A}.

Definimos las etiquetas P, y las variables t, que constituirán la marca inicial de los vértices.

z= A B C D E F
Pz0 0 ∞ ∞ ∞ ∞ ∞
tz A A A A A A

k=1 (primera iteración)

Definimos la variable y, y la inicializamos con el último vértice incorporado en S. En este caso, la


variable y valdrá A. Tal y como se indica en el algoritmo Dijkstra, sólo hemos de considerar las
columnas que representen vértices que no están en el conjunto S.

Para cada vértice (columna) que no está en el conjunto S, se calculará: P z1 = min {Pz0, PA0 + dAz}.

z= A B C D E F
Pz
0
∞ ∞ ∞ ∞ ∞
P +dAz
A
0
0+1 0+2 0+8 0+∞ 0+∞
P =min{Pz0, PA0+dAz }
z
1
1 2 8 ∞ ∞
tz A AA AA AA A A

Según el algoritmo Dijkstra, en el caso de que P z0 sea mayor que PA0+dAz, se actualizará el valor de tz
con la variable y. En este caso se actualizarán las variables tB, tC, y tD con el vértice A.

Paso 2: Entre todos los Pz1, se determina cuál de ellos tiene un valor mínimo. En el caso que estamos
resolviendo Pz*1=1, por lo que z*=B.

Paso 3: Si todas las etiquetas (Pz1) de los vértices que no están en el conjunto S valen infinito, entonces
el grafo no tiene solución. En el caso que estamos resolviendo, podemos continuar con el proceso, ya
que Pz*1 es diferente a infinito.

Paso 4: Incorporamos el vértice seleccionado z*=B al conjunto S.


 S = {A, B}

Paso 5: Como el último vértice incorporado a S (z*=B) no es el vértice destino, volvemos al paso 1.

k=2 (segunda iteración)


Teoría de grafos 167

Definimos la variable y, y la inicializamos con el último vértice incorporado en S. En este caso, la


variable y valdrá B. Tal y como se indica en el algoritmo Dijkstra, sólo se calculan las columnas que
representen vértices que no están en el conjunto S. En nuestro caso, serán las columnas cuyos vértices
no estén tachados.

Para cada vértice (columna) que no está en el conjunto S, se calculará: P z2 = min {Pz1, PB1 + dBz}.

z= A B C D E F
Pz1 2 8 ∞ ∞
PB1+dBz 1+∞ 1+∞ 1+3 1+∞
Pz2=min{Pz1, 2 8 4 ∞
PB1+dBz}
tz A A A A AB A

Según el algoritmo Dijkstra, en el caso de que P z1 sea mayor que PB1+dBz, se actualizará el valor de tz
con la variable y. Si se comparan las dos primera filas de la tabla anterior, se observa que sólo en el
vértice E se cumple la inecuación anterior, por lo tanto tE tendrá el valor B.

Paso 2: Entre todos los Pz2, se determina cuál de ellos tiene un valor mínimo. En el caso que estamos
resolviendo Pz*2=2, por lo que z*=C.

Paso 3: Como tenemos varias etiquetas (Pz2) de los vértices estudiados que no valen infinito,
seguiremos el proceso para encontrar el camino mínimo (P C2 = 2).

Paso 4: Incorporamos el vértice seleccionado z*=C al conjunto S.


 S = {A, B, C}

Paso 5: Como el último vértice incorporado a S (z*=C) no es el vértice destino, volvemos al paso 1.

k=3 (tercera iteración)

Definimos la variable y, y la inicializamos con el último vértice incorporado en S. En este caso, la


variable valdrá C. A continuación, se calculan las columnas que contengan a los vértices que no están
en el conjunto S. Por lo tanto, tendremos que analizar los vértices D, E y F.

Para cada vértice (columna) que no está en el conjunto S, se calculará: P z3 = min {Pz2, PC2 + dCz}.

z= A B C D E F
Pz2 8 4 ∞
PC2+dCz 2+9 2+3 2+8
Pz3=min{ Pz2, 8 4 10
PC2+dCz }
tz A A A A B AC

El siguiente paso será actualizar el valor de tz con la variable y, si la etiqueta Pz2 es mayor que PC2+dCz.
De la matriz anterior, se extrae que sólo un vértice cumple la condición anterior: el vértice F. Por este
motivo, actualizamos la variable tF a C.

Paso 2: Entre todos los Pz3, se determina cuál de ellos tiene un valor mínimo. En el caso que estamos
resolviendo Pz*3=4, por lo que z*=E.
168 Métodos cuantitativos en organización industrial I

Paso 3: Como la etiqueta (P z*3) del vértice seleccionado (en el paso dos) es diferente a infinito,
seguimos el procedimiento, tal y como el algoritmo Dijkstra indica.

Paso 4: Incorporamos el vértice seleccionado z*=E al conjunto S.


 S = {A, B, C, E}

Paso 5: Como el último vértice incorporado a S (z*=E) no es el vértice destino, volvemos al paso 1.

k=4 (cuarta iteración)

Definimos la variable y, y la inicializamos con el último vértice (que es E) incorporado en S. Como se


ha hecho previamente en las matrices anteriores, no se tiene en cuenta las columnas de los vértices que
están en el conjunto S. Por ello, las tachamos.

Para cada vértice (columna) que no está en el conjunto S, se calculará: P z4 = min {Pz3, PE3 + dEz}.

z= A B C D E F
Pz
3
8 10
P +dEz
E
3
4+∞ 4+4
P =min{Pz3, PE3+dEz}
z
4
8 8
tz A A A A B CE

A continuación se evaluará la siguiente desigualdad para cada vértice que no pertenece al conjunto S:
Pz3 < PE3+dEz. Se observa que sólo el vértice F cumple con esta desigualdad, por lo que actualizamos su
variable tF a E.

Paso 2: Entre todos los Pz4, se determina cuál de ellos tiene un valor mínimo. En el caso que estamos
resolviendo tenemos dos vértices con el mismo valor. P z*4=8, por lo que z*=F.

En el caso de encontrar dos etiquetas Pzi con el mismo valor, se puede seleccionar cualquiera de los
dos vértices de forma indiferente. En nuestro caso se ha seleccionado el vértice F, pues es el vértice al
que queremos llegar. Por tanto, Pz*4 valdrá 8, y z* cambiará a E.

Paso 3: Como la etiqueta del vértice z* es diferentes de infinito (PF4 = 8), seguiremos el proceso para
encontrar el camino mínimo.

Paso 4: Incorporamos el vértice seleccionado z*=F al conjunto S.


 S = {A, B, C, E, F}

Paso 5: Como el último vértice incorporado a S (z*=F) es el vértice destino (F), finalizamos el
proceso.

Después de realizar las iteraciones según el algoritmo Dijkstra, es necesario interpretar los resultados
obtenidos para encontrar el camino mínimo entre los vértices A y F. Con este fin, es necesario
representar en una tabla los vértices del grafo y los valores finales de las variables tz, tal y como se
muestra en la siguiente figura.
Teoría de grafos 169

z A B C D E F

tz A A A A B E

Empezando por el vértice destino (en este caso, el vértice F), se utilizarán los valores de las variables tz
para conocer el camino óptimo. El valor de la variable tz del vértice destino (F) nos indica que el
vértice previo al vértice F (para conseguir el camino óptimo) es el vértice E.

De forma similar, la variable tz del vértice E nos indica que el vértice previo (para conseguir el camino
óptimo) es el vértice B. La variable tz del vértice B muestra que el vértice previo (para conseguir el
camino óptimo) es el vértice A. Como el vértice A es el vértice origen, ya hemos obtenido el camino
óptimo según el algoritmo Dijkstra.
B

1 3

2 3
A C E

9 8
8 4
20
D F

Figura 4.3.i: solución obtenida con el algoritmo de Dijkstra

Por tanto, el camino óptimo del grafo analizado previamente es aquel que pasa por los vértices A, B, E
y F. Y el coste del camino óptimo es el valor de la etiqueta del vértice destino (P F4), que en este caso es
ocho. La siguiente figura muestra la solución final del grafo.

7.4.4 Camino más corto entre un nodo y todos los demás. Algoritmo de Bellman-Kalaba

Si el algoritmo de Dijkstra exploraba la matriz asociada a un grafo por filas, el método Bellman-
Kalaba lo realiza por columnas. La filosofía se basa en determinar la etiqueta de un nodo en una
iteración a partir de las etiquetas de los nodos de los que proceden los arcos que llegan al nodo
considerado.

Las etiquetas Pi y las variables ti, así como las distancias dji, se definen de la misma manera que en el
algoritmo de Dijkstra. Sin embargo, ahora ninguna de las etiquetas se considera permanente hasta que
finalice el procedimiento. Por este motivo, las etiquetas P i ya no estarán identificadas con un
superíndice que muestre la iteración con la que estaba relacionado.

El procedimiento finaliza cuando los valores de las etiquetas de todos los nodos no han variado en una
iteración. En definitiva, tendremos el algoritmo siguiente:

Paso 0: Inicio:
170 Métodos cuantitativos en organización industrial I

1. Asociar a cada arco aij un valor dij. Si no hay posibilidad de conexión directa entre los
nodos i y j, dicho valor será infinito.
2. Definir las etiquetas Pi: Se define una etiqueta P para cada nodo i, y se inicializa la
etiqueta del nodo origen a cero (P O=0) y el resto de etiquetas a la distancia existente entre
el origen y este nodo en una conexión directa (Pi=dOi).
3. Definir las variables ti: Se define un variable t para cada nodo y se inicializan con el nodo
origen (ti=O).
4. Definir la variable detector_de_cambios (la variable puede tomar dos valores: cierto o
falso).

Paso 1: Proceso:
Inicializar detector_de_cambios a falso.

Definimos la variable i, que puede tomar como valor todos los nodos del grafo.
Definimos la variable z, que puede tomar como valor todos los nodos del grafo.

Para cada nodo (i)


Para cada nodo (j)
Calcular Mj = Pj+ dji

Entre todos los valores calcular el valor mínimo: min {Mj}= Pj* + dj*i
Definimos j* como el nodo donde se ha hallado el mínimo.

Si Pi > Pj* + dj*i entonces


Pi = Pj* + dj*i
tj = j*
detector_de_cambios = cierto
Ir al paso 2

Paso 2: Si detector_de_cambios = cierto, entonces


Ir al paso 1
Si no,
Finalizar

El resultado final es el camino más corto entre el nodo origen (O) y el resto de nodos del grafo. Se
expresa a partir de:

a. Un conjunto de etiquetas Pi que indican el valor del camino más corto del origen hasta el nodo
i.
b. Un conjunto de variables ti que indica (excepto para el origen) el nodo que precede al nodo i
en el camino más corto entre los nodo origen (O) e i. Dichos valores nos permiten determinar
el camino más corto del origen hasta un nodo cualquiera, de manera similar a como se
encontró en el apartado anterior.

El algoritmo de Bellman-Kalaba, de la misma forma que el de Prim y Dijkstra, puede aplicarse sobre
la representación gráfica o sobre la matriz de relaciones. Seguidamente se resolverá el mismo
problema con que se ejemplificó el algoritmo de Dijkstra, usando Bellman-Kalaba mediante
representación gráfica, y posteriormente sobre la matriz del problema.

Ejemplo de algoritmo Bellman-Kalaba

Encontrar todos los caminos entre el nodo A y el resto de nodos, de forma que la suma de los valores
asociados a los arcos que componen cada camino sea mínima.
Teoría de grafos 171

1 3

2 3
A C E

9 8
8 4
20
D F

Figura 4.4.a: grafo de ejemplo de algoritmo Bellman-Kalaba

Resolución gráfica

Para resolver gráficamente un grafo no orientado mediante el algoritmo Bellman-Kalaba es necesario


la utilización de marcas (representaciones gráficas que muestran la situación actual de un nodo durante
la resolución del problema).

Las marcas que se utilizan en el algoritmo Bellman-Kalaba son las mismas que las utilizadas en el
algoritmo Dijkstra. Cada una de las marcas está compuesta por dos partes: la primera representa la
variable t de un nodo y la segunda el valor de la etiqueta P. Aunque las marcas tengan que ser
inicializadas como ocurría en el algoritmo Dijkstra, los valores de inicialización de cada marca siguen
unas reglas diferentes.

El algoritmo Bellman-Kalaba utiliza la variable detector_de_cambios para averiguar si se han


producido cambios en las etiquetas de los nodos, y de este modo realizar una nueva iteración. En la
resolución gráfica, la decisión de realizar una nieva iteración dependerá de si se ha cambiado alguna
marca.

Al grafo anterior se le aplicará el algoritmo para calcular el camino mínimo según el algoritmo
Bellman-Kalaba. A continuación, el lector puede seguir el procedimiento de forma gráfica.

Inicializamos las marcas de cada nodo. Todas las marcas tendrán como variable t el nodo origen, en
este caso el nodo A. Por el contrario, las etiquetas P, que aparecen en cada marca, se inicializarán con
la distancia existente entre el nodo origen (A) y el nodo de la marca.
(A,1)
B

1 3

(A,0)
2 (A,2) 3 (A,∞)
A C E

9 8
8 4
20
D F
(A,8) (A,∞)

Figura 4.4.b: algoritmo de Bellman-Kalaba (inicialización de etiquetas y variables)

Tal y como indica el algoritmo, se analizará cada nodo del grafo hasta modificar alguna marca. Para
ello, se representará cada uno de los nodos por separado y se dibujarán todos los arcos que inciden en
él. En el caso del nodo origen, no es necesario analizarlo, ya que no le llega ningún arco.
172 Métodos cuantitativos en organización industrial I

k=1 (primera iteración)

Para analizar el nodo B, se han representado todos los arcos que le llegan al nodo. Para cada una de las
arcos que llegan al nodo B, hemos de calcular el siguiente valor: P j + djB. En este caso, sólo será
necesario calcular el valor asociado al arco que va desde el nodo A hasta B. Este valor será el
resultado de sumar la etiqueta origen (P A) con el coste asociado al arco (dAB). Entre todos los valores
calculados y asociados a cada arco de llegada al nodo B, se selecciona aquel que tenga un valor más
pequeño y lo representamos con sombreado. Por último, compararemos este valor con el valor de la
etiqueta P del nodo que se está analizando (B). Como el valor de la etiqueta no es más grande que el
valor calculado, no hacemos nada y continuamos analizando el siguiente nodo.

Análisis del vértice B:


0+1
A B
(A,0) (A,1)

Análisis del vértice C:


0+2
A C
(A,0) (A,2)

Figura 4.4.c: análisis de los nodos B y C para el grafo de la figura 4.4.a (primera iteración)

En el análisis del nodo C, realizamos el mismo estudio que en el caso anterior. A igual que sucedía en
el nodo B, sólo será necesario representar el arco que va desde el nodo A hasta el nodo C. Calculamos
el valor asociado a dicho arco, sumando la etiqueta del nodo origen (P A) al coste asociado al arco
(dAC). Como sólo hay un arco a estudiar, lo sombreamos y se compara este valor con la etiqueta P del
nodo destino. Como la etiqueta no es más grande que el valor calculado continuamos analizando el
siguiente nodo.

El siguiente nodo a estudiar es el D. En este caso, tendremos que representar los dos arcos que
terminan en el nodo D. Para cada una de las dos arcos, se calcula el siguiente valor: P j + djD. Una vez
calculados ambos valores, seleccionamos aquel que tenga un valor más pequeño. En el caso del nodo
D, será el valor asociado al arco que sale del nodo A y acaba en el nodo D, por lo que lo
representamos con una sombra. A continuación, se compara dicho valor con la etiqueta del nodo que
estamos estudiando (D), y como son iguales finalizamos su estudio y continuamos con el siguiente
nodo.

Análisis del vértice D: Análisis del vértice E:

(A,0) A (A,1) B
0+8 1+3

D (A,8) E (A,∞)
(B,4)
2+9 2+3
(A,2) C (A,2) C

Figura 4.4.d: análisis de los nodos D y E para el grafo de la figura 4.4.a (primera iteración)

Para el análisis del nodo E, se representan aquellos arcos que inciden en dicho vértice. Para cada uno
de los dos arcos que inciden en E calculamos P j + djE. Entre los dos arcos calculados, se selecciona el
Teoría de grafos 173

que tenga el valor más pequeño. En el análisis del nodo E, el arco con un valor más pequeño es aquel
que va desde el nodo B hasta el nodo E. Es por este motivo que la marcamos con sombreado. Como
este valor es más pequeño que la etiqueta P del nodo estudiado (E), debemos actualizar su marca, que
estará formado por el nodo origen (en este caso el nodo B) y el nuevo valor calculado.

Según el algoritmo, debemos avanzar hacia el siguiente paso, el cual muestra que debe realizarse una
nueva iteración cuando la variable detector_de_cambios es igual a cierto. Gráficamente, esta variable
tiene un valor cierto si se han cambiado algunas marcas en la iteración actual. Si miramos el análisis
de cada nodo, observamos que la marca del nodo E ha sido actualizada, por lo que será necesario una
nueva iteración.

k=2 (segunda iteración)

Volvemos a analizar cada uno de los nodos del grafo, teniendo en cuenta las marcas resultantes de la
iteración anterior. Tal y como ocurría en la iteración anterior, no es necesario analizar el nodo A
porque no le llega ningún arco.

Para analizar el nodo B, se representan todos los arcos que le llegan al nodo. Para el único arco que
llega al nodo B, debemos de calcular el siguiente valor: P A + dAB. Una vez calculado, y como no hay
más de un arco, lo seleccionamos (marcándolo con sombreado) y lo comparamos con la etiqueta P del
nodo que se está analizando (B). Como el valor de la etiqueta no es más grande que el valor calculado,
no modificamos la etiqueta y continuamos analizando el siguiente nodo.

Análisis del vértice B:


0+1
A B
(A,0) (A,1)

Análisis del vértice C:


0+2
A C
(A,0) (A,2)

Figura 4.4.e: análisis de los nodos B y C para el grafo de la figura 4.4.a (segunda iteración)

Los resultados que obtendremos del análisis del nodo C son los mismos que en la primera iteración.
Para ello, representamos todos los arcos que finalizan en dicho nodo (C), y calculamos P A + dAC para
cada uno de los arcos representados. En el caso del nodo C sólo incide el arco AC, por lo que
seleccionaremos el arco sombreando su valor calculado. Comparamos este valor con el de la etiqueta P
del nodo destino (C). Como (0+2) no es más pequeño que el valor de la etiqueta P (2), no modificamos
la marca y seguimos analizando el resto de nodos del grafo.

En el análisis del nodo D, se tendrán que representar todos los arcos que llegan al nodo D. Para cada
uno de las dos arcos que llegan a D, se calcularán los valores P j + djD. De los dos valores encontrados,
escogemos aquel que sea mínimo y lo sombreamos. Por último, comparamos este valor sombreado
con la etiqueta P del nodo estudiado (D). Como el valor de la etiqueta no es más grande que el valor
calculado, no modificamos la etiqueta y continuamos estudiando el siguiente nodo.
174 Métodos cuantitativos en organización industrial I

Análisis del vértice D: Análisis del vértice E:

(A,0) A (A,1) B
0+8 1+3

D (A,8) E
(B,4)

2+9 2+3
(A,2) C (A,2) C

Figura 4.4.f: análisis de los nodos D y E para el grafo de la figura 4.4.a (segunda iteración)

Ahora procede analizar los arcos que inciden en el nodo E. Para cada uno de las dos arcos, se calcula
el siguiente valor: Pj + djE. Una vez hemos calculado dichos valores, seleccionamos aquel que tenga un
valor más pequeño. En el caso del nodo E, será el valor asociado al arco BE, por lo que la
representamos con sombreado. A continuación, se compara dicho valor con la etiqueta del nodo que
estamos estudiando (E), y como son iguales finalizamos su estudio y continuamos con el siguiente
nodo.

El último nodo que tenemos que analizar es el F. En este caso, tendremos que representar gráficamente
los tres arcos que llegan al nodo que estamos estudiando (F). Calculamos, para cada arco, la suma
entre la etiqueta P de los nodos orígenes (C, D y E) y la distancia entre estos nodos y el nodo F (djF).
Entre los resultados obtenidos, seleccionamos el asociado al arco que va desde E hasta F, ya que su
valor (8) es el más pequeño de todos. Sombreamos este valor y lo comparamos con la etiqueta del
nodo estudiado (F). Como el valor asociado al arco (8) es menor que la etiqueta P del nodo F (∞),
actualizamos la marca del nodo F. La nueva marca tendrá como variable t el nodo origen (E) y como
etiqueta P el valor calculado y asociado al arco que va desde E hasta F.

Análisis del vértice F:


C
(A,2)
2+8

F 4+4
8+20 (A,∞) E
D (E,8) (B,4)
(A,8)

.
Figura 4.4.g: análisis del nodo F para el grafo de la figura 4.4.a (segunda iteración)

Como PE + dEF es menor que la etiqueta del nodo F, avanzamos en el algoritmo hasta el segundo paso.
Como ha habido cambios en las marcas durante la iteración, será necesario iniciar una nueva iteración
con las nuevas marcas encontradas anteriormente.

k=3 (tercera iteración)

Volvemos a analizar cada uno de los nodos del grafo, teniendo en cuenta las marcas resultantes de la
iteración anterior. Tal y como ocurría en la iteración anterior, no es necesario analizar el nodo A
porque no le llega ningún arco.
Teoría de grafos 175

El resultado de analizar los nodos A, B, C, D y E tendrá el mismo resultado que en las anteriores
iteraciones, ya que los valores de las etiquetas P j y de las variables tj de los nodos implicados son los
mismos. Por este motivo, no es necesario analizar otra vez estos nodos.

Análisis del vértice B:


0+1
A B
(A,0) (A,1)

Análisis del vértice C:


0+2
A C
(A,0) (A,2)

Figura 4.4.h: análisis de los nodos B y C para el grafo de la figura 4.4.a (tercera iteración)

Análisis del vértice D: Análisis del vértice E:

(A,0) A (A,1) B
0+8 1+3

D (A,8) E
(B,4)

2+9 2+3
(A,2) C (A,2) C

Figura 4.4.i: análisis de los nodos D y E para el grafo de la figura 4.4.a (tercera iteración)

Hasta el momento hemos considerado analizados, durante la tercera iteración, todos los nodos excepto
el F, por lo que a continuación lo estudiaremos. En este caso, existen tres arcos (C, D, y E) que
terminan en el nodo F. Representamos cada uno de los tres arcos y calculamos los valores siguientes:
PC + dCF, PD + dDF y PE + dEF, que corresponden, respectivamente, a cada uno de los arcos anteriores.
De los tres valores que hemos obtenido, seleccionamos el más pequeño y lo marcamos en sombreado.
Por último, observamos que este valor (el asociado al arco que va desde el nodo E hasta el nodo F) no
es más pequeño que el de la etiqueta P del nodo F, por lo que hemos terminado de analizar los nodos
en la presente iteración.

Análisis del vértice F:


C
(A,2)
2+8

F 4+4
8+20
(E,8) E
D (B,4)
(A,8)

Figura 4.4.j: análisis del nodo F para el grafo de la figura 4.4.a (tercera iteración)

Ahora que hemos finalizado la tercera iteración, es necesario averiguar si será precisa una nueva
iteración en el grafo que estamos estudiando. Según el algoritmo, se tiene que llevar a cabo una nueva
iteración cuando la variable detector_de_cambios es igual a cierto. Podemos ver, que en la tercera
176 Métodos cuantitativos en organización industrial I

iteración no hemos cambiado ninguna marca, por lo que podemos finalizar el proceso principal del
algoritmo Bellman-Kalaba.

Solución

El siguiente grafo representa la solución final después de dos iteraciones. A continuación se explica la
interpretación de la solución.
(A,1)
B

1 3

(A,0)
2 (A,2) 3 (B,4)
A C E

9 8
8 4
20
D F
(A,8) (E,8)

Figura 4.4.k: solución para el grafo de la figura 4.4.a obtenida mediante Bellman-Kalaba

La etiqueta P de cada nodo muestra el coste mínimo para llegar desde el nodo origen (A) hasta cada
uno de los nodos. El coste del nodo A hasta los nodo B, C, D, E y F es 1, 2, 8, 4, y 8 respectivamente.
Para encontrar los nodos del camino mínimo es necesario seguir las marcas a partir del nodo destino.

Por ejemplo, si queremos averiguar el camino óptimo entre el nodo A y el nodo F, tendremos que
empezar a estudiar la marca de este último nodo. La marca del nodo destino (F) muestra que para
llegar a él por el camino más corto es necesario pasar antes por el nodo E. La marca del nodo E indica
que hay que seguir hacia el nodo B. Por último, la marca del nodo B revela que el nodo previo debe
ser el nodo A. Por lo tanto, el camino mínimo será aquel que pase por los nodos A-B-E-F y el camino
más corto tendrá un valor de ocho unidades.

La siguiente tabla nos muestra los caminos y las distancias más cortas desde el nodo A hasta cada
nodo del grafo.

Nodo destino Camino mínimo desde A Distancia mínima a A


A A-A 0
B A-B 1
C A-C 2
D A-D 8
E A-B-E 4
F A-B-E-F 8

Resolución mediante matrices

Tal y como ocurre en la mayoría de algoritmos para encontrar caminos óptimos en grafos, la
resolución gráfica permite trabajar de forma intuitiva con ellos. Sin embargo, en ejercicios de gran
tamaño es posible que la resolución gráfica sea difícil de controlar. En estos casos, es preferible
utilizar metodologías analíticas o basadas en matrices para encontrar en camino mínimo entre los
nodos de un grafo. A continuación, se resolverá un ejercicio mediante la utilización de matrices que
representarán las variables y etapas de su resolución.
Teoría de grafos 177

A continuación se le aplicará el algoritmo Bellman-Kalaba al mismo grafo para obtener el camino de


valor mínimo. El estudiante puede seguir el procedimiento a través de matrices cuando se intenta
encontrar el camino de menor coste desde el nodo A hasta el resto de nodos del grafo.

Paso 0: Inicio. Asociar a cada arco un valor que equivale a la distancia entre el nodo origen (A) y cada
uno del resto de los nodos. Si no hay posibilidad de conexión directa entre los nodos i y j, dicho valor
será infinito.

Definimos las etiquetas Pj, inicializando la etiqueta del nodo origen a cero (P O=0) y el resto de
etiquetas a la distancia existente entre el origen y el nodo correspondiente en una conexión directa
(Pj=dOi). Definimos las variables tj, inicializándolas con el nodo origen (ti=A). Definimos la variable
detector_de_cambios a falso.

j A B C D E F
Pj 0 1 2 8 ∞ ∞
tj A A A A A A

k=1 (primera iteración)

Tal y como el algoritmo Bellman-Kalaba muestra, se tendrá que analizar cada uno de los nodos del
grafo. En la resolución mediante matrices, el estudio de cada nodo corresponde a una columna de la
siguiente tabla.

Empezaremos analizando el nodo A. En este caso, calcularemos para cada nodo j, el siguiente valor (Pj
+ djA) excepto en la celda entre A y ella misma. Entre todos los valores encontrados, seleccionamos el
de valor mínimo y lo escribimos en la fila Mín{P j+dji}. Como no hay ningún valor mínimo, ya que
todos son infinitos, pasaremos a estudiar el siguiente nodo.

j↓ i→ A B C D E F
A - 0+1 0+2 0+8 0+∞
B 1+∞ - 1+∞ 1+∞ 1+3
C 2+∞ 2+∞ - 2+9 2+3
D 8+∞ 8+∞ 8+∞ - 8+∞
E ∞+∞ ∞+∞ ∞+∞ ∞+∞ -
F ∞+∞ ∞+∞ ∞+∞ ∞+∞ ∞+∞
Mín{Pj+dji} - 1 2 8 4
j* - A A A B
Pi > Pj*+dj*i - 1>1 2>2 8>8 ∞>4

A continuación se analiza el nodo B (segunda columna). Para cada nodo j, calculamos (P j + djB). Entre
todos los valores obtenidos, buscamos el más pequeño de todos. Este valor lo escribimos en la fila
Mín{Pj +dji}. En este caso, el valor será 1. En la siguiente fila, indicaremos el nodo j correspondiente
al valor mínimo encontrado (el nodo A). Por último comparamos la etiqueta del nodo que estamos
analizando (B) y el valor mínimo encontrado anteriormente (1). Como este último no es más grande
que el valor mínimo encontrado, pasamos a estudiar el siguiente nodo.

El siguiente nodo a estudiar será el C. Para cada nodo j calculamos Pj + djC, y entre ellos,
seleccionamos el valor más pequeño de todos. Entre todos los valores, el más pequeño es el asociado
al nodo A. Este nodo lo escribimos en j*, y el valor mínimo encontrado lo ponemos en la fila de
Mín{Pj +dji}. Por último, comparamos el valor mínimo con la etiqueta del nodo C. En este caso, el
178 Métodos cuantitativos en organización industrial I

valor del mínimo es igual que el valor de la etiqueta del nodo C, por lo que no actualizamos ninguna
etiqueta y pasamos a estudiar el siguiente nodo.

El nodo D es el siguiente a estudiar. Como se ha actuado con los anteriores nodos, calculamos P j + djD.
Entre todas las cuantías calculadas, seleccionamos la más pequeña, que corresponde al nodo A.
Actualizamos la tabla con el valor mínimo (escribiéndolo en la fila Mín{P j+dji}) y el nodo
correspondiente (j*). Comparamos el valor mínimo con el de la etiqueta P del nodo D. Como los dos
valores son iguales, no es necesario actualizar las etiquetas y pasamos a estudiar el siguiente nodo.

Ahora analizaremos la columna del nodo E. Para cada nodo j, calculamos Pj + djE, y como hemos
hecho anteriormente, seleccionamos el que tenga un valor más pequeño. En este caso, el valor más
pequeño equivale al asociado al nodo B (es decir, j=B). Actualizamos la fila Mín{Pj+dji} con el valor
4, y la fila de j* con el nodo B. A continuación, miramos si la etiqueta del nodo estudiado (E) es más
grande que el valor mínimo que hemos calculado. Como la desigualdad se cumple, actualizamos la
etiqueta del nodo que estamos analizando (E) con el valor mínimo encontrado previamente. Esto
queda reflejado en la siguiente tabla. Además actualizamos la variable tE con el nodo que nos ha
proporcionado el nuevo valor mínimo (el nodo B).

Como hemos modificado un etiqueta, la variable detector_de_cambios es actualizada a cierto.

j A B C D E F
Pj 0 1 2 8 ∞4 ∞
tj A A A A AB A

Después de actualizar la etiqueta P y la variable t del nodo E, evolucionamos al paso 2 del algoritmo,
según el cual si la variable detector_de_cambios es igual a cierto será necesario realizar una nueva
iteración. En este caso, deberemos realizar una nueva iteración.

k=2 (segunda iteración)

Lo primero será inicializar la variable detector_de_cambios a falso, y a continuación mostramos los


valores de las etiquetas P y de las variable t de cada nodo del grafo que estamos estudiando.

j A B C D E F
Pj 0 1 2 8 4 ∞
tj A A A A B A

Para analizar el nodo A, se calculará P j + djA para cada nodo j. Entre todos los valores calculados,
seleccionamos el de valor mínimo y lo escribimos en la fila de los mínimos. Como todos los valores
calculados son infinitos, se continúa estudiando el resto de nodos.

En la segunda columna, que corresponde al estudio del nodo B, calculamos (P j + djB) para cada nodo j.
Entre todos los valores obtenidos, buscamos el mínimo que en este caso correspondería al nodo A.
Este nodo lo escribimos en j*, y el valor mínimo encontrado lo ponemos en la fila de Mín{P j+dji}. En
este caso, el valor será 1. En la siguiente fila, indicaremos el nodo j correspondiente al valor mínimo
encontrado (el nodo A). Comparando este valor con el de la etiqueta estudiada, no se tendrá que
actualizar ninguna etiqueta.

Para cada nodo j calculamos Pj + djC, para estudiar el nodo C. Entre ellos, escribimos el valor más
pequeño de todos en la fila de los mínimos. En este caso, el más pequeño es el asociado al nodo A. Por
último, comparamos el valor mínimo con la etiqueta del nodo C. En este caso, el valor del mínimo es
Teoría de grafos 179

igual que el valor de la etiqueta del nodo C, por lo que no actualizamos ninguna etiqueta y pasamos a
estudiar el siguiente nodo.

El nodo D es el siguiente a estudiar. Como ha ocurrido con los anteriores nodos, calculamos P j + djD.
Entre todos los valores calculados, seleccionamos el más pequeño. Actualizamos la tabla con el valor
mínimo (escribiéndolo en la fila Mín{P j +dji}) y el nodo correspondiente (j*), que en este caso
pertenece al nodo A. Comparamos el valor mínimo con el de la etiqueta P del nodo D. Como los dos
valores son iguales, no es necesario actualizar las etiquetas y pasamos a estudiar el siguiente nodo.

Para analizar el nodo E, calculamos Pj + djE para cada nodo j, y seleccionamos el que tenga un valor
más pequeño. En este caso, el valor más pequeño equivale al asociado al nodo B (es decir, j=B).
Actualizamos la fila Mín{Pj+dji} con el valor 4, y la fila de j* con el nodo B. A continuación,
comparamos la etiqueta del nodo E con el valor mínimo que hemos calculado. Como la desigualdad
no se cumple, no es necesario actualizar la etiqueta del nodo que estamos analizando (E), y podemos
pasar al análisis del siguiente nodo.

j↓ i→ A B C D E F
A - 0+1 0+2 0+8 0+∞ 0+∞
B 1+∞ - 1+∞ 1+∞ 1+3 1+∞
C 2+∞ 2+∞ - 2+9 2+3 2+8
D 8+∞ 8+∞ 8+∞ - 8+∞ 8+20
E 4+∞ 4+∞ 4+∞ 4+∞ - 4+4
F ∞+∞ ∞+∞ ∞+∞ ∞+∞ ∞+∞ -
Mín{Pj+dji} - 1 2 8 4 8
j* - A A A B E
Pi > Pj*+dj*i - 1>1 2>2 8>8 4>4 ∞>8

El último nodo que tenemos que estudiar es el nodo F. Para cada nodo j, debemos calcular Pj + djF.
Entre todos los nuevos valores, escribimos el más pequeño en la fila Mín{P j+dji}, y actualizamos la
fila j* con el nodo correspondiente (en este caso el nodo E). Comparamos el valor del mínimo con el
de la etiqueta del nodo F, y como en este caso es más pequeña, tendremos que actualizar su etiqueta.
En la tabla anterior, actualizamos la etiqueta del nodo F con el nuevo valor mínimo (8) y la variable tF
con el nodo j* (en este caso el nodo E). Por último, actualizamos la variable detector_de_cambios a
cierto.

Una vez hemos analizado todos los nodos y hemos completado la matriz, el algoritmo muestra que
será necesaria una tercera iteración si la variable detector_de_cambios es igual a cierto. En este caso,
la variable tiene un valor de cierto, por lo que será necesaria una tercera iteración.

k=3 (tercera iteración)

Lo primero será inicializar la variable detector_de_cambios a falso, y a continuación mostramos los


valores de las etiquetas P y de las variable t de cada nodo del grafo que estamos estudiando.

j A B C D E F
Pj 0 1 2 8 4 8
tj A A A A B E

Se empezará el análisis con el nodo A. En este caso, calcularemos P j + djA para cada nodo j. Entre
todos los valores encontrados, seleccionamos el de valor mínimo y lo escribimos en la fila de los
180 Métodos cuantitativos en organización industrial I

mínimos. Como no hay ningún valor mínimo, ya que todos son infinitos, pasamos a estudiar el nodo
B.

La segunda columna representará el estudio del nodo B. Tal y como el algoritmo de Bellman-Kalaba
muestra, calculamos Pj + djB para cada uno de los nodos excepto par el nodo que estamos calculando.
Seleccionamos el valor más pequeño entre todos los calculados. En el caso del nodo B, el valor más
pequeño es el correspondiente al nodo A, por lo que actualizamos la fila Mín{P j +dji} con el valor de
1. En la siguiente fila (correspondiente a j*), escribiremos el nodo j correspondiente al valor mínimo
encontrado. Por último comparamos la etiqueta del nodo que estamos analizando (B) y el valor
mínimo encontrado. Como la etiqueta del nodo B no es más grande que el valor mínimo encontrado,
pasamos a estudiar el siguiente nodo.

Continuamos con el siguiente nodo (y por tanto, columna). Para cada nodo j calculamos Pj + djC, y
entre ellos, seleccionamos el valor más pequeño de todos. Entre todos los valores, el más pequeño es
el asociado al nodo A. Este nodo lo escribimos en j*, y el valor mínimo encontrado lo escribimos en la
fila de Mín{Pj+dji}. Por último, comparamos el valor mínimo con la etiqueta del nodo C. Como los
dos valores son iguales, no es necesario actualizar las etiquetas, y pasamos a estudiar el siguiente
nodo.

Para el caso del nodo D, calculamos todos los P j + djD. De los resultados obtenidos, decidimos que
cuantía es la más pequeña, que en este caso corresponde al nodo A. Escribimos, en la fila de los
mínimos, el valor encontrado y actualizamos la j* con el nodo A. Por último, comparamos la etiqueta
del nodo estudiado con el valor del mínimo encontrado. Tal y como ocurría en los nodos anteriores, no
se cumple la desigualdad, por lo que no se tendrá que actualizar ninguna etiqueta.

j↓ i→ A B C D E F
A - 0+1 0+2 0+8 0+∞ 0+∞
B 1+∞ - 1+∞ 1+∞ 1+3 1+∞
C 2+∞ 2+∞ - 2+9 2+3 2+8
D 8+∞ 8+∞ 8+∞ - 8+∞ 8+20
E 4+∞ 4+∞ 4+∞ 4+∞ - 4+4
F 8+∞ 8+∞ 8+∞ 8+∞ 8+∞ -
Mín{Pj+dji} - 1 2 8 4 8
j* - A A A B E
Pi > Pj*+dj*i - 1>1 2>2 8>8 4>4 8>8

El siguiente nodo a estudiar será el E. Para cada nodo j, calculamos Pj + djE y seleccionamos el que
tenga un valor más pequeño. Actualizamos la tabla con el valor mínimo (escribiéndolo en la fila
Mín{Pj+dji}) y el nodo correspondiente (j*). Comparamos el valor mínimo con el de la etiqueta P del
nodo E. Como los dos valores son iguales, no es necesario actualizar las etiquetas y pasamos a estudiar
el siguiente nodo.

Sólo falta por analizar el nodo F. Para cada nodo j, debemos calcular Pj + djF. Entre todos los valores
calculados, escogemos el más pequeño. En este caso, el valor más pequeño equivale al asociado al
nodo E (es decir j=E). Actualizamos la fila Mín{P j+dji} con el valor 8 y la fila de j* con el nodo E. A
continuación, miramos si la etiqueta del nodo estudiado (E) es más grande que el valor mínimo que
hemos calculado. Como los dos valores son iguales, la desigualdad no se cumple, por lo que
terminamos el análisis de los nodos en esta iteración.
Teoría de grafos 181

Una vez hemos analizado todos los nodos y hemos completado la matriz, el algoritmo pauta que será
necesario una nueva iteración si la variable detector_de_cambios es igual a cierto. En este caso, la
variable tiene un valor de falso, por lo que no será necesaria una tercera iteración.

Ahora que hemos finalizado el proceso iterativo del algoritmo Bellman-Kalaba, será necesario
interpretar los resultados obtenidos para encontrar el camino mínimo entre el nodo A y el resto de
nodos. Con este fin, es necesario representar en una tabla los nodos del grafo y los valores finales de
las variables tj, tal y como se muestra en la siguiente figura.

Para encontrar el camino óptimo entre el nodo origen (A) y otro nodo, será necesario marcar el nodo
origen y seguir el camino que indican las variables tj. Si queremos calcular el camino óptimo entre los
nodos A y F, se seguirá el siguiente proceso:

j A B C D E F

tj A A A A B E

El valor de la variable tj del nodo destino (j=F) nos indica que el nodo previo al nodo F (para conseguir
el camino óptimo) es el nodo E. De forma similar, la variable tj del nodo E nos indica que el nodo
previo (para conseguir el camino óptimo) es el nodo B. La variable tj del nodo B muestra que el nodo
previo (para conseguir el camino óptimo) es el nodo A. Como el nodo A es el nodo origen, ya hemos
obtenido el camino óptimo según el algoritmo Bellman-Kalaba.

Por tanto, el camino óptimo del grafo que va desde el nodo A hasta el nodo F es aquel que pasa por los
nodos A, B, E y F. Y el coste del camino óptimo es el valor de la etiqueta del nodo destino (P F), que en
este caso es ocho. Para calcular el camino óptimo entre el nodo A y cualquier otro nodo, se realizará el
mismo proceso empezando por el nodo destino.

Algoritmo Bellman-Kalaba acelerado

El proceso Bellman-Kalaba puede ser acelerado, si utilizamos los valores de las etiquetas ya obtenidas
en la misma iteración. Esta última mejora del algoritmo puede formularse formalmente del modo
siguiente:

Paso 0: Inicio:
1. Asociar a cada arco aij un valor dij. Si no hay posibilidad de conexión directa entre los
nodos i y j, dicho valor será infinito.
2. Definir las etiquetas Pi: Se define una etiqueta P para cada nodo, y se inicializa la etiqueta
del nodo origen a cero (PO=0) y el resto de etiquetas a la distancia existente entre el origen
y este nodo en una conexión directa (Pi=dOi).
3. Definir las variables ti: Se define un variable t para cada nodo y se inicializan con el nodo
origen (ti=O).
4. Definir la variable detector_de_cambios (la variable puede tomar dos valores: cierto o
falso).

Paso 1: Proceso:
182 Métodos cuantitativos en organización industrial I

Inicializar detector_de_cambios a falso.

Definimos la variable i, que puede tomar como valor todos los nodos del grafo.
Definimos la variable z, que puede tomar como valor todos los nodos del grafo.

Para cada nodo (i)


Para cada nodo (j)
Si Pi > Pj + dji entonces
Pi = Pj + dji
tj = j
detector_de_cambios = cierto

Seguimos en el paso 1 hasta analizar todos los nodos (i).

Paso 2: Si detector_de_cambios=cierto, entonces


Ir al paso 1
Si no
Finalizar

El algoritmo de Bellman-Kalaba acelerado, al igual que con el de Bellman-Kalaba, puede aplicarse


sobre la representación gráfica o sobre la matriz de relaciones.

Ejemplo de algoritmo Bellman-Kalaba acelerado

Encontrar todos los caminos entre el nodo A y el resto de nodos, de forma que la suma de los valores
asociados a los arcos que componen cada camino sea mínima.
B

1 3

2 3
A C E

9 8
8 4
20
D F

Figura 4.4.l: grafo de ejemplo de algoritmo Bellman-Kalaba acelerado

Resolución gráfica

Las marcas que se utilizan en el algoritmo Bellman-Kalaba acelerado son las mismas que las utilizadas
en el algoritmo Dijkstra y Bellman-Kalaba. El algoritmo Bellman-Kalaba acelerado utiliza la variable
detector_de_cambios para averiguar si se han producido cambios en las etiquetas de los nodos y de
este modo realizar una nueva iteración. En la resolución gráfica, la decisión de realizar una nieva
iteración dependerá de si se ha cambiado alguna marca.

Al grafo anterior se le aplicará el algoritmo para calcular el camino mínimo según el algoritmo
Bellman-Kalaba acelerado. El lector puede seguir el procedimiento de forma gráfica cuando se
comienza en el nodo A.
Teoría de grafos 183

Inicializamos las marcas de cada nodo. Todas las marcas tendrán como variable t el nodo origen, en
este caso el nodo A. Por el contrario, las etiquetas P, que aparecen en cada marca, se inicializarán con
la distancia existente entre el nodo origen (A) y el nodo de la marca.
(A,1)
B

1 3

(A,0)
2 (A,2) 3 (A,∞)
A C E

9 8
8 4
20
D F
(A,8) (A,∞)

Figura 4.4.m: algoritmo de Bellman-Kalaba acelerado (inicialización de etiquetas y variables)

Tal y como indica el algoritmo, se analizará cada nodo del grafo. Para ello, se representará cada uno
de los nodos por separado y se dibujarán todos los arcos que finalizan en él. En el caso del nodo
origen, no es necesario analizarlo, ya que no le llega ningún arco.

k=1 (primera iteración)

Para analizar el nodo B, se han representado todos los arcos que le llegan al nodo. Para cada uno de los
arcos que llegan al nodo B, hemos de averiguar si P i > Pj + djB. En este caso, sólo será necesario
comprobar la desigualdad asociada al arco entre el nodo A y el B. En este caso, no se cumple que P B >
PA + dAB, por lo que no será necesario actualizar ninguna marca.

Análisis del vértice B:


1 > 0+1
A B
(A,0) (A,1)

Análisis del vértice C:


2 > 0+2
A C
(A,0) (A,2)

Figura 4.4.n: análisis de los nodos B y C según Bellman-Kalaba acelerado (primera iteración)

En el análisis del nodo C, realizamos el mismo estudio que en el caso anterior. Al igual que sucedía en
el nodo B, sólo será necesario representar el arco que va desde el nodo A hasta el nodo C.
Comprobamos si PC > PA + dAC, para averiguar si es necesario actualizar la marca del nodo C. En este
caso, no es necesario realizar cambios, ya que la desigualdad no se cumple.

El siguiente nodo a estudiar es el D. En este caso, tendremos que representar los dos arcos que inciden
en el nodo D. Para cada una de las dos arcos se tendrá que averiguar si P i es más grande que Pj + djD.
Primero comprobamos que P D no es mayor que PA + dAD, por lo que no es necesario actualizar la
marca del nodo D. También es necesario comprobar la desigualdad asociada al arco entre los nodos C
y D. En este caso, tampoco se cumple la desigualdad, por lo que pasaremos a analizar el siguiente
nodo.

Para el análisis del nodo E, se representan aquellas arcos que acaban en el nodo E. Para cada una de
las dos arcos que tiene el grafo comprobamos la desigualdad P i > Pj + djE. La desigualdad del primer
arco muestra que PE (∞) es más grande que PB + dBE, por lo que actualizaremos la etiqueta del nodo E.
184 Métodos cuantitativos en organización industrial I

La nueva marca mostrará el nodo que la ha actualizado (en este caso el nodo B) y la nueva distancia
entre el nodo origen (A) y el nodo estudiado (E). Esta nueva distancia se calculará como P B + dBE. En
el segundo arco del grafo, se aplica la desigualdad P E > PC + dCE, teniendo en cuenta que la etiqueta del
nodo E ha sido actualizada a 4. En este caso, no se cumple la desigualdad, por lo que se puede pasar a
analizar el siguiente nodo.

Análisis del vértice D: Análisis del vértice E:


1 1

(A,0) A (A,1) B
8>0+8 ∞ >1+3

D (A,8) E (A,∞)
(B,4)
8>2+9 4 > 2+3
(A,2) C (A,2) C

2 2

Figura 4.4.o: análisis de los nodos D y E según Bellman-Kalaba acelerado (primera iteración)

El último nodo que tenemos que analizar es el F. En este caso, tendremos que representar gráficamente
las tres arcos que llegan al nodo que estamos estudiando (F). A continuación se estudiarán cada uno de
los tres arcos por separado. En el primer arco, comprobaremos que P F es más grande que PC más la
distancia entre los nodos C y F (d CF), por lo que tendremos que actualizar la marca del nodo F. La
nueva marca tendrá como etiqueta el nodo C y como variable tF la suma entre la variable tC y la
distancia entre los nodos C y F.

Análisis del vértice F:


C
(A,2)
1
∞ > 2+8

F 10 > 4+4
10 > 8+20 (A,∞)
3 E
D (C,10) (B,4)
(A,8) 2
(E,8)
.
Figura 4.4.p: análisis del nodo F según Bellman-Kalaba acelerado (primera iteración)

En el segundo arco, se verifica la desigualdad P F > PD + dDF, teniendo en cuenta la actualización que
hemos realizado previamente sobre la etiqueta del nodo F. En esta ocasión, la desigualdad no se
cumple, por lo que podemos pasar a estudiar el siguiente arco. El último arco une los nodo E y F, por
lo que miraremos si PF > PE + dEF se cumple. En este caso la desigualdad es cierta, así que
actualizamos la marca del nodo F, con una etiqueta que valga E (nodo origen) y una variable tF igual a
8 (PE + dEF).

Una vez finalizado el análisis de cada nodo, debemos saber si tenemos que realizar una nueva
iteración. Según el algoritmo, se tiene que llevar a cabo una nueva iteración cuando la variable
detector_de_cambios es igual a cierto. Gráficamente, esta variable tiene un valor cierto si se ha
cambiado alguna marca en la iteración actual. Si miramos los análisis de cada nodo, observamos que
las marcas de los nodos E y F han sido actualizadas, por lo que será necesario una nueva iteración.

k=2 (segunda iteración)


Teoría de grafos 185

Volvemos a analizar cada uno de los nodos del grafo, teniendo en cuenta las marcas resultantes de la
iteración anterior. Tal y como ocurría en la iteración anterior, no es necesario analizar el nodo A
porque no le llega ningún arco.

Para analizar el nodo B, se representan todos los arcos que le llegan al nodo. Para el única arco que
llega al nodo B, debemos de calcular si P B > PA + dAB. Una vez sustituidos los valores, comprobamos
que la desigualdad no se cumple, ya que los dos miembros de la desigualdad valen lo mismo. Por
tanto, se pasa a analizar el siguiente nodo.

El resultado que obtendremos del análisis del nodo C será el mismo que en la primera iteración. Para
comprobarlo, representamos el único arco que finaliza en dicho nodo (C) y vemos que la desigualdad
PC > PA + dAC no se cumple. Por este motivo, no se tendrá que modificar ninguna etiqueta y podemos
pasara a estudiar el nodo D.

Análisis del vértice B:


1 > 0+1
A B
(A,0) (A,1)

Análisis del vértice C:


2 > 0+2
A C
(A,0) (A,2)

Figura 4.4.q: análisis de los nodos B y C según Bellman-Kalaba acelerado (segunda iteración)

En el análisis del nodo D, se tendrán que representar todos los arcos que llegan al nodo D. Para cada
uno de las dos arcos que llegan a D, se comprobará si se cumplen las desigualdades P D > Pj + djD. En
los dos arcos (AD y CD), la desigualdad no se cumple, ya que la etiqueta del nodo D no es más grande
que PA + dAD y PC + dCD, respectivamente.

Análisis del vértice D: Análisis del vértice E:


1 1

(A,0) A (A,1) B
8>0+8 4 >1+3

D (A,8) E
(B,4)
8>2+9 4 > 2+3
(A,2) C (A,2) C

2 2

Figura 4.4.r: análisis de los nodos D y E según Bellman-Kalaba acelerado (segunda iteración)

A continuación se representan aquellos arcos que acaban en el nodo E, con el fin de su estudio. Para el
primer arco, se estudia si el valor de la etiqueta de E es mayor que el de la etiqueta del nodo B más la
distancia entre los nodos B y E. En este caso, la desigualdad no se cumple. En el segundo arco, ocurre
la misma situación: PE no es mayor que PC más la distancia entre C y E (dCE).

Una vez analizados los anteriores nodos, se procede a estudiar el último de ellos (F). En este caso,
existen tres arcos (C, D, y E) que terminan en el nodo F. Representamos cada una de los tres arcos y
buscamos si se cumplen las siguientes tres desigualdades: P F > PC + dCF, PF > PD + dDF y PF > PE + dEF,
que corresponden, respectivamente, a cada uno de los arcos anteriores. En el análisis del nodo F,
186 Métodos cuantitativos en organización industrial I

ninguna de las tres desigualdades se cumple, por lo que tampoco será necesario actualizar la etiqueta
del nodo F.

Análisis del vértice F:


C
(A,2)
1
8 > 2+8

F 8 > 4+4
8 > 8+20
(E,8) 3 E
D (B,4)
(A,8) 2

Figura 4.4.s: análisis del nodo F según Bellman-Kalaba acelerado (segunda iteración)

Ahora que hemos finalizado la segunda iteración, es necesario averiguar si será precisa una nueva
iteración en el grafo que estamos estudiando. Según el algoritmo, se tiene que llevar a cabo una nueva
iteración cuando la variable detector_de_cambios es igual a cierto. Podemos ver, que en la segunda
iteración no hemos cambiado ninguna marca, por lo que podemos finalizar el proceso principal del
algoritmo Bellman-Kalaba acelerado.

Solución

El siguiente grafo representa la solución final después de dos iteraciones, que lógicamente es la misma
que se obtuvo con el algoritmo de Bellman-Kalaba: el uso del procedimiento acelerado ha permitido
obtener la solución con una iteración menos.
(A,1)
B

1 3

(A,0)
2 (A,2) 3 (B,4)
A C E

9 8
8 4
20
D F
(A,8) (E,8)

Figura 4.4.t: solución para el grafo de Figura 4.4.a obtenida mediante Bellman-Kalaba acelerado

Para la interpretación de la solución obtenida, se remite al lector a la explicación efectuada en el


ejemplo con el algoritmo Bellman-Kalaba.

Resolución mediante matrices

A continuación se le aplicará el algoritmo Bellman-Kalaba acelerado al grafo anterior para obtener el


camino de coste mínimo. El estudiante puede seguir el procedimiento a través de matrices cuando se
intenta encontrar el camino de menor coste desde el nodo A hasta el resto de nodos del grafo.

Paso 0: Inicio. Asociar a cada arco un valor que equivale a la distancia entre el nodo origen (A) y cada
uno del resto de los nodos. Si no hay posibilidad de conexión directa entre los nodos i y j, dicho valor
será infinito.
Teoría de grafos 187

Definimos las etiquetas Pj, inicializando la etiqueta del nodo origen a cero (P O=0) y el resto etiquetas a
la distancia existente entre el origen y este nodo en una conexión directa (P j=dOi). Definimos las
variables tj, inicializándolas con el nodo origen (ti=A). Inicializamos la variable detector_de_cambios a
falso.

j A B C D E F
Pj 0 1 2 8 ∞ ∞
tj A A A A A A

k=1 (primera iteración)

Tal y como muestra el algoritmo Bellman-Kalaba acelerado, se tendrá que analizar cada uno de los
nodos del grafo. En la resolución mediante matrices, el estudio de cada nodo corresponde a una
columna de la siguiente matriz.

Empezaremos analizando el nodo A. En este caso, buscaremos si se cumple la desigualdad P A > Pj +


djA, para cada nodo j, excepto en la celda AA. Estudiando cada una de las desigualdades propuestas, se
comprueba que ninguna se cumple, por lo que no es necesario actualizar ni la etiqueta P A ni la variable
tA.

A continuación se analiza el nodo B (segunda columna). Para cada nodo j, miramos si se cumple la
desigualdad PB > Pj + djB. En este caso en particular, y tras analizar cada una de las restricciones,
observamos que ninguna de las restricciones se cumple, por lo que pasamos a estudiar el siguiente
nodo.

El siguiente nodo a estudiar será el C. Para cada nodo j, buscamos qué desigualdades de las siguientes
PC > Pj + djC se pueden verificar. De la misma forma que pasaba en el análisis de los anteriores nodos,
ninguna de las restricciones se cumple, por lo que pasamos a estudiar el siguiente nodo.

j↓ i→ A B C D E F
A - 1>0+1 2>0+2 8>0+8 ∞>0+∞ ∞>0+∞
B 0>1+∞ - 2>1+∞ 8>1+∞ ∞>1+3 ∞>1+∞
C 0>2+∞ 1>2+∞ - 8>2+9 4>2+3 ∞>2+8
D 0>8+∞ 1>8+∞ 2>8+∞ - 4>8+∞ 10>8+20
E 0>∞+∞ 1>∞+∞ 2>∞+∞ 8>∞+∞ - 10>4+4
F 0>∞+∞ 1>∞+∞ 2>∞+∞ 8>∞+∞ 4>∞+∞ -

El nodo D es el siguiente a analizar. Tal y como hemos hecho con los anteriores nodos ( i),
comprobamos el estado de las restricciones: P D > Pj + djD. Entre todas las desigualdades que
corresponden a los nodos j, ninguna de ellas se cumple. Por consiguiente, se procede a estudiar el
siguiente nodo.

Ahora analizaremos la columna del nodo E. Para cada nodo j, verificamos si se cumplen la
desigualdad PE > Pj + djE. A diferencia de los casos anteriores, cuando j es igual al nodo B, la
desigualdad PE > PB + dBE se cumple, por lo que será necesario actualizar la etiqueta del nodo E con el
nuevo valor (PB + dBE =1+3) y la variable tE con el nodo B. En la siguiente tabla se muestra la
actualización.

j A B C D E F
Pj 0 1 2 8 ∞4 ∞
tj A A A A AB A
188 Métodos cuantitativos en organización industrial I

En el resto de nodos j, se tendrá en cuenta la nueva etiqueta. Sin embargo, ninguna de las tres
desigualdades que faltan por comprobar cumplen la condición. Por lo tanto, podemos continuar
analizando el siguiente nodo i. Como hemos modificado una etiqueta, la variable detector_de_cambios
se actualiza a cierto.

El último nodo que tenemos que estudiar es el nodo F. Para cada nodo j, volvemos a comprobar las
desigualdades asociadas a cada nodo j. Cuando el nodo j es igual C, la desigualdad PF > PC + dCF se
cumple, por lo que tendremos que actualizar la etiqueta correspondiente. En este caso, la etiqueta del
nodo F se actualizará a 10 (P C + dCF), mientras que la variable tF tomará un valor de C. Por último,
actualizaríamos (si no lo hubiéramos hecho antes) la variable detector_de_cambios a cierto.

j A B C D E F
Pj 0 1 2 8 4 ∞  10
tj A A A A B AC

Teniendo en cuenta que la etiqueta de la variable F vale 10, se sigue estudiando el resto de
desigualdades. Cuando el nodo j es igual al nodo E, ocurre que la desigualdad P F > PE + dEF se cumple,
por lo que tendremos que actualizar de nuevo la etiqueta del nodo F a 8 y la variable tF a E. Estos
cambios quedan reflejados en la siguiente tabla. Por último, actualizamos la variable
detector_de_cambios a cierto.

j A B C D E F
Pj 0 1 2 8 4 10  8
tj A A A A B CE

Una vez hemos analizado todos los nodos y hemos completado la matriz, el algoritmo muestra que
será necesaria una segunda iteración si la variable detector_de_cambios es igual a cierto. En este caso,
la variable tiene un valor de cierto, por lo que será necesaria una segunda iteración.

k=2 (segunda iteración)

En primer lugar deberemos inicializar de nuevo la variable detector_de_cambios a falso.

A continuación mostramos los valores de las etiquetas P y de las variable t de cada nodo del grafo
obtenidas en la iteración anterior.

j A B C D E F
Pj 0 1 2 8 4 8
tj A A A A B E

Se empezará el análisis con el nodo A. En este caso, calcularemos si P A es más grande que Pj + djA para
cada nodo j. Ninguna de las desigualdades se cumple, por lo que no se tendrá que actualizar la etiqueta
del nodo A. A continuación, seguimos estudiando el resto de los nodos.

Para cada par de nodos (i y j), se comprueba si la desigualdad Pi > Pj + dji se cumple. En la siguiente
tabla, aparecen todas las desigualdades a estudiar y se observa que ninguna se cumple, por lo que
podemos dar por acabada la presente iteración.
Teoría de grafos 189

j↓ i→ A B C D E F
A - 1>0+1 2>0+2 8>0+8 4>0+∞ 8>0+∞
B 0>1+∞ - 2>1+∞ 8>1+∞ 4>1+3 8>1+∞
C 0>2+∞ 1>2+∞ - 8>2+9 4>2+3 8>2+8
D 0>8+∞ 1>8+∞ 2>8+∞ - 4>8+∞ 8>8+20
E 0>4+∞ 1>4+∞ 2>4+∞ 8>4+∞ - 8>4+4
F 0>8+∞ 1>8+∞ 2>8+∞ 8>8+∞ 4>8+∞ -

Una vez analizados todos los nodos y completada la matriz, el algoritmo pauta que será necesaria una
nueva iteración si la variable detector_de_cambios es igual a cierto. En este caso, la variable tiene un
valor de falso, por lo que no será necesaria una tercera iteración.

Ahora que hemos finalizado el proceso iterativo del algoritmo Bellman-Kalaba acelerado, será
necesario interpretar los resultados obtenidos para encontrar el camino mínimo entre el nodo A y el
resto de nodos. Con este fin, es necesario representar en una tabla los nodos del grafo y los valores
finales de las variables tj, tal y como ocurre en el algoritmo Bellman-Kalaba.

Para encontrar el camino óptimo entre el nodo origen (A) y otro nodo, será necesario marcar el nodo
origen y seguir el camino que indican las variables tj. Si queremos calcular el camino óptimo entre los
nodos A y F, se seguirá el siguiente proceso:

j A B C D E F

tj A A A A B E

El valor de la variable tj del nodo destino j = F nos indica que el nodo previo al nodo F (para conseguir
el camino óptimo) es el nodo E. De forma similar, la variable tj del nodo E nos indica que el nodo
previo (para conseguir el camino óptimo) es el nodo B. La variable tj del nodo B muestra que el nodo
previo (para conseguir el camino óptimo) es el nodo A. Como el nodo A es el nodo origen, ya hemos
obtenido el camino óptimo según el algoritmo Bellman-Kalaba acelerado.

Por tanto, el camino óptimo del grafo que va desde el nodo A hasta el nodo F es aquel que pasa por los
nodos A, B, E y F. Y el coste del camino óptimo es el valor de la etiqueta del nodo destino (P F), que en
este caso es ocho. Para calcular el camino óptimo entre el nodo A y cualquier otro nodo, se realizará el
mismo proceso empezando por el nodo destino.

7.5 Problemas de flujos

Es frecuente que nos encontremos con situaciones en las que debamos tratar con magnitudes de flujo:
fluidos que circulan por un sistema de tuberías, cadenas de montaje en la que las máquinas tienen
diferentes valores de productividad, etc. Estas situaciones pueden modelarse mediante un grafo que
represente una red de transporte (ver 7.3.2). Los problemas más frecuentes en estos casos consisten en:

a. Determinar el flujo total máximo que es capaz de vehicular el sistema.

b. Si conocemos el coste de vehicular flujo por cada uno de los nodos del grafo, puede interesarnos
conocer cuánto flujo debe circular por cada arista para así obtener el flujo a coste mínimo para un
190 Métodos cuantitativos en organización industrial I

determinado valor del flujo total.

Ambos problemas pueden resolverse por programación lineal, pero el de flujo total máximo puede
resolverse con métodos más rápidos, obteniendo el corte de flujo mínimo, o bien a través del algoritmo
de Ford-Fulkerson.

7.5.1 El problema del flujo total máximo

Además de las condiciones genéricas para redes de transporte indicadas en la sección 2.3, suele
imponerse a la red de transporte las siguientes condiciones:

1. La red no debe tener bucles ni circuitos. Los circuitos no añaden flujo total al sistema: si la
red original tiene alguno, puede eliminarse del modelo alguno de los arcos del circuito a
efectos de obtener el flujo máximo.

2. La red debe tener un único origen y un único destino (tal como se definieron en 2.3). Esta
condición puede cumplirse, en todo caso, añadiendo un origen ficticio (del que salen arcos de
capacidad ilimitada, con destino en los diferentes orígenes) y un destino ficticio (al que llegan
arcos de capacidad ilimitada, con origen en los diferentes destinos). Esta situación se
ejemplifica en las figuras 5.1.a y 5.1.b.

Figura 5.1.a

El problema consiste en determinar el flujo máximo que circulará a través de la red de transporte, que
será igual al flujo entrante al sistema por el nodo origen α, y al flujo saliente por el nodo destino ω,
sabiendo que cada arco aij es capaz de transportar un flujo máximo igual a FMij. Además de dicho
valor, nos puede interesar hallar los flujos fij que circularán por cada uno de los arcos para transportar
el flujo total máximo. El conjunto de flujos fij deberá cumplir en todo momento (no sólo cuando el
flujo total sea máximo) las condiciones propias de la red de transporte:

a. La suma de los flujos asociados a los arcos con origen en el nodo origen es igual a la suma de los
flujos asociados a los arcos que inciden en el nodo destino. Dicha magnitud es igual al flujo
transportado por la red.

b. Para el resto de nodos (nodos de trasbordo), la suma de flujos asociados a los arcos que inciden en
el nodo será igual a la suma de flujos asociados a los arcos que emergen de él.
Teoría de grafos 191

A B
α1 ω1

α ω

α2 ω2

C D

Figura 5.1.b

7.5.2 Corte de flujo mínimo

Un concepto importante asociado a las redes de transporte es el de corte. Un corte no es más que
cualquier conjunto de arcos cuya supresión deja incomunicados el nodo origen y el destino. El flujo
asociado a un corte no es más que la suma de los FMij de los arcos que componen el corte. Estos
conceptos nos pueden ayudar a hallar el flujo máximo que circula por una red de transporte, ya que el
flujo total máximo transportado por una red de transporte es igual al mínimo de los flujos asociados a
los cortes del grafo.

Puede observarse este hecho con la red de transporte de la figura 5.2.a. Entre paréntesis, se ha indicado
el flujo máximo que puede transportarse en cada uno de los arcos.

Figura 5.2.a

El flujo máximo que puede transportar esta red viene determinado por el corte indicado en la figura.
De la suma de los valores asociados al corte, obtenemos que dicho flujo es de 1 + 8 + 4 = 13.
Compruebe el lector que el resto de cortes de la red tienen asociado un valor de flujo mayor.

Para redes de transporte grandes, en las que el corte de flujo asociado mínimo sea difícil de obtener,
podemos usar el algoritmo de Ford-Fulkerson. Su estrategia es la de ir vehiculando cantidades
adicionales de flujo, a partir de un flujo compatible con la red, y detectar en qué momento se ha
alcanzado el flujo máximo.

7.5.3 Algoritmo de Ford-Fulkerson

Como se ha indicado, el algoritmo de Ford-Fulkerson permite encontrar el flujo máximo a través de


una red de transporte. Para ello tienen lugar varias iteraciones, en las que se intenta transportar el
192 Métodos cuantitativos en organización industrial I

máximo flujo posible cada vez, hasta que no es posible transportar más flujo. Para ello, se utiliza la
marcación de nodos. Existen dos reglas de marcación: la marcación en sentido directo y la marcación
en sentido inverso.

Marcación en sentido directo: Permite aumentar el flujo del arco cuando el flujo ya asignado sea
inferior a su capacidad. Sólo podemos marcar nodos a los que incidan arcos cuyo nodo origen esté
marcado:

Antes de
la marcación fij < FMij
i j

k/±/e Sin marca

Después de
la marcación fij < FMij
i j

k/±/e i / + / min {FMij -fij }

El nodo j ha sido marcado de forma directa. La marca tiene tres componentes:

1. El primero marca el origen del arco por el que se transporta el flujo: en este caso, indicamos
que la marcación proviene del nodo i.

2. El segundo muestra que si marca es de sentido directo (como en este caso, con el signo +) o de
sentido inverso (tendríamos entonces un signo -).

3. El tercero indica el valor del flujo transportable, determinado en el caso de la marcación


directa por el mínimo de estas dos magnitudes:
a. El flujo procedente del nodo i (en este caso, un flujo igual a e).
b. La capacidad del arco aij de transportar flujo adicional, que será igual a FMij – fij.

Marcación en sentido inverso: Permite reducir el flujo cuando el flujo asignado al arco es menor que
cero: entonces podría ser útil reducir flujo de ese arco, para transportarlo por otros arcos del grafo.
Esta reducción es posible porque el flujo anteriormente asignado a dicho arco se derivará por otra
rama de la red. Esta marcación sólo es posible cuando ha sido marcado con anterioridad el nodo
destino del arco:

Antes de
la marcación fij > 0
i j

Sin Marca k/±/e

Después de
la marcación fij > 0
i j

j / - / min {e, fij } k/±/e


Teoría de grafos 193

El nodo i ha sido marcado de forma inversa. La marca tiene tres componentes:

1. El primero marca el destino del arco por el que se transporta el flujo, en este caso, el nodo j.

2. El signo - del segundo componente indica que la marcación es en sentido inverso.

3. El tercer componente indica el valor del flujo que puede desviarse por otro camino, que es
igual al mínimo de estos dos componentes:
a. El flujo procedente del nodo j (en este caso, un flujo igual a e).
b. El flujo que puede decrementarse del arco aij, que será precisamente el que circula por
él en este momento: fij.

Una vez determinadas las reglas de marcación, podemos describir el algoritmo de Ford-Fulkerson.

Paso 0: Inicio:
1. Se establece un flujo compatible con la red (por ejemplo, se asigna a todos los arcos un
flujo igual a 0, o bien unos valores posibles en una primera aproximación).
2. Se marca el nodo origen con + / ∞.

Paso 1: Proceso:
Todos los nodos pasan a estado no explorado. Mientras haya nodos marcados, hacer:

1. Tomar un nodo marcado (que llamaremos i).


2. A partir del nodo i, se intenta marcar el resto de los nodos del grafo. Nos podemos
encontrar en con cuatro casos diferentes:
a. Que el nodo esté explorado. En tal caso, no se hará nada.
b. Que el nodo esté bloqueado. En tal caso, no se hará nada.
c. Que el nodo esté libre. En tal caso, no se hará nada.
d. Que el nodo pueda ser marcado en sentido directo o en sentido inverso. En
tal caso, se marcará el nuevo nodo según las reglas de marcación.
3. El nodo i pasa a estado explorado.

Paso 2: Si el nodo destino está marcado, incrementar el flujo en la red a través de la cadena que
marcan las etiquetas en una cantidad igual a la asignada a dicho nodo, en el sentido asignado
por la marcación.
Ir a paso l.
Si el nodo destino ω está limpio (no marcado ni explorado) o bloqueado, el flujo es óptimo
Finalizar.

Tal y como muestra el algoritmo, después de tomar un nodo marcado se explorará el resto de nodos
del grafo. Durante la exploración nos podemos encontrar en distintas situaciones:
a. Que el nodo esté explorado, es decir, que el nodo tenga una marca que hayamos definido
previamente. En este caso, no será necesario analizarlo.
b. Que el nodo esté bloqueado. Debemos distinguir dos bloqueos diferentes. Si el sentido del
flujo es directo, un nodo estará bloqueado si no puede ser aumentado por la capacidad
máxima del arco (FMij). Por el contrario, si el sentido que se define es inverso, un nodo
estará bloqueado si el flujo que pasa por él no puede disminuir (es decir, que vale cero).
c. Que el nodo esté libre. Cuando no existe un arco entre el nodo que estamos analizando y
otro nodo, se indica como libre.
d. Que el nodo pueda ser marcado en sentido directo o inverso. En estos casos, se aplicarán
las normas de marcación que ya hemos introducido.
194 Métodos cuantitativos en organización industrial I

A modo de ejemplo, determinamos el flujo total máximo que puede circular por la red de transporte
siguiente (entre paréntesis, el flujo máximo que puede circular por cada uno de los arcos):

(60) (40)

0 (20) 1 (30) 2 (30) 3 (90) 4

(80)

Figura 5.3.a: situación inicial

En primer lugar, se establece un flujo compatible con la red (la suma de los flujos de entrada en un
nodo es igual a la suma de flujos de salida de ese nodo). Dicho flujo puede ser de cero en todas las
ramas, o bien, unos valores iniciales cercanos al óptimo, como en este caso. Dicho flujo se
corresponde con los números que no están entre paréntesis.

50 40
(60) (40)
+/∞
20 20 30 30
0 (20) 1 (30) 2 (30) 3 (90) 4

0
(80)

Figura 5.3.b: flujo inicial compatible con la red

A partir de este flujo inicial se procede a explorar los nodos y a marcarlos según las reglas establecidas
anteriormente. El primer paso será inicializar la marca del nodo origen (0). En este caso, debemos
indicar que el flujo que fluye por él puede aumentar (simbolizado con el signo positivo) y que el flujo
no está limitado a nodos o arcos anteriores (simbolizado por el valor infinito).

k=1 (primera iteración)

A continuación analizamos los flujos asociados al nodo origen. Gráficamente observamos que el flujo
entre el nodo origen y el nodo 1 se realiza de forma directa (ver sentido de la flecha). En este caso,
debemos preguntarnos si es posible aumentar el flujo que pasa entre estos nodos. Como es imposible
(ya que actualmente pasan 20 unidades de las veinte posibles), debemos indicar que el nodo 1 está
bloqueado.

La relación entre el nodo origen y el segundo nodo también se realiza de forma directa. A diferencia
del caso anterior, sí que se puede aumentar el flujo del tramo que los une. Por lo tanto, tendremos que
marcar el nodo 2. El primer símbolo de la marca es el nodo que lo estaba explorando (en el caso que
estamos analizando, el nodo es el origen). Como la conexión es directa, el segundo símbolo de la
marca será el símbolo positivo. El tercer y último símbolo de la marca representa la cantidad máxima
Teoría de grafos 195

que podemos aumentar en el tramo estudiado. Este valor será el más pequeño entre lo que puede
aumentar el nodo origen (∞) y lo que puede aumentar el flujo entre los nodos (10). Por tanto, y entre
las dos opciones, el valor será diez.

Entre el nodo de origen y los nodos 3 y 4 no existe un arco que los una, por lo que consideraremos que
estos nodos están libres. La marca que hemos definido, así como la situación de cada nodo queda
reflejada en las siguientes figura y tabla.

50 40
(60) (40)
0/+/10
+/∞ 20 20 30 30
0 (20) 1 (30) 2 (30) 3 (90) 4

0
(80)

Figura 5.3.c: resultados después de la exploración del nodo origen (primera iteración)

Exploración 0 1 2 3 4
0 explorado bloqueado marca + libre libre

Una vez se ha realizado la exploración del nodo origen, es necesario ver qué otros nodos están
marcados. En este caso, el segundo nodo está marcado, por lo que se procede a realizar una
exploración desde este nodo.

Desde el segundo nodo existe una relación inversa (ver sentido inverso de la flecha) hacia el nodo
origen, pero como éste ya tiene una marca, no tendremos que estudiarlo (indicaremos que este nodo ya
está explorado). De la misma forma que ocurría antes, existe una conexión inversa entre el segundo
nodo y el primer nodo. Como la relación es inversa, tendremos que preguntarnos si el flujo que existe
entre los dos nodos puede reducirse. El gráfico muestra que el flujo actual en el tramo entre los nodos
es positivo (20), por lo que sí que podremos disminuir el flujo que pasa por el tramo. Ante el
cumplimiento de estas dos condiciones (conexión inversa y posibilidad de disminuir el flujo),
tendremos que marcar el primer nodo. La nueva marca tendrá como primer símbolo el nodo que lo ha
marcado (que en este caso será el segundo nodo). Después añadiremos un signo negativo, para reflejar
que la conexión es inversa. Por último, tendremos que escoger el valor más pequeño entre lo que
podemos disminuir en el flujo y lo que el segundo nodo puede permitir. En este caso, entre las veinte
unidades a disminuir en el tramo y las diez unidades que el segundo nodo puede disminuir, deberemos
escoger el mínimo, esto es, diez unidades.

Aunque existe una conexión directa entre el segundo nodo, y los nodos tercero y cuarto, ambos tramos
están bloqueados porque los arcos que unen estos nodos ya transportan su máximo flujo admisible. La
nueva situación después de analizar el segundo nodo es la siguiente:
196 Métodos cuantitativos en organización industrial I

50 40
(60) (40)
0/+/10
+/∞ 20 20 30 30
0 (20) 1 (30) 2 (30) 3 (90) 4

2/-/10
0
(80)

Figura 5.3.d: resultados después de la exploración del nodo 2 (primera iteración)

Exploración 0 1 2 3 4
0 explorado bloqueado marca + libre libre
2 explorado marca - explorado bloqueado bloqueado

De los tres nodos marcados, sólo el primer nodo no ha sido explorado todavía, por lo que ahora
deberemos proceder a su exploración. No es necesario analizar los nodos origen y segundo, ya que han
sido explorados y tienen una marca. Por el contrario, entre el primer nodo y el tercer nodo existe una
conexión directa, que sumado a la posibilidad de aumentar el flujo que pasa por él, nos lleva a marcar
el tercer nodo. Esta marca reflejará que el tercer nodo ha sido marcado por el primero en el primer
símbolo de la marca. Como la conexión se ha realizado de forma directa, también se añadirá a la
marca el símbolo +. Por último, se escribirá el valor más pequeño entre lo que puede aumentar el
tramo (80) y el valor que refleja la marca del primer nodo (10).

Desde el primer nodo no existe ninguna conexión con el cuarto nodo, por lo que lo definiremos como
libre. En la siguiente figura y tabla se muestra la nueva situación:

50 40
(60) (40)
0/+/10
+/∞ 20 20 30 30
0 (20) 1 (30) 2 (30) 3 (90) 4

2/-/10 1/+/10
0
(80)

Figura 5.3.e. resultados después de la exploración del nodo 1 (primera iteración)

Exploración 0 1 2 3 4
0 explorado bloqueado marca + libre libre
2 explorado marca - explorado bloqueado bloqueado
1 explorado explorado explorado marca + libre

Entre los nodos con una marcación, sólo hay uno que no ha sido estudiado: el tercer nodo. A
continuación se analizará el resto de los nodos en relación a éste. Como los nodos 0, 1 y 2 han sido
marcados previamente, no se tendrán que estudiar. De lo anterior, se deduce que sólo será necesario
estudiar el cuarto nodo, con el que existe una conexión directa. Como además podemos aumentar el
flujo que pasa entre los nodos, podremos marcar el cuarto nodo. El primer símbolo de la marca
Teoría de grafos 197

representará el nodo que lo ha marcado (el nodo 3). El segundo símbolo marcará si la conexión es
directa o inversa: en este caso será el símbolo positivo. Para terminar, se indicará lo que puede llegar a
aumentar el flujo que los une. Entre la capacidad que puede aumentar el tramo (90-30=60) y lo que el
tercer nodo puede permitirse (10) escogeremos el valor más pequeño.

A continuación se muestra como queda el grafo, después de analizar los nodos desde la perspectiva del
tercer nodo:

50 40
(60) (40)
0/+/10
3/+/10
+/∞ 20 20 30 30
0 (20) 1 (30) 2 (30) 3 (90) 4

2/-/10 1/+/10
0
(80)

Figura 5.3.f: resultados después de la exploración del nodo 3 (primera iteración)

Exploración 0 1 2 3 4
0 explorado bloqueado marca + libre libre
2 explorado marca - explorado bloqueado bloqueado
1 explorado explorado explorado marca + libre
3 explorado explorado explorado explorado marca +

Como el cuarto nodo (que es el nodo destino) está marcado, finalizamos el proceso de marcación en la
presente iteración.

Como puede observarse en la figura anterior, el nodo destino (4) está marcado con un flujo de 10. Esto
significa que podemos incrementar el flujo total en diez unidades, respecto del flujo compatible con la
red establecido inicialmente. Para ello, debe seguir se el sentido de las marcaciones, tal y como se
muestra en la siguiente figura:

50+10 40
(60) (40)
0/+/10
3/+/10
+/∞ 20 20-10 30 30+10
0 (20) 1 (30) 2 (30) 3 (90) 4

2/-/10 1/+/10
0+10
(80)

Figura 5.3.g: asignación del flujo adicional obtenido con la primera iteración

La marca del cuarto nodo muestra que podemos aumentar (3/+/10) en diez unidades (3/+/10) el flujo
que pasa desde el tercer nodo (3/+/10) hasta este nodo. Desde aquí vamos al tercer nodo y vemos de
qué nos informa su marca. El tercer nodo indica que podemos aumentar (1/+/10) en diez unidades
(etiqueta del nodo destino: 3/+/10) el flujo que pasa desde el primer nodo (1/+/10) hasta el tercer nodo.
Si nos situamos en el primer nodo, su marca nos informa que podemos disminuir (2/-/10) el flujo que
198 Métodos cuantitativos en organización industrial I

va desde el primer nodo hasta el segundo nodo (2/-/10) en diez unidades (etiqueta del nodo destino:
3/+/10). Para finalizar el proceso, la marca del segundo nodo muestra que podemos aumentar (0/+/10)
en diez unidades (etiqueta del nodo destino: 3/+/10) el flujo que pasa entre el nodo origen (0/+/10) y el
segundo nodo.

k=2 (segunda iteración)

En esta nueva iteración, deberemos partir de los valores de flujo obtenidos después de los cálculos que
se muestran en la figura 5.3.g. Todos los nodos pasan a estado no explorado, por lo que eliminamos
todas las marcas del grafo. Antes de comenzar debemos marcar el nodo origen con la siguiente marca
(+/∞), tal y como lo habíamos hecho en la primera iteración.

A continuación analizamos los flujos asociados al nodo origen. Gráficamente, observamos que el flujo
entre el nodo origen y el primer nodo se realiza de forma directa. Como el flujo de este tramo no
puede aumentar, se considerará bloqueado. Entre el nodo origen y el segundo nodo también existe una
conexión directa, pero tal y como ocurría con el primer nodo, este nodo también se considerará
bloqueado (no podemos aumentar el flujo: 60 sobre 60). Los nodos 3 y 4 no tienen asociado un arco
que los una con el nodo origen. Por lo tanto, terminamos el estudio a partir del nodo origen.

Exploración 0 1 2 3 4
0 explorado bloqueado bloqueado libre libre

A continuación, se tendría que analizar el siguiente nodo marcado, pero como no hay más nodos
marcados, y el nodo destino (4) no está marcado, el proceso Ford-Fulkerson se considera terminado tal
y como se representa en el siguiente grafo.

60 40
(60) (40)

+/∞ 20 10 30 40
0 (20) 1 (30) 2 (30) 3 (90) 4

10
(80)

Figura 5.3.h: resultados después de la exploración del nodo origen (segunda iteración)

Para calcular el flujo máximo de una red, se tendrá que sumar los flujos de salida del nodo origen
obtenidos del método Ford-Fulkerson. Pero como el flujo de entrada de una red debe ser igual al flujo
de salida, también podremos calcularlo sumando los flujos de llegada al nodo destino.
Teoría de grafos 199

60 40
(60) (40)

20 10 30 40
0 (20) 1 (30) 2 (30) 3 (90) 4

10
(80)
60+20=80 40+40=80

Figura 5.3.i: cortes de flujo mínimo para la red de transporte

7.6 Ejercicios

Problema 1

Se ha encargado el cableado del sistema de domótica de un edificio inteligente. El edificio cuenta con
cinco terminales con aparatos controlables a través de una central. No es necesario que la conexión de un
terminal con la central sea directa: puede realizarse indirectamente a través de conexiones con otras
terminales. El coste de conectar las diferentes terminales entre sí es el que se indica en la tabla.

Matriz T1 T2 T3 T4 T5
Matriz - 210 160 120 250 190
T1 210 - 110 230 220 55
T2 160 110 - 180 130 210
T3 120 230 180 - 185 280
T4 250 220 130 185 - 330
T5 190 55 210 280 330 -

Se trata de determinar qué terminales deben conectarse entre sí, de manera que todas ellas estén
conectadas (directa o indirectamente) con la central a coste mínimo.

Problema 2

Se le ha encomendado la tarea de planificar para los próximos cuatro años (X1, X2, X3 y X4) la
explotación de una finca maderera. En esencia, la explotación consiste en lo siguiente:

A final de año, debe decidirse si se desea talar el bosque y vender la madera. La cantidad de madera
será función del tiempo que hace que se plantó el bosque, según la tabla siguiente:

Años desde que se plantó Cantidad de madera (m3)


1 año 100
2 años 150
3 años 200
4 años 220
200 Métodos cuantitativos en organización industrial I

El coste de talar el bosque (fundamentalmente mano de obra) aumenta con el tiempo, y también lo
hace el precio del m3 de madera, según la siguiente tabla:

Fecha en que se tala Coste tala (um) Precio madera (um/m3)


31/12/X1 50 1,5
31/12/X2 70 2
31/12/X3 90 2
31/12/X4 110 2,5

Si el bosque se ha talado, debe replantarse el bosque a principios del año siguiente. Por las condiciones
contractuales establecidas con el propietario, a finales del año X4 el bosque debe estar talado, porque
dicho propietario desea replantarlo a principios de X5. Los costes de plantar el bosque se indican en la
tabla adjunta:

Fecha en que se planta el bosque Coste de plantación (um)


1/1/X1 20
1/1/X2 22
1/1/X3 25
1/1/X4 27

Sabiendo que a principios de X1 debemos plantar la explotación, determinar en qué años hemos de
talar el bosque para replantarlo después y obtener la máxima ganancia.

Problema 3

El grafo que se presenta a continuación representa las conexiones de agua existentes entre los
diferentes almacenes de una determinada empresa. Sobre cada arco, se indica la capacidad máxima de
transporte de agua (en m3/hora) de la tubería o tuberías que conectan los almacenes.

4
A D
4
6 1
4
F
B
I 3

1 3 E 9
C
4
Se pide

a) ¿Cuál será la máxima cantidad de agua que puede recogerse en el almacén F?

b) Determinar qué flujo debe circular por cada una de las tuberías para obtener el flujo máximo.

c) Formular el problema lineal que permitiría resolver este problema. Asimismo, dar la expresión de
manera que pueda ser resuelto por el método SÍMPLEX (variables de holgura y artificiales).
Describir el significado de las variables de holgura.
Teoría de grafos 201

d) ¿Cuáles serán las variables que formen parte de la solución básica en el óptimo de este programa
lineal?

Problema 4

Cinco camiones de carga tienen que entregar siete tipos de paquetes. Hay tres paquetes de cada
tipo, y las capacidades de los cinco camiones es de 6, 4, 5, 4 y 3 paquetes respectivamente.
Determinar si se pueden cargar los paquetes de tal manera que ningún camión cargue dos paquetes
del mismo tipo.

Problema 5

Hay cuatro trabajadores disponibles para realizar los trabajos 1, 2, 3 y 4. Tres trabajadores pueden
realizar solamente ciertos trabajos:

a) el trabajador 1 y el trabajador 2 solamente los trabajos 1 y 2

b) el trabajador 3, solamente el trabajo 2

c) el trabajador 4, cualquier trabajo

Determinar si se pueden asignar todos los trabajos a un trabajador idóneo.

7.7 Glosario de términos

Árbol

Grafo conexo sin ciclos. Un subconjunto de arcos o aristas de un grafo que sea un árbol es un árbol
parcial de dicho grafo.

Arco

Representación de la relación entre dos vértices de un grafo, cuando es relevante conocer el origen y
el destino de la relación. De otro modo, además de la dirección de la relación, debemos representar el
sentido. Los arcos se encuentran en los grafos orientados.

Arista

Representación de la relación entre dos vértices de un grafo, en la que no se especifica el origen y el


destino de la relación. Las aristas aparecen en grafos no orientados.

Arborescencia

Grafo orientado, fuertemente conexo, sin ciclos ni bucles, en que todos los vértices tendrán semigrado
interior igual a la unidad, excepto uno, raíz de la arborescencia, cuyo semigrado interior es 0. Es útil
para representar procesos decisionales.
202 Métodos cuantitativos en organización industrial I

Bucle

Arco o arista cuyos vértices coinciden. Representa una conexión directa de un vértice consigo mismo.

Cadena

Camino no orientado, esto es, sucesión de aristas tal que el vértice extremo de cada una (exceptuando
la última) coincide con el vértice extremo de la siguiente en la sucesión. Dos vértices de un grafo no
orientado que no están conectados directamente con una arista pueden estar conectados indirectamente
a través de una cadena.

Camino

Sucesión de arcos tal que el vértice extremo de cada uno (exceptuando el último) coincide con el
vértice extremo del siguiente en la sucesión. Dos vértices de un grafo orientado que no estén
conectados directamente con una arista pueden estarlo indirectamente por un camino.

Ciclo

Cadena que se inicia y termina en el mismo vértice. Por extensión, en un grafo no orientado se define
como un conjunto de arcos que unen una serie de vértices, prescindiendo de su orientación.

Circuito

Camino que se inicia y termina en el mismo vértice. Representa una conexión indirecta de un vértice
consigo mismo en un grafo orientado. Se trata de un concepto más fuerte que el de ciclo: todos los
circuitos son ciclos, pero no todos los ciclos son circuitos.

Conexo (grafo)

Grafo en que existe al menos una cadena entre toda pareja de vértices. El concepto es aplicable tanto a
grafos orientados como para no orientados.

Destino, vértice

Ver semigrado exterior.

Distancia

Valor numérico asociado a un arco o una arista de un grafo que representa posibilidades de
comunicación. La distancia de un camino es igual a la suma de las distancias de los arcos que
componen dicho camino. Según la situación que queramos representar, los valores de distancia de los
arcos pueden representar tiempo, coste u otros conceptos, en vez de distancia.
Teoría de grafos 203

Flujo

Magnitud asociada a un arco, que representa la cantidad de determinada variable vehiculada a través de
dicho arco por unidad de tiempo. Además del significado más obvio de caudal de fluido, puede
representar en ciertas situaciones magnitudes como productividad (producción por unidad de tiempo). El
valor total de los flujos que llegan a un vértice ha de ser igual al flujo neto establecido para dicho vértice.

Flujo total

Cantidad máxima de flujo que puede vehicular una red de transporte. Es igual al flujo que emerge de
los vértices origen y al que incide en los vértices destino.

Fuertemente conexo (grafo)

Grafo en que existe al menos un camino entre toda pareja de vértices. Es una propiedad más fuerte que
la de grafo conexo, dado que todo grafo fuertemente conexo es conexo.

Grado

Es el número total de arcos que tienen origen o destino en el vértice. Es igual a la suma del semigrado
interior y el semigrado exterior.

Grafo

Representación de las relaciones existentes entre los elementos de un sistema. Los elementos se
representan por los vértices del grafo y las relaciones por arcos o aristas.

Grafo orientado

Representación de las relaciones existentes entre los elementos de un sistema, cuando la relación entre
dos elementos i y j no tiene porqué ser la misma que la existente entre j e i. En los grafos orientados,
debemos distinguir entre el origen y el destino de la relación que establezcamos.

Grafo no orientado

Representación de las relaciones existentes entre los elementos de un sistema, cuando la relación entre
dos elementos i y j es siempre la misma que la existente entre j e i.

Origen, vértice

Ver semigrado interior.

Red de transporte

Grafo que representa las posibilidades de vehicular flujos a través de un conjunto de vértices. Cuando
es posible vehicular flujo entre dos vértices, tendremos un arco al que usualmente asociaremos un
valor máximo de flujo.
204 Métodos cuantitativos en organización industrial I

Semigrado exterior de un vértice

Número de arcos que emergen de un vértice. Un vértice de una red de transporte con semigrado
exterior igual a cero es un destino de los flujos de dicha red.

Semigrado interior de un vértice

Número de arcos que inciden en un vértice. Un vértice de una red de transporte con semigrado interior
igual a cero es un origen de los flujos de dicha red.

Vértice

Representación de los elementos del sistema cuyas relaciones vienen representadas en el grafo.

También podría gustarte