[SRC] IA - Juego 3 en Raya con Poda Alfa-Beta

Iniciado por Maurice_Lupin, 14 Mayo 2012, 23:14 PM

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

Maurice_Lupin

Encontre hace tiempo el juego del 3 en raya o Gato implementado con el algoritmo MiniMAx.

Aqui sus créditos del autor del Gato con Minimax
* Autor: Francisco I. Leyva
* Página web: http://www.panchosoft.com

Indagando con google logré implementar la Poda Alfa-Beta a este juego, y
la opción de cambiar la apariencia con LookAndFeel dejo los créditos
del autor inicial por supuesto.

Sobre Poda Alfa-Beta hay mucho material en la web, pero no muchos ejemplos concretos dejo el proyecto completo =).

Capturas:



Código (java) [Seleccionar]

       // Poda Alfa-Beta con profundidad
       private Movement MiniMaxAlphaBetaDepth(Board board,int player,int depth,int alpha,int beta)
           { if (board.GameEnded() || depth==6)
               { Movement mov = new Movement();
                 //mov.Value = board.Winner();
                 mov.Value = Utilidad(board.iTablero);                  
                 return mov;
               }
             else
               { Vector successors = board.GetAllowedMovements(true);
                 Movement best = null;
                 for ( Iterator ite = successors.iterator(); ite.hasNext(); )
                   { int successor = (Integer)(ite.next());
                     Board successorBoard = (Board)board.Clone();
                     successorBoard.ApplyMovement(successor);                      
                     Movement tmp = MiniMaxAlphaBetaDepth(successorBoard, -player, depth+1, alpha, beta);
                     
                     if (best == null || (player == -1 && tmp.Value < best.Value) ||
                                         (player == 1 && tmp.Value > best.Value))                          
                        { tmp.Position = successor;
                          best = tmp;                          
                        }                      
                     if (player == -1 && best.Value < beta)
                        { beta = best.Value; }
                     if (player == 1 && best.Value > alpha) alpha = best.Value;
                     if (alpha > beta) return best;                    
                   }
                 return best;
               }
           }  



Proyecto en google docs
Un error se comete al equivocarse.

1mpuls0

Gracias!
Lo revisaré a ver qué tal.

Saludos.
abc

Maurice_Lupin

Me parece un tema interesante, asi q lo revivo.

;D
Un error se comete al equivocarse.

.rn3w.

son muchas clases para descargar... sera k lo puedes subir lo k ya descargaste tu_? porfaaaa

Maurice_Lupin

Hola bjpenn no pesa nada, sólo haz click Aquí y en la parte superior izquierda esta: Archivo -> Descargar

Y listo se descargará el comprimido.

Saludos.
Un error se comete al equivocarse.

.rn3w.


Proteus1989

He echado un ojo al proyecto pero depende de una librería gráfica que no logro encontrar por internet.
Sabéis algo?

Maurice_Lupin

Cita de: Proteus1989 en  4 Octubre 2012, 22:01 PM
He echado un ojo al proyecto pero depende de una librería gráfica que no logro encontrar por internet.
Sabéis algo?

El proyecto es de Netbeans, requiere tenerlo bien instalado y el jdk obviamente.
Aqui el link de Netbeans incluido el jdk: http://www.oracle.com/technetwork/java/javase/downloads/jdk-7-netbeans-download-432126.html
Un error se comete al equivocarse.

Proteus1989

Amiiiiiiiiiigo. Yo estaba abriendolo desde eclipse y no encontraba librerías que supongo ya vendrán por defecto solo en el Netbean.
Gracias por la aclaración, voy a testearlo un rato porque este año doy IA y tengo que hacer un 4 en linea para la carrera y este puede ser un buen apoyo en mi tarea.

oriaj3

Buenas alguien me puede ayudar con la explicación de todas las funciones, necesito portar la poda alfa beta a un proyecto propio y no entiendo un par de cosillas del código posteado.