Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: strange Q search of Rebel

Author: Uri Blass

Date: 05:04:42 12/27/03

Go up one level in this thread


On December 27, 2003 at 07:01:49, José Carlos wrote:

>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.

I understand

My try_to_prune is inside search

I have
for allmoves
1)makemove and evaluate
2)search

search includes
a)calculate extensions and pruning in order to know the remaining depth
b)decide if to return beta based on evaluation and remaining depth and more
factors
c)if (depth<1 ply) call qsearch
d)try null move search and continue with e in case that null move does not tell
you no threat
e)for all moves
1)makemove and evaluate
2)search

I probably need to rewrite it in order to push a,b,c,d out of search.

Uri



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.