Estrategia para encontrar la mejor ruta en Transporte Público sólo?

Encontrar rutas para un coche es bastante fácil: la tienda de un grafo ponderado de todas las carreteras y usted podría usar Djikstra del algoritmo [1]. Una ruta de autobús es menos evidente. Con un autobús que tiene que representar cosas como «espere 10 minutos para el siguiente autobús» o «caminar una cuadra a otra parada de autobús» y alimentar a las personas en su algoritmo.

No siempre es sencillo para los coches. En algunas ciudades, algunas carreteras son de una sola manera-sólo en la ciudad en la mañana, y de una forma sólo fuera de la ciudad en la noche. Algunos de los más avanzados GPSs saber cómo evitar ocupado rutas durante la hora pico.

¿Cómo se representan este tipo de tiempo-dependiente gráfico y encontrar una ruta? No hay necesidad de un modo demostrable solución óptima, si el viajero quería ser en el tiempo, se iba a comprar un coche. 😉

[1] Un maravilloso algoritmo para mencionar un ejemplo, porque todo el mundo ha oído hablar de ella, a pesar de Un* es una más probabilidades de elección para esta aplicación.

  • El tiempo no puede ser un factor, pero la ruta más directa a través de la distancia puede ser deseable, o por lo menos las transferencias. Otra cosa a considerar es el pie los caminos entre los terminales y el origen/destino.
InformationsquelleAutor joeforker | 2009-01-27

14 Kommentare

  1. 53

    He estado involucrado en el desarrollo de una journy planificador del sistema de Transporte Público de Estocolmo en Suecia. Se basa en Djikstra del algoritmo, pero con la terminación antes de cada nodo visitado en el sistema. Hoy en día cuando existen fiable coordenadas disponibles para cada parada, supongo que el* algoritmo sería la elección.

    Datos acerca de los próximos trafic fue extraída de varias bases de datos con regularidad y compilado en tablas de gran tamaño cargado en memoria de nuestra búsqueda de clúster de servidor.

    Una de las claves para un sucessfull algoritmo fue el uso de una ruta de la función de coste basada en los viajes y el tiempo de espera multiplicado por diferentes weightes. Conoce en suecia como «kresu»tiempo de estos ponderado de los tiempos se refleja en el hecho de que, por ejemplo, a un minuto del tiempo de espera es generalmente equivalente en el «inconveniente» a dos minutos de tiempo de viaje.

    KRESU Peso tabla

    • x1 – tiempo de Viaje
    • x2 – Caminando entre las paradas
    • x2 – Esperando en una parada de
      durante el viaje. Se detiene bajo techo,
      con tiendas, etc puede conseguir un poco
      bajar de peso y concurridas estaciones de un
      superior para ajustar el algoritmo.
    • El peso por el tiempo de espera en la primera parada es una función de la trafic de intensidad y puede ser de entre 0,5 a 3.

    Estructura de datos

    Área
    El nombre del área donde usted viaje puede empezar o terminar. Una Parada de Autobús que podría ser un área con dos Paradas. Una Estación más grande con varias plataformas podría ser un área con una parada para cada plataforma.
    Datos: Nombre, Deja en el área de

    Deja de
    Una matriz con todas las paradas de autobús, de tren y de metro. Tenga en cuenta que usted necesita generalmente de dos paradas, una para cada dirección, porque se necesita algo de tiempo para cruzar la calle o caminar a la otra plataforma.
    Datos: Nombre, Enlaces, Nodos

    Enlaces
    Una lista con otras paradas se puede llegar caminando desde la parada.
    Datos: Otra Parada, Tiempo de caminar a la otra Parada

    Líneas/Tours
    Usted tiene un número en el autobús y un destino. El autobús arranca en una parada y pasa varias paradas en su camino hacia el destino.
    Datos: Número, Nombre, Destino

    Nodos
    Generalmente, usted tiene un calendario con el que menos el tiempo para cuando debe estar en la primera y última parada de una Gira. Cada vez que un autobús/tren pasa una parada de agregar un nuevo nodo a la matriz. Esta tabla puede tener millones de valores por día.
    Datos: Línea/Tour, Parada, Hora de Llegada, Hora de Salida, margen de Error, el Siguiente Nodo en el Tour

    Búsqueda
    Matriz con el mismo tamaño de los Nodos de la matriz se utiliza para almacenar cómo llegó allí y el coste de la ruta.
    Datos: enlace directo con el Anterior Nodo (no se establece si el Nodo es no visitados), el Coste de la Ruta (infinito para los no visitados)

    • Que es muy bonito, no lo había pensado de no incluir las coordenadas de la ruta, lo que hace las cosas mucho más simples.
    • Sí, la creación de un heurístico función de la distancia desde el nodo actual al destino simplifica la optimización de mucho ya que Un* búsqueda algoritm automáticamente va a truncar el árbol para usted. Sin coordenadas, tuvimos que ser muy creativo el uso de las zonas y análisis de tráfico para optimizar la búsqueda.
    • Espero que (la distancia de destino * velocidad media) sería una buena medida para Un*, pero que no siempre se puede trabajar para el transporte público donde el piloto no se preocupan por la distancia recorrida.
  2. 13

    Lo que estamos hablando es más complicado que algo como los modelos matemáticos que se puede describir con simples estructuras de datos como gráficos y con una «simple» algoritmos como Djikstra del. Lo que están pidiendo es un más de un problema complejo como aquellos encontrados en el mundo de los sistemas automatizados de gestión de la logística.

    Una manera de pensar acerca de esto es que usted está pidiendo un problema de múltiples dimensiones, que usted necesita para ser capaz de calcular:

    1. Distancia de optimización de
    2. Optimización del tiempo de
    3. De optimización de ruta
    4. «Horizonte temporal» optimización (si es 5:25, y el autobús sólo se muestra a las 7:00, a elegir otra ruta).

    Habida cuenta de todas estas circunstancias, usted puede intentar hacer determinista de los modelos con complejo de múltiples capas de estructuras de datos. Por ejemplo, usted todavía puede utilizar un promedio ponderado de di-gráfico para representar el potencial existente en las rutas, donde cada nodo también contenía un autómata de estado finito que añade un sesgo de peso para una ruta en función de los valores de tiempo (de forma por el cruce de un nodo a las 5:25 de obtener un valor diferente de si la simulación se cruzó a las 7:00.)

    Sin embargo, creo que en este punto, usted va a encontrar con una simulación que es más y más complejo, que es muy probable que no proporciona un «gran» aproximación de rutas óptimas cuando el consejo es transferida en el mundo real. Resulta que el software y el modelado matemático y la simulación es el mejor de una débil herramienta a la hora de encontrarse con el mundo real caótico comportamientos y dinamismo.

    Mi sugerencia iba a utilizar una estrategia alternativa. Yo intente utilizar un algoritmo genético en el que el ADN de un individuo se calcula una ruta potencial, podría crear una función de aptitud que codifica los costes y los pesos de una manera más «fácil mantener la» tabla de búsqueda de la moda. Entonces yo iba a dejar que el Algoritmo Genético intento de unificar en un cerca de la solución óptima para una ruta de transporte público buscador. En los ordenadores modernos, una GA como este es, probablemente, va a realizar razonablemente bien, y por lo menos debe ser relativamente robusto en el mundo real dinamismo.

    Creo que la mayoría de los sistemas que hacer este tipo de cosas a tomar el «camino fácil» y, simplemente, hacer algo así como un A* algoritmo de búsqueda, o algo similar a un codicioso calculado el costo ponderado dígrafo a pie. La cosa a recordar es que los usuarios del transporte público no saben cuál es la ruta óptima sería ser, así, un 90% de la solución óptima es todavía va a ser una gran solución para el caso promedio.

    • Eso es impresionante. Usted tiene esta increíble modelo del sistema de transporte y a sus pilotos, y usted puede mostrar al usuario «Vamos a tener Sally, Phil, y Cuthbert tratar de llegar a donde ellos van.» El usuario mira la simulación, el enraizamiento de su personaje favorito. Sally y Phil encontrar en el autobús y tener hijos.
    • Como un aparte, la ruta finder para mi sistema de autobús local tiene diferentes algoritmos para minimizar su opción de tiempo de viaje, tiempo de caminar, o en los traslados en autobús.
    • Es demonstratably incorrecto decir que los modelos matemáticos no pueden controlar esta situación: véase Steven A. Lowe’s solución.
    • Espero que no te importa que me parece tu ADN+GA solución hilarante. +1 para el entretenimiento, -1 para el práctico. Por supuesto, los sistemas de tomar el «camino más fácil», que es la forma en que proporcionan el resultado en una cantidad de tiempo aceptable.
  3. 9

    Algunos puntos de datos a ser consciente de que el público de transporte de arena:

    1. Cada transferencia incurre en un 10 minutos de penalización (a menos que sea un tiempo de transferencia) en los corredores de la mente. Es decir, mentalmente un viaje con un solo bus que tarda 40 minutos es aproximadamente equivalente a un 30minute viaje que requiere una transferencia.
    2. Distancia máxima en la que la mayoría de las personas están dispuestas a pie de una parada de autobús es de 1/4 de milla. En tren la estación de tren de la Luz de alrededor de 1/2 milla.
    3. Distancia es irrelevante para el transporte público jinete. (Sólo es importante el tiempo)
    4. La frecuencia de asuntos (si una conexión se perdió ¿cuánto tiempo hasta el próximo autobús). Los pilotos prefieren más frecuente de las opciones de servicio si la alternativa es la cadena de una hora para la próxima express.
    5. Ferrocarril tiene una mayor preferencia de autobús ( más la confianza de que el tren va a venir y va a ir en la dirección correcta)
    6. Tener que pagar una nueva tarifa es un gran éxito. (agregar unos 15-20min pena)
    7. El tiempo de viaje Total a los asuntos (con sanciones mencionadas anteriormente)
    8. Cómo perfecta es la de conectar? ¿El jinete tiene que existir una estación de tren, cruzar una calle muy transitada? O es simplemente bajar de un tren y a pie de 4 pasos para un autobús?
    9. Cruce de calles muy transitadas, otra gran pena en las transferencias — pueden perder la conexión, ya que no puede conseguir a través de la calle lo suficientemente rápido.
    • Sí, estoy de acuerdo (pero los valores pueden ser objeto de debate). Recuerdo que teníamos diferentes pesos para el transporte ferroviario (1.0 x tiempo de viaje), respectivamente autobús (1.1 x tiempo de viaje) en el sistema que hemos construido. Para calcular el costo de la transferencia de nosotros una tabla con los nodos (ver mi respuesta) con la llegada y hora de salida y el margen de error. El margen es mayor para el bus de tren y aumentado con el tiempo. Una transferencia es posible cuando la llegada+margen+linktime<salida de margen. El costo se calcula como (salida-llegada)x2. Tiempo de vínculo entre las paradas incluye el tiempo para caminar y la pena para pasar de la tarifa de control.
  4. 4

    Encontrar rutas para un coche es bastante
    fácil: la tienda de un grafo ponderado de
    todos los caminos y usted podría usar
    Djikstra del algoritmo. Una ruta de autobús
    es menos evidente.

    Puede ser menos obvio, pero la realidad es que es simplemente otra dimensión al problema con el carro, con la adición de un costo infinito de cálculo.

    Por ejemplo, marcar los autobuses cuyo tiempo está pasado de tener un costo infinito – que luego no se incluyen en el cálculo.

    Usted, a continuación, decidir cómo el peso de cada aspecto.

    El Tiempo de tránsito puede obtener ponderado por 1
    El tiempo de espera puede llegar ponderado por 1
    Las transferencias pueden obtener ponderado en 0.5 (ya que prefiero llegar tarde y tener un extra de transferencia)

    A continuación, calcular todas las rutas en el gráfico mediante cualquier costo habitual algoritmo con la adición de un costo infinito:

    Cada vez que se mueve a lo largo de un borde que tienen que seguir la pista de ‘actual’ tiempo (sume el tiempo de tránsito) y si llegas a un vector que tiene que asignar un costo infinito para cualquier autobuses que están antes de la hora actual. La hora actual se incrementa en el tiempo de espera en que el vector hasta el próximo autobús sale, entonces usted está libre para moverse a lo largo de la otra orilla y encontrar el nuevo costo.

    En otras palabras, hay una nueva restricción, «tiempo actual», que es el tiempo de la primera bus de partida, resumió con todos los de tránsito y los tiempos de espera de los autobuses y paradas del recorrido.

    Complica el algoritmo sólo un poco, pero el algoritmo es el mismo. Se puede ver que la mayoría de los algoritmos pueden ser aplicados a este, algunos pueden requerir varios pases, y algunos no funcionan porque no se puede añadir el tiempo–>costo infinito de cálculo en línea. Pero la mayoría debería de funcionar bien.

    Puede simplificar aún más por la simple suposición de que los autobuses están en un horario, y SIEMPRE hay otro autobús, pero aumenta el tiempo de espera. Hacer el algoritmo sólo de sumar los costes de tránsito, a continuación, vaya a través del árbol de nuevo y agregar a la espera de los costos en función de la siguiente autobús que está por venir. A veces va a resultar en menos eficientes versiones, pero el total gráfico, incluso de una ciudad grande, en realidad es bastante pequeño, así que no es realmente un problema. En la mayoría de los casos, uno o dos rutas de ser obvio ganadores.

    Google tiene esto, sino que también incluye el adicional de que los bordes del pie de una parada de autobús a otro, así que usted puede encontrar un poco más la ruta óptima si estás dispuesto a caminar en las ciudades con grandes sistemas de bus.

    -Adam

  5. 4

    si el costo de cada etapa del viaje se mide en el tiempo, entonces la única complicación es el factoring en el horario de la que sólo cambia el costo en cada nodo a una función de la corriente de tiempo t, donde t es simplemente el total de tiempo de viaje hasta ahora (suponiendo que los horarios son normalizados para iniciar en t=0).

    así que en lugar de Nodo a tener un costo de 10 minutos, tiene un costo de f(t) definida como:

    • t1 = nextScheduledStop(t); //para obtener el siguiente tiempo de parada en o después del tiempo t
    • baseTime de la pierna = 10 //por ejemplo, un viaje de 10 minutos
    • retorno (t1-t)+baseTime

    tiempo de espera por lo que se incluyen de forma dinámica en el costo de cada pierna, y camina entre las paradas de autobús están a sólo arcos con una constante de tiempo de costo

    con esta representación debe ser capaz de aplicar Un* o el de Dijkstra el algoritmo directamente

    • Muy intuitiva. Gracias por el post!!!
  6. 2

    La forma de pensar de este problema es que en última instancia está tratando de optimizar su velocidad media desde su punto de partida a su punto final. En particular, no le importa en absoluto acerca de la distancia total recorrida, si va [bien] fuera de su camino ahorra tiempo. Así, una parte básica de la solución de espacio va a ser necesario la identificación de rutas eficientes disponibles que cubren no trivial partes de la distancia total a velocidades relativamente elevadas entre el comienzo y el final.

    A su punto original, el típico de automoción de la ruta de los algoritmos utilizados por las unidades de navegación GPS para hacer el viaje en coche es una buena obligados por un destino óptimo de tiempo total y la ruta óptima de las evaluaciones. En otras palabras, su basadas en bus viaje estaría haciendo realmente bien para acercarse a un coche basado en la solución. Claramente, el bus de sistema basado va a tener muchas más limitaciones que el coche basado en soluciones, pero tener el coche como solución de referencia (tiempo y distancia) da el autobús algoritmo de un marco de trabajo para optimizar contra*. Por lo tanto, ponga libremente, quiere transformar el coche de la solución hacia el conjunto de posibles autobús soluciones en un proceso iterativo de moda o tal vez más probable tomar el bus de las soluciones y los resultados en contra de su coche basado en la solución de saber si usted está haciendo «bien» o no.

    Haciendo esto de alguna manera más concreta, para un determinado tiempo de la salida hay sólo un número limitado de autobuses disponibles dentro de un período razonable de tiempo, que puede cubrir un porcentaje significativo de la distancia total. Basado en el recto de la automoción análisis período de tiempo razonable y porcentaje significativo de la distancia convertido en cuantificable, utilizando algunos ligeramente métricas subjetivas. Sin duda, resulta más fácil la puntuación de cada posibilidad en relación con los otros en el más absoluto sentido.

    Una vez que usted tiene un conjunto de posibles importante segmento(s) disponible como posibles respuestas dentro de la solución, entonces usted necesita para conectar junto con otras posibles caminar y a la espera de rutas….o si lo suficientemente distantes recursiva selección de adicional de corto autobús. Intuitivamente, parece que no hay realmente va a ser un impedimento conjunto de opciones aquí debido a la Restricciones Paradoja (véase la nota a continuación). Incluso si usted no puede la fuerza bruta de todas las combinaciones posibles a partir de ahí, lo que queda debe ser capaz de optimizar el uso de un el recocido simulado (SA) tipo de algoritmo. Un El método de Monte Carlo sería otra opción.

    La forma en que hemos dividido el problema a este punto nos deja algo que es bastante análoga a cómo SA se aplican algoritmos para el diseño automatizado y enrutamiento de chips ASIC, FPGA, y también la colocación y el enrutamiento de las placas de circuito impreso de que hay un poco de trabajo publicado en la optimización de este tipo de problema de forma.

    * Nota: por lo general se refieren a esto como «las Limitaciones de La Paradoja» – mi mandato. Mientras que la gente, naturalmente, puede pensar en más restringido problemas más difíciles de resolver, las limitaciones reducen las opciones y menos opciones de medios más fácil a la fuerza bruta. Cuando pueda la fuerza bruta, incluso entonces la solución óptima está disponible.

  7. 1

    Básicamente, un nodo en el gráfico no sólo debe representar un lugar, pero también la primera vez que usted puede conseguir allí. Usted puede pensar en él como un gráfico de exploración en el (lugar,tiempo) en el espacio. Además, si usted tiene (lugar, t1) y (lugar,t2) donde t1<t2, descarte (lugar,t2).

    Teóricamente, de esta manera se consigue la primera hora de llegada para todos los posibles destinos de su nodo de inicio. En la práctica, necesita alguna heurística para podar los caminos que te llevan demasiado lejos de su destino.

    También necesita alguna heurística a considerar en la construcción de las rutas antes de las menos prometedoras – si una ruta se aleja de su destino, es menos probable (pero no totalmente improbable) a ser bueno.

    • Por favor ampliar el acrónimo ‘BFS’
    • Búsqueda en anchura. Para fines prácticos, simples BFS es probablemente el camino equivocado aquí, pero es un buen ajuste conceptualmente.
    • De acuerdo, reemplazado «BFS’ con el más genérico de ‘gráfico de exploración».
    • Creo que sin duda desea rutas «va por el camino equivocado» para ser considerado. Es muy común ir a una parada fuera de su camino para ser capaz de recogida express trenes y autobuses.
  8. 1

    Yo creo que Tu problema es más complicado de lo esperado. Los últimos COSTE de acción está centrado en la resolución de este problema: http://www.cost.esf.org/domains_actions/tud/Actions/TU1004 : «Modelización de Transporte Público de Pasajeros de los Flujos en la Era de los Sistemas Inteligentes de Transporte».

    Desde mi punto de vista regular SPS algoritmos no son adecuadas para ello. Usted tiene dinámico estado de la red, donde algunas opciones para viajar hacia adelante son incotinuous (ruta es siempre «abierto» para el coche, bicicleta, peatón, mientras que las conexiones del transporte público está disponible sólo en ciertas tiempo de permanencia).

    Creo que nueva polycriterial (tiempo, confiabilidad, costo, comodidad, y más criterios) enfoque se desea aquí. Debe ser calculada en tiempo real a 1) publicar la información al usuario final dentro de poco tiempo 2) ser capaz de ajustar su ruta en tiempo real (basado en tiempo real de las condiciones de tráfico que proviene de SU).

    Estoy a punto de pensar acerca de este problema para los próximos meses (tal vez incluso a través de una tesis de Doctorado).

    Saludos
    Rafal

  9. 0

    Yo no creo que haya ninguna otra estructura de datos especial que atender estas necesidades específicas, pero todavía se puede utilizar el normal estructuras de datos como una lista enlazada y, a continuación, hacer la ruta de cálculos por determinado factor-usted va a necesitar algún tipo de entrada en la aplicación de las variables que afectan el resultado y, a continuación, hacer cálculos en consecuencia yo.e en función de la entrada.

    Como para la sala de espera y esas cosas, estos son los factores que están asociados con un determinado nodo de la derecha? Usted puede traducir este factor dentro de una ruta de nodo para cada una de las ramas conectado al nodo. Por ejemplo, usted puede decir que para cada rama del Nodo X, si hay lista de espera para decir m minutos en el Nodo X, entonces la escala hasta que el peso de la sucursal
    [m/algo de valor de la base*100]% (sólo un ejemplo). De esta manera, usted haber tenido en cuenta los otros factores de manera uniforme, pero al mismo tiempo, mantener una simple representación del problema que se quiere resolver.

  10. 0

    Si yo era abordar este problema, me gustaría probablemente comenzará con una anotada gráfico. Cada nodo en el gráfico representan cada intersección en la ciudad, sea o no el sistema de transporte público se detiene allí – esto ayuda a explicar la necesidad de caminar, etc. En las intersecciones con el servicio de transporte, se anota estos con parada de etiquetas las etiquetas que permite la búsqueda de la programación del servicio de la parada.

    Entonces usted tiene que hacer una elección. ¿Necesita la mejor ruta posible, o simplemente en una ruta? Se lo muestra las rutas en tiempo real, o pueden soluciones se calcula y almacena?

    Si usted necesita «tiempo real» de cálculo, usted probablemente querrá ir con un algoritmo voraz de todo tipo, creo que una Un* algoritmo de probablemente se ajustan a este dominio del problema bastante bien.

    Si usted necesita soluciones óptimas, usted debe buscar en programación dinámica soluciones a la gráfica… soluciones óptimas va a tomar mucho más tiempo para calcular, pero usted sólo tiene que encontrar de una vez, entonces se pueden almacenar en caché. Tal vez su A* algoritmo podría utilizar pre-calcula las rutas óptimas para informar sus decisiones acerca de «similares» de las rutas.

    • Sería implementar una intersección.getEdges(time_of_day) método?
    • Holth: hmmm… no estoy seguro que me gustaría, a pesar de que puedes. Si estás usando Un* algoritmo, entonces continuamente será «puntuación» nodos adyacentes basado en lo bien que nos mueven hacia la solución. También hay un poco de estado, es necesario realizar un seguimiento de si estamos en la actualidad en el transporte público o caminando.
  11. 0

    Una terriblemente ineficiente forma que podría funcionar sería para almacenar una copia de cada intersección en la ciudad para cada minuto del día. Una ruta de autobús de la calle Elm y 2 al Main st y 25 se representa como, digamos,

    elm_st_and_2nd[12][30].edges :
     elm_st_and_1st[12][35] # 5 minute walk to the next intersection
       time = 5 minutes
       transport = foot
     main_st_and_25th[1][15] # 40 minute bus ride
       time = 40 minutes
       transport = bus
     elm_st_and_1st[12][36] # stay in one place for one minute
       time = 1 minute
       transport = stand still
    

    Ejecutar su favorito algoritmo en este gráfico y orar por una buena implementación de memoria virtual.

    • Yo no creo que usted necesita para almacenar una copia para cada minuto. Es suficiente para crear una copia para cada descubrió la hora de llegada. Si puede ser en Elm/día 2 a las 12:05, no es necesario guardar explícitamente el hecho de que también puede estar allí a las 12:06.
    • Mi respuesta a mi propia pregunta, votada abajo! Nyarrgh.
  12. 0

    Estás respondiendo a la pregunta a ti mismo. El uso de Un* o el de Dijkstra el algoritmo, todo lo que necesitas hacer es decidir sobre un buen costo por parte de cada ruta.

    Para el autobús de la ruta, que están dando a entender que usted no desea que el más corto, pero la ruta más rápida. El costo de cada parte de la ruta debe incluir el promedio de la velocidad de desplazamiento de un autobús en esa parte, y ninguna de espera en las paradas de autobús.

    El algoritmo para encontrar la ruta más adecuada es entonces sigue siendo la misma que antes. Con Un*, toda la magia que sucede en la función de costo…

  13. 0

    Necesita peso de las piernas de manera diferente. Por ejemplo – en un día de lluvia creo que alguien podría preferir viajar más en un vehículo de pie en la lluvia. Además, alguien que detesta a caminar o es incapaz de caminar podría hacer una diferente/viaje más largo que el de alguien a quien no le importa caminar.

    Estos bordes son gastos, pero creo que se puede ampliar la noción o concepto de los costos y pueden tener diferentes valores relativos.

  14. 0

    El algoritmo sigue siendo el mismo, sólo aumenta el peso de cada borde del gráfico de acuerdo a los diferentes escenarios (los horarios de los Autobuses, etc).

    Puse junto a un metro de la ruta buscador como un ejercicio en el gráfico de ruta de acceso de búsqueda de hace algún tiempo:

    http://gfilter.net/code/pathfinderDemo.aspx

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea