Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: No explosions

Author: David Rasmussen

Date: 15:57:39 01/11/02

Go up one level in this thread


On January 11, 2002 at 18:06:24, Matthias Gemuh wrote:

>On January 11, 2002 at 17:52:50, Uri Blass wrote:
>
>>On January 11, 2002 at 17:40:09, Matthias Gemuh wrote:
>>
>>>
>>>[D] 3r3k/3r1P1p/pp1Nn3/2pp4/7Q/6R1/Pq4PP/5RK1 w - - 0 1
>>>
>>>Even when I limit extensions to 2 !!! (instead of 1),
>>>no explosion occurs.
>>>Positive side effect is I see this mate then at ply 3 (instead of 5).
>>>My extensions are then
>>>
>>>    nLocalExt = 0; MultiVariant->nExt[nPly] = 0;
>>>    if (ChsStrct->extCheck[nPly]) { nCounters.nExtCheck++; nLocalExt += 400; }
>>>    if ((nPly >= 2)&&(ChsStrct->extCheck[nPly-2])&&(ChsStrct->extCheck[nPly]))
>>>            { nCounters.nDoubleCheck++; nLocalExt += 200; }
>>>    if ((nPly)&&(ChsStrct->extCapture[nPly-1])) {
>>>        if (ChsStrct->extCapture[nPly] == 2) { nCounters.nExtRecap++; nLocalExt
>>>+= 260; }
>>>    }
>>>    if (mate_threat) nLocalExt += 400;
>>>    if (ChsStrct->extOneMove[nPly]) nLocalExt += 400;
>>>    if (ChsStrct->extPromo[nPly]) { nCounters.nExtPromo++; nLocalExt += 400; }
>>>    if (ChsStrct->goodMoves[nPly] == 1) nLocalExt += 120;
>>>    else if (ChsStrct->goodMoves[nPly] == 2) nLocalExt += 80;
>>>    else if (ChsStrct->goodMoves[nPly] == 3) nLocalExt += 40;
>>>    nLocalExt += 5*ChsStrct->extPawnPush[nPly];
>>>    if ((nPly)&&(ChsStrct->extCapture[nPly-1])) {
>>>        if (ChsStrct->extCapture[nPly] == 1) { nCounters.nExtRecap++; nLocalExt
>>>+= 160; }
>>>    }
>>>    if ((nPly >= 2) &&
>>>((MultiVariant->megaMove[nPly-1]-MultiVariant->megaMove[nPly-2]) > PAWNVALUE) &&
>>>        ((MultiVariant->megaMove[nPly-1]-MultiVariant->megaMove[nPly-2]) < >>2*PAWNVALUE))
>>>                { nCounters.nExtMegaMove3++; nLocalExt += 60; }
>>>    if (nPly >= 2) {
>>>        if ((MultiVariant->megaMove[nPly-1]-MultiVariant->megaMove[nPly-2]) >
>>>3*PAWNVALUE)
>>>                { nCounters.nExtMegaMove1++; nLocalExt += 180; }
>>>        else if ((MultiVariant->megaMove[nPly-1]-MultiVariant->megaMove[nPly-2])
>>>> 2*PAWNVALUE)
>>>                { nCounters.nExtMegaMove2++; nLocalExt += 120; }
>>>    }
>>>    nLocalExt /= 400; if (nLocalExt < 0) nLocalExt = 0;
>>>    nLocalExt = min(2, nLocalExt); MultiVariant->nExt[nPly] = nLocalExt;
>>>
>>>
>>>400 pts = 1 ply
>>>I have just increased 1 reply from 300 to 400, still no explosion.
>>>Store your extensions locally at the nodes!! That is the key.
>>
>>I do not understand this code because I do not know
>>the meaning of the variables
>>
>>I am not going to look at it for many hours in order to try to guess the meaning
>>of the variables.
>>
>>Guessing the meaning of part of them correctly is not enough.
>>Can other programmers understand the meaning of this code?
>>
>>Uri
>
>
>
>The code was not meant for you.
>If David Rasmussen does not understand any part of it,
>he will ask me and I will clearify him. Don't think I have
>lots of time to explain things unnecessarily.
>Stick to your tscp clone.
>
>Matthias.

I don't know if I understand it, I am not going to try. I assume you are just
doing standard stuff here. My own code is way simpler (at least to me), and I
think everyone can understand it:

	/*
	 * Extend the search depth if an
	 * interesting move was made at
	 * the previous ply.
	 */

	int extension = 0;

	// Check Extension
	if (inCheck)
	{
		extension += CHECK_EXTENSION;
	}

	// Pawn Push Extension
	if (MyPiece(currentMove[ply - 1]) == PAWN)
	{
		if (pos.turn == WHITE)
		{
			if (Rank(To(currentMove[ply - 1])) >= RANK7)
				extension += PAWN_EXTENSION;
		}
		else
		{
			if (Rank(To(currentMove[ply - 1])) <= RANK2)
				extension += PAWN_EXTENSION;
		}
	}

	// Recapture Extension
	if (ply > 1 &&
		To(currentMove[ply - 1]) == To(currentMove[ply - 2]) &&
		pieceValue[Capture(currentMove[ply - 2])] ==
		pieceValue[Capture(currentMove[ply - 1])]
		)
	{
		if (!(AttacksTo(pos,To(currentMove[ply - 1])) &
			pos.occupied[Opposite(pos.turn)]))
		{
			// There was only one recapture
			extension += RECAPTURE_EXTENSION;
		}
	}

	// Limiting Extensions
	if (extension > ONE_PLY)
		extension = ONE_PLY;

	// One Reply Extension
	if (inCheck)
	{
		if (numberOfMoves == 1)
			extension += ONE_REPLY_EXTENSION;
	}

	depth += extension;

Anyway, it's not important. What's important is that I have some sort of
extension "bug", or at least I don't understand what's going on. Sure, there
could be some line where the king is being chased around the board with a lot of
check and one reply extensions. Who knows. I will check it later.

/David



This page took 0.01 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.