/ Vrátenie hlavnej variácie. - Python, šach

Hlavná zmena vracania. - python, šach

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ď č. 1

Choď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.