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. > >Regards, >Dieter 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); 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.