Esta es una continuación de mi última publicación. El código funciona sin errores y puede calcular el próximo mejor movimiento. He estado investigando cómo incorporar tablas de transposición y mover el orden en mi función negamax para que funcione más rápido y con mayor precisión, pero parece algo difícil y avanzado para un principiante como yo.
Puedes encontrar mi código aquí .
Mientras investigaba en la wiki de programación de ajedrez, encontré un código de muestra para las tablas de transposición:
def negamax(node, depth, alpha, beta, color): alphaOrig = alpha ## Transposition Table Lookup; node is the lookup key for ttEntry ttEntry = transpositionTableLookup(node) if ttEntry.is_valid is True and ttEntry.depth >= depth: if ttEntry.flag == EXACT : return ttEntry.value if ttEntry.flag == LOWERBOUND: alpha = max(alpha, ttEntry.value) if ttEntry.flag == UPPERBOUND: beta = min(beta, ttEntry.value) if alpha >= beta: return ttEntry.value if depth == 0 or node is terminal_node: return color* heuristic_value_of_node childNodes = domove(node) childNodes = orderMoves(childNodes) bestValue = -99999 for child in childNodes: bestValue = max(bestValue, -negamax(child, depth - 1, -beta, -alpha, -color)) alpha = max(alpha, bestValue) if alpha >= beta: break ##Transposition Table Store; node is the lookup key for ttEntry ttEntry.value = bestValue if bestValue <= alphaOrig: ttEntry.flag = UPPERBOUND if bestValue >= beta: ttEntry.flag = LOWERBOUND else: ttEntry.flag = EXACT ttEntry.depth = depth transpositionTableStore(node, ttEntry) return bestValueIntenté hacer algunas modificaciones para integrarlo en mi código, pero no obtuve ningún resultado. También vi algo sobre almacenar claves hash con una clave Zobrist para las posiciones, pero no entendí bien cómo funcionaba, así que descarté la idea. Actualmente algo atascado con estos problemas y no sé cuál es el siguiente paso.
Para usar tablas de transposición, "necesita" usar el hash de Zorbrist. El hashing le da a cada posición un código (casi) único que almacenas en la tabla de transposición junto con su evaluación. Entonces, para explicarlo fácilmente, si la posición actual que está buscando se encuentra en su tabla de transposición, no tendrá que evaluarla nuevamente, solo use el valor almacenado.
Las claves de Zorbrist son una pesadilla para hacerlo bien y muy difíciles de depurar. Si le ayuda, puede consultar mi implementación enEndamat Chess Engine , pero dado que puede tener un enfoque diferente, podría ser más fácil leer cómo funcionan las teclas de Zorbrist e intentar hacerlo bien para su implementación.