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.