Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Discretas II
Realizado por Diego Muñoz y Victor Restrepo.
def __str__(self):
return str(self.id) + ', coordenadas: ' + str(self.coo
rdenadas) + ', vecinos: ' + str([nodo.id for nodo in self.veci
nos])
def get_conecciones(self):
return self.vecinos.keys()
def get_id(self):
return self.id
class grafo:
def __init__(self):
self.vertices = {}
def __iter__(self):
return iter(self.vertices.values())
def get_vertices(self):
return self.vertices.keys()
grafo = grafo()
#Vecinos
grafo.agregar_arista('A', 'B', 6)
grafo.agregar_arista('A', 'C', 1.4)
grafo.agregar_arista('A', 'D', 2.5)
grafo.agregar_arista('B', 'E', 8)
grafo.agregar_arista('B', 'C', 2)
grafo.agregar_arista('C', 'F', 9.9)
grafo.agregar_arista('D', 'F', 8.2)
grafo.agregar_arista('D', 'G', 20)
grafo.agregar_arista('E', 'F', 7)
grafo.agregar_arista('E', 'K', 16)
grafo.agregar_arista('F', 'I', 14)
grafo.agregar_arista('F', 'J', 16.9)
grafo.agregar_arista('F', 'K', 18)
grafo.agregar_arista('G', 'H', 14)
grafo.agregar_arista('G', 'I', 18)
grafo.agregar_arista('H', 'I', 16)
grafo.agregar_arista('H', 'S', 8.5)
grafo.agregar_arista('I', 'J', 9)
grafo.agregar_arista('I', 'R', 10)
grafo.agregar_arista('J', 'K', 16)
grafo.agregar_arista('J', 'P', 6.5)
grafo.agregar_arista('J', 'R', 8)
grafo.agregar_arista('K', 'L', 20)
grafo.agregar_arista('K', 'M', 4)
grafo.agregar_arista('L', 'M', 8)
grafo.agregar_arista('L', 'N', 4)
grafo.agregar_arista('M', 'P', 5)
grafo.agregar_arista('N', 'O', 1)
grafo.agregar_arista('N', 'AB', 10)
grafo.agregar_arista('O', 'P', 4.3)
grafo.agregar_arista('O', 'Y', 3.5)
grafo.agregar_arista('P', 'Q', 9)
grafo.agregar_arista('Q', 'R', 11)
grafo.agregar_arista('Q', 'T', 12)
grafo.agregar_arista('Q', 'Y', 2)
grafo.agregar_arista('R', 'S', 12)
grafo.agregar_arista('S', 'T', 4.3)
grafo.agregar_arista('T', 'U', 7)
grafo.agregar_arista('U', 'Y', 15.2)
grafo.agregar_arista('U', 'V', 1.7)
grafo.agregar_arista('V', 'W', 1.5)
grafo.agregar_arista('V', 'X', 15.3)
grafo.agregar_arista('W', 'AA', 3)
grafo.agregar_arista('X', 'Z', 2.8)
grafo.agregar_arista('X', 'AA', 5)
grafo.agregar_arista('Y', 'Z', 1)
grafo.agregar_arista('Z', 'AB', 2)
grafo.agregar_arista('AA', 'AB', 4)
start = grafo.vertices['A']
goal = grafo.vertices['W']
while open_set:
vertice_actual = min(open_set, fScore)
if vertice_actual is goal:
return reconstruct_path(came_from, vertice_actual)
open_set.remove(vertice_actual)
for vecino in vertice_actual.vecinos.keys():
tentative_gScore = gScore[vertice_actual] + vertic
e_actual.get_peso(vecino)
if tentative_gScore < gScore.get(vecino, math.in
f):
came_from[vecino] = vertice_actual
gScore[vecino] = tentative_gScore
fScore[vecino] = gScore[vecino] + heuristic_fu
nction(vecino)
if vecino not in open_set:
open_set.append(vecino)
return -1
print("Grafo: ")
for vertice in grafo.vertices.values():
print(vertice)
print(" ")
print("Camino más óptimo desde " + str(start.get_id()) + " has
ta " + str(goal.get_id()) + ":")
print(" -> ".join(path))
print("Costo del viaje: " + str(costo))
Comentarios:
La heurística utilizada fue la métrica Euclideana.
Al investigar sobre el algoritmo encontramos que la función heurística debería
siempre de arrojar un valor a lo sumo igual al costo real, pero dadas estas
coordenadas esta desigualdad no se cumplía, en otras palabras, es posible que el
camino encontrado por el algoritmo no sea el más optimo.
El problema anterior es difícil de solucionar basándose en las coordenadas del
ejercicio como heurística porque de hecho la métrica Euclideana era la función
que más bajos resultados arrojaba a comparación de la métrica Manhattan por
ejemplo.
Por lo anteriormente descrito es normal que al usar la función nula como métrica
obtengamos un camino con costo absoluto real menor al arrojado con la métrica
Euclideana como se ve en la siguiente imagen:
-- Ejecución con heurística igual a la función nula —
Conclusión:
La función heurística desempeña un papel fundamental en los resultados del
algoritmo, por esto mismo se hace necesario utilizar una que cumpla la desigualdad
anteriormente descrita o en su defecto utilizar la función nula.