Vous êtes sur la page 1sur 4

Algoritmo Alfa-beta

Respecto a Minimax, el algoritmo Alfa-beta slo presenta una mejora de eficiencia. Aade una funcin
de poda que reduce los clculos y el tiempo de ejecucin.

Algoritmo Alfa-beta: V(N, , )
Entrada: Nodo N, valores y
Salida: valor minimax de dicho nodo

Si N es nodo hoja entonces devuelve f(N)
sino
Generar los nodos hijos de N: N
1
, N
2
, , N
b
(b: nmero de hijos)
Si N es un nodo MAX entonces
Para k = 1 hasta hacer
= max[, V(N
k
, , b)]
Si entonces devolver FinSi
Si k = b entonces devolver FinSi
FinPara
sino
Para k = 1 hasta hacer
= min[, V(N
k
, , )]
Si entonces devolver FinSi
Si k = b entonces devolver FinSi
FinPara
FinSi
FinSi

En este caso, cuando el jugador mquina quiera escoger entre uno de los movimientos posibles,
ejecutar el algoritmo pasndole como referencia el nodo con el tablero y el jugador, blanco o negro,
asociado. Los valores iniciales de y sern - y + respectivamente.
De momento, tanto el algoritmo Alfa-beta como Minimax, slo nos devuelve el valor minimax del
mejor nodo al que podemos acceder, pero eso no es lo que necesitamos. Cuando se ejecuta alguno de
estos dos algoritmos, lo que se busca es el mejor movimiento que se puede efectuar, el que nos permita
alcanzar la mejor situacin final posible; con el valor minimax no vamos a ningn lado. Es necesario que
el algoritmo nos indique qu movimiento tenemos que elegir para alcanzar el nodo de ese valor minimax
que s nos devuelve.
Una posible solucin a este problema es aadir una variable global que se actualice cada vez que el
valor de o cambien dentro del bucle for. Adems, al ser un algoritmo recursivo, hay que tener en
cuenta que slo debe actualizarse si el cambio se produjo desde el nivel 2 del rbol.
En la prctica, el algoritmo Alfa-beta se implementa en el mtodo alfaBeta de la clase
JugadorMaquina. Recibe los mismos parmetros que la implementacin de Minimax aadiendo 2 ms:
Tablero tablero: Es el tablero sobre el que se va a trabajar.
int jugador: Nmero del jugador. 1 si es blancas o 2 si es negras. Sirve para clasificar el nodo
como MAX o MIN.
int nivelActual: Nmero del nivel actual. Se decrementa en cada llamada recursiva.
int nivelesTotales: Cantidad de niveles mximos que explorar el algoritmo.
int alpha: Valor que se propaga en cada llamada recursiva.
int beta:






















Secciones de cdigo importantes

movimientosPosibles: Este mtodo de la clase Tablero genera una Array de movimientos.
Se encuentra en la clase Tablero.java.
funcionEvaluacion: Hay 4 funciones de evaluacin en la clase Tablero.java. Son mtodos
de la clase Tablero que evalan el tablero en cuestin y devuelven dicho valor.
alfaBeta, minimax Estos mtodos son la implementacin de los algoritmos. Son mtodos
de la clase
JugadorMaquina. Se encuentran en la lnea 174, 262 y 330 respectivamente.
run Es el mtodo que se procesa al ejecutar un hilo. Se encarga de llamar a alguno de los
algoritmos para calcular el movimiento una cantidad de niveles determinada desde la
interfaz de usuario. Lnea 42 del fichero JugadorMaquina.java.

Clases JAVA
Clase Interfaz: Esta clase contiene diferentes libreras de java que permiten hacer interfaces
grficas, como son awt y swing. En esta clase se definen y configuran los principales
elementos del juego; la ventana, los botones, las opciones, el tablero, las fichas, etc. En esta
clase se gatillan los diferentes mtodos que permiten el desarrollo lgico del juego.
Clase Juego: Esta clase implementa los mtodos de acceso a las variables del juego.
Permite llamar a un elemento tablero y jugador o jugadores y gestionar los turnos en los
que mueve cada jugador o computador.
Clase Jugador: Indica el estado en que se encuentra el jugador, ya sea jugando, analizando
o esperando.
Clase JugadorMaquina: En esta clase se encuentra implementado el algoritmo minimax y
alfabeta con n niveles de profundidad, el cual obtiene todos los posibles movimientos que
puede realizar la mquina, maximizando su propio juego y minimizando el juego del
oponente. El algoritmo recorre los hijos y calcula de forma recursiva el valor mnimo y
devolviendo el mayor, cuando lo obtiene, actualiza la rama y devuelve el valor (casilla) a
mover.
Clase Main : Es la clase principal del proyecto y es donde se invoca un nuevo juego y se
configura los valores y atributos de la ventana ( tamao, visibilidad, botn cerrar) .
Clase Movimiento: La clase movimiento permite mover las fichas en forma diagonal y
validar dichos movimientos, en caso de no ser un movimiento valido, no se permitir dicha
accin.
Clase Posicin: La clase posicin obtiene las coordenadas y coloca las posiciones de las
fichas cuando son solicitadas por otros mtodos.
Clase Tablero: La clase tablero est definida como una matriz de 8 x 8 en la cual se crea y
se llama a un nuevo elemento de tipo tablero, no es un elemento visual, es la copia de la
matriz visual que permite obtener los movimientos y almacenarlos para luego procesarlos
con diferentes mtodos que se encuentran en esta clase. Algunos de estos mtodos son :
movimientoValido, quedanMovimientos, inicializarTablero, limpiarTablero, etc.

Vous aimerez peut-être aussi