Computer Chess Club Archives




Subject: Re: Crafty-IsiChess,CCT4,r11 ==> A move to avoid?

Author: Gerd Isenberg

Date: 02:25:32 01/31/02

Go up one level in this thread

On January 30, 2002 at 19:56:20, Dieter Buerssner wrote:

>On January 30, 2002 at 17:59:18, Gerd Isenberg wrote:
>>I use some easy generated Bitboards for Pawns, blocked by enemy Pawns (Widder)
>>and Backward Pawns. If most of the pawns are Widder or backward but no Hebel
>>(pawn may capture pawn), the pawn position is considered as blocked.
>Gerd, this all sounds very interesting. How do you detect backward pawns and
>"Hebel" (pawn levers?) by Bitboard operations? Would you consider in white
>Pa6,b5, black Pa7 the pawn b5 backward? I thought about some such things, but I
>found it not very easy to find convincing rules without many exceptions and easy
>to calculater for the "blockedness" of the pawn structure.

First there is a set of polymorph functions to detetermin pawn targets and
attacks of either color. Polymorph in the case of having functions which
implicitly use CNodes PawnBitboards of either color, or got the BitBoard as
actual parameter, and the color of pawns of course.

Another function (GetPawnTargetAttacks(BitBoard bb, unsigned int color)) gets
all pawn attacks from potential targets. This functions is used to determine all
pawns not defendable in at least one pawn push (considers also double pawn
pushes from the second/seventh rank, anding with all Pawns which are not
currently defended by own pawns.

With this set of pawns i look whether their targets are dominated by enemy pawn
controls. This is done by anding this set with the set of ((enemy pawn controls
and not own pawn controls) or (enemy pawn controls twice and not own pawn
controls twice)). If i use this result set as a source for GetAllTargets with
opposite color, i get the BitBoard of "backward" pawns.

As you may see this implementation is a little pragmatic - but mostly used to
get a hint of blocking positions (together with Widders).

In pawn evaluation i do something more, specially handling backward candidates,
if they already reached ememies Side or considering also pawns as backward, if
they have one save target but are backward then.
There is also a set of "open" pawns to determine open backwards (echte Hinker)
and candidates.

Determing a set of hebelpawns for one side is quite simple:
 AllPawnAttacks(cl^1) & GetPawnBB(cl);

Determing a set of Widders:
AllSinglePawnTargets(AllSinglePawnTargets(cl) & GetPawnBB(cl^1), cl^1)
 & GetPawnBB(cl) & ~GetHebelBB(.., cl);


This page took 0.02 seconds to execute

Last modified: Thu, 07 Jul 11 08:48:38 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.