MTD(f) es un algoritmo de búsqueda en árbol de juego alfa-beta modificado para usar límites de búsqueda iniciales de 'ventana cero' y memoria (generalmente una tabla de transposición ) para reutilizar resultados de búsqueda intermedios. MTD(f) es una forma abreviada de MTD(n,f), que significa Controlador de prueba mejorado con memoria con nodo 'n' y valor 'f'. [ 1 ] La eficacia de este paradigma depende de una buena estimación inicial y de la suposición de que el valor minimax final se encuentra en una ventana estrecha alrededor de la estimación (que se convierte en un límite superior/inferior para la búsqueda desde la raíz). La estructura de memoria se utiliza para guardar una estimación inicial determinada en otro lugar.
MTD(f) se introdujo en 1994 y suplantó en gran medida a NegaScout (PVS), el paradigma de búsqueda dominante hasta entonces para el ajedrez , las damas , el othello y otros autómatas de juegos.
Origen
MTD(f) se describió por primera vez en un Informe Técnico de la Universidad de Alberta cuyos autores fueron Aske Plaat, Jonathan Schaeffer, Wim Pijls y Arie de Bruin, [ 2 ] que posteriormente recibiría el premio ICCA Novag a la Mejor Publicación de Ajedrez por Computadora de 1994/1995. El algoritmo MTD(f) se creó a partir de un esfuerzo de investigación para comprender el algoritmo SSS* , un algoritmo de búsqueda primero el mejor inventado por George Stockman en 1979. [ 3 ] Se descubrió que SSS* era equivalente a una serie de llamadas de poda alfa-beta|alfa-beta, siempre que alfa-beta utilizara almacenamiento, como una tabla de transposición.
El nombre MTD(f) significa Controlador de Pruebas con Memoria Mejorada, en referencia al algoritmo de prueba de Judea Pearl , que realiza búsquedas de ventana cero. MTD(f) se describe en detalle en la tesis doctoral de Aske Plaat de 1996.
Búsquedas de ventana cero
Una búsqueda de "ventana cero" es una búsqueda alfa-beta cuyos límites superior e inferior son idénticos, o difieren en una unidad, de modo que se garantiza que el valor de retorno caerá fuera de los límites (o, en un caso excepcionalmente afortunado, será igual al límite).
MTD(f) obtiene su eficiencia al realizar únicamente búsquedas alfa-beta de ventana cero, con un límite "bueno" previamente determinado (es decir, beta). En MTD(f), AlphaBeta falla por alto o por bajo, devolviendo un límite inferior o un límite superior para el valor minimax, respectivamente. Las llamadas de ventana cero provocan más cortes, pero devuelven menos información: solo un límite para el valor minimax. Para encontrar el valor minimax, MTD(f) llama a AlphaBeta varias veces, convergiendo hacia él y finalmente encontrando el valor exacto. Una tabla de transposición almacena y recupera en memoria las porciones del árbol previamente buscadas para reducir la sobrecarga de volver a explorar partes del árbol de búsqueda. [ 4 ]
Pseudocódigo
La función MTDF(raíz, f, d) es g := f límite superior := +∞ límite inferior := − ∞ mientras lowerBound < upperBound hacer β := max(g, límite inferior + 1) g := AlphaBetaWithMemory(root, β − 1, β, d) si g < β entonces límite superior := g demás límite inferior := g devolver g
f- Primera estimación para obtener el mejor valor. Cuanto mejor sea, más rápido convergerá el algoritmo. Podría ser 0 en la primera llamada.
d- Profundidad para iterar. Se podría realizar una búsqueda en profundidad iterativa llamando
MTDF()varias veces con incrementody proporcionando el mejor resultado anterior enf. [ 5 ]
AlphaBetaWithMemoryes una variante de Alpha Beta Search que almacena en caché los resultados anteriores.
Descripción
MTD(f) llama a las búsquedas de ventana cero desde la raíz del árbol. MTD(f) depende de una tabla de transposición para funcionar de manera eficiente. [ 6 ]
Las búsquedas con ventana cero alcanzan su límite antes que las búsquedas con ventana amplia. Por lo tanto, son más eficientes, pero, en cierto sentido, también menos tolerantes que las búsquedas con ventana amplia. Sin embargo, las ventanas de búsqueda más amplias son más tolerantes para motores con grandes fluctuaciones entre pares e impares y funciones de evaluación de grano fino. Por esta razón, algunos motores de ajedrez no han adoptado MTD(f).
En pruebas con programas de calidad profesional como Chinook (damas), Phoenix (ajedrez) y Keyano (Othello), el algoritmo MTD(f) superó a todos los demás algoritmos de búsqueda. [ 4 ] Se sugiere que algoritmos recientes como Best Node Search superan a MTD(f).
Referencias
- ↑ Johannes Fürnkranz; Miroslav Kubat (2001). Máquinas que aprenden a jugar . Nova Publishers. págs. 95–. ISBN 978-1-59033-021-0.
- ↑ "Estrategias adaptativas de MTD-f para juegos reales" . Universidad de Agricultura y Tecnología de Tokio. K SHIBAHARA et al.
- ↑ Teófilo González; Jorge Díaz-Herrera; Allen Tucker (7 de mayo de 2014). Manual de informática, tercera edición: Ciencias de la computación e ingeniería de software . CRC Press. págs. 38–. ISBN 978-1-4398-9853-6.
- 1 2 Plaat, Aské; Jonathan Schaeffer; Wim Pijls; Arie de Bruin (noviembre de 1996). "Los mejores algoritmos Minimax de profundidad fija" . Inteligencia artificial . 87 ( 1– 2): 255– 293. doi : 10.1016/0004-3702(95)00126-3 .
- ↑ «Aske Plaat: MTD(f), un nuevo algoritmo de ajedrez» .
- ↑ Cuando se utiliza MTD(f) en programas que sufren un marcado efecto par-impar, donde la puntuación en la raíz es mayor para profundidades de búsqueda pares y menor para profundidades de búsqueda impares, es recomendable usar valores separados para f para iniciar la búsqueda lo más cerca posible del valor minimax. De lo contrario, la búsqueda requeriría más iteraciones para converger en el valor minimax, especialmente para funciones de evaluación de grano fino.
Enlaces externos
- Descripción del algoritmo MTD(f)
- Algoritmos de búsqueda