Pregunta

Una vez escribí una IA de Tetris que jugaba bastante bien a Tetris. El algoritmo que utilicé ( descrito en este documento ) es de dos pasos proceso.

En el primer paso, el programador decide hacer un seguimiento de las entradas que son "interesantes" al problema En Tetris podríamos estar interesados ??en rastrear cuántos espacios hay en una fila porque minimizar los espacios podría ayudar a colocar piezas futuras con mayor facilidad. Otra podría ser la altura promedio de la columna porque puede ser una mala idea correr riesgos si está a punto de perder.

El segundo paso es determinar los pesos asociados con cada entrada. Esta es la parte donde utilicé un algoritmo genético. Cualquier algoritmo de aprendizaje funcionará aquí, siempre que los pesos se ajusten con el tiempo en función de los resultados. La idea es dejar que la computadora decida cómo se relaciona la entrada con la solución.

Usando estas entradas y sus pesos podemos determinar el valor de tomar cualquier acción. Por ejemplo, si colocar la forma de línea recta hasta el final en la columna derecha eliminará los espacios de 4 filas diferentes, entonces esta acción podría obtener una puntuación muy alta si su peso es alto. Del mismo modo, colocarlo en la parte superior en realidad podría causar brechas y, por lo tanto, la acción obtiene una puntuación baja.

Siempre me he preguntado si hay una manera de aplicar un algoritmo de aprendizaje al primer paso, donde encontramos "interesante". Insumos potenciales. Parece posible escribir un algoritmo donde la computadora primero aprende qué entradas podrían ser útiles, luego aplica el aprendizaje para sopesar esas entradas. ¿Se ha hecho algo así antes? ¿Ya se está utilizando en alguna aplicación de IA?

¿Fue útil?

Solución

En las redes neuronales, puede seleccionar entradas potenciales 'interesantes' al encontrar las que tienen la correlación más fuerte, positiva o negativa, con las clasificaciones para las que está entrenando. Me imagino que puedes hacer lo mismo en otros contextos.

Otros consejos

Creo que podría abordar el problema que está describiendo al proporcionar datos más primitivos a un algoritmo de aprendizaje. Por ejemplo, la lista de celdas ocupadas puede describir un estado de juego de tetris. Una cadena de bits que describa esta información sería una entrada adecuada para esa etapa del algoritmo de aprendizaje. en realidad entrenar en eso sigue siendo un desafío; ¿Cómo saber si esos son resultados útiles? Supongo que podría enrollar todo el algoritmo en un solo blob, donde el algoritmo se alimenta con los sucesivos estados de juego y la salida sería solo la colocación de bloques, con algoritmos de puntuación más altos seleccionados para las generaciones futuras.

Otra opción podría ser utilizar un gran corpus de obras de otras fuentes; tales como jugadas grabadas de jugadores humanos o un ai hecho a mano, y seleccione los algoritmos cuyas salidas tienen una fuerte correlación con algún hecho interesante u otro del juego futuro, como la puntuación obtenida en los próximos 10 movimientos.

Sí, hay una manera.

Si elige M características seleccionadas, hay 2 ^ M subconjuntos, por lo que hay mucho que ver. Me gustaría lo siguiente:

For each subset S
   run your code to optimize the weights W
   save S and the corresponding W

Luego, para cada par S-W, puede ejecutar juegos G para cada par y guardar el puntaje L para cada uno. Ahora tiene una tabla como esta:

feature1    feature2    feature3    featureM   subset_code game_number    scoreL
1           0           1           1           S1         1              10500
1           0           1           1           S1         2              6230
...
0           1           1           0           S2         G + 1          30120
0           1           1           0           S2         G + 2          25900

Ahora puede ejecutar un algoritmo de selección de componentes (PCA, por ejemplo) y decidir qué características valen la pena explicar scoreL.

Un consejo: al ejecutar el código para optimizar W, siembra el generador de números aleatorios, de modo que cada 'cerebro evolutivo' diferente se pruebe con la misma secuencia de piezas.

¡Espero que ayude en algo!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top