2010-05-02 8 views
13

Mucho tiempo atrás (creo que hace más de 20 años) Encontré un código fuente del juego Gomoku en una revista que escribí para mi computadora y me divertí mucho.Gomoku array-based AI-algorithm?

El juego era difícil de ganar, pero el algoritmo básico para la IA de la computadora era muy simple y no explicaba mucho código. Me pregunto si alguien conoce este algoritmo y tiene algunos enlaces a alguna fuente o teoría al respecto.

Lo que recuerdo es que básicamente asignó una matriz que cubría toda la placa. Luego, cada vez que colocaba una pieza, agregaba una cantidad de pesos a todas las ubicaciones del tablero en las que la pieza posiblemente impactaría.

Por ejemplo (tenga en cuenta que los pesos son definitivamente mal, ya que no recuerdo los):

1 1 1 
2 2 2 
    3 3 3 
    444 
1234X4321 
    3 3 3 
2 2 2 
1 1 1 

entonces simplemente escaneando la matriz de un lugar abierto con el valor más alto o más bajo.

cosas que estoy difusa en:

  • Tal vez tenía dos matrices, una para mí y otra para sí mismo y había un min/max ponderación?
  • No podría haber sido más para el algoritmo, pero en su esencia se trataba básicamente de una matriz y los números ponderados

¿Esto te suena con nadie en absoluto? Alguien tiene algo que ayudaría?

+0

Por favor, compruebe mi respuesta a una pregunta relacionada http://stackoverflow.com/questions/ 2438231 # 6000643 Comparto mi implementación de un Gomoku AI bastante simple pero fuerte – amartynov

Respuesta

5

La lectura de su descripción, y pensar un poco sobre él, creo que probablemente funciona con una sola matriz, exactamente de la manera que describiste

Para lograr el objetivo de obtener cinco en raya, tienes que (a) evitar que el oponente tenga éxito y (b) tener éxito.

Para tener éxito, tiene que colocar piedras cerca de otras piedras que ya tiene en el tablero, por lo que tiene sentido agregar una puntuación positiva para los campos junto a sus piedras que podrían participar en una fila. O bien el ejemplo lineal que dio, o algo cuadrático probablemente funcionaría bien.

Para evitar que su oponente de tener éxito, usted tiene que colocar piedras junto a sus / sus piedras. Es especialmente bueno si golpeas dos pájaros con una sola piedra, por lo que las piedras del oponente deberían aumentar el valor de los campos circundantes de la misma forma que los tuyos: cuantas más piedras ya tenga alineadas, mayor será el puntaje, y más probable será Algoritmo intentará cortar al oponente.

Lo más importante aquí es la ponderación de los diferentes campos, y si las piedras del oponente tienen un peso diferente al tuyo. Lamentablemente, no puedo evitarlo, pero los valores deberían ser razonablemente simples de descifrar mediante el método de prueba y error una vez que se haya escrito el juego.

Sin embargo, este es un enfoque muy básico, y sería superado por un algoritmo de búsqueda en árbol. Buscando en Google, hay un paper on Threat search relacionado, que aparentemente funciona bien para Gomoku.El documento está detrás de un muro de pago sin embargo:/

2

No he leído el artículo, pero a partir de la descripción creo que ha de haber alguna forma de la Minimax algorithm

1

Es un juego antiguo - He encontrado el código en Planet Source Code. Jugué este juego durante la universidad y en 286 días tenía una versión BÁSICA.

2

Vi este algoritmo que usted mencionó - fue bastante simple y rápido (sin retroceder :-)) y jugó muy bien :-) Debo tener la fuente en alguna parte pero hace mucho tiempo ... Hubo pesos para sus piedras dependiendo de la cantidad de piedras que haya cerca, y pesos de las piedras oponentes. Estos fueron más bajos, por lo que el algoritmo prefirió la estrategia de ataque.

Pero esto es, por supuesto algoritmo muy trivial. La estrategia ganadora ya ha sido encontrada. Ver este documento: L. Victor Allis, H. J. van den Herik, M. P. H. Huntjens. Go-Moku and Threat-Space Search. Me ayudó mucho cuando escribía mi propio programa. De esta forma, podrás escribir un programa que sea muy bueno para atacar al oponente y encontrar combinaciones ganadoras.