Autor Tema: ¿En cuales juegos es fácil hacer un buen plan? ¿o cómo hacerlo?

0 Usuarios y 1 Visitante están viendo este tema.

07 Febrero, 2024, 12:44 am
Leído 87 veces

Tachikomaia

  • $$\Large \color{#c88359}\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 596
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Por ejemplo intento hacerlo en el Super Mario Bros con el objetivo de acumular la mayor cantidad de puntos con 1 vida (usar el truco de rebotar infinitamente en una tortuga o armadillo está prohibido):
- Avanza.

Vemos un cubo que al golpearlo da puntos, debemos mejorar el plan:
- Si ves un cubo"?", golpéalo, sino avanza.

Vemos un enemigo que al aplastarlo da puntos, mejoramos el plan otra vez:
- Si ves un enemigo, aplástalo.
- sino si ves un cubo"?", golpéalo.
- sino avanza.

¿Pero si hubiera una fila de cubos"?"/ladrillos, tú estuvieras abajo y el enemigo arriba, de modo que no lo puedes aplastar? Sabemos que golpeando el cubo"?"/ladrillo debajo de él lo podemos vencer y ganar puntos, de nuevo mejoramos el plan:
- Si ves un enemigo, aplástalo o golpea el cubo"?"/ladrillo debajo de él.
- sino si ves un cubo"?", golpéalo.
- sino avanza.

Vemos que un cubo"?" da un ongo, volvemos a mejorar el plan:
- Si ves un enemigo, aplástalo o golpea el cubo"?"/ladrillo debajo de él.
- sino si ves un ongo, agárralo.
- sino si ves un cubo"?", golpéalo.
- sino avanza.

¿Pero si el cubo"?"/ladrillo que vamos a golpear debajo del enemigo nos daría un ongo que por moverse nos "obligaría" a seguirlo dejando cubos/ladrillos cargados? Mejoramos el plan nuevamente:
- Si ves un enemigo...
    - Si está encima de algo de modo que no puedes subir a aplastarlo...
        - Si golpear el cubo"?"/ladrillo que está debajo de él da un ongo que para agarrarlo debes dejar cubos/ladrillos cargados, espera a que vaya a otro cubo"?"/ladrillo.
        - sino golpea el cubo"?"/ladrillo debajo de él.
    - sino aplástalo o golpea el cubo"?"/ladrillo debajo de él.
- sino si ves un ongo, agárralo.
- sino si ves un cubo"?", golpéalo.
- sino avanza.

¿Pero si los cubos a los que el enemigo se moverá ya fueron golpeados? En la próxima partida no los golpeés todos, ahora golpea al que tiene el ongo aunque dejes cubos cargados por perseguirlo, difícilmente sean tantos.

Vemos que siendo grande podemos romper ladrillos, mejoramos el plan...:
- Si ves un enemigo...
    - Si está encima de algo de modo que no puedes subir a aplastarlo...
        - Si golpear el cubo"?"/ladrillo que está debajo de él da un ongo que para agarrarlo debes dejar cubos/ladrillos cargados, espera a que vaya a otro cubo"?"/ladrillo.
        - sino golpea el cubo"?"/ladrillo debajo de él.
    - sino aplástalo o golpea el cubo"?"/ladrillo debajo de él.
- sino si ves un ongo, agárralo.
- sino si ves un cubo"?", golpéalo.
- sino si ves un ladrillo, rómpelo (empieza por los de arriba).
- sino avanza.

¿Pero si el enemigo está en un ladrillo al cual si rompemos no podremos golpear un cubo"?"/ladrillo de más arriba? Eso difícilmente ocurra, el enemigo cae antes de que lleguemos a él, pero bue, mejoramos...:
- Si ves un enemigo...
    - Si está encima de un ladrillo que si rompes no podrás golpear un cubo"?"/ladrillo de más arriba, espera.
    - sino si está encima de algo de modo que no puedes subir a aplastarlo...
        - Si golpear el cubo"?"/ladrillo que está debajo de él da un ongo que para agarrarlo debes dejar cubos/ladrillos cargados, espera a que vaya a otro cubo"?"/ladrillo.
        - sino golpea el cubo"?"/ladrillo debajo de él.
    - sino aplástalo o golpea el cubo"?"/ladrillo debajo de él.
- sino si ves un ongo, agárralo.
- sino si ves un cubo"?", golpéalo.
- sino si ves un ladrillo, rómpelo (empieza por los de arriba).
- sino avanza.

Vemos que hay un tubo, agregamos por ahí que si obstruye nuestro paso debemos pasar por encima.

Vemos que hay dos enemigos bastante juntos, agregamos por ahí que en ese caso debemos intentar aplastarlos al mismo tiempo porque eso da más puntos.

Vemos que podemos entrar en algunos tubos, debemos ver en cuales conviene y en cuales no.

Vemos que podemos agarrar una flor. Hacerlo luego de vencer a los enemigos.

Vemos que... que hay muchas cosas a tener en cuenta ¿se entiende ahora mi pregunta? ¿cómo se hacen esos planes? ¿acaso el Pacman podría ser bueno para empezar?

07 Febrero, 2024, 11:12 am
Respuesta #1

manooooh

  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,394
  • País: ar
  • Karma: +1/-0
  • Sexo: Masculino
Hola

Eso que comentas parece lo típico de Machine Learing, aunque lo utilizan las máquinas, no las personas.

Por otro lado, no siempre hay una "estrategia superadora" ganadora que se haya encontrado. El ajedrez lleva muchos años perfeccionándose y aún así no hay un método general para resolver, desde la posición 0, cualquier partida. Ni siquiera la computadora con sus millones de bits "sabe" jugar la partida perfecta, tiene probabilidad asociada.

Por último, no sé si tiene mucho sentido plantearse un "buen plan". ¿En qué sentido? ¿Significa pasarse el juego en la menor cantidad de tiempo, de movimientos o de qué? Por supuesto que uno cuando juega debe tener un plan, sino avanzar siempre no conduciría a que Mario ganase. Los speedrunners sortearon mil obstáculos gracias a errores de programación (pero legítimos), por lo que tener un "buen plan" ya tiene muchos grises; ¿vale aprovechar los errores para tener ventaja y mejorar ese "plan" (aunque sea legítimo hacerlo)? Cabrían muchas posibilidades más que simplemente seguir la hoja de ruta especificada.

Saludos

08 Febrero, 2024, 02:02 am
Respuesta #2

Tachikomaia

  • $$\Large \color{#c88359}\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 596
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Por último, no sé si tiene mucho sentido plantearse un "buen plan".
No me agrada la sensación de tener muchas opciones y no saber cual elegir, hacer un buen plan tiene sentido para evitarla, y para aprender de forma eficiente, algo similar al machine learning como has comentado.

Citar
¿En qué sentido? ¿Significa pasarse el juego en la menor cantidad de tiempo, de movimientos o de qué?
Eso se define antes de pensar en el plan. En el ejemplo que puse era para obtener la máxima cantidad posible de puntos con 1 vida.

Citar
Los speedrunners sortearon mil obstáculos gracias a errores de programación (pero legítimos), por lo que tener un "buen plan" ya tiene muchos grises
¿Qué significa "ya tiene muchos grises"? Si te refieres a que ya fue muy estudiado, sí, pero precisamente los speedruns son una de las competencias que menos me gustan, y menos si usan glitches que destruyen lo que debería ser la esencia del juego.

Citar
¿vale aprovechar los errores para tener ventaja y mejorar ese "plan" (aunque sea legítimo hacerlo)? Cabrían muchas posibilidades más que simplemente seguir la hoja de ruta especificada.
Cierto, pero es algo que debe definirse a medida que se conozcan los glitches.


Yo quiero hacer experimentos como si fuese para aprender, y el experimento consiste en un plan a seguir, ver qué pasa si se sigue ese plan, pero hay resultados que se pueden prever sin necesidad de probar y entonces debe intentarse hacer lo que se considera un buen plan, luego ponerlo a prueba.

Estoy analizando los 1eros juegos de DOS y en cuanto a elaborar planes todos me resultan demasiado simples o demasiado complicados...

08 Febrero, 2024, 10:35 am
Respuesta #3

DaniM

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 202
  • País: cz
  • Karma: +0/-0
Estoy de acuerdo con manoooh: más concretamente, pienso que lo que mejor se adaptaría a lo que buscas es un programa basado en deep learning. A grandes rasgos, primero defines cómo medir qué tan bueno es ese "buen plan". En el ejemplo de Super Mario, el objetivo de pasarte el juego consiguiendo la mayor cantidad posible de puntos parece reñido con el objetivo de pasártelo en el menor tiempo posible.

Una vez que defines cuál es el objetivo y cómo medirlo, el modelo de deep learning que implementes irá aprendiendo de sus propios errores en cada iteración y lo irás premiando a medida que vaya mejorando las marcas que sean relevantes para lograr tu objetivo.

Por otra parte, si quieres programarlo de una forma más clásica y terrenal, puedes investigar sobre algoritmos genéticos. Aquí tienes una web para jugar con ellos y en la que puedes ver de una forma muy intuitiva de lo que se trata:

https://rednuht.org/genetic_cars_2/

La idea básica es llevar las ideas de la evolución darwiniana al código del programa. En esta web en concreto, empiezas con un escenario poblado por objetos a dos ruedas con formas aleatorias: el "ganador" es el que recorre la mayor distancia. Los objetos empiezan a avanzar y muchos se quedan por el camino debido a que su geometría es demasiado ineficiente para seguir avanzando. Los que consiguen llegar más lejos, se "reproducen" con una determinada tasa de mutabilidad, los hijos heredan la forma del padre con alguna pequeña variación y siguen avanzando hasta que el último descendiente fracasa. A partir de ahí, se resetea el mundo y la nueva generación de objetos contiene a los "ganadores" del mundo anterior, y así, a través de las generaciones, se va seleccionando la geometría más apta para recorrer más distancia.

Por cierto, puedes darle al botón "Surprise!" para que la simulación vaya más rápido y volver a pincharle para que vuelva la velocidad normal. A partir de la generación 13 la competición se pone interesante y ya se puede ver un patrón en la forma más óptima (desde el punto de vista del mundo generado) que consigue llevar el coche más lejos.

Aquí tienes un ejemplo de cómo implementar un algoritmo genético en un juego muy parecido al Super Mario en el que el objetivo es el mismo, recoger monedas y evitar colisiones con monstruos: https://blog.paperspace.com/building-agent-for-cointex-using-genetic-algorithm/

09 Febrero, 2024, 05:18 pm
Respuesta #4

Tachikomaia

  • $$\Large \color{#c88359}\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 596
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
En el ejemplo de Super Mario, el objetivo de pasarte el juego consiguiendo la mayor cantidad posible de puntos parece reñido con el objetivo de pasártelo en el menor tiempo posible.
Si te refieres a contradictorio, sí, el tiempo es relevante porque en la mayoría de escenas entre más tengas más puntos recibes (aunque si termina en 6 te dan unos 3000 puntos creo), pero es secundario. Aquí alguien jugó en ese sentido mejor de lo que yo podría:
...la estrategia "perfecta" sería similar a esa.

Citar
Una vez que defines cuál es el objetivo y cómo medirlo, el modelo de deep learning que implementes irá aprendiendo de sus propios errores en cada iteración y lo irás premiando a medida que vaya mejorando las marcas que sean relevantes para lograr tu objetivo.
En otros contextos intento cosas parecidas, pero aquí la idea es hacer yo mismo un plan y probarlo yo, como si la máquina fuese yo. En realidad cuando dije "buen plan" no quise decir que sea perfecto, sólo que si tiene algún defecto obvio sea detectado antes para ahorrar tiempo.
Lo que hago (no en este contexto) creo que es fuerza bruta o backtracking, se genera un árbol cuyas ramas se expanden hasta el game over o hasta pasarse el juego, y cuando obtuvo todos los finales posibles (malos o buenos) se evalúa cual es el mejor según el criterio que se le dé. Es decir, los juicios son binarios (¿game over s/n? ¿happy ending? s/n) hasta obtener los finales, luego se evalúa "normal". Es algo que pensé porque no tengo mucha idea de cuando algo va bien y cuando no, al menos en los RPG (lo pensé para esos) tener más puntos de vida o hacer que tu enemigo tenga menos no es necesariamente mejor (si usa Revenge, si se escapa cuando tiene muy pocos, etc, en esos casos debe intentarse que tenga el máximo posible pero quitable en pocos golpes, pero hay casos más complejos supongo). Tampoco en el Ajedrez tener menos piezas que el rival significa que la partida va mal. ¿Tienes alguna recomendación sobre cómo saber cuando algo va mal? Se me ocurre que si todo es igual excepto unos valores u otros que sí o sí sean mejor tener, cosas que no puedan ser usadas en contra nuestra ni puedan perjudicar, como la cantidad de dinero (difícil que en un juego te perjudique tener más, casi siempre tener más es mejor) ¿algo más?

Me había olvidado del algoritmo genético que mencionas, es que el azar no me gusta mucho, pero para un resultado rápido con poco esfuerzo está bueno... Veré los links.

Vi el 1ero. ¡Está bueno! En mi caso la generación 18 consiguió el mejor resultado dice (no entiendo esos números), probé como 60 pero no pasan esta parte:

Me recordó a este juego:
...ahí están usando errores, pero maniobrar en el aire podría ser lo que les hace falta a los coches mutantes.

Creo que ese algoritmo tiene un problema, pero no siempre se notará. Supón que usar el arma más poderosa te mata salvo que uses también la armadura más poderosa, que también te mata si no usas el arma más poderosa. Hay un montón de armas y armaduras, el algoritmo difícilmente elija ambas en la primera generación. Luego, si sólo varía 1 de ambas cosas, nunca producirá las 2 al mismo tiempo. Cosas como esa pueden ocurrir de formas menos extremas.

Luego veo el otro link.