Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Caution K v KBN and lazy eval or futility

Author: Andrew Williams

Date: 09:03:30 05/15/00

Go up one level in this thread


On May 14, 2000 at 22:47:34, Jon Dart wrote:

>On May 14, 2000 at 16:53:46, Brian Richardson wrote:
>
>>This was discussed in ICCA Vol 21 # 2 (Extended Futility and Dark Thought).  I
>>also have tried various regular futility, extended futility and razoring (as
>>outlined in the ICCA article), but they did not seem to help, at least given
>>Tinker's mix of searching algorithims.
>>
>>Anyone else getting "good" results with them?
>
>Arasan has used razoring for the past couple of versions. It is helpful
>but the improvement over no razoring is not dramatic.
>

I've tried razoring, but my program didn't seem to like it.

>I looked at Heinz's book but I didn't find his pseudocode (Figure 3.1)
>immediately useful, because it assumes that search() starts with making
>a move, while most people's search() routine will start with move
>generation and will then search the generated moves.
>

I found it confusing when I read it in the JICCA. In fact when I first
implemented it I had a comment to remind myself that what I had was in
fact functionally equivalent to Ernst's code, even though it looked
different. Here is what I have at the moment:

/*
This is near the top of my alphabeta(...) routine, just after I check to see
if any extensions are necessary. DEPTH is the target depth after extensions
have been added. UB is the external upper bound in my mtd(f) implementation.
In this context, it is the equivalent of beta in PVS programs. I'm experimenting
with this at the moment, and I'm using simple_material_score() instead of
evaluate(), because evaluate() is very expensive in my program. Using evaluate()
should be safer
*/
if(ply >= DEPTH) {
	abNodes--;
	return quiesce(ply, DEPTH, alpha, beta);
} else if(!inChk && (ply == (DEPTH-1)) && pcesLeft[WHITE] &&  pcesLeft[BLACK]) {
	int sMS;

	sMS = simple_material_score();

	if(sMS >= (UB + 450)) {
		return UB;
	}
}

/*
I was chatting with Pete McKenzie the other day about extended futility and
saying that it was causing my program to do stupid things. I realised after
that I had made a mistake in implementing it, so I'll have to try it again.
This is what it should look like (I think).
*/
  else if( (extensionsAtPly[ply] < ONEPLY) &&
            (ply == (DEPTH-2)) &&
            pcesLeft[WHITE] && pcesLeft[BLACK] )
   {
	int sMS;

	sMS = simple_material_score();

	if(sMS >= (UB + 950)) {
		return UB;
	}
}

Obviously, 450 and 950 are arbitrary numbers which could really be
anything. If any of this doesn't look right to anyone, I'd be more
than interested in hearing about it.

Andrew



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.