Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Una red o grafo es un conjunto de puntos llamados nodos, que están unidos entre sí por líneas
que se denominan arcos.
Algunos problemas que se presentan en la realidad, sobre todo, en las ciudades; se pueden
modelar como una red, por ejemplo:
Sistemas de transporte
Sistemas de distribución
Sistemas de comunicación
Una red se puede describir numerando los nodos y los arcos que la constituyen. Así, los nodos se
numeran o se indican con letras del alfabeto, y el arco se denota por los nodos o puntos que
conecta.
Además de la representación gráfica, una red también puede representarse como una matriz
booleana (formada por ceros y unos), en donde los i renglones y las j columnas serán los nodos
de la red. Un cero en el elemento (i,j) de la matriz indica que no hay arco uniendo al nodo i con
el nodo j. Si el elemento (i,j) de la matriz es uno, indica que sí hay un arco uniendo al nodo i con
el nodo j.
1 2 3 4 5
2
1 0 1 1 0 0
1
3 2 0 0 1 0 0
3 0 0 0 0 1
4 1 0 1 0 0
4 5 5 0 0 0 1 0
Un arco puede ser dirigido, si tiene asociado un sentido o no dirigido, en el caso de que no lo
tenga.
Si la red sólo tiene arcos dirigidos, se trata de una red dirigida.
Una cadena es un conjunto ordenado de arcos que conectan a dos nodos por medio de
nodos intermedios.
Una red conexa es una red para la cual existe una cadena entre cualquier par de nodos.
Un anillo o ciclo es una cadena que conecta a un nodo con él mismo.
Un árbol es una red conexa que no tiene anillos.
1
Estudio de redes
Definición
Se llama red de transporte a una gráfica finita sin anillos tal que:
a. Cada arco u tiene asociado un número c(u) 0 llamado capacidad del arco.
b. Existe un vértice x0 y uno solo tal que w+(x0)= este vértice se llama fuente de la red.
c. Existe un vértice xn y uno solo tal que w-(xn)= este vértice se llama sumidero de la red.
Flujo
Sean w-(xi) el conjunto de los arcos incidentes al vértice xi hacia el interior y w+(xi) el conjunto de
arcos incidentes al vértice xi hacia el exterior. Se dice que una función entera (u) definida
sobre el conjunto A de los arcos ui es un flujo para una red de transporte si:
(u ) 0 u A (4.1)
(u ) u w (xi )
(u ) u w (xi )
xi x0 (4.2)
xi xn
(u ) c (u ) u A (4.3)
2
Puede pensarse que (u ) es un gasto que fluye por el arco u y que nunca puede exceder la
capacidad c(u) de dicho arco. Aún más, si xi no es ni la fuente ni el sumidero, entonces (4.2)
significa que el gasto que llega a xi es igual al gasto que sale de xi , que es la llamada
propiedad conservativa del flujo.
De acuerdo con lo anterior se deberá tener:
(u ) u w (x 0 )
(u ) u w (xn )
( x n ) (4.4)
A ( x n ) se le llama el valor del flujo. Se tratará el problema de calcular el valor óptimo del flujo
correspondiente a una red de transporte. La determinación del valor óptimo del flujo conduce
a un problema de programación lineal entera.
Un flujo es completo si todo camino que va de la fuente al sumidero contiene al menos un arco
saturado.
En la figura 4.2, se muestra una red de transporte y en la figura 4.3 un flujo asociado a esta red.
Obsérvese que los arcos (x0x4), (x1x6), (x1x7), (x2x7), (x5x9), (x6,x9) y (x7x9) están saturados y que el
flujo no es completo ya que al menos existe el camino (x 0x3x8x9) que no posee ningún arco
saturado.
3
Teorema del mínimo corte-máximo flujo
Refiriéndose al inciso anterior, como Y contiene al sumidero, toda unidad de gasto que va de x0
a xn , pasa al menos una vez por un arco de w -(Y) y, consecuentemente, cualquiera que sea un
flujo (xn) y un corte w-(Y), se tendrá:
0 ( x n ) c [ w ( Y 0 )]
Entonces el flujo 0 ( x n ) tiene un valor máximo y el corte w -(Y0) tiene una capacidad mínima.
Teorema
En una red de transporte dada, el valor máximo de un flujo es igual a la capacidad mínima de
un corte, esto es:
Máx (xn)=mín c[w-(Y)] (4.7)
X1 X2 X3 X4 X5 X6 X7 X8
Bancos 12 10 10 10
Sitios de descarga 10 8 9 15
4
Debido a las restricciones en la flotilla de camiones, en el equipo de explotación de los bancos
y en los caminos de acceso; las capacidades de transporte de cada uno de los bancos a los
sitios de descarga resulta como se muestra en la tabla siguiente:
Destino
x5 x6 x7 x8
x1 7 3 2 0
Origen
x2 5 4 1 0
x3 0 2 4 8
x4 0 2 4 8
Observar que las capacidades de transporte con destino a los diferentes sitios de descarga
exceden a las demandas y que las capacidades de salida de cada banco de préstamo
exceden a su disponibilidad.
Haciendo abstracción de los costos de transporte, interesa satisfacer las demandas al máximo.
1. Cada uno de los bancos y de los sitios de descarga está representado por un vértice de la
red.
2. Cada banco está ligado mediante una flecha orientada o arco a los sitios de descarga y
este arco lleva un número que representa su capacidad; es decir, el tonelaje que puede
transportarse por el camino correspondiente. No se trazará por supuesto ningún arco entre
origen y destino si no hay un camión que siga esa ruta o bien si en ella existe un camión con
capacidad disponible nula.
3. Un vértice auxiliar x0 (la fuente) está ligado a cada banco mediante un arco que lleva como
capacidad la disponibilidad en ese banco.
4. Cada sitio de descarga está ligado a un vértice auxiliar x9 (el sumidero) mediante un arco
que tiene como capacidad la demanda correspondiente.
De esta manera se obtiene la red que se muestra en la figura 4.2, en la cual el número asociado
a cada arco es su capacidad. En este caso la fuente es el vértice x 0 y el sumidero es el vértice
x9.
5
7
x1 x5
3 5
2 10
12
x2 4 x6 8
10
x0 1 x9
10
2 9
x3 4 x7 Y
10
2 15
4 8
x4 x8
8
7
x1 6 x5
3 5 4
12
11 2 2 10
3
4 10
x2 3 x6 8
10 8
11 8
x0 x9
10
9 2 1 9
9
x3 4 3 x7
10
11
2 1
10 4 5 8
15
3
x4
8
6 x8
6
grueso los arcos saturados. Observar que el camino x 0x3x8x9 no posee ningún arco saturado. Se
aumenta en una unidad el flujo que pasa por cada uno de los arcos de este camino lo cual
conduce a la saturación del arco (x0x3) y al logro de un flujo completo, ya que como se observa
en la figura 4.4, todos los caminos que van de la fuente al sumidero tienen al menos un arco
saturado.
7
x1 6 x5
3 5 4
12
11 2 2 10
3
4 10
x2 3 x6 8
10 8
11 8
x0 x9
10
10 2 1 9
9
x3 4 3 x7
10
12
2 1
10 4 6 8
15
3
x4
8
6 x8
(+x0) (+x1)
7
x1 6 x5
3 5 4
12
11 2 2 10
(+x0) 3 (+x2)
4 10
x2 3 x6 8
(+) 10 8 (+x8)
11 8
x0 x9
10 (-x6) 1 (+x3) 9
10 2 9
x3 4 3 x7
10
12
(-x6) 2
1
10 4 6 8
(+x4) 15
3
x4
8
6 x8
7
4. Si por este procedimiento se llega a marcar el sumidero, entonces se considera la cadena
que pasa por los vértices marcados con (+) o con (-) y que va de la fuente al sumidero. Si un
arco de esta cadena está orientado en el orden indicado por la secuencia de los vértices
que forman la cadena, entonces el flujo de dicho arco se aumenta en una unidad y en
caso contrario se disminuye también en una unidad. De esta manera se obtendrá un nuevo
flujo, mayor que el inicial, y para el cual se sigue satisfaciendo la propiedad conservativa.
En el ejemplo, se tiene la cadena x0 x2 x6 x4 x8 x9 de vértices marcados, y consecuentemente
el flujo del arco (x0x2) se aumentará de 8 a 9, el de (x2x6) de 3 a 4, el de (x6x4) se disminuirá
de 1 a 0, el de (x4x8) se aumentará de 6 a 7 y el de (x8x9) de 12 a 13; así, se obtiene la figura
4.6:
7
x1 6 x5
3 5 4
12
11 2 2 10
(+x0) 3 (+x2)
4 10
x2 4 x6 8
(+) 10 9 (+x8)
11 8
x0 x9
10
10 2 1 9
9
x3 4 3 x7
10
13
(-x6) 2
0
10 4 6 8
(+x4) 15
3
x4
8
7 x8
5. Se repiten los pasos 3 y 4 hasta lograr que no aparezca ninguna cadena de vértices
marcados. Esta etapa se ilustra con la figura 4.7:
(-x5) (+x2)
7
x1 6 x5
3 5 4
12
11 2 2 10
(+x0) 3
4 10
x2 4 x6 8
(+) 10 9
11 8
x0 x9
10
10 2 1 9
9
x3 4 3 x7
10
13
2 0
10 4 6 8
15
3
x4
8
7 x8
Figura 4.7
8
Es fácil ver que cuando se llega a la situación descrita en el paso 5, entonces el flujo ( x n ) ha
10
13
2 0
10 4 6 8
15
3
x4
8
7 x8
Como x0 Y0, xn Y0, el conjunto Y 0 define un corte w-(Y0) de la red y si se representa con
0 ( x n ) el flujo asociado a dicha red, se puede escribir:
0 ( x n ) (u ) u w ( Y0 )
(u ) u w ( Y0 )
c (u ) u w ( Y0 )
0 c [ w (Y0 )
Por el teorema del mínimo corte-máximo flujo, resulta que 0 ( x n ) es el valor máximo del flujo.
Entonces, el flujo máximo que se puede llevar en la red es de 400 000 m 3 en las cantidades
indicadas con los números grandes en cada uno de los arcos y se puede indicar en la siguiente
tabla:
9
Destino
X5 X6 X7 X8
X1 6 3 2 0
X2 4 4 1 0
Origen
X3 0 1 3 6
X4 0 0 3 7
8
1 4
6
5 1 6
7
Cactus, 0 3 2 6 Reynosa,
Chiapas Tamaulipas
3
6 8
2 5
6
0 7 3 6
0 4
6 0 0
2
0
3 8
0 2 5
6 0
10
Donde cada arco dirigido que une al nodo i con el nodo j, se representa ahora como:
Ci Cj
i j
Siendo Ci la cantidad del bien que puede fluir como máximo, del nodo i al nodo j, y C j sería la
máxima cantidad del bien que puede fluir del nodo j al nodo i.
Con la red en esta forma, se puede aplicar el siguiente algoritmo para determinar el flujo
máximo:
1. Encontrar una cadena del nodo origen al nodo final. Si no existe ninguna, el flujo neto
asignado es el flujo óptimo.
2. Encontrar en esta cadena el arco con la menor capacidad de flujo (mayor que cero).
Denotar a esta capacidad como C*. Aumentar C* al flujo neto del origen al final.
3. Restar C* a la cantidad Ci de cada arco en la cadena. Sumar C* a la cantidad C j de cada
arco en la cadena. Regresar al punto 1.
Para el ejemplo, inicialmente el flujo asignado es cero. Este flujo se denota con una flecha que
entra al nodo de origen y una flecha que sale del nodo final:
8 0
1 4 6
0
1 0
0
5 6 0
Flujo 0 Flujo
0 7 0 3 6
neto 0 neto
6 4 0
2
3
0 0 8
2 5
6 0
1. Una cadena es un conjunto ordenado de arcos, que en este caso conectan al nodo de
origen con el nodo final. Por ejemplo:
8 0
1 4 6
0
5 0
0 6
2. En esta cadena, el arco con menor capacidad es el arco (0,1), con capacidad igual a 5, o
sea, que C*=5. El flujo neto es ahora 0+C*=0+5=5.
11
3. Sobre esta cadena, se resta C* de las cantidades Ci.
C0-C*=5-5=0
C1-C*=8-5=3
C4-C*=6-5=1
Se suma C* a las cantidades Cj, 0+5 en todos los casos, quedando la cadena ahora como:
3 5
1 4 1
5
0 5
0 6
Esta nueva red indica que ya no es posible ir del nodo 0 al nodo 1, ya que la capacidad de flujo
en este sentido es cero, pero si es posible ir del nodo 1 al nodo 0.
0 6
6 0
0 8
2 5
6 0
2. Los arcos con la menor capacidad de flujo son el (0,2) y (2,5) con una capacidad de 6, de
manera que C*=6. El flujo neto será ahora 5+6=11.
3. Restando C* de la cantidad Ci y sumándoselo a las Cj, queda la cadena como:
0 6
0 6
6 2
2 5
0 6
12
La nueva red es ahora:
3 5
1 4
5 1
1 0
0
0 6 5
0
11 0 7 0 3 6 11
0
0 4 6
2
3
6 0 2
2 5
0 6
4
0 1
6 5
7 0
0 3 6
2. El arco de menor capacidad de flujo es el (4,6) con C*=1. El flujo neto es ahora 11+1=12.
3. Restando C* de Ci y sumándola a la Cj, queda la cadena como:
4
1 0
5 6
6 1
0 3 6
0 5 2
13
2. El arco de menor capacidad es el (5,6) con capacidad 2, de manera que C*=2. El flujo neto
es ahora 12+2=14.
3. Restando C* de Ci y sumando a Cj la cadena queda como:
4 3
0 3 6
2 8
2 5 0
3 5
1 4
5 0
1 1
0
0 0 5 6
14 0 4 3 3 6 14
0 0 2 8
3 2
2
6 2 5 0
0 6
En esta red ya no es posible encontrar una cadena de 0 a 6, ya que no hay flujo posible de 4 a
6 o de 5 a 6, que es la única forma en la que se puede llegar al nodo final. De manera que el
flujo neto asignado es el flujo máximo. Es decir, se pueden enviar como máximo 14 millones de
m3 de gas al día, de Cactus a Reynosa.
Comparando la red original con la red final, se puede determinar la forma en que se efectúa
este envío:
Se mandan 5 unidades (millones de m3 al día) del nodo 0 al nodo 1, 5 unidades del nodo 3 al 4,
6 unidades del nodo 4 al 6, 6 unidades del nodo 0 al 2, 6 unidades del nodo 2 al 5, 2 unidades
del nodo 3 al 5, y 8 unidades del nodo 5 al 6. Si se definen las variables xij=flujo del nodo i al nodo
j, el resultado queda como:
x01=5 x02=6 x03=3
x13=0 x14=5
x23=0 x25=6
x34=1 x35=2
x46=6
x54=0 x56=8
14
El dual de este problema da como resultado los arcos que se saturan al enviar el flujo óptimo, es
decir, aquellos que están funcionando a su máxima capacidad. En algunos problemas como: el
flujo de vehículos al desalojar un estacionamiento, o el flujo de distribución de plagas en un
territorio, el dual es de mayor utilidad que el primal.
En el problema, los arcos que se saturan son : (0,1), (0,2), (2,5), (4,6) y (5,6).
1 4
8
5 6
1 6
Cactus, Reynosa,
Chiapas 0 3 2 6 Tamaulipas
7
3 4
6 8
2 5
6
Se puede ilustrar la técnica de etiquetado en la red mostrada. Como se muestra en la figura 4.8,
se etiqueta el nodo 0 con (-, ). Luego, el nodo 1 se etiqueta con (0,5), en la cual el 0 se refiere
a que el nodo precedente es el 0 y 5 es la capacidad más pequeña de todos los arcos que
preceden al nodo 1; la etiqueta en el nodo 2 es (0,6). Cuando se llega al nodo 3 se etiqueta
con (0,7), pero se ha verificado que el flujo que se asigna a la etiqueta proceda de un arco que
a la vez esté etiquetado. En forma general, el flujo que se asigna en la etiqueta resulta de
seleccionar el menor del flujo en el arco y el flujo en la etiqueta que precede al arco y de entre
éstos, el mayor posible. Así, se logra etiquetar el nodo final; si sucede esto, significa que el flujo
final no es el óptimo. En el ejemplo, se llega con f 1=6. Para saber por qué arcos es transportado
este flujo, basta con observar la etiqueta final; ella dice por qué arco se llegó y ese flujo se resta
de la capacidad en cada arco de ese camino, hasta llegar al nodo inicial; el resultado es la red
de la figura 5.9 en la cual se ha etiquetado de nuevo repitiendo el proceso. De la misma
manera se procede etiquetando y almacenado el flujo hasta que se llega a la situación en que
ya no es posible etiquetar el nodo final (figura 4.10).
15
0,5 3,6
1 4
8
5 6
1 6
-, ¥ 5,6
0 3 2 6
7
3 4
6 8
0,7
2 5
6
0,6 2,6
Figura 4.8
0,5 3,6
1 4
8
5 6
1 6
-, ¥ 4,6
0 3 2 6
7
3 4 f=6
0 2
0,7
2 5
0
3,4
Figura 4.9
0,5 1,5
1 4
8
5 0
1 0
-, ¥ 5,1
0 3 2 6
1
3 4 f=6+6
0 2
0,1
2 5
0
3,1
0,5 1,5
1 4
8
5 0
1 0
-, ¥ 5,1
0 3 2 6
0
3 3 f=6+6+1
0 1
1,1
2 5
0
3,1
16
0,4 1,4
1 4
8
4 0
0 0
-, ¥
0 3 2 6
0
3 2 f=6+6+1+1=14
0 0
2 5
0
Figura 4.10
1 4
1
6 6
1
0 3 6
14 7 14
2 8
6
2 5
6
Figura 4.11
18 8 4
4 1 5
6 3 3 1 15
9
6
6 0 5 8 8
30 10 8 3
5 2 6 12
5 9
20 8 25 0 22
18 10 22
0 12 2 10 14
12
16 2 14 0 1 22
7 2
16 13
7 3 7
4 4
3 8 3
4 11 7
22 10 4 9
8 4 8 6
14 5
17
En la primera columna adyacente a la matriz, se colocan las etiquetas; ésta consta de dos
dígitos, el primero corresponde a la cantidad de flujo que es posible transportar y el otro será el
número del nodo de donde procede el flujo; así, la etiqueta correspondiente al nodo 0, es (-,)
ya que al ser el nodo inicial el flujo se puede considerar infinito y no proviene de ningún nodo.
Para etiquetar los demás, se deben de considerar las reglas siguientes:
Cuando ya no es posible incrementar el flujo en la red, se dice que se alcanza el flujo máximo.
En este caso, el flujo máximo = 7 + 5 + 4 + 3 = 19 unidades de flujo. Es necesario especificar por
dónde se va a llevar este flujo en la red; para ello basta con considerar aquellos arcos en que se
observa que ha habido cambios y se establece una diferencia entre este valor y el valor original
del arco; así, el flujo se transportará en la red del ejemplo, de la siguiente manera:
4 1
18 3 8 4
5
3
1 15
9
3 6 3 8
8 8
5 30 10
6
4 12
3
2
11 4 5 4 3
20 25 0 22
18
19 5 12 22
0 7 2 10
12
14 19
16 14 0 22
7
7
7 13 4
4
5
5
22
8 4
18
Se observa que se cumple la ley conservativa del flujo en todos los nodos de la red.
19
Figura 4.14 Matriz de solución de flujo máximo.
Un árbol es una red conexa que no tiene ciclos. Es decir, es un conjunto de arcos unidos, que
dan una cadena desde cualquier otro nodo de ella misma, sin caer en un ciclo. El árbol de
mínima expansión es el árbol con el menor costo, distancia o tiempo, según lo que indique la
cantidad sobre los arcos.
Considerar el siguiente ejemplo:
20
2 7
5
8 17
9
1 6 4 6
10
8
7 9 13
3 5
7
Se puede observar que en esta red hay varios árboles, dos de ellos son:
2 7 2 7
5 Valor = 54 Valor= 60
8 17 17
9
1 6 4 6 1 6 4 6
10
9 7 13
3 5 3 5
7
Para esto se puede aplicar cualquiera de los dos algoritmos que se discuten, que son
básicamente uno solo, el primero trabaja directamente sobre la red y el segundo sobre una
matriz booleana en la cual se sustituyen los unos por las distancias.
1. Seleccionar en la red original el arco con el menor valor (el cual queda en el árbol de
mínima expansión).
2. Encontrar un arco, que tenga el menor valor, que una un nodo del arco original con
cualquier otro nodo que no se encuentre en el arco original.
3. Estos dos arcos se encuentran ahora en el árbol de mínima expansión.
4. Continuar con éste proceso, añadiendo al árbol el arco con el menor valor que lo conecte
con algún nodo que no esté dentro del árbol.
21
Por ejemplo, en la red:
2 7
5
8 17
9
1 6 4 6
10
8
7 9 13
3 5
7
El arco con menor valor es el (1,2) con longitud igual a 5. Este arco y sus nodos quedan dentro
del árbol de mínima expansión.
El arco de menor valor que une a algún nodo en el arco original (1 ó 2), con algún nodo que no
está en el arco original (3,4,5,6 ó 7), es el (2,3) con longitud 6, de manera que éste arco y éstos
nodos quedan dentro del árbol de mínima expansión.
2 7
5
8 17
9
1 6 4 6
10
8
7 9 13
3 5
7
El arco de menor valor que une a los nodos en el árbol con los que no están en él es el (3,5) con
longitud 7, y así sucesivamente.
2 7
5
8 17
9
1 6 4 6
10
8
7 9 13
3 5
7
22
2 7 2 7
5 5
8 17 8 17
9 9
1 6 4 6 1 6 4 6
10 10
8 8
7 9 13 7 9 13
3 5 3 5
7 7
2 7 2 7
5 5
8 17 8 17
9 9
1 6 4 6 1 6 4 6
10 10
8 8
7 9 13 7 9 13
3 5 3 5
7 7
2 7
2 7
5
8 17 5
9 8 17
9
1 6 4 6
10 1 6 4 6
10
8
7 9 13 8
7 9 13
3 5
7 3 5
7
De manera que éste problema tiene dos árboles que dan el mismo valor de mínima longitud:
2 7 2 7
5 5
9 9
6 1 6 4 6
1 4 6 10
10
8 8
3 5
3 5 7
7
Valor = 45 Valor = 45
Los arcos de cada árbol indican sobre qué nodos se debe establecer comunicación.
23
Algoritmo para obtener el árbol de mínima expansión en una matriz
1. Construir la matriz booleana de la red, y substituir los unos por la distancia existente entre
nodo y nodo. Esta matriz tiene en los renglones y en las columnas los nodos que forman la
red. El elemento aij de la matriz indica la distancia entre el nodo i y el nodo j. Si no están
unidos se pone un guión en lugar de otro.
2. Seleccionar el menor elemento de la matriz. Si hay empate se escoge en forma arbitraria.
Sea este elemento el aij.
3. Eliminar la columna i y la columna j, ya que estos nodos quedan incluidos en el árbol de
mínima expansión.
4. Marcar los renglones i y j con una X.
5. Buscar en los renglones marcados con X el menor elemento. Sea éste el aXk. Eliminar la
columna k y marcar con X el renglón k.
6. Repetir desde el paso 5 hasta que se hayan eliminado todas las columnas.
2. El menor elemento de la matriz es el a12, que es igual al a21, ya que la matriz es simétrica. Se
puede tomar cualquiera de los dos. En este ejemplo se elegirá el a12.
3. Se eliminan las columnas 1 y 2, lo cual significa que los nodos 1 y 2 se encuentran ya dentro
del árbol mínimo.
4. Se marcan con una X los renglones 1 y 2.
1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7
1 5 7 X 1 5 7 X 1 5 7 X
2 5 6 8 X 2 5 6 8 X 2 5 6 8 X
3 7 6 8 7 3 7 6 8 7 X 3 7 6 8 7 X
4 8 8 9 10 17 4 8 8 9 10 17 4 8 8 9 10 17
5 7 9 13 5 7 9 13 5 7 9 13 X
6 10 13 9 6 10 13 9 6 10 13 9
7 17 9 7 17 9 7 17 9
24
1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7
1 5 7 X 1 5 7 X 1 5 7 X
2 5 6 8 X 2 5 6 8 X 2 5 6 8 X
3 7 6 8 7 X 3 7 6 8 7 X 3 7 6 8 7 X
4 8 8 9 10 17 X 4 8 8 917 X10 4 8 8 9 10 17 X
5 7 9 13 X 5 7 9 13 X 5 7 9 13 X
6 10 13 9 6 10 13 9 X 6 10 13 9 X
7 17 9 7 17 9 7 17 9 X
2 7
8
5 17 9
1 6 4 6
10
8
7 9 13
3 5
7
El valor del árbol se obtiene sumando los elementos marcados en la matriz final:
5 + 6 + 8 + 7 + 10 + 9 = 45
25
Solución empleando TORA:
Del menú principal elegir Network models y minimal spanning tree.
26
Figura 4.17 Solución del árbol de mínima expansión.
La primera parte del algoritmo sólo sirve para indicar cuál es el valor del camino mínimo entre
un vértice inicio y todos los demás de la gráfica, en la siguiente se determinan los arcos que
forman esos caminos.
27
Segunda parte:
1. Elegir un vértice como final del camino mínimo y marcarlo con el valor de éste.
2. Todos aquellos vértices que se encuentran en arcos incidentes al interior del vértice final se
deben marcar con la diferencia entre la marca del vértice final del camino y el valor
asociado a dicho arco.
3. Todo vértice que sea extremo inicial de un arco cuyo extremo final tenga una marca
deberá marcarse con la diferencia de ésta menos el valor asociado a dicho arco.
4. Si un arco es marcado más de una vez se elegirá la marca de mayor valor.
5. Los pasos 3 y 4 se repetirán hasta que se marque el vértice inicial del camino. Esta marca
debe coincidir con la que se le dio en la primera parte del algoritmo.
6. El camino de valor mínimo entre los dos vértices llamados inicial y final está formado por
todos aquellos vértices que tengan marcas iguales debido a la aplicación de las dos partes
del algoritmo.
2 4
1
9
6 4 3
1 3 5 7
4
9
3
8 2
7
3 6
6
La aplicación del algoritmo en su primera parte determina la siguiente red con las marcas
indicadas con flechas hacia la derecha:
6 7
2 4
1
9
0 6 4 3 14
10
1 3 5 7
4
9
3 8
8 8 2
7
3 6
6
28
El camino de valor mínimo es de 14 unidades; con la aplicación de la segunda parte del
algoritmo se marcan los nodos con una flecha hacia la izquierda:
6 7
2 4
6 1 5
9
0 6 4 3 14
10
1 3 5 7
4
9 10
0 3 14
8 8 2 8
7
3 6
6
1 7
El valor asociado a cada flecha hacia la derecha en cada nodo, indica el valor del camino
mínimo entre el nodo inicial y cada nodo.
Finalmente, se localizan los nodos con marcas iguales y que representarán al camino de valor
mínimo; en el ejemplo, éste está dado por los nodos 1, 2, 5 y 7:
6
2 4
6
0 6 4 14
10
1 5 7
4
10
0 14
3 6
29
Ejemplo 4.8 Investigar si la gráfica tiene anillos
En la gráfica siguiente se quiere determinar el camino de valor máximo, por lo que es necesario
investigar si la gráfica no tiene anillos:
2 4
1
9
6 4 3
1 3 5 7
4
9
3
8 2
7
3 6
6
Se comienza con el nodo 7 que es el único al principio, que no tiene sucesor y se prosigue con
el algoritmo, lográndose marcar toda la red (en el orden marcado por los números romanos);
por lo que se puede asegurar que la red no tiene anillos:
VI III
2 4
1
9
6 4 3
II
VII 1 3 5 7 I
4
9
3
8 2
7
3 6
6
V IV
El algoritmo para determinar caminos de valor máximo es idéntico al descrito para determinar
el camino de valor mínimo, salvo en el paso 4 de la primera y segunda parte, donde debe
decir:
Primera parte:
4. Si un arco es marcado más de una vez se elegirá la marca de mayor valor.
Segunda parte:
4. Si un arco es marcado más de una vez se elegirá la marca de menor valor.
30
Ejemplo 4.9 Camino de valor máximo
Determinar el camino de valor máximo entre el nodo 1 y el nodo 7 de la red siguiente (ya se
determinó que la gráfica no tiene anillos):
2 4
1
9
6 4 3
1 3 5 7
4
9
3
8 2
7
3 6
6
La aplicación del algoritmo en su primera parte determina la siguiente red con las marcas
indicadas con flechas hacia la derecha:
6 18
2 4
1
9
6 4 3
0 27
21
1 3 5 7
4
9
3
8 2
9 15 7
3 6
6
6 18
2 4 18
6 1
9
6 4 3
0 27
21
1 3 5 7
4
9 23
0 3 27
8 2
9 15 7
3 6
6
9 20
31
El valor asociado a cada flecha hacia la derecha en cada nodo, indica el valor del camino
máximo entre el nodo inicial y cada nodo.
Finalmente, se localizan los nodos con marcas iguales y que representarán al camino de valor
máximo; en el ejemplo, éste está dado por los nodos 1, 2, 3, 4 y 7:
6 18
2 4 18
6
9
6
0 27
1 3 5 7
9
0 27
9
3 6
El algoritmo requiere que todos los valores sobre los arcos sean positivos, y consiste básicamente
en ir etiquetando todos los nodos de la red. Estas etiquetas informan cuál es la ruta más corta
desde el nodo inicial hasta ese nodo, y desde qué nodo se llegó a él. El algoritmo termina
cuando se ha etiquetado el nodo final. Se identifican tres conjuntos:
1. El de los nodos totales de la red, N
2. El de los nodos etiquetados, X
3. El de los nodos no etiquetados, X
32
Algoritmo para calcular la ruta más corta
1. Etiquetar el nodo inicial con d1=0, definir el conjunto de nodos etiquetadas, X
2. Definir el conjunto de nodos no etiquetados X , como el complemento de los que ya están
etiquetados X =N-X
3. (X, X )={(i,j) | i X y j X }
y calcular
di + Cij
4. Calcular dp + Cpq = mínimo {di + Cij}
(i,j) (X, X )
que será la etiqueta del nodo q, o sea
dq = dp + Cpq
5. Colocar a q en X
6. Si ya está el nodo final en X, alto. Si no, ir al paso dos
2
9
3 6
d1=0 1 4 5
7 4
3 2
4
3 6
10
X={1} , X ={2,3,4,5,6}
3. El conjunto (X, X ) es el de todos los arcos con origen en el nodo 1 y terminación en alguno
de los nodos 2, 3, 4, 5 ó 6, que en este ejemplo son: (1,2), (1,3) y (1,4).
33
2
9
3 6
d1=0 1 4 5
7 4
3 2
4
3 6
10
d2=3 2
9
3 6
d1=0 1 4 5
7 4
3 2
4
3 6
10
34
d2=3 2
9
3 6
d1=0 1 4 5
7 4
3 2
4
3 6
d3=4 10
d2=3 2
9
3 6
d1=0 1 4 5
7 4
3 d4=7 2
4
3 6
d3=4 10
35
3. X={1,2,3,4,5} X ={6}
4. Los arcos en (X, X ) son: (3,6), (5,6).
d2=3 2
9
3 6 d5=11
d1=0 1 4 5
7 4
3 d4=7 2
4
3 6
d3=4 10
Se calcula di+Cij.
(3,6) : d3 + C36 = 4 + 10 = 14
(5,6) : d5 + C56 = 11 + 2 = 13
1. El valor mínimo es d5+C56=13=dp+Cpq=dq=13=d6.
2. Se etiqueta el nodo q=6 con d6=13.
d2=3 2
9
3 6 d5=11
d1=0 1 4 5
7 4
3 d4=7 2
4 d6=13
3 6
d3=4 10
X={1,2,3,4,5,6} X ={0}. Como ya se etiquetó el nodo 6, se tiene la ruta más corta del nodo 1 al
nodo 6, que vale 13.
Hay dos posibles rutas, las cuales son:
2 2
1 4 5 1 4 5
4 7 4
3 2 2
4
3 6 3 6
36
El nodo predecesor para ir a uno cualquiera es el nodo p; esto se observa al etiquetar
dq=dp+Cpq. Por ejemplo, en la última red d6=d5+C56, es decir, se llega a q=6 a través del nodo
p=5. En la penúltima red se tiene que d5=d4+C45, o sea que se llega al nodo q=5 desde P=4 y así
sucesivamente.
37
Figura 4.19 Ingresar los coeficientes del problema.
38
4.8 El problema del cartero chino
El problema
Un cartero está buscando la ruta más corta (tiempo, distancia) para completar su ruta
asignada de calles. Cada calle debe ser atravesada al menos una vez y el cartero deb terminar
en el mismo lugar en que partió.
Antecedentes
A B
Hay varias diferencias entre el problema de los puentes de Köningsberg (PPK) y el problema del
cartero chino (PCC). Primero, no requería que el punto inicial y final fuera el mismo. Segundo,
Euler no estaba intentando minimizar la distancia de viaje. El nombre de Cartero Chino se debe
a que fue propuesto por el matemático chino (Mei-ko Kwan) en 1962. Es también conocido con
el nombre alternativo de Problema de la Ruta de Inspección. El PCC tiene muchas aplicaciones
prácticas como la planeación de rutas de autobús, recolección de basura, barrido de calles,
arado de tierras de cultivo e inspección de líneas de transmisión.
Formulación matemática
Se pueden convertir ambos problemas a modelos de redes. Por ejemplo, en el PPK, dejando las
cuatro regiones representadas por nodos y los siete puentes por los arcos. Entonces se tiene el
multígrafo que se muestra:
A B
39
Definición: Un multígrafo es una gráfica donde arcos múltiples (entre dos nodos distintos) y anillos
(un arco junta un nodo a sí mismo) son permitidos. Una gráfica que no permite arcos múltiples o
anillos es llamada gráfica simple.
Definición: Sea G una gráfica. Un camino en G que atraviesa a cada arco exactamente una
vez, es llamado un camino Euleriano. En adición, si el camino inicia y termina en el mismo
vértice, es llamado un circuito Euleriano (o tour Euleriano). Si G tiene un tour Euleriano, se dice
que G es una gráfica Euleriana.
Se puede observar que el PPK es el problema de encontrar un camino Euleriano en una gráfica.
El PCC puede ser convertido al problema de encontrar un tour Euleriano en una gráfica que
tiene el mínimo costo.
Definición: Sea G una gráfica. Un componente no trivial de G es una sub gráfica que contiene
al menos dos vértices distintos y al menos una trayectoria entre cualquier par de vértices en una
gráfica.
Teorema: Sea G una gráfica. G es una gráfica Euleriana si todos los vértices son pares y todos
los arcos pertenecen a un componente simple.
Ejemplo
G2
G1
G4
G3
Teorema: Sea G una gráfica. G tiene un camino Euleriano si todos los arcos pertenecen a un
componente simple y hay cuando más dos vértices impares.
40
Observación 2: El PPK no tiene un camino Euleriano ya que los cuatro vértices tienen grado
impar. Luego, no hay manera de atravesar los siete puentes exactamente una vez.
Observación 3: Si G es una gráfica con sólo vértices pares y un componente no trivial, entonces
la solución de PCC utiliza a cada arco en G EXACTAMENTE una vez y el costo total del viaje es
la suma de todos los valores en los arcos.
Algoritmo de Fleury
Si G es una gráfica con sólo vértices pares y un componente no trivial, entonces se puede
identificar un camino Euleriano como sigue:
Si G es una gráfica con cuando más dos vértices impares y un componente no trivial, entonces
se puede identificar un camino Euleriano como sigue:
4. Comenzar con cualquier vértice impar. (si todos los vértices son pares, comenzar con el que
sea).
5. Desde los vértices actuales, atravesar cualquier arco no seleccionado cuya supresión podría
no resultar en una gráfica con dos componentes no triviales.
6. Borrar el arco seleccionado de la gráfica. Si no hay arcos faltantes PARAR; de otra manera,
regresar al PASO 2.
En la gráfica mostrada, el grado (a) = 3 y el grado (h) = 3. Todos los demás son pares. Luego, la
gráfica no tiene un circuito Euleriano pero tiene un camino Euleriano iniciando en a y
terminando en h.
b e
c d
a f
h
j g
41
b e
c d
a f
h
j g
No se puede visitar g como el próximo porque borrando dg se podría dejar a la gráfica con dos
componentes no triviales
b e
c d
a f
h
j g
Resolviendo el PCC:
PREGUNTA: ¿Qué podría hacer el cartero si la gráfica subyacente no tiene sólo vértices pares?
RESPUESTA: Él empareja los vértices impares e intenta encontrar la ruta más corta entre los dos
vértices en cada par.
6
a c 6
a c
4
4 4
4
4
4
6 e 5 f 4
6 e 5 4 f
4
4 4
5 4
4 5
b d
8 b d
8
42
La nueva gráfica es Euleriana y ahora se puede usar el algoritmo de Fleury para encontrar un
camino Euleriano.
1. Listar todos los vértices impares en la red. Si no hay vértices impares, ir a PASO 5.
2. Encontrar todos los posibles CONJUNTOS de parejas de los vértices impares.
3. Para cada CONJUNTO, encontrar la ruta más corta entre los dos vértices en cada par.
Calcular el costo total del CONJUNTO de parejas adicionando los costos de las rutas más
cortas.
4. Seleccionar el CONJUNTO de parejas con el valor mínimo y repetir estos arcos en la
gráfica.
5. Usar el algoritmo de Fleury para encontrar un camino Euleriano en la gráfica resultante.
Lo que se tiene que hacer en los PASOS 2 a través de 4 es convertir una gráfica no Euleriana en
una gráfica Euleriana agregando arcos a la gráfica. Esto es equivalente a hacer que el cartero
camine de arriba abajo en la misma calle.
En la gráfica que se muestra, hay cuatro vértices impares, b, e, f, y g. Hay tres CONJUNTOS de
parejas: {b & e, f & g}; {b & f, e & g}; y {b & g, f & e}.
El CONJUNTO más barato de pares es {b & f, e & g} por lo que se repiten los arcos ba, af, y eg
en la gráfica.
La nueva gráfica es Euleriana y ahora se puede usar el algoritmo de Fleury para encontrar un
camino Euleriano en la red.
43
7 7
a b a b
9 9
7
2 6 c 2 2 6 c
8 7 8 7
f g f g
4 4
4 d 4 4 d
12 12
5 5
e e
44