Flujo de red y gráfico (3)

A lo largo de dos artículos, presentamos el modelo de flujo de red de costo mínimo y el algoritmo para resolverlo. Hoy presentamos los casos de aplicación práctica del modelo de flujo de red y proponemos algoritmos de solución más eficientes para algunos escenarios especiales.

Portal: Red de Flujo y Gráfico (1) Red de Flujo y Gráfico (2)

1

Problemas de envío y distribución

El problema del transporte es un modelo especial de flujo de red de costo mínimo donde cada nodo es un nodo de suministro puro (todos los arcos apuntan hacia adentro) o un nodo de demanda pura (todos los arcos apuntan hacia adentro).

Su forma estándar se puede expresar como:

da8bdff5a5fe6bca57ffc22c23e1a640.png

Para dar un ejemplo cercano a la realidad, el problema de la movilización y el transporte naval .

El programa de transferencia de oficiales del Cuerpo Naval de los EE. UU. es un verdadero problema de transporte masivo. En tiempos extraordinarios, miles de oficiales y soldados serán trasladados de sus puestos diarios o dejados en sus posiciones originales. Sin embargo, no todos los oficiales cumplen con los requisitos de asignación en términos de rango, experiencia o capacitación recibida. La selección de transferencia se puede representar como el gráfico virtual dirigido a continuación. Un nodo de suministro representa un grupo de oficiales que se encuentran actualmente en la misma ubicación y pueden cumplir con los requisitos de la asignación. Por ejemplo, el primer nodo representa un capitán que está capacitado como oficial de inteligencia, el nodo de demanda representa la demanda de oficiales con calificaciones específicas en un área activa durante un período extraordinario, por ejemplo, el nodo 2 representa la necesidad de uno o más oficiales que sirven como oficiales de enlace para el gobierno local.

96db2273be8ee8a522381683eb9ce114.png

Existe un arco entre dos nodos cuando el funcionario representado por un nodo de oferta está calificado para ocupar el puesto correspondiente a un nodo de demanda. Por lo tanto, el Oficial de Distrito está conectado con el Oficial de Enlace del Gobierno Local. Para los oficiales en cualquier nodo de origen, puede haber múltiples asignaciones factibles, por ejemplo, el oficial de asuntos también puede ser el comunicador de la primera unidad.

La primera prioridad de la Marina es llenar todos los puestos que necesita, pero en realidad siempre quedarán algunos puestos que no se pueden llenar. En este punto representamos la posibilidad de no poder cubrir un puesto con un nodo de suministro artificial conectado a todas las demandas, y el alto costo en su arco se utiliza en la función objetivo como penalización por no poder cubrir un puesto . Una vez que se han cumplido tantos requisitos como sea posible, la segunda consideración es minimizar la variación. Es decir, intente asignar oficiales a las mismas unidades que estaban antes de la transferencia, o al menos asignarlos a unidades adyacentes minimizando los costos totales de viaje.

El problema del movimiento naval se reduce a su forma estándar utilizando los siguientes conceptos.

0542621ae3c2d9ebc2512e6ab84b6c93.png

El problema de asignación es otro tipo especial de problema de flujo de red de costo mínimo, que se utiliza para obtener el emparejamiento o coincidencia óptimo entre objetos en dos conjuntos diferentes.

El problema de asignación se modela con variables de decisión discretas:

2c4dcb759e6a8df723068159992bbf55.png

Denotando el conjunto de asignaciones factibles (i, j) con A, podemos formular el modelo de asignación lineal como un problema de flujo bidireccional:

4469b927ce15f184508fed87e14da025.png

El primer conjunto de ecuaciones de restricción garantiza que cada i se asigne exactamente una vez al sumar todas las posibles asignaciones j; el segundo conjunto de ecuaciones de restricción hace lo mismo para garantizar que cada j se asigne exactamente una vez.

La fórmula es un problema de programación lineal entera (ILP) , y las variables de decisión solo pueden tomar valores discretos de 0 o 1. Pero encontraremos que la discreción puede ignorarse al calcular la solución óptima.

Para dar un ejemplo real, problema de asignación de CAM .

Un sistema de fabricación asistida por computadora (CAM) automatiza los trabajos, cada uno de los cuales consta de una serie de operaciones de mecanizado y ensamblaje requeridas, a través de una estación de trabajo de fábrica controlada por computadora. Por caso, la misma operación se puede realizar en varios puestos de trabajo diferentes. Por lo tanto, el sistema de control de la computadora debe tomar las decisiones de operación correspondientes. Cada vez que se completa un determinado paso de un trabajo, el sistema debe seleccionar una de varias estaciones de trabajo que puedan realizar su próxima operación para realizar el trabajo. Una forma casi óptima de lograr esta decisión de control es resolver periódicamente el modelo de asignación. A modo ilustrativo, la siguiente tabla supone que hay 8 trabajos que están esperando ser trasladados a la siguiente estación de trabajo o que completarán la operación actual en los próximos 5 minutos. Al mismo tiempo, la tabla también enumera 10 estaciones de trabajo j que pueden realizar el trabajo. Las entradas en la tabla representan: tiempo para transportar a la estación + tiempo para esperar a que la estación se vacíe + tiempo para procesar operaciones en la estación. Es decir, el menor tiempo que le asignan el trabajo i al j. Los datos faltantes representan asignaciones inviables.

