Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Bitboard algorithm design principles

Author: Gerd Isenberg

Date: 02:36:10 10/24/02

Go up one level in this thread


On October 23, 2002 at 20:09:20, Steffan Westcott wrote:

>On October 23, 2002 at 16:48:00, Peter Fendrich wrote:
>
>>You, Steffen et al have posted some interesting ideas about this!
>>I'm using rotated bitboards as described by Bob Hyatt (but a somewhat different
>>implementation). I have to be very convinced before I rewrite all that stuff!
>
>Thank you for your kind words. Incidently, I note there is a CCC member called
>Steffen, but that's not me! As a friend once told me, I am a misspelled youth. A
>long time ago, obviously.
>
>----
>
>I should add that these techniques are designed to take advantage of the
>parallel nature of bitboards, in that they consider the entire board. Here,
>routines like RookMovesUp() will calculate the upward rook moves of all friendly
>rooks.
>
>In general, I first identify a (bit) pattern of interest, then devise methods
>for recognising all instances of that pattern on the board. Pattern instances
>are counted as late as possible, if at all. The complexity of the patterns
>varies greatly. Simple ones are like OpenFiles(), UnmovedRooks(), PawnAttacks(),
>PawnRams(), PawnDuos(), KingIsUpRight(). Medium complexity are ones like
>ConnectedRooks(), RooksCanCastle(), OnKingDiagonal(), NearKingDiagonal(),
>OutPost(). Complex examples are Fortress(), PawnMass(), PawnStorm(),
>BackwardPawns(), MaterialSignature(), WeakSquareControl(),
>StrongSquareControl(), SpaceBehindPawnFront(), StrongKnightOutposts(),
>StrongFianchettoedBishops(), WeakWhiteSquares(), KingShelter(), GamePhase().
>Often the more complex patterns are combinations of the simpler ones. In fact,
>the chess position itself can be viewed as composed of 'primitive' or 'atomic'
>patterns (bitboards).
>
>Most of the simpler patterns are returned as bitboards, where set bits indicate
>a (bit) pattern match. This is fine where simple square-centric patterns are
>sought, and a yes/no for each square is sufficient. Complex patterns like
>KingShelter() and GamePhase() are really functions which classify (group
>together) general patterns spread across the whole board, eg. KingShelter()
>classifies the pawn structure near the king (matches against a large pattern
>set), MaterialSignature() returns things like BNbn to classify the material
>balance.
>
>Just considering the simple patterns, if your engine deals with pattern
>instances in a serial fashion (strictly one at a time), the algorithm
>requirements are sufficiently different that an alternative may be better eg.
>rotated bitboard table lookups, or perhaps even a different board representation
>altogether. To my mind, the major reason to use bitboards in the first place is
>to find many pattern instances quickly.
>
>In summary, I would advise that my algorithms are no magic bullet - They are
>better judged in the wider context of your engine design and target
>architecture.
>
>Cheers,
>Steffan

Steffan,

like all of your posts, it's well-founded and a pleasure to read.
I have a few questions to your chess related pattern terminology:

1. What are PawnRams?

I guess that what we germans call "Widder", that means pawns blocked by opposite
pawns.

2. How to define a Fortress? Is it only pawn or king/pawn related?
3. What is a PawnMass?

Thanks in advance,
Gerd



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