0% encontró este documento útil (0 votos)
43 vistas2 páginas

Asdasdasd

El documento analiza los problemas del algoritmo graph.py para resolver grafos. No puede resolver grafos no dirigidos de manera eficiente, omite aristas con el mismo peso al ordenar, y solo encuentra el primer camino al objetivo sin considerar opciones más cortas. Se proponen mejoras como permitir grafos no dirigidos, ordenar por vértice inicial, buscar todos los caminos de manera recursiva, y encontrar el camino más corto entre todos los posibles.

Cargado por

Diego9705
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
43 vistas2 páginas

Asdasdasd

El documento analiza los problemas del algoritmo graph.py para resolver grafos. No puede resolver grafos no dirigidos de manera eficiente, omite aristas con el mismo peso al ordenar, y solo encuentra el primer camino al objetivo sin considerar opciones más cortas. Se proponen mejoras como permitir grafos no dirigidos, ordenar por vértice inicial, buscar todos los caminos de manera recursiva, y encontrar el camino más corto entre todos los posibles.

Cargado por

Diego9705
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd

Análisis correspondiente del algoritmo graph.

py:

En general, el principal problema de este algoritmo viene dada desde el principio


en el que se estructuro el problema,
puesto a que este algoritmo soluciona "grafos dirigidos" e incluso los soluciona de
manera ineficiente, siendo incapaz de solucionar grafos no dirigidos que es la meta
que debe cumplir.

Además, a la hora de ir ordenando con el algoritmo sort_graph, este le falta una


funcionalidad que logre guardar aquellos que tengan el mismo peso que la mitad,
ya que en estos momentos tal como está, va guardando de manera recursiva los
valores menores de la mitad hacia la izquierda y los valores mayores
de la mitad hacia la derecha, pero nunca hay una condición if que permita guardar
aquellos que tengan el mismo peso, perdiendo los en el proceso.

Otro problema es en search_objetive, este algoritmo toma el primer arreglo de


aristas que tenga el "objetivo" en su posición 1, por lo que realmente no está
buscando
el camino más corto o con menos peso, si no está encontrando el primer vértice
objetivo que encuentre y "no valora las demás posibilidades". Cabe recalcar que de
aquí
surge el problema de que solo pueda resolver grafos dirigidos, pero no para no
dirigidos, lo que toda la algoritmia implementada no va a cumplir aquella meta de
encontrar
la ruta más corta tomando cualquier vértice inicial y cualquier vértice final.

Y ya por último en la funcion bad_graph_algorithm, este algoritmo permite ir


conectando de manera recursiva los arreglos necesarios para ir haciendo el camino
total,
armando lo comenzando desde el nodo objetivo hasta el nodo inicial, camino que se
supone que debe ser el de menor peso, cosa que no se cumple puesto a que esta
función
escoge los caminos bajo un algoritmo search_objetive mal hecho, que escoge el
primero que encuentre ignorando todos los posibles caminos que puedan llegar a
tener un menor peso.

Mejoras propuestas e implementación de las mejoras:

Problema de los grafos no dirigidos solucionado:

Primero, se pensó en cómo se podría solucionar el problema de que pueda solucionar


grafos no dirigidos, puesto a que este es el principal problema, por lo que se
pensó en crear una función
llamada inicioDestino_invertido_mas_original(aristas) donde las aristas recibidas
desde el comienzo, se crean un doble de ellos donde el vértice destino va a ser el
vértice origen y el vértice
origen va a ser el vértice destino, creando así una lista aristas con mucha más
información sobre los posibles camino invertidos, en pocas palabras se transformó
la información de las aristas del
grafo dirigido a uno "no dirigido".

Problema del ordenamiento:

En el ordenamiento se decidió organizarlo de manera ascendente el número del


vértice inicial (posicion 0) de la lista aristas, implementadas en la función
sort_graph_firstPos(aristas) para que cuando se vaya
a buscar una arista que puede llegar a ser un posible camino, este lo haga mediante
un quicksort modificado (puesto a que necesita que el arreglo este ordenado), esta
es la necesidad, organizarlo para que el
quicksort modificado los encuentre de manera eficiente.

Problema de la búsqueda (quicksort modificado):

Este quicksort modificado en [Link] se llama


buscar_caminos(aristas,objetivo,c,f,visitados), donde aristas son la lista de
aristas ordenadas e interpretadas como un grafo no dirigido, el objetivo es el
vértice que
se está buscando, c es la posición inicial que se debe tomar en aristas, f es la
longitud final que se debe tomar en aristas y visitados permite no escoger aquellos
arreglos que tengan un vértice destino ya visitado anteriormente,
donde de manera recursiva logra encontrar todos los posibles caminos del vértice
objetivo no visitados de manera eficiente.

Problema de un algoritmo que pueda ir creando todos los posibles caminos existentes
para llegar al destino:

Esta sección se divide en tres funciones que trabajan conjuntamente para llevar a
cabo este proceso, estos son camino_corto(), armar_caminos_inicio() y
armar_caminos() sin olvidar que en estas
se usaron las demás funciones ya nombradas, primero se nombra
camino_corto(aristas,nodo_origen,nodo_destino,visitados), el cual tiene la función
de retornar el arreglo que representa el camino
más corto de todos los posibles caminos recibidos anteriormente por
armar_caminos_inicio(aristas,nodo_origen,nodo_destino,visitados), donde esta
función arma los primeros caminos encontrados comenzando desde
el nodo_origen, siendo la función muy importante para crear una base de donde se
van a comenzar a armar los caminos, luego de tenerlos, se los va a dar a una
función llamada armar_caminos(aristas,caminos,nodo_destino,visitados),
el cual, con esta base de los primeros caminos encontrados en la variable caminos,
va a comenzar a buscar nuevamente con buscar_caminos() los nuevos caminos de los
caminos iniciales, el cual no pueden estar ya visitados en la
lista visitados, hasta tal punto que de manera recursiva encuentren el
nodo_destino, ya en este punto, cuando todos los posibles caminos lo hayan
encontrado y se hayan eliminado en el transcurso del proceso aquellos que se
quedaban perdidos o atascados (sin posibles caminos),
se retornan ya todos los posibles caminos con un destino nodo ya cumplido, luego la
función armar_caminos_inicio() le va a pasar la información a camino_corto() y
siendo este último y a la vez el comienzo de todo, va a sumar
todos los pesos de todos los posibles caminos totales guardándolos de manera
individual en una lista y va a buscar cual tuvo el menor peso, siendo este el que
va a retornar y así, cumpliendo la meta.

También podría gustarte