Author: Bruce Moreland
Date: 17:12:49 03/21/00
Go up one level in this thread
On March 21, 2000 at 20:06:10, Andrei Fortuna wrote:
>In my chess program Freyr I've used simple alpha beta from the start, each time
>I tried to change it to pvs/negascout it didn't work as expected because it just
>generated too many nodes. Does anyone else experienced this behavior ? Is there
>a logical explanation for this ?
>
>First I thought I needed better move ordering, so I used SEE for ordering
>captures and history scores for non-captures, but the efect was the same.
>
>Then I rewrote the search function, making it as simple as possible, generate
>all moves from the start, score captures based on SEE and non captures based on
>history scores (making sure that the SEE scores are a few orders of magnitude
>higher than history scores so winning captures get first), then sort the move
>list and process moves, no hashtable or any other trick. To my disapointment the
>simple AB was again generating much more less nodes than my PVS.
>
>Here's an approximation of the simplified code I used :
>
>Search(alpha, beta, depth, ply)
> if (depth <= 0)
> return Quiescence(...)
>
> [generate all moves]
> [score moves based on SEE and history]
> [sort moves based on score]
>
> moves_searched = 0;
>
> for each move m {
> make move(m)
>
> #if USE_AB
> score = -Search(-beta, -alpha, ...)
> #else // pvs
> if (moves_searched == 1)
You want == 0 here. This is almost certainly the cause of your problem, because
you use the wide window only on the second move you try.
bruce
> score = -Search(-beta, -alpha, ...)
> else {
> score = -Search(-alpha-1, -alpha, ...)
> if (score > alpha && score < beta)
> score = -Search(-beta, -alpha, ...)
> }
> #endif
>
> unmake move(m)
>
> if (score > alpha){
> if (score >= beta)
> return score;
> alpha = score;
> }
>
> moves_searched++;
> }
>
> return alpha
This page took 0.01 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.