Author: José Carlos
Date: 04:01:49 12/27/03
Go up one level in this thread
On December 26, 2003 at 20:37:52, Uri Blass wrote:
>On December 26, 2003 at 18:15:55, José Carlos wrote:
>
>>On December 26, 2003 at 16:09:32, Uri Blass wrote:
>>
>>>On December 26, 2003 at 15:59:29, Tony Werten wrote:
>>>
>>>>On December 25, 2003 at 06:29:31, rasjid chan wrote:
>>>>
>>>>Ed has a different structure in his search.
>>>>
>>>>Most people have:
>>>>search
>>>>{
>>>> evaluate
>>>> for all moves do
>>>> make move
>>>> call search
>>>> unmake move
>>>> next
>>>>}
>>>>
>>>>Ed uses:
>>>>search
>>>>{
>>>> for all moves do
>>>> make move
>>>> evaluate
>>>> call search
>>>> unmake move
>>>> next
>>>>}
>>>>
>>>>The different location of evaluate causes all the differences like <=alpha
>>>>instead of >=beta etc
>>>>
>>>>Tony
>>>
>>>I do not understand.
>>>
>>>How the fact that I evaluate at a different place make the difference?
>>>
>>>Note that I also evaluate every node but I do not see how it changes alpha and
>>>beta.
>>>
>>>Uri
>>
>> Because if you evaluate after making the move, your looking at the position
>>from the other side (for the opponent), so now "your" alpha is the opponent's
>>"beta" and vicecersa.
>>
>> José C.
>
>You are right only if makemove does not change the side to move.
>
>The only reason that I see not to change the side to move is some speed
>improvement because it is possible that you will not need to do it thanks to
>pruning but I wonder how many programmers really do not change the side to move
>during make move and if the reason was really the thoughts of
>some probably less than 1% speed improvement.
>
>I have in my program side=1^side both in make move and unmake move when side is
>a global varaible that is the side to move.
>
>Uri
No. It has nothing to do with that. Let me show some pseudocode:
//////////////////////////////////////////////////////////////////
for all moves // white to move in this node, alpha = 0, beta = 50
{
MakeMove(); // black to move after this
Evaluate(); // we get a score from black side, for example 10
TryToPrune(); // now we want to prune for black against beta, so we need
// to ask "is -10 < alpha?". The answer is yes, so black
// fails high and we (white) can ignore this move
if (pruned)
continue;
Search();
etc...
}
//////////////////////////////////////////////////////////////////
Note that I don't know if Ed does this. It's been a long time since I read his
web page. I'm only answering to the alpha beta switch question.
José C.
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.