Author: Will Singleton
Date: 11:21:39 11/05/98
All, My program Amateur has been in development for more than a year, and does pretty well on the servers. But it's an outgrowth of an old approach to chess programming, and needs a modern search algorithm. In my old method, I manually negate alternate ply scores, using a single bound for cutoffs, and therefore must distinguish between shallow and deep cutoffs. This causes all kinds of complications and inefficiencies. Don't ask me why I stuck with this old method; something to do with being stubborn and wanting to do it "my way." So now I've implemented a standard alpha-beta negamax search, and am in the process of reworking the rest of the code to work with this search. And it's running now in a basic mode, with most extensions, nullmove, and hashing disabled. Now for the odd question: it seems I still have to negate the value from eval() on odd plys to get the thing to work! Here's a *very simplified* bit of code to explain the problem: int ab (alpha, beta) if (depth==0) return (eval()); score = -9999; gen_moves(); for all moves value = -ab(-beta,-max(alpha,score)); if (value > score) score = value; end for return score; Now assume you are doing a 1 ply search, and the eval score is 100. Since the score is negated upon return, value == -100. But that's obviously not correct, since the smallest value will be selected, not the largest. But it works if eval() negates the score on odd plies before return. I know I'm missing something simple, but what is it? Will
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.