Author: Robert Hyatt
Date: 21:15:59 02/03/99
Go up one level in this thread
On February 03, 1999 at 22:54:36, James Robertson wrote: >Help!! >I am trying to implement null move into my program. Unfortunately, I have spent >a ton of time and gotton nowhere. I thought I had it when my program won it's >first ever game against EXchess, but realized it was a fluke when it hung first >a bishop and then a queen against Faile. Then I found a huge bug, and after >fixing, the null move doesn't seem to be speeding up the search at all. Anyway, >here is my AB code: what am I doing wrong? > >int AB (int wtm, int alpha, int beta, int depth, int ply, int do_null) { > > if (do_null && NotInCheck()) { > if (depth > 3) score = -AB(wtm^1, -beta, -beta+1, depth-3, ply+1, false); > else score = -Quiesce(wtm^1, -beta, -alpha, ply+1); > if (score >= beta) return beta; > } > > GenMoves(); > while (moves){ > MakeMove(); > score = -AB(wtm^1, -beta,-alpha,depth-1,ply+1,true); > UnMakeMove(); > if (score > alpha) SavePV(); > if (score >= beta) return beta; > } >} > >Thanks for any help! > >James I'd suggest looking at crafty source, module=search.c, near the top. Which shows this... A couple of things I see however... 1. you have to be very careful with things like en passant status. Since a null-move _must_ clear this before going to the next ply... 2. don't do this if there are no pieces (only pawns) left for the side on move, otherwise zugzwang will cause problems. Do it _carefully_ if there is only one piece for the side on move. 3. don't forget to handle the EP status in your hash key if you keep it there (as I do).
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.