Está en la página 1de 19

Algoritmo de transporte Se denomina algoritmo a un grupo finito de

operaciones organizadas de manera lógica y ordenada que permite


solucionar un determinado problema. Se trata de una serie de
instrucciones o reglas establecidas que, por medio de una sucesión de
pasos, permiten arribar a un resultado o solución. El modelo de
algoritmo de transporte trata situaciones de envío de productos de
lugares llamados puntos origen (fuentes de abastecimiento) a los puntos
destino (fuentes de consumo), siendo su objetivo, determinar las
cantidades óptimas de envío de las fuentes de abastecimiento a las
fuentes de consumo que minimicen el costo total del transporte, al
mismo tiempo que satisfagan tanto los límites de la oferta como los
requerimientos de la demanda. El algoritmo de transporte organiza los
cálculos en una forma más cómoda aprovechando la ventaja de la
estructura especial del modelo de transporte. Pare esto sigue los
mismos pasos que el método simplex, sin embargo en lugar de usar la
tabla simplex normal se aprovecha la ventaja de la estructura especial
del modelo de transporte para organizar los cálculos en una forma más
cómoda. Se debe agregar que el algoritmo especial de transporte fue
desarrollado por primera vez cuando la norma eran los cálculos a mano
y se necesitaba de soluciones con método abreviado. el algoritmo de
transporte se basa en la hipótesis que el modelo esta balanceado y eso
quiere decir que la demanda total es igual a la oferta total. Si el modelo
está desbalanceado siempre se podrá aumentar con una fuente ficticia
o destino ficticio para restaurar el equilibrio o balance. Los pasos del
algoritmo de transporte son exactamente iguales a los del algoritmo
simplex. 1. En el primer paso se determina una solución básica factible
de inicio que nos ayude a proseguir en el paso dos. 2. En el segundo
paso se usa la condición de optimalidad del método simplex para
determinar la variable de entrada entre todas las variables básicas.
Detenerse si se satisface. 3. En el tercer paso se usa la condición de
factibilidad del método simplex para determinar la variable de salida y
así obtener la nueva solución y posteriormente regresar al paso dos.
2. Problema de transporte: Consiste en decidir cuántas unidades
trasladar desde ciertos puntos de origen (platas, ciudades, etc.) a ciertos
puntos de destino (centros de distribución, ciudades, etc.) de modo de
minimizar los costos de transporte, dada la oferta y demanda en dichos
puntos. Se suponen conocidos los costos unitarios de transporte, los
requerimientos de demanda y la oferta disponible. Los principales
objetivos de un modelo de transporte son la satisfacción de todos los
requerimientos establecidos por los destinos y claro está la
minimización de los costos relacionados con el plan determinado por las
rutas escogidas. Cualquier modelo de transporte se compone de
unidades de un bien a distribuir, orígenes, destinos, recursos en el
origen, demandas en los destinos y costos de distribución por unidad.
Adicionalmente, se tienen varios supuestos: 1. Supuesto de
requerimientos: cada origen tiene un suministro fijo de unidades que se
deben distribuir por completo entre los destinos. 2. Supuesto de costo:
el costo de distribuir unidades de un origen a un destino cualquiera es
directamente proporcional al número de unidades distribuidas. 3.
Propiedad de soluciones factibles: un problema de transporte tiene
soluciones factibles sólo si la sumatoria de recursos en los m orígenes
es igual a la sumatoria de demandas en los destinos. 4. Propiedad de
soluciones enteras: En los casos en los que tanto los recursos como las
demandas toman un valor entero, todas las variables básicas
(asignaciones), de cualquiera de las soluciones básicas factibles
(inclusive la solución óptima), asumen también valores enteros. Lo
primero que se debe hacer es formular el problema en términos de
programación lineal para esto se necesita identificar las actividades y
los requerimientos del problema para de esta forma formularlo como un
problema de programación lineal. Después de formular el problema, el
siguiente paso es obtener una solución básica factible, la cual se puede
obtener a partir de cualquiera de los 3 criterios siguientes:
3. 1. Regla de la esquina noroeste. 2. Método de la ruta preferente. 3.
Método de aproximación de Vogel. Regla de la esquina noroeste: La
primera elección X11, es decir, se inicia la asignación por la esquina
noroeste de tabla. Luego se desplaza a la columna de la derecha si
todavía quedan recursos en ese origen. De lo contrario se mueve al
reglo debajo hasta realizar todas las asignaciones. Método de la ruta
preferente: Se fundamenta en la asignación a partir del costo mínimo de
distribuir una unidad. Primero se identifica este costo se realiza la
asignación de recursos máxima posible y luego se identifica el siguiente
costo menor realizando el mismo procedimiento hasta realizar todas las
asignaciones. Método de asignación de Vogel: Para cada renglón y
columna, se calcula su diferencia, que se define como la diferencia
aritmética entre el costo unitario más pequeño y el costo menor que le
sigue en ese renglón o columna. En el renglón o columna con la mayor
diferencia, se le asigna al menor costo unitario. Los empates se pueden
romper de manera arbitraria.

ALGORITMO PARA LA RUTA MAS CORTA (GRUPO 8)


Algoritmo de la ruta más corta:

Es un algoritmo de búsqueda grafica que resuelve solo la fuente más


corta de un problema del camino para un gráfico con los negativos de
bordes costos de ruta, produciendo un camino más corto al árbol. Este
algoritmo se utiliza a menudo en la ruta y como una subrutina en otros
algoritmos de grafos.
Para una fuente dada de vértice (nodo) en el gráfico, el algoritmo
encuentra la ruta con menor coste (es decir, el camino más corto) entre
el vértice y cualquier otro vértice.

Por ejemplo, si los vértices de una gráfica representan las ciudades y


los costos de borde de ruta representan conducir distancias entre pares
de ciudades conectadas por un camino directo, el algoritmo de dijkstra
se puede utilizar para encontrar la ruta más corta entre una ciudad y
todas las demás ciudades. Como resultado, el camino más corto
primera vez ampliamente utilizado en la red los protocolos de
enrutamiento, en especial IS-IS y OSPF (Open ShortestPathFirst).

Modelo de la ruta más corta:


El problema de la ruta más corta incluye un juego de nodos conectados
donde solo un nodo es considerado como el origen y solo un nodo es
considerado como el nodo destino. Su objetivo es determinar un camino
de conexiones que minimizan la distancia total del origen al destino. El
problema se resuelve por el “algoritmo de etiquetado”. La esencia del
procedimiento es que analiza toda la red a partir del origen; identifica de
manera sucesiva la ruta más corta a cada uno de los nodos en orden
ascendente de sus distancias (más cortas), desde el origen; el problema
queda resuelto en el momento de llegar al nodo destino.

Definición del problema:


*- se tiene n nodos, partiendo del nodo inicial1 y terminando en el nodo
final n.
*- arcos bi-direccionales conectan los nodos con distancias mayores
que cero.
*- se desea encontrar la ruta de mínima distancia que conecta el nodo
1 con el nodo n.
Por medio de la aplicación del algoritmo de este problema podemos
conocer la menor distancia entre un nodo origen y un nodo destino.

Pasos a seguir:
1. Elaborar un cuadro con todos los nodos y los ramales que salen de
él.
2. Partiendo del origen, debemos encontrar el nodo más cercano a él.
3. Anular todos los ramales que entren al nodo más cercano elegido.
4. Comenzando en el origen se debe encontrar el nodo más cercano
a él, por intermedio del nodo ya elegido y volver al tercer paso hasta
llegar al destino.

Ejemplo del árbol de expansión mínima:


Un árbol de expansión mínima es aquel que conecta todos los nodos
dentro de una red que está en una distancia mínima y que no contiene
un ciclo.

Pasos para elaborar un árbol de expansión mínima:


· Seleccionar cualquier nodo de la red o indicando según el
problema
· Colocar este nodo al más cercano que minimice la distancia y
proseguir considerando todos los nodos que estén conectados,
escogiendo de igual manera el que tenga la mínima distancia, hasta
incluir todos los nodos. Si los nodos son igual valor se selecciona uno
arbitrariamente, y esto quiere decir que puede haber más de una
solución óptima.

Características:
*- determina el camino más corto dado un vértice origen.
*- utiliza un tipo de estructura de cola llamado cola de prioridad.

Origen del algoritmo de dijkstra:


Este algoritmo también llamado algoritmo de caminos mínimos, es un
algoritmo para la determinar del camino más corto dado un vértice
origen al resto de vértices en un grafo con pesos en cada arista. Su
nombre se refiere a Edsger Dijkstra, quien lo describió por primera vez
en 1959.
La idea subyacente en este algoritmoconsiste en ir explorando todos los
caminos más cortos que parten del vértice origen y que llevan a todos
los demás vértices ; cuando se obtiene el camino más corto desde el
vértice origen, al resto del vértices que componen el grafo, el algoritmo
se detiene. El algoritmo es una especialización de la búsqueda de
costos uniforme, y como tal, no funciona en grafos con aristas de costo
negativo(al elegir siempre el nodo con distancia menor, pueden quedar
excluidos de la búsqueda de nodos que en próximas iteraciones
bajarían el costo general del camino al pasar por una arista con costo
negativo).

Ruta más corta – solución por el algoritmo de Dijkstra:


Para solucionar el problema de la ruta más corta entre dos nodos de un
grafo se puede utilizar el algoritmo de Dijkstra, el cual sigue el siguiente
procedimiento para calcular la ruta más corta desde el nodo origen
hasta cada uno de los nodos del grafo:
· Crear una lista de nodos para almacenar los nodos con distancia
mínima ya calculada
· Crear una cola de prioridad para los nodos pendientes de evaluar
· Inserta el nodo de origen a la cola de prioridad
· Mientras que haya nodos en la cola de prioridad

ºextrae el primer nodo de la cola de prioridad (tmp)


ºagrega el nodo tmp a la lista de nodos ya calculados
ºgenera una lista de los nodos conectados al nodo tmp que no estén en
la lista de ya calculados
º Para cada nodo de la lista (nod)

▪ calcula la distancia al origen con la distancia entre tmp y nod mas la


distancia calculada entre el origen y tmp.
▪ Si el nodo nodestá en la cola de prioridad lo agrega
▪ Si el nodo nod ya está en la cola de prioridad y la distancia con la
que está guardado en la cola es menor, lo deja como esta y si no, lo
actualiza con la distancia calculada.

º Fin
· Fin

El algoritmo de Bellman-Ford:

Este algoritmo es una estructura básica muy parecido al algoritmo de


Dijkstra, pero en vez de seleccionar vorazmente el nodo de peso mínimo
aun sin procesar para relajarlo, simplemente relaja todas las aristas, y
lo hace │V│-1 veces, siendo │V│ el número de vértices en el grafo. Las
repeticiones permiten a las distancias mínimas recorrer el árbol, ya que
en la ausencia de ciclos negativos, el camino más corto solo visita cada
vértice una vez. A diferencia de la solución voraz, la cual depende de la
suposición de que los pasos sean positivos, esta solución se aproxima
más al caso general.

Existen dos versiones:


· Versión no optimatizada para grafos con ciclos negativos, cuyo
coste de tiempo es O(VE)
· Versión optimatizada para grafos con aristas de peso negativo,
pero en el grafo no existen ciclos de coste negativo, cuyo coste de
tiempo, es también O (VE).

Aplicaciones de encaminamiento:
Una variante distribuida al algoritmo del Bellman-Ford se usa en
protocolos de encaminamiento basados en vector de distancias, por
ejemplo el protocolo de encaminamiento de información (RIP). El
algoritmo es distribuido porque envuelve unas series de nodos (routers)
dentro de un sistema autónomo (AS), un conjunto de redes y
dispositivos router IP administrados típicamente por un Proveedor de
Servicios de Internet (ISP). Se compone de los siguientes pasos:
1. Cada nodo calcula la distancia entre el mismo y todos los demás
dentro de un AS y almacena esta información en una tabla.
2. Cada nodo envía su tabla a todos los nodos vecinos.
3. Cuando un nodo recibe las tablas de distancias de sus vecinos, este
calcula la ruta más corta a los demás nodos y actualiza su tabla para
reflejar los cambios.

Las desventajas principales del algoritmo de Bellman-Ford en este


ajuste son:
· No es escala bien.
· los cambios en la topología de red no se reflejan rápidamente ya
que las actualizaciones se distribuyen nodo por nodo.
· Contando hasta el infinito (si un fallo de enlace o nodo hace que
un nodo sea inalcanzable desde un conjunto de otros nodos, estos
pueden estar siempre aumentando gradualmente sus cálculos de
distancia a él, y mientras tanto puede haber bucles de enrutamiento).

Red de flujo
Ir a la navegaciónIr a la búsqueda
En teoría de grafos, una red de flujo es un grafo dirigido donde existen
dos vértices especiales, uno llamado fuente, al que se le asocia un flujo
positivo y otro llamado sumidero que tiene un flujo negativo y a cada
arista se le asocia cierta capacidad positiva. En cada vértice diferente a
los dos especiales se mantiene la ley de corrientes de Kirchoff, en donde
la suma de flujos entrantes a un vértice debe ser igual a la suma de
flujos que salen de él (propiedad de conservación del flujo {\displaystyle
\sum f_{i}=\sum f_{o}} {\displaystyle \sum f_{i}=\sum f_{o}}). Puede ser
utilizada para modelar el tráfico en un sistema de autopistas, fluidos
viajando en tuberías, corrientes eléctricas en circuitos eléctricos o
sistemas similares por lo que viaje algo entre nodos. Uno de los usos
principales de los llamados algoritmos de flujo es encontrar el flujo
máximo de la fuente al sumidero, siempre cumpliendo unas
determinadas restricciones.

Índice
1 Descripción matemática
2 Algoritmo de flujo máximo
2.1 Restricciones
2.2 Características principales
3 Referencias
4 Bibliografía
Descripción matemática
Una red de flujo es un grafo dirigido {\displaystyle G=(V,E)} {\displaystyle
G=(V,E)} en donde cada arco {\displaystyle (u,v)\in E} {\displaystyle
(u,v)\in E} tiene una capacidad no negativa {\displaystyle c(u,v)\geq 0}
{\displaystyle c(u,v)\geq 0}.

Se distinguen dos vértices: la fuente s y el destino t.

Se supone que cada vértice se encuentra en alguna ruta de s a t.

Un flujo en G es una función {\displaystyle f:V\times V\mapsto R}


{\displaystyle f:V\times V\mapsto R} tal que

Ejemplo de Red de flujo


Restricción de capacidad: {\displaystyle \forall \quad u,v\in V,\quad
f(u,v)\leq c(u,v)} {\displaystyle \forall \quad u,v\in V,\quad f(u,v)\leq
c(u,v)}
Simetría: {\displaystyle f(u,v)=-f(v,u)\,} {\displaystyle f(u,v)=-f(v,u)\,}
Conservación: {\displaystyle \forall u\in V-\left\{s,t\right\}\quad \sum
_{v\in V}f(u,v)=0} {\displaystyle \forall u\in V-\left\{s,t\right\}\quad \sum
_{v\in V}f(u,v)=0}
El valor del flujo es {\displaystyle |f|=\sum _{v\in V}f(s,v)} {\displaystyle
|f|=\sum _{v\in V}f(s,v)}

El problema del flujo máximo trata de maximizar este flujo.

Algoritmo de flujo máximo


Tenemos el conocido problema de flujo máximo o maximal: ¿cuál es la
tasa mayor a la cual el material puede ser transportado de la fuente al
sumidero sin violar ninguna restricción de capacidad?

En otras palabras, el problema consiste en determinar la máxima


capacidad de flujo que puede ingresar a través de la fuente y salir por
el nodo de destino.

El procedimiento para obtener el flujo máximo de una red, consiste en


seleccionar repetidas veces cualquier trayectoria de la fuente al destino
y asignar el flujo máximo posible en esa trayectoria.

Capacidad residual: es la capacidad adicional de flujo que un arco


puede llevar:
{\displaystyle c_{f}(u,v)=c(u,v)-f(u,v)\,} {\displaystyle c_{f}(u,v)=c(u,v)-
f(u,v)\,}
Dada una red de flujo máximo, plantee la red residual asociada.
Encuentre la trayectoria de la fuente al destino con capacidad de flujo
estrictamente positivo (si no existe alguno, es por que se ha encontrado
el óptimo).
Examine estas trayectorias para encontrar la rama o arco con la menor
capacidad de flujo restante e incremente en éste valor, la capacidad del
flujo en sentido contrario.
Determine todas las trayectorias estrictamente positivas, hasta que no
se permita flujo del nodo a un nodo destino.
Podemos, mediante el Algoritmo de Ford-Fulkerson, encontrar el flujo
máximo de una red.

Este algoritmo es un método iterativo, el cual, empieza con un flujo nulo


y en cada iteración se va obteniendo un valor del flujo que va
aumentando el camino, hasta que no se pueda aumentar más. Depende
de tres puntos vitales:

Red residual: camino de la fuente al sumidero, donde cada una de las


aristas tiene un flujo residual mayor que cero. Siendo el flujo residual, el
flujo que se puede obtener en una arista una vez que haya pasado un
flujo por ella.
Aumento de camino: se basa en ir aumentando el camino, hasta
alcanzar el máximo (capacidad residual, definido anteriormente).
Corte en redes de flujo: consiste simplemente en realizar una partición
del conjunto de vértices en dos subconjuntos.1
Restricciones
Las restricciones de capacidad mencionadas son las siguientes:

Los valores de flujo existentes en cada arista no pueden sobrepasar los


valores máximos.
La suma de las entradas de cada nodo interior tiene que ser igual a la
suma de sus salidas.
Características principales
El flujo va a ser siempre positivo y con unidades enteras.
El flujo que entra en un nodo es igual al que sale.
El flujo que atraviesa un arco nunca será mayor que la capacidad, solo
puede ser menor o igual que ella.
Ejemplo del Problema del Flujo Máximo en Programación Entera
resuelto con Solver
por GEO Tutoriales el 29/12/2014 en Programación Entera 4

Este tipo de problemas (Problema del Flujo Máximo) es similar al


Problema de Ruta más Corta, pero ahora se busca determinar el flujo
máximo entre un nodo fuente y un nodo destino, los que están
enlazados a través de una red, con arcos con capacidad finita, tal como
se presenta en la siguiente figura. Notar que los números asignados a
cada uno de los arcos representan los flujos máximos o capacidades
correspondientes a cada arco.

ruta-flujo-maximo

Problema del Flujo Máximo


Desde el punto de vista de la Programación Entera podemos plantear
la situación de la siguiente forma:

Variables de Decisión:

variables-flujo-maximo

Función Objetivo: Maximizar las unidades que salen del nodo de origen
(1) a los que éste conecta (2, 4 y 5) o alternativamente maximizar las
unidades que llegan al nodo de destino (8) desde los que conectan a él
(3, 6 y 7).

funcion-flujo-maximo
Restricciones:

Restricciones de Flujo Máximo: La cantidad de unidades que sale de


cada nodo de origen a un nodo de destino no puede superar la
capacidad detallada en el arco, por ejemplo, del nodo 1 al nodo 2 sólo
se pueden enviar 7 unidades.

restricciones-flujo-maximo
Restricciones de Balance de Flujo en los Nodos: Debe existir un
equilibrio entre la cantidad de unidades que llega a un nodo y las que
de éste salen, por ejemplo el número de unidades que se envía desde
el nodo 1 al 4 (si es que así fuese el caso) debe ser igual a lo que desde
el nodo 4 se envían al nodo 3 y 6.
balance-flujo-maximo

No Negatividad e Integralidad: Las variables de decisión de decisión


deben cumplir las condiciones de no negatividad. Adicionalmente
exigiremos que éstas adopten valores enteros aún cuando se podría
flexibilizar dicha situación lo que daría origen a un problema de
Programación Lineal.

no-negatividad-flujo-maximo
Luego de implementar el modelo de optimización anterior con Solver se
alcanza la siguiente solución óptima y valor óptimo:

solucion-flujo-maximo
Notar que el flujo máximo de unidades que puede llegar al nodo de
destino son 32 unidades (valor óptimo) donde cualquiera de las
funciones objetivos propuestas proporciona el mismo resultado (en
particular hemos utilizado la primera de ellas). Los valores de las celdas
en color amarillo representan la solución óptima, es decir, la cantidad
de unidades que fluyen en cada combinación de un nodo origen destino.

FLUJO MÁXIMO
Existe un flujo que viaja desde un único lugar de origen hacia un único
lugar de destino a través de arcos que conectan nodos intermediarios.
Los arcos tienen una capacidad máxima de flujo y se trata de enviar
desde la fuente al destina la mayor cantidad posible de flujo.

Hay problemas donde lo importante es la cantidad de flujo que pasa a


través de la red como por ejemplo: en las líneas de oleoductos, redes
eléctricas o de transmisión de datos. Por esta razón en dichos
problemas se determina el flujo máximo que pasa a través de una red.

Definiciones básicas

Flujo: Circulación de unidades homogéneas de un lugar a otro.

Capacidad de flujo: es la capacidad de unidades que pueden entrar por


el nodo fuente y salir por el nodo destino.

Origen o fuente de flujo: nodo por el cual el flujo ingresa.

Destino o Sumidero de flujo: nodo por el cual el flujo sale.

Capacidades residuales: capacidades restantes unas vez que el flujo


pasa el arco.

Ford Fulkerson
Para la resolución de problemas de flujo máximo se requiere el uso del
método Ford Fulkerson. Este método propone buscar caminos en los
que se pueda aumentar el flujo hasta que se alcance el flujo máximo, la
idea es encontrar una ruta de penetración con un flujo positivo neto que
una los nodos de origen y destino.

El flujo es siempre positivo y con unidades enteras.


El flujo a través de un arco es menor o igual que la capacidad.
El flujo que entra en un nodo es igual al que sale de él.

Resolución de problema
Para resolver un problema de flujo máximo se debe seguir los siguientes
pasos:
Se identifica el nodo origen y destino.
Se parte desde el nodo de origen y se escoge el arco que posea mayor
flujo
Se identifica los nodos de transbordo.
Repetir como si el nodo intermediario fuera el nodo origen.
Se calcula "k" y las capacidades nuevas.
Dado el resultado se cambian las capacidades y se repite el mismo
procedimiento desde el inicio.

Formulario
Cij,ji =(Ci-K, Cj+K), donde:

C: capacidad
Ij: índices de los nodos
K: es el minimo flujo que pasa por el nodo, se calcula como k=
min(capacidades de la ruta).

Hallar el flujo máximo del siguiente problema:

Método Ford Fulkerson


El nodo de origen como se puede observar es el numero 1 de color
amarillo, y el nodo de destino es el numero 5 de color azul.

Se escoge desde el nodo de origen aquel flujo que sea el mayor, en


este caso es 30, y va dirigido al nodo numero 3.

Se identifica el nodo de transbordo como [30,1], 30 es la capacidad, y 1


es el nodo del cual proviene la capacidad y luego repetimos todo el
proceso, como si el nodo intermediario fuese el nodo de origen. Se tiene
como flujo mayor 20 del nodo numero 3 al nodo numero 5, con el nodo
de transbordo como [20,5].
Ahora que hemos llegado al nodo de destino, procedemos a calcular "k"
y las capacidades nuevas.

También podría gustarte