Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Single-response extension

Author: Robert Hyatt

Date: 14:07:50 09/14/04

Go up one level in this thread


On September 14, 2004 at 12:20:47, Jeff GAZET wrote:

>>>Good morning,
>>>
>>>in the main search, before the moves loop, i have the basic "In Check" extension
>>>(which add one ply).
>>>If there is only one legal move and the king is in check, this is interesting to
>>>extend one more ply. But i read that this is a bad idea to extend more than one
>>>ply, so i limit to one ply max.
>>>Then, "Single-response extension" is useless in this case :
>>>
>>>search(depth,alpha,beta)
>>>	{
>>>	int extend=0;
>>>	...
>>>	if(InCheck=incheck(side)) extend+=ONEPLY;
>>>	if(InCheck && side_has_only_one_legal_move) extend+=ONEPLY;
>>>
>>>	// limit extensions
>>>	if(extend>ONEPLY) extend=ONEPLY;
>>>
>>>	for(each move) {...}
>>>	...
>>>	}
>>>
>>>How is it possible to use both "Incheck" and "Single-response" extensions ?
>>>
>>>Thanks.
>
>>Two choices.  Use the deep blue approach that says no more than two extensions
>>every two plies.  I tried that but did not like it.
>>
>>In crafty, I extend on the ply where I check the opponent, and then the
>>one-legal-reply extension is done on the next ply where I notice I have only one
>>legal move, ie one extension per ply...
>
>Thank you all.
>I prefer your "Crafty" choice but i don't understand at all, i must miss
>something, maybe in translation :-) Here is what i understood, is that right ?
>
>search(depth,alpha,beta)
>	{
>	int extend=0;
>	...
>	if(InCheck=incheck(side)) extend+=ONEPLY;
>
>	// limit extensions
>	if(extend>ONEPLY) extend=ONEPLY;
>
>	for(each move)
>		{
>		domove();
>		if(this_is_the_only_one) extend+=ONEPLY;
>		...
>		}
>	...
>	}


That is backward.  More like this:

Search() {

  GenerateMoves();
  if (only_one_move) depth+=1;

  while (move = NextMove()) {
    MakeMove();
    if (InCheck(-side)) depth+=1;
    v = - Search( etc);
    UnmakeMove();
  }
}

IE extend if the move checks the opponent at ply=X.  Extend if only one legal
move at ply=X+1;




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.