9fc366c0c9c0c2b0f0b23a03b6357f27.png

Sea el conjunto A los pares factibles (i,j) y cij el tiempo en la tabla. El problema anterior se puede transformar en la asignación de trabajo a las estaciones de trabajo de manera que se minimice el tiempo total. Dado que hay más estaciones de trabajo que trabajos, es necesario introducir pseudomiembros para resolver este problema.

Si los tamaños de los dos conjuntos que deben emparejarse en el problema de asignación son inconsistentes, el más pequeño puede expandirse usando pseudo-miembros. Estos pseudo-objetos se pueden asignar a todos los miembros de otra colección sin coste alguno.

En la aplicación CAM, se introduce el pseudo-trabajo i=9,10, luego su forma estándar se puede expresar como:

38024d5c8163e7b0d6eadfed75a6c84f.png

Para resolver este problema, puede utilizar los algoritmos mencionados en las dos secciones anteriores (algoritmo del círculo de eliminación, método del círculo simple), o puede utilizar cualquier algoritmo de programación lineal (método simplex, método del punto interior, método dual). Pero para este tipo de problema de asignación, tenemos un algoritmo más eficiente para resolverlo: el Algoritmo húngaro (Algoritmo húngaro)

2

algoritmo húngaro

Primero da los pasos del algoritmo directamente:

35c60769e26bc2c9417e4f31edf093b4.png

Tomemos un ejemplo para digerir este algoritmo. La siguiente tabla muestra el costo/peso que cuatro objetos del conjunto fuente I={1,2,3,4} necesitan emparejar para hundir objetos J={5,6,7,8}:

59f9a55e21b1af42f167db6edf32d7b9.png

Inicialización, primero calcule el valor dual del conjunto fuente:

9c7eb0ad1b79fdf02b9690a1f2b729bc.png

Luego calcule la solución dual agrupada:

b703722b4e3c9d792abceebc34fa84ac.png

Calcule la reducción del costo marginal:

645fadb00f8d5513b3e4f32573f0639c.png

Luego construye el subgrafo igual:

56ecb1bc1048fa76a16aea8618284c38.png

Entrando en la desexpansión, primero, la raíz i=1 marcada como "par" se asigna a los j=5 no asignados y no marcados, y (1,5) se suma al conjunto solución; luego la raíz i=2 de " even" se asigna a j=6, y para la raíz i=4 se asigna a j=7. Como se asigna 5, no se asigna la raíz i=3. Obtuve (la línea roja gruesa significa asignado):

ffcbfc39726d92eed2b36011f07f098d.png

4597564a667e5954bd798333ef922194.png

Luego, el árbol crece, dejando solo el nodo "par" i=3, apuntando al nodo asignado pero sin marcar j=5. Por lo tanto, inserte (3,5) y (1,5) asignados a j=5 en el árbol, marque j=5 como "impar" e i=1 como "par", y obtenga (la línea punteada indica que está incluido en el árbol):

ba09502ca11ae90d0f7cbba75e50806d.png

Vuelva al paso 1, pero esta vez no hay una etiqueta "par" para el nodo no asignado ni etiquetado. Por lo tanto, vaya al paso 2, y no hay ningún arco que satisfaga la condición, vaya al paso 3.

A es el gráfico completo desde el conjunto fuente hasta el receptor = {(1,5),(1,6),(1,7),(1,8),(2,5),(2,6),.. ,(4,7),(4,8)}, por definición,

dd16f37add116d70e56c31141953b274.png

Luego actualice el valor dual y la matriz:

db9bc9f7d56e9919ecdfa0a520d2ceb3.png

Actualice el subgráfico de igualdad (el verde es el borde nuevo):

dd403cfbaf8406d1ee3505b9648a0efc.png

Luego regrese al paso 1, el nodo 5 ha sido marcado, por lo que no cumple con la condición de "no marcado"; el nodo 6 no ha sido asignado y no cumple con la condición de "no asignado"; entonces ingrese el paso 2, (3, 6) cumple las condiciones, proceda Crecimiento del árbol y ruta de registro (3,6), (2,6):

caf60d07ec30ef9b1882120cf6440063.png

Luego regrese al paso 1, si no se cumplen las condiciones, vaya al paso 2 nuevamente, registre la ruta (2,7)(4,7) y obtenga:

a5da358ca4f98d851d7635d55e2a998a.png

Vuelva al paso 1, (4, 8) cumpla las condiciones y realice la expansión del conjunto de soluciones:

32bc8464309ed5ef6171807d965c671e.png

Hasta ahora, la iteración termina. ¡Se ha encontrado la solución óptima!

Supongo que te gusta

Origin blog.csdn.net/qq_27388259/article/details/129222763
Recomendado
Clasificación