La ruta más corta sin intersección para un gráfico incrustado en un plano euclidiano (2D)


14

¿Qué algoritmo usaría para encontrar la ruta más corta de un gráfico, que está incrustado en un plano euclidiano, de modo que la ruta no contenga ninguna intersección propia (en la incrustación)?

Por ejemplo, en el gráfico a continuación, desea pasar de . Normalmente, un algoritmo como el algoritmo de Dijkstra produciría una secuencia como:(0 0,0 0)(-3,2)

[(0 0,0 0)3(0 0,3)2(1,2)4 4(-3,2)]=7 7+2.

Gráfico completo:

ingrese la descripción de la imagen aquí

Camino más corto:

ingrese la descripción de la imagen aquí

La ruta no corta más corta:

ingrese la descripción de la imagen aquí

Sin embargo, esta ruta se cruza en el plano euclidiano, por lo tanto, quiero un algoritmo que me dé la secuencia más corta que no se cruza, en este caso:

[(0 0,0 0)3(0 0,3)3(0 0,6 6)5 5(-3,2)]=11)

Esta ruta es más larga que la ruta más corta, pero es la ruta más corta sin intersección.

¿Existe un algoritmo (eficiente) que pueda hacer esto?

Fuentes TikZ


2
Buen problema! (+1) ¿Puedes decir algo sobre la aplicación o el contexto donde surge este problema? Estoy intrigado. (PD: en una nota separada: la forma obvia de salir de este enigma es ver si puede introducir un nuevo vértice para cada punto de intersección, es decir, cada punto donde un borde puede intersecar con otro borde. Sin embargo, me doy cuenta de eso para algunas / muchas aplicaciones esto podría no ser posible.)
DW

2
@DW, este soy yo reformulando el malvado problema de burro / pony de Babibu ; la aplicación es su algoritmo heurístico Euclidean TSP, no estoy exactamente seguro de cómo pretende usarlo, pero imagino que quiere saber si puede encontrar un camino entre dos puntos, cuando ya visitó varios otros (el recorrido óptimo de Euclidean TSP lo hará ser sin intersección). Y sí, si puede introducir nuevos nodos, sería genial, pero la pregunta es si no puede (y ofc no puede introducir nuevas ciudades para Euclidean TSP).
Realz Slaw

1
Permítanme intentar convertir el problema de existencia de ruta a 3SAT. Hacer un camino para cruzar dos señales sin cruzar dos caminos parece el mayor desafío.
John Dvorak

1
Sí. Me refería a resolver SAT a través de esto.
John Dvorak el

Respuestas:


11

Es NP-complete incluso decidir si existe alguna ruta.

Es claramente posible verificar que cualquier ruta dada sea una ruta válida en el gráfico dado. Por lo tanto, el problema de longitud limitada está en NP, y también su subconjunto, el problema de cualquier ruta.

Ahora, para probar la dureza NP del problema de cualquier ruta (y, por lo tanto, del problema de longitud limitada), reduzcamos el SAT-CNF a este problema:


La estructura global es una cuadrícula de piezas de alambre unidas por una columna de piezas de cláusula. La fórmula lógica es satisfactoria si existe una ruta no intersectada a través del gráfico.

Es imposible cruzar dos partes del camino, pero es necesario cruzar dos cables lógicos. Más bien, el flujo de ruta está estrictamente dado: un punto de conexión está dado por dos nodos. La secuencia obliga a los puntos de cable a través de los cuales pasa el camino. La lógica está representada por el nodo elegido. Se puede elegir cualquier ruta siempre que pase por todos los puntos de conexión.

En este diagrama, la ruta está representada por la curva roja y el flujo lógico está representado por los cables negros:

rejilla de cables a la izquierda, columna de piezas de la cláusula a la derecha.

Ahora construyamos cada componente.


El cableado utiliza tres mosaicos: el cruce, el punto de ramificación y el cable vertical. Comencemos con el más difícil:

La idea básica detrás del cruce es preparar un camino para cada par de puntos de cable y doblar los caminos posibles lo suficiente para que todos los pares, excepto los que codifican la misma lógica (caminos compatibles) se crucen entre sí. Por supuesto, no podemos decir que dos bordes paralelos se cruzan, sino que podemos introducir nodos adicionales de orden 2 para hacer que dos caminos se crucen.

Suponiendo que los caminos vienen de norte a oeste y de sur a este, podemos: recoger cada camino del norte con su camino compatible desde el este en una línea (algunos caminos incompatibles se cruzarán entre sí); cruzar cada par entre sí invirtiendo el orden de los pares; distribuir los caminos a sus puntos finales sur y oeste. Esto se explica mejor con un diagrama. Aquí, cada par de nodos representa un punto de conexión. Las rutas con el mismo código de color (que llevan la misma lógica) no se cruzan, las rutas con un código de color diferente sí:

representación gráfica de lo anterior

El punto de ramificación y el cable vertical funcionan igual, pero hay menos caminos para correlacionar:

dos pares de caminos son suficientes aquí.  El cable es esencialmente un punto de ramificación con la rama destruida

¬UN¬si

ingrese la descripción de la imagen aquí

Es posible generalizar esta reducción para codificar un árbol arbitrario de compuertas AND y OR ramificando el cable de lectura de manera diferente. En particular, SAT-CNF y SAT-DNF son posibles de reducir al problema de la ruta de no intersección de la manera descrita anteriormente.


Wow, bien hecho hombre. Todavía no lo he revisado, pero el trabajo que realizas es increíble.
Realz Slaw

OK, solo quiero resumir mi comprensión: usando el primer gadget, uno puede cruzar dos pares de rutas literales y mantener las rutas utilizadas. Por lo tanto, uno no tiene que preocuparse por la planaridad para diseñar los caminos (como lo hace el dispositivo xor en PlanarCircuitSat para los circuitos). Luego, utilizando el gadget final, uno puede crear cláusulas lógicas arbitrarias (ya no tiene que preocuparse por la planaridad). ¿Es esto correcto?
Realz Slaw

Esto parece correcto, pero debe asegurarse de dos cosas para un diseño general: que puede alimentar todos los dispositivos con una ruta NIP (esto siempre debería ser posible; si una ruta se atasca en el centro, puede introducir dispositivos de cable a juntar los extremos solitarios del camino) y que todos los caminos en el cable de lectura se crucen entre sí de tal manera que no sea posible revertir dentro del cable (me parece que está garantizado si no hay cláusulas verdaderas ( no cruza ningún literal) y si todas las cláusulas están en el exterior del circuito (en la misma cara, el inicio y el final lo están)).
John Dvorak

Asegurarse de que todos los caminos en el cable de lectura se crucen entre sí es fácil; si quiere estar seguro, simplemente bifurque en n caminos, luego, cruce todos de inmediato. Sin embargo, creo que esto nunca es necesario.
John Dvorak

1
Usé OpenOffice Draw para la estructura global, y [yEd] (www.yworks.com/products/yed) para el resto. ¿Debo editar eso en (con <sub>)?
John Dvorak

-1

El problema parece fecharse en Turan 1944. Esto parece un buen estudio de teoría y algoritmos, el número cruzado de gráficos: teoría y computación de Mutzel. Wikipedia tiene alguna información debajo del número cruzado de gráficos


1
Tal vez esto es mejor como comentario?
Juho

responde científicamente la pregunta básica "qué algoritmo
usarías

1
Si bien esto puede responder teóricamente la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
John Dvorak

Jan cita una referencia del meta de stackexchange. Si bien esa es una idea válida, el papel de las citas en ciencias / matemáticas es diferente de un sitio de consejos de programación ... [Es cierto que la referencia no está disponible para una respuesta más detallada] ... de todos modos, es bastante posible algo así como Jan Construction, aunque útil / valioso, ya está en la literatura y en la ciencia, es parte del proceso estándar / mejores prácticas para [intentar] ubicarlo ...
vzn
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.