Ahoj! Robím šachový motor a keďže by som chcel implementovať iteratívne prehĺbenie, musím nájsť hlavnú variáciu (sled pohybov, ktoré motor považuje za optimálne). Ale v pythone som nenašiel na webe žiadne príklady pseudokódu a keďže moja funkcia alphabeta je rekurzívna, naozaj ju ťažko pochopím.
Mohli by ste mi, prosím, uviesť niekoľko rád alebo príklad pseudokódu, ako sa to dá urobiť? Ďakujem mnohokrát.
Toto je moja alfa beta funkcia, ktorá práve vracia hodnotenie pohybu, nie samotný ťah:
def alphaBeta(self, board, rules, alpha, beta, ply, player):
""" Implements a minimax algorithm with alpha-beta pruning. """
if not ply:
return self.positionEvaluation(board, rules, player)
move_list = board.generateMoves(rules, player)
if not len(move_list):
return self.mateCheck(rules, board, player, ply)
for move in move_list:
board.makeMove(move, player)
current_eval = -self.alphaBeta(board, rules, -beta, -alpha, ply - 1, board.getOtherPlayer(player))
board.unmakeMove(move, player)
if current_eval >= beta:
return beta
elif current_eval > alpha:
alpha = current_eval
return alpha
odpovede:
0 pre odpoveď č. 1Choďte na vyhľadávanie NegaMax. Nasleduje príklad:
function negamax(node, depth, α, β, color)
if node is a terminal node or depth = 0
return color * the heuristic value of node
else
foreach child of node
val := -negamax(child, depth-1, -β, -α, -color)
{the following if statement constitutes alpha-beta pruning}
if val≥β
return val
if val≥α
α:=val
return α
Keď sa volajú, argumenty α a β by sa mali nastaviť na najnižšiu a najvyššiu možnú hodnotu pre každý uzol a farba by sa mala nastaviť na 1.
(* Initial call *)
negamax(origin, depth, -inf, +inf, 1)
S negamaxom môžete vždy vykonať alfa beta orezávanie
P.S: Už som implementoval online šachovú platformu. Ak chcete získať referenciu: skontrolovať šach
Vždy môžete vidieť kód na strane klienta, ale skutočná logika pohybov a ches hier je implementovaná na strane servera.