IIC2613-Inteligencia-Artificial-2023-1 / Syllabus

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

MinMax #42

Closed 4n1t4 closed 1 year ago

4n1t4 commented 1 year ago

hola, tengo un problema con el algoritmo de minmax, cuando enfrento dos jugadores minmax y el numero de columnas es par me ocurre que el programa no termina. Pensé que era por no tener una conidicion cuando el no exitian movimientos posibles, pero al agregar esto, sigue ocurriendo el problema. Nosé si alguien me podría ayudar a saber porque sucede esto.

para el algoritmo minmax y a poda la misma manera que en el seudo código de la ayudantía, por lo que no sé muy bien cual es el problema.

4n1t4 commented 1 year ago

hola, tengo un problema con el algoritmo de minmax, cuando enfrento dos jugadores minmax y el numero de columnas es par me ocurre que el programa no termina. Pensé que era por no tener una conidicion cuando el no exitian movimientos posibles, pero al agregar esto, sigue ocurriendo el problema. Nosé si alguien me podría ayudar a saber porque sucede esto.

para el algoritmo minmax y a poda la misma manera que en el seudo código de la ayudantía, por lo que no sé muy bien cual es el problema.

basicamente el problema ocurre cuando se genera un empate en donde ninguno gana algún punto ya que minmax siempre recomienda skipear, y en caso de que esten todas las filas del tablero ocupadas tambien debería ser empate, pero sigue tirando error.

CGR0 commented 1 year ago

Hola si el algoritno te recomienda siempre skippear te recomiendo elegir un movimiento posible aleatorio antes de entrar al for y hacer las recursiones. Así si todos los movimientos te tiran el mismo score se realizará el movimiento aleatorio que elegiste al principio.

mati-gonz commented 1 year ago

Hola si el algoritno te recomienda siempre skippear te recomiendo elegir un movimiento posible aleatorio antes de entrar al for y hacer las recursiones. Así si todos los movimientos te tiran el mismo score se realizará el movimiento aleatorio que elegiste al principio.

Hola estoy con el mismo problema, pero no entendí muy bien la sugerencia, podrías volver a explicarlo por favor? 😁

CGR0 commented 1 year ago

No hay problema! Lo que pasa es que cuando uno obtiene la lista de tuplas con los movimientos posibles antes de entrar al for normalmente hay que preelegir un movimiento. Luego cuando se empieza a iterar y hacer las recursiones si se mejora el score se cambia el movimiento elegido.

El problema es que normalmente uno preelige el primer movimiento valido (el cual es skippear la jugada) y si no hay movimiento que mejore el score, el algoritmo va a skippear si o si. Entonces, para cambiar esto puedes hacerle shuffle a la lista de valid_moves y así se le agrega una componente aleatoria dentro del algoritmo minimax.

Espero haber resuelto tu duda.

mati-gonz commented 1 year ago

No hay problema! Lo que pasa es que cuando uno obtiene la lista de tuplas con los movimientos posibles antes de entrar al for normalmente hay que preelegir un movimiento. Luego cuando se empieza a iterar y hacer las recursiones si se mejora el score se cambia el movimiento elegido.

El problema es que normalmente uno preelige el primer movimiento valido (el cual es skippear la jugada) y si no hay movimiento que mejore el score, el algoritmo va a skippear si o si. Entonces, para cambiar esto puedes hacerle shuffle a la lista de valid_moves y así se le agrega una componente aleatoria dentro del algoritmo minimax.

Espero haber resuelto tu duda.

Sii ahí caché. Muchas gracias!