Computer Chess Club Archives


Search

Terms

Messages

Subject: The Alpha-Beta search!

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.