Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: how to detect information about pawn structure based on bitboard

Author: Gerd Isenberg

Date: 05:02:27 12/17/02

Go up one level in this thread


On December 17, 2002 at 03:40:11, Uri Blass wrote:

>I think to add to my program bitboard that will be used only for pawn structure.
>
>2 numbers of 64 bits that are used for white pawns and for black pawns.
>
>I want to detect based on these bitboards a lot of information about every pawn
>and I may want to use the information together with attack tables for
>evaluation.
>
>My question is if using bitboard is a good idea to get the information and
>if the answer is positive how can I detect the information by bitboards
>
>For every pawn I want to detect the following:
>
>1)Is it a weak pawn(a pawn that can never be defended by a pawn and cannot go
>forward to promote without captures and without the risk of being captured by a
>pawn)
>2)Is it probably weak pawn(it means that the only way to defend it by a pawn is
>by capturing the opponent pawn or by letting the opponent to capture the
>potential defender by a pawn).
>
>3)Is it a pawn that is defended by a pawn and if not how many normal pawn moves
>that are not captures and do not let the opponent to capture by a pawn are
>needed to defend it by a pawn.
>
>4)Is it a passed pawn and if it is a passed pawn how many normal pawn moves are
>needed to defend it by a pawn.
>
>5)Is it a potential passed pawn(is the only way of the opponent to stop it is by
>letting the player to have another passed pawn)
>In case that it is a potential passed pawn the question is if it can be done by
>normal means or the only way to make it a passed pawn is by sacrifices
>
>Uri


Hi Uri,

OK you have pawnBB[2] with white pawns pawnBB[WHITE] and black pawns
pawnBB[BLACK]. "allPawns" combines both sets by or.

Some pawn-patterns on the fly (I'm at work and can't look to my sources):

pawnAttacksAH[WHITE]  = (pawnBB[WHITE] << 9) & 0xfefefefefefefefe;
pawnAttacksHA[WHITE]  = (pawnBB[WHITE] << 7) & 0x7f7f7f7f7f7f7f7f;
pawnAttacks[WHITE]    = pawnAttacksAH[WHITE] | pawnAttacksHA[WHITE];
pawnDblAttacks[WHITE] = pawnAttacksAH[WHITE] & pawnAttacksHA[WHITE];

hebel[WHITE]          = pawnAttacks[WHITE] & pawnBB[BLACK];
widder[WHITE]         = (pawnBB[WHITE] << 8) & pawnBB[BLACK]
                        /* & ~hebel[WHITE] */;
defended[WHITE]       = pawnAttacks[WHITE] & pawnBB[WHITE];
duo[WHITE]            = ((pawnBB[WHITE]<<8)& pawnAttacks[WHITE]
                                           & ~pawnDblAttacks[WHITE]) >> 8;

Some helpfull routines:

BitBoard fillUp(BitBoard bb)
{
	bb |= (bb<<8);
        bb |= (bb<<16);
        bb |= (bb<<32);
	return bb;
}

BitBoard fillDown(BitBoard bb)
{
	bb |= (bb>>8);
        bb |= (bb>>16);
        bb |= (bb>>32);
	return bb;
}

openPawns[WHITE] = pawnBB[WHITE] & ~filldown( fillup(pawnBB[WHITE]) & allPawns);
stop = allPawns | pawnAttacks[BLACK];
passedPawns[WHITE] = pawnBB[WHITE] & ~filldown( fillup(pawnBB[WHITE]) & stop)
                   & ~hebel[WHITE];
notDefendable[WHITE] = pawnBB[WHITE] & fillup (filldown(pawnAttacks[WHITE]));
....

oups... no more time, may be more tomorrow.

But the principle with bitboards is to get pattern sets of pawns with a desired
property rather than to determine the property for a single pawn.

Regards,
Gerd



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.