IIC2613-Inteligencia-Artificial-2021-2 / Syllabus

Repositorio base del curso, donde se publicarán enunciados, ayudantías y se resolverán dudas.
32 stars 6 forks source link

[Tarea 1] Error en test_tie_breaking en A* #70

Closed cncosta closed 3 years ago

cncosta commented 3 years ago

Hola, al correr el test de tie breaking en A* me aparece el siguiente error:

>       assert node_1 < node_2
E       assert <search.algorithms.astar.AStar.AStarNode object at 0x000002055EF52100> < <search.algorithms.astar.AStar.AStarNode object at 0x000002055EF52130>

Por alguna razón no reconoce bien el resultado y arroja la dirección de memoria de los dos objetos que se están comparando.

JDomingoSilva commented 3 years ago

Me pasa lo mismo

cncosta commented 3 years ago

Acabo de solucionarlo de la siguiente manera en esta linea del codigo: Guardo el resultado de la comparación en un variable que debería ser un bool . y luego el assert es que el compare tenga el valor correcto

compare = node_1 < node_2
assert compare == #the correct answer (True or False)

@Dietr1ch no sé si esto es correcto de implementar

Dietr1ch commented 3 years ago

Qué curioso que assert a < b falle, pero que puedan hacer,

is_less_than = a < b
assert is_less_than  # == True

¿Qué versión de Python están usando?

El ambiente de nix de la tarea usa Python 3.8 y todos los tests pasan, pero lo raro es que __lt__ es una función bastante vieja en Python.

cncosta commented 3 years ago

Si a mi también me parece super raro el error, pero con la variable se soluciona o por lo menos podemos testear la función. Mi versión de python es 3.8.10. Lo extraño fue que al comienzo no arrojaba ese error y cuando edité __lt__ de A* comenzó a mostrar el resultado como representación de objeto y no como bool. ¿puede se quizas error del modulo pytest o del interpreter de Visual Studio?

Dietr1ch commented 3 years ago

Si a mi también me parece super raro el error, pero con la variable se soluciona o por lo menos podemos testear la función. Mi versión de python es 3.8.10. Lo extraño fue que al comienzo no arrojaba ese error y cuando edité __lt__ de A* comenzó a mostrar el resultado como representación de objeto y no como bool. ¿puede se quizas error del modulo pytest o del interpreter de Visual Studio?

Yo apostaría a que es un error de tu implementación. En vez de retornar True/False intenta retornar una comparación.

Cuidado que en Python no retornar, en vez de razonablemente ser un error, equivale a retornar None en esos /codepaths/.