Author: Sune Fischer
Date: 17:02:54 08/14/01
Hi I have been trying to implement an AB algorithm. I have done a lot of searching on the net, the best pseudo code I found was here: http://www.xs4all.nl/~verhelst/chess/search.html#alpha-beta Something is missing though, this function returns only a value, not the best move. Seems there must be designed a function that should call this AB algo. I have tried to do so, but I'm very confused about the logic here ;) Below is pseudo code for what I have running, it is not working. I can see one problem for sure, I put alpha=-INFINITY, then pass alpha to the AB function, in it the first check is if(.... && bestvalue<alpha), so it will never run since bestvalue is also -INFINITY! So what I ask, can someone fix this code, or can you give me a link that has the full pseudo code for an alpha beta search? // called at the root to start the AB search. AMOVE ABsearch(position,depth,InTheMove) { long alpha=-INFINITY; long beta = INFINITY; long bestscore=-INFINITY; long score; AMOVE bestmove; ListOfMoves=FindAllTheMoves(position); for(i=1;NumberOfMoves) { DoMove(position,ListOfMoves[i]); score = AB(position,depth+1,alpha,beta); if(score*InTheMove>bestscore) { bestscore=score*InTheMove; bestmove=ListOfMoves[i]; } UndoMove(position,ListOfMoves[i]); } return bestmove; } long AB(position,depth,alpha,beta) { long bestscore=-INFINITY; long score,i=1; ListOfMoves=FindAllTheMoves(position); while(i<=NumberOfMoves && bestscore<alpha) { if(bestscore>alpha) alpha=bestmove; DoMove(position,ListOfMoves[i]); if (depth+1==MaxPlyDepth) return (Evaluate(position)); score = -AB(position,depth+1,-beta,-alpha); if (score>bestscore) bestscore=score; UndoMove(position,ListOfMoves[i]); i++; } return (bestscore); } // returns positive if good for white // and negative if good for black long Evaluate(position); Thanks, S. Fischer
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.