• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Proyecto pibap
 

Proyecto pibap

on

  • 2,273 views

 

Statistics

Views

Total Views
2,273
Views on SlideShare
2,273
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Proyecto pibap Proyecto pibap Document Transcript

    • Universidad Católica San Pablo Proyecto PIBAP 03-295 Contrato #040 Informe Componente 1 Periodo 1 de Marzo- 30 de Junio 2009 Ernesto Cuadros Vargas (E2) {ecuadros@gmail.com} Alex Cuadros Vargas (E2) {alex.jcv@gmail.com} Luis Diaz Basurco (E4) {l.diaz@gmail.com} Christian López del Alámo (E4) {criloal23@gmail.com} Christian Portilla Pauca (E4) {xhrist@xhrist.co.cc} Edwin Huarhua Chambi (E4) {ehuarhua@gmail.com} Manuel Bellido Oviedo (E4) {manubellido@gmail.com} 18 de junio de 2009
    • Índice general 1. Preliminares 4 1.1. Teoría básica de grafos . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2. Algoritmos sobre grafos . . . . . . . . . . . . . . . . . . . . . . . 6 1.2.1. Algoritmo de Dijkstra del camino mínimo . . . . . . . . . 6 1.2.2. Algoritmo de Kruskal . . . . . . . . . . . . . . . . . . . . 9 1.2.3. Algoritmo de Prim . . . . . . . . . . . . . . . . . . . . . . 10 1.3. Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.3.1. Dijkstra: Camino mas corto . . . . . . . . . . . . . . . . . 11 1.3.2. Floyd-Warshall: Todos los caminos mínimos . . . . . . . . 11 1.3.3. Desempeño de los algoritmos de busqueda . . . . . . . . . 13 1.4. Editor de Grafo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.4.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.4.2. Características del editor . . . . . . . . . . . . . . . . . . 16 1.4.3. Funcionalidad del editor . . . . . . . . . . . . . . . . . . . 16 1.4.4. Formato de archivo de Editor Grafo . . . . . . . . . . . . 22 1
    • Introducción En el desarrollo de la plataforma de software que brindará información de rutas que conecten dos puntos dados de una ciudad se considerará que las posi- bles rutas de conexión conforman un grafo donde las aristas son las calles y los nodos las esquinas incluyendo también como nodos importantes los puntos de origen y destino. La ruta incluirá tanto desplazamientos a pié como con ve- hículos motorizados  de transporte público y privado  respetando criterios especícos. Esto obliga a considerar diferentes tipos de grafos como: grafos no dirigidos en el caso que el desplazamiento sea realizado a pie, y dirigidos en el caso que se use un vehículo de transporte. Puesto que la elección de la ruta depende del tiempo, número de trasbordos, costo, etc se trabajar pesos que sern variables en el tiempo de acuerdo a las condiciones. En esta primera parte se trabajará bajo supuestos estables. La informacíon necesaria que incluyen el catastro de vías y de líneas de transporte público para la obtención del grafo a tratar, se suponen disponibles independiente de la ciudad en donde se quiera resolver el problema de conexión. Este trabajo incluirá la suciente exibilidad para adaptarse a cambios de condiciones y de operación que se incluirán en una segunda parte de este proyecto donde el abordaje tomará en cuenta consideraciones estocásticas que surgen en el problema real de ruta más corta. Cabe mencionar que existen diferentes sistemas que implementan variadas soluciones al problema de la ruta más corta disponibles para diferentes ciudades del mundo. Estos sistemas son generalmente disponibilizados por la empresa de transportes contratista encargada del transporte público de la ciudad. Entre es- tos sistemas, algunos de los que proveen una mayor información son los ofrecidos por Massachussets Bay Transportation Authority (http://www.mbta.com/) del estado de Massachussets en los Estados Unidos de América, Transport of Lon- don (http://www.t.gov.uk/) de la ciudad de Londres en Inglaterra y Verkehrs- und Tarifverbund Stuttgart (http://www.vvs.de/) de la ciudad de Stuttgart en Alemania. Este último en particular es capaz de calcular rutas que incluyan trayectos a pié, en taxi, y los diferentes sistemas de transporte urbano (metro, ómnibus, tranvía, etc.). Estos sistemas lidian con cronogramas de circulación jos para todas las líneas de transporte. Por esta raízón algoritmos exactos de búsqueda de rutas pueden ser aplicados [Gallo y Pallottino, 1988; Cherkassky et al. 1996]. Existen investigaciones especícas en este respecto que evalúan las diferentes técnicas 2
    • de cálculo de rutas más cortas para el caso particular de redes de transporte público y privado. Las más relevantes en este contexto son las presentadas por Zhan y Noon [Zhan, 1997; Zhann y Noon 1998; Zhann y Noon 2000]. Los autores en un inicio evalúan un conjunto de tres algoritmos de cálculo de la ruta más corta [Zhan,1997], los cuáles se demostró que ofrecían los mejores resultados en redes viales reales [Cherkassky et al. 1996], especicamente 1) el algoritmo de crecimiento de grafos implementado con dos colas [Pallottino 1984], 2) el algoritmo de Dijkstra [1959] implementado con cubos (buckets) aproximados [Goldberg y Silverstein, 1995] y 3) el algoritmo de Dijkstra implementado con buckets dobles [Cherkassky et al. 1996]. En su evaluación, Zhan resume estos tres algoritmos y demuestran las estructuras de datos y procedimientos relacionados a ellos. En un segundo trabajo Zhan y Noon [1998] tratan el problema especíco de la aplicación de algoritmos de rutas más cortas en redes viales reales. Es dicho trabajo los autores prueban diferentes algoritmos en una variedad de re- des viales reales lo que conlleva a la identicación de algoritmos ideales para realizar este cálculo. Posteriormente un estudio comparativo entre algoritmos de establecimiento de etiquetas frente a algoritmos de corrección de etiquetas, en problemas de cálculo de rutas más cortas entre dos nodos de una red, fue realizado [Zhan y Noon 2000]. En este estudio también se utilizó redes viales reales y se comparó especicamente el algoritmo de Dijkstra implementado con cubos (buckets) aproximados [Goldberg y Silverstein, 1995] y el algoritmo de crecimiento de grafos implementado con dos colas [Pallottino 1984]. Trabajos centrados en el cálculo de rutas más cortas en redes viales especícos para escenarios temporales (por ej. simulación en el tiempo) también han sido desar- rollados [Kaufman y Smith, 1993; Horn, 2000; Horn, 2006]. A pesar de ser un tema bien documentado, como mencionado anteriormente, estos algoritmos exactos pueden ser aplicados en situaciones donde el cronogra- ma de circulación de las empresas de transporte público es jo. Actualmente esta no es la situación en las ciudades del país. Por lo tanto una alternativa que permita incluir la exibilidad necesaria, relajar e introducir fácilmente restric- ciones de acuerdo a los cambios estructurales del sistema de transporte (tales como la implementación de servicios de transporte público organizados). Esto se puede lograr atacando el problema como un cálculo estocástico de rutas más cortas. Nuestro propósito en el presente trabajo es desarrollar una técnica más e- ciente que las existentes en términos de exibilidad y de tiempo de procesamien- to. Así mismo, los trabajos existentes al respecto presentan resultados teóricos y no incluyen su evaluación en redes viales reales como en el caso de algoritmos exactos. Por lo tanto, pretendemos también realizar esta evaluación. 3
    • Capítulo 1 Preliminares En esta primera parte introducimos los conceptos básicos necesarios para el desarrollo y entendimiento de los resultados obtenidos hasta el momento. 1.1. Teoría básica de grafos Grafos Para cualquer conjunto V, denotaremos por V (2) el conjunto de todos los pares ordenados o no ordenados de elementos de V. Un grafo es un par (V, A) en donde V es un conjunto arbitrário y A es un subconjunto de V (2) . Los elementos de V son llamados vértices o nodos y los de A son llamadas aristas. Para nes del presente estudio el conjunto V es nito. La denición de grafo implica que a toda arista e ∈ A del grafo se le puede asociar una pareja ordenada (u, v) o desordenada {u, v} de nodos u, v del grafo. Se dene el grado de entrada de v ∈ V como el número de aristas que inciden en v . De forma paralela se dene el grado de salida de v como el número de aristas que emergen de v . El grado de v es la suma de los grados de entrada y salida de v . Así el grado de un grafo es el máximo grado de sus vértices. Caminos Camino desde un vértice u∈V a un vérticev ∈ V es una sucesión {v0 ; v1 ; . . . ; vk } de vértices de G = (V ; A) tal que v0 = u; vk = v ; (vi ; vi+1 ) ∈ A, para todo i = 0..k . La longitud de un camino {v0 ; v1 ; ...; vk } es el número k de aristas que lo forman. Se denomina camino simple a un camino en el que todos sus vértices son distintos. Un ciclo es un camino simple {v0 ; v1 ; . . . ; vk } tal que v0 = vk . 4
    • Grafo acclico es un grafo sin ciclos. Subgrafos Se dice que G = (V ; A ) es un subgrafo de G = (V ; A) si V ⊆ V y A ⊆ A. El subgrafo inducido por V ⊆ V es un subgrafo G = (V ; A ) tal que A = {(u; v) ∈ A : u; v ∈ V }. Conexidad Antes de denir cuando un grafo es conexo recordemos que un vértice alcan- zable desde un vértice u es cualquier vértice v para el que existe un camino de u a v. Un grafo (fuertemente) conexo es un grafo (dirigido) G = (V ; A) en el que u; v ∈ V , v es alcanzable desde u. Se denominan componentes (fuertemente) conexas de un grafo (dirigido) a las clases de equivalencia de vértices según la relación ser mutuamente alcanzable. Un grafo completo es un grafo G = (V ; A) en el que ∀u; v ∈ V ; u = v; (u; v) ∈ A Isomorsmo de grafos Dos grafos G = (V ; A); G = (V ; A ) son isomorfos si existe una biyección f :V →V tal que (u; v) ∈ A si y solo si (f (u); f (v)) ∈ A Grafos etiquetados Se denomina grafo etiquetado a un grafo G = (V ; A) acompañado de una función f : A → E, donde E es un conjunto cuyas componentes se denominan etiquetas. Grafo ponderado es un grafo etiquetado con números reales (E = R) árboles Se dene un bosque como un grafo no dirigido aciclico. Un árbol es un grafo en el que existe único nodo desde el que se puede acceder a todos los demás y cada nodo tiene único predecesor, excepto el primero, que no tiene ninguno. También podemos denir un árbol como: Un grafo conexo y sin ciclos. Un grafo sin ciclos y con n−1 aristas, siendo n el némero de vértices. Grado de un nodo en un árbol es el número de subárboles de aquel nodo. Denominamos hojas en un árbol a los nodos nales. Un árbol de máximo alcance es aquel que obtenemos en un grafo conexo y sin ciclos. Por otro lado, se denominará árbol de mínima expansión es el árbol de máximo alcance cuyo valor es mínimo, es decir, la suma de sus aristas es mínima. Dentro de los tipos de árboles a considerar en el presente trabajo se tiene: Un árbol libre que viene a ser un grafo no dirigido acíclico conexo. Un árbol de recubrimiento de un grafo no dirigido G = (V ; A) es un a¯bol libre T = (V A ) tal que V =V y A ⊆ A. 5
    • Un árbol enraizado es un a¯bol libre con un vértice distinguido denominado raíz. La raíz de un árbol A se denota como raiz(A), o simplemente A si no hay confusión. Theorem 1 Si G es un grafo con M > 2 vértices, entonces los siguientes proposiciones son equivalentes: 1. G es un árbol libre. 2. G es conexo y tiene M − 1 aristas. 3. Cualquier par de vértices están conectados por un único camino. 4. Si se añade una arista a G se crea un ciclo. Sea A un árbol enraizado en el vértice r y sea v un vértice de A. Sea C el único camino de r a v: 1. Se dice que un vértice u es antecesor o predecesor de v, siu est en C. En este caso también se dice que v es descendiente o sucesor u, 2. Si (u; v) es la última arista de C, se dice que u es el (único) padre de v y se denota como u = p(v). Así mismo, se dice que v es un hijo de u. El conjunto de hijos de un vértice v se denota como hijos(v). 3. Dos vértices v ,v de A son hermanos, si p(v ) = p(v). 4. Se dice que un vértice v es una hoja si hijos(v) = nodos internos son aquellos vértices que no son hojas. 5. La profundidad de v en A es la longitud del camino C desde la raíz hasta v. 6. Altura de A, h(A), es la profundidad de la hoja de mxima profundidad. 7. El grado de un vértice v se dene como la talla de hijos(v). Un a¯bol ordenado es un a¯bol enraizado en el que los hijos de cada vértice esta« ordenados. 1.2. Algoritmos sobre grafos 1.2.1. Algoritmo de Dijkstra del camino mínimo Esencialmente el algoritmo Dijkstra del camino mínimo es un algoritmo para la determinación del camino más corto dado un vértice origen al resto de vér- tices en un grafo dirigido y con pesos en cada arista. La idea subyacente en este algoritmo consiste en explorar todos los caminos más cortos que parten del vér- tice 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 de vértices que componen el grafo, el algoritmo se detiene. 6
    • Algoritmo Teniendo un grafo dirigido ponderado de N nodos no aislados, sea x el nodo inicial, un vector D de tamaño N guardar al nal del algoritmo las distancias desde x al resto de los nodos. 1. Inicializar todas las distancias en D con un valor innito relativo ya que son desconocidas al principio, exceptuando la de x que se debe colocar en 0 debido a que la distancia de x a x sera 0. 2. Sea a=x (tomamos a como nodo actual). 3. Recorremos todos los nodos adyacentes de a menos los nodos marcados, llamaremos a estos vi . 4. Si la distancia desde x hasta vi guardada en D es mayor que la distancia desde x hasta a sumada a la distancia desde a hasta vi ; esta se substituye con la segunda nombrada, esto es: si (D1 > Da + d(a, vi )) entonces Di = Da + d(a, vi ) 5. Marcamos como completo el nodo a. 6. Tomamos como próximo nodo actual el de menor valor en D (puede hac- erse almacenando los valores en una cola de prioridad) y volvemos al paso 3 mientras existan nodos no marcados. Una vez terminado al algoritmo, D estar completamente lleno. Complejidad Orden de complejidad del algoritmo: O(|V |2 + |E|) = O(|V |2 ) sin utilizar cola de prioridad, O((|E| + |V |)log|V |) utilizando cola de prioridad (por ejemplo un montículo). Podemos estimar la complejidad computacional del algoritmo de Dijkstra (en términos de sumas y comparaciones). El algoritmo realiza a lo más n−1 iteraciones, ya que en cada iteración se añade un vértice al conjunto distinguido. Para estimar el número total de operaciones basta estimar el número de operaciones que se llevan a cabo en cada iteración. Podemos identicar el vértice con la menor etiqueta entre los que no están en Sk realizando n−1 comparaciones o menos. Despus hacemos una suma y una comparación para actualizar la etiqueta de cada uno de los vértices que no están en Sk . Por tanto, en cada iteración se realizan a lo sumo 2(n − 1) operaciones, ya que no puede haber más de n − 1 etiquetas por actualizar en cada iteración. Como no se realizan más de n−1 iteraciones, cada una de las cuales supone a lo más 2(n−1) operaciones, llegamos al siguiente teorema. Theorem 2 El Algoritmo de Dijkstra realiza O(n2 ) operaciones (sumas y com- paraciones) para determinar la longitud del camino más corto entre dos vértices de un grafo ponderado simple, conexo y no dirigido con n vértices. 7
    • Pseudocódigo Estructura de datos auxiliar: Q = Estructura de datos Cola de prioridad (se puede implementar con un montículo) DIJKSTRA (Grafo G, nodo-fuente s ) // inicializamos todos los nodos del grafo. La distancia de // cada nodo es infinita y los padres son NULL Para cada u en V[G] hacer distancia[u] = INFINITO padre[u] = NULL fpara distancia[s] = 0 // encolamos el nodo-fuente s Encolar (cola, grafo) mientras cola no es vaca hacer // OJO: Se extrae el nodo que tiene distancia mínima y se // conserva la condici'on de Cola de prioridad u = extraer-minimo(cola) para cada v en adyacencia[u] hacer si distancia[v] > distancia[u] + peso (u, v) do distancia[v] = distancia[u] + peso (u, v) padre[v] = u fsi Pseudocódigo sin cola de prioridad funcion Dijkstra (Grafo G, nodo-salida s) // Usaremos un vector para guardar las distancias del nodo salida al // resto. Inicializamos el vector con distancias iniciales // boleano visto[n] // vector de boleanos para controlar los vertices // de los que ya tenemos la distancia minima para cada w en V[G] hacer Si (no existe arista entre s y w) entonces distancia[w]=Infinito // marcar la casilla con un -1 por ejemplo Sino distancia[w] = peso (s, w) fsi fpara distancia[s] = 0 visto[s] = cierto // n es el numero de vertices que tiene el Grafo mientras (no-esten-vistos-todos) hacer vertice = coger-el-minimo-del-vector distancia y que no este visto; visto[vertice] = cierto; para cada w ? sucesores (G, vertice) hacer si distancia[w]>distancia[vertice]+peso (vertice, w) entonces 8
    • distancia[w] = distancia[vertice]+peso (vertice, w) fsi fpara fmientras finfuncion Al nal tenemos en el vector distancia en cada posición la distancia mínima del vértice salida a otro vértice cualquiera. 1.2.2. Algoritmo de Kruskal El algoritmo de Kruskal es un algoritmo de la teoría de grafos para encontrar un a¯bol recubridor mínimo en un grafo conexo y ponderado. Es decir, busca un subconjunto de aristas que, formando un a¯bol, incluyen todos los vértices y donde el valor total de todas las aristas del a¯bol es el mínimo. Si el grafo no es conexo, entonces busca un bosque expandido mínimo (un a¯bol expandido mínimo para cada componente conexa). 1. Se marca la arista con menor valor. Si hay más de una, se elige cualquiera de ellas. 2. De las aristas restantes, se marca la que tenga menor valor, si hay más de una, se elige cualquiera de ellas. 3. Repetir el paso 2 siempre que la arista elegida no forme un ciclo con las ya marcadas. 4. El proceso termina cuando tenemos todos los nodos del grafo en alguna de las aristas marcadas, es decir, cuando tenemos marcados n−1 arcos, siendo n el número de nodos del grafo. Pseudocódigo Entrada: Un grafo ponderado conexo con todos sus pesos diferentes. Salida: Las aristas de un a¯bol generador minimal. i = 1; N = tamagno del grafo de Entrada en numero de vertices; mientras (i < N) hacer escoger la arista de peso minimo A de entre todas las que no han sido escogidas; si A no forma ciclo con las que ya forman parte de la Salida entonces agnadir A a la Salida; i = i + 1; fsi fmientras Por lo tanto, como podemos ver, el algoritmo de Kruskal va generando difer- entes bosques con las aristas que va seleccionando y posteriormente se van unien- do hasta formar el a¯bol de expansin mínimo. Complejidad del algoritmo m el 9
    • número de aristas del grafo y n el número de vértices, el algoritmo de Kruskal muestra una complejidad O(mlogm) o, equivalentemente, O(mlogn), cuando se ejecuta sobre estructuras de datos simples. Los tiempos de ejecución son equiv- alentes porque: ”m es a lo sumo n2 y logn2 = 2logn es O(logn). ïgnorando los vértices aislados, los cuales forman su propia componente del a¯bol de expansin mínimo, n?2m, as que log n es O(logm). Se puede conseguir esta complejidad de la siguiente manera: primero se or- denan las aristas por su peso usando una ordenacin por comparación con una complejidad del orden de O(mlogm); esto permite que el paso .eliminar una arista de peso mínimo de C "se ejecute en tiempo constante. Lo siguiente es us- ar una estructura de datos sobre conjuntos disjuntos para controlar qu vértices están en que componentes. Es necesario hacer orden de O(m) operaciones ya que por cada arista hay dos operaciones de búsqueda y posiblemente una unión de conjuntos. Incluso una estructura de datos sobre conjuntos disjuntos simple con uniones por rangos puede ejecutar las operaciones mencionadas en O(mlogn). Por tanto, la complejidad total es del orden de O(mlogm) = O(mlogn). Con la condición de que las aristas están ordenadas o puedan ser ordenadas en un tiempo lineal (por ejemplo, mediante el ordenamiento por cuentas o con el or- denamiento Radix), el algoritmo puede usar estructuras de datos de conjuntos disjuntos más complejas para ejecutarse en tiempos del orden de O(m?(n)), donde ? es la inversa (tiene un crecimiento extremadamente lento) de la función de Ackermann. 1.2.3. Algoritmo de Prim El algoritmo de Prim permite hallar el a¯bol minimal de cualquier grafo ponderado. Hay que seguir los siguientes pasos: 1. Se marca un nodo cualquiera, ser el nodo de partida. 2. Seleccionamos la arista de menor valor incidente en el nodo marcado an- teriormente, y marcamos el otro nodo en el que incide. 3. Repetir el paso 2 siempre que la arista elegida enlace un nodo marcado y otro que no lo es. 4. El proceso termina cuando tenemos todos los nodos del grafo marcados. Pseudocódigo Entrada: Un grafo ponderado conexo con todos sus pesos diferentes. Salida: Las aristas de un a¯bol generador minimal. i = 1; N = tamagno del grafo de Entrada en numero de vertices; mientras (i < N) hacer escoger la arista de peso mínimo A de entre todas las que aún no han sido escogidas y son in si la Salida aún esta vacía, es decir, que estamos en la primera iteracion entonces 10
    • escoge la arista A de menor peso; fsi si A no forma ciclo con las que ya forman parte de la Salida entonces agnadir A a la Salida; i := i + 1; fsi fmientras En este caso podemos observar que el algoritmo de Prim a cada iteración va formando un a¯bol que va creciendo hasta completar el a¯bol de expansin mínimo del grafo de entrada. 1.3. Algoritmos 1.3.1. Dijkstra: Camino mas corto Este algoritmo resuelve el problema de encontrar la ruta mas corta entre un nodo origen y un nodo destino en un grafo G = (V, E), siendo E el conjunto de aristas con peso no negativo, asumimos que w(u, v) ≥ 0 Algorithm 1 Dijkstra(G,w,s) Require: n ≥ 0 ∨ x = 0 Ensure: y = xn INITIALIZE-SINGLE-SOURCE(G,s) n←φ Q ← V [G] while N = 0 do u ← EXT RACT − M IN {Q} S ← S(U ) for all each vertex v Adj[u] do RELAX(u, v, w) end for end while 1.3.2. Floyd-Warshall: Todos los caminos mínimos El algoritmo de Floyd-Warshall calcula los caminos mínimos que existan entre todos los pares de nodos de un Grafo dirigido G = (V, E). Donde V es el conjunto de VAlgortices y E son el conjunto de Aristas. La complejidad de este algoritmo es Θ(V 3 ) y se asume que no existen ciclos de costo negativo. Asumiendo que los vértices de G son V = {1, 2, 3, ..., n} consideremos un subconjunto {1, 2, 3, ...k} de vértices para algún k . Para cualquier par de vér- tices u, v ∈ V , consideremos todos los caminos desde i hacia j cuyos vértices intermedios son sacados de {1, 2, 3, ...k}, y sea p el camino de costo mínimo 11
    • de todos ellos (p es un camino simple). El algoritmo Floyd-Warshall explota la relación de p y el camino mínimo entre i y j con todos los vértices intermedios en el conjunto {1, 2, 3, ...k−1}. Ésta relación depende en que k sea o no el vértice intermedio del camino p de la siguiente manera: (k) wij if k = 0 dij = (k−1) (k−1) (k−1) min(dij , dik + dkj ) if k ≥ 1 El seudo-código para el algoritmo de Warshall es el siguiente: Algorithm 2 FLOYD-WARSHALL(w) n ← f ilas(w) D(0) ← W for k ← 1 to n do for i ← 1 to n do for j ← 1 to n do d(k)ij ← min(d(k−1)ij , d(k−1)ik + d(k−1)kj ) end for end for end for return D(n) 12
    • 1.3.3. Desempeño de los algoritmos de busqueda 13
    • 1.4. Editor de Grafo 1.4.1. Introducción Este editor esta basado en el api de google Maps la cual nos permite hacer una interfaz de usuario para poder desplazarnos por mapas del mundo, hacer edición sobre los mismos, asimismo como manipular información relativa a los mapas de google Maps, también se ha hecho uso de YUI Yahoo User Interface un framework de programación en javascript que nos permite interacción Ajax entre nuestra interfaz y el servidor remoto mediante el cual se procesa solicitudes de información de tipo variado como puede ser paginas Web, imágenes, y todo tipo de información que nos sea útil. Editor Grafo 14
    • Google Maps 15
    • 1.4.2. Características del editor El editor del grafo nos permite hacer la edición de nodos de modo sencillo, sus principales características son: Creación de Nodos del grafo mediante la interfaz Almacenamiento de información del nodo del grafo. Modicación del nodo mediante la interfaz. Almacenamiento de cambios de la información del nodo del grafo. Eliminación de nodo de grafo. Creación de aristas del grafo mediante la interfaz. Almacenamiento de información del arista del grafo. Almacenamiento de cambios de la información del nodo del grafo. Navegación en el mapa por medio de el mouse. Agrandar o disminuir la proporción del mapa. Desplazamiento en el mapa por medio del localizador. Ver los tipos de mapas como son satelital , en relieve y mixto. Nos muestra información del punto central del mapa para ubicar coorde- nadas del mismo. Se puede hacer la carga de información mediante una archivo especico para la carga de información en el mapa. 1.4.3. Funcionalidad del editor El modo de funcionamiento es sencillo y de facil interacción con el usuario: Edición de nodos: En la edición de los nodos podemos crear un nodo al hacer clic sobre el mapa, inmediatamente se cargara la información en el archivo saved.txt y en el archivo nodes.txt, además de generar grácamente el nodo correspondiente en el mapa. 16
    • Borrado de un nodo, esta tarea se logra haciendo doble clic encima de un nodo en particular, en ese momento se sucede el cambio en la información registrada en los archivos de nodos y aristas tanto como en el archivo de información global del grafo saved.txt. Modicación del nodo, al arrastrar el nodo con el mouse la interfaz hará el desplazamiento del nodo en la interfaz asimismo como la modicación de la información relacionada con el nodo en particular, tomando en cuenta el desplazamiento de las aristas asimismo como el nodo. 17
    • Edición de Aristas: Creación de aristas, para poder crear una arista la condición minima de creación de aristas es que por lo menos haya una arista creada, sin la misma la consecución de la creación de la misma no sera posible, por tanto para crear una arista hacemos clic en un nodo y luego procedemos a hacer clic sobre otro nodo para poder generar gracamente nuestra arista, luego la información relativa a la arista generada será almacenada. El borrado de una arista es consecuencia del borrado de un nodo ante el bor- rado de un nodo se borraran las aristas correspondientes al mismo así como la información relacionada a la arista. La modicación de una arista es dada según la modicación que se de en un nodo en particular puesto que la arista es dependiente de un nodo en especi- co, por tanto al ser modicado su localización del nodo será posteriormente modicada la arista. Desplazamiento en el mapa: El desplazamiento en el mapa puede ser hecho en función del solo uso del mouse o del uso del mouse mas el desplazador del mapa conjuntamente con la acción del mouse, para poder desplazarse en el mapa debemos arrastrar con el mouse el mapa hacia la locación que deseamos ver o haciendo uso del desplazador podemos hacer clic encima de los indicadores de dirección y desplazarnos hacia una locación que deseemos ver. 18
    • Vistas de los mapas: En el mapa tenemos distintos tipos de vista, para poder hacer uso de las mismas solo debemos hacer clic en los botones de la izquierda superior derecha y esperar la carga de la respectiva vista. Carga de información en el mapa: Para hacer la carga de información del mapa, tenemos que hacer click en el boton LoadFile mediante el cual cargara un dialogo en el cual accedemos 19
    • al cuadro de dialogo abrir y seleccionamos un archivo que tenga un formato adecuado para hacer la carga de información y procedemos a hacer click en el boton cargar. Dependiendo de la velocidad de conexión se dara a continuación la carga de información del grafo en el mapa. 20
    • 21
    • 1.4.4. Formato de archivo de Editor Grafo Para poder hacer uso correcto de las características de nuestro editor de grafo tenemos que tener un formato adecuado el cual es el que a continuación se detalla: En la parte inicial colocamos toda la información de los nodos siguiendo la norma básica de tener un identicador por Ej.: id1 luego la latitud y a continuación la longitud. Seguidamente se coloca  para hacer la diferencia de la información que viene a continuación: Se coloca información de los edges un identicador de edge por Ej. edge1 luego ideticador de nodo inicial posterior a este un identicador de nodo nal. 22
    • Ejemplo: 10 -16.398921914003473 -71.53517961502075 -16.397862825349694 -71.53472900390625 -16.396792409131297 -71.53427839279175 -16.397219547077878 -71.53320550918579 -16.398212767836995 -71.5336561203003 -16.399262591524984 -71.53406381607056 -16.40031240955188 -71.53447151184082 -16.40072410135037 -71.53337717056274 -16.39966913937374 -71.53301239013672 -16.398639902667625 -71.53258323669434 4 0 12 0 8 7 6 6 11 23