4 votos

Algoritmo para encontrar la ruta más corta neta de valores a través de los nodos

Tengo un grafo no dirigido a $G = (V, E)$ con nodos $V$ y los bordes $E$. Cada nodo $v$ tiene asociado un número de $n_v \in \mathbf{Z}$

Vamos a definir para cualquier par de nodos de $v, w \in V$ conectados por una arista $e \in E$, que a la red en el nodo $v$ con el nodo $w$ significa que establecemos $n_v = 0$ y establezca $n_w = n_w + n_v$. También definimos que el coste de una operación de compensación es $|n_v|f(e) \geq 0$ donde $f : E \rightarrow[0,\infty)$ es una función que describe el costo unitario de compensación de saldos entre el $v, w$.

Como un ejemplo:

enter image description here

En la imagen de arriba, los grandes números en cada nodo $v$ representa a $n_v$, y el de los números pequeños a lo largo de cada vértice $e$ representa a $f(e)$.

La Pregunta

Sólo por la compensación de los nodos, deseo hacer nodo $Z$ (verde) el único no-cero nodo. También quiero este hecho a un costo mínimo.

¿Alguien sabe de un algoritmo que hace esto a un costo mínimo?

En el ejemplo anterior, debemos neto nodo $A$ $C$ (con un costo de $|-2|\times1$) y $B$ $C$ (con un costo de $|-3|\times1$). Todos los nodos aparte de $Z$ entonces $0$, con un costo total de $5$.

La motivación

El uso de una aplicación para la motivación, imaginen que son una obra de caridad la distribución de la medicina a través de las ciudades en un país con un brote viral. La situación está evolucionando rápidamente ya que el virus se propaga o como la gente a estar mejor, y por lo que algunas ciudades pueden encontrar que tienen una escasez de medicina, mientras que otros tienen exceso de medicamento.

La situación puede verse como:

enter image description here

Tenemos que pasar de la medicina, desde donde hay un excedente de donde hay una escasez. La medicina puede transportarse de una ciudad a otra a través de la interconexión de carreteras. Hay un costo de transporte que participan en el transporte de cada unidad de medicamento. Equivalentemente, podemos mover a la gente de una ciudad hospital a otro (se supone el mismo coste del transporte como la medicina para la simplicidad, es decir, el grafo no dirigido caso).

Queremos asegurar que todas las ciudades tienen ni un superávit ni una escasez de la medicina. Cualquier excedente debe ser trasladado de nuevo al depósito. La escasez también debe ser trasladado de nuevo al depósito (esto representa el escenario cuando necesitamos crear y distribuir la nueva medicina de la medicina depot).

0voto

Irvan Puntos 1394

Parece ser resueltos de inmediato por transformándolo en un min costo max problema de flujo (con múltiples fuentes y sumideros). En primer lugar, calcular la suma de todos los nodos de valores --- esto va a ser el nodo Z el valor final (el valor final de todos los otros nodos son, por definición, 0). Para un nodo, considere la posibilidad de la diferencia entre el valor final y el valor inicial -- si el valor inicial es mayor, usted necesita para mover algo de su contenido, de lo contrario recibirá algunas cosas de otros nodos. Por lo tanto, para el caso anterior, puede ser tratada como uno de los múltiples fuentes, y el último caso es tratado como uno más de los múltiples receptores.

Cada borde tendrá capacidad infinita y tiene un costo igual a $f(e)$. El costo de la min-costo max-flow de este gráfico es exactamente el coste mínimo requerido.

Tenga en cuenta que esto funciona incluso si hay bordes con valor negativo, pero los ciclos negativos resultará en el algoritmo de trabajo de forma incorrecta.

EDIT: ups, no leer los comentarios.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X