Changes

Jump to: navigation, search

Design Principles

No change in size, 14:12, 24 January 2019
no edit summary
I should add that these techniques ([[Kogge-Stone Algorithm|Kogge-Stone]]) 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 [[Open fileFile|OpenFiles()]], UnmovedRooks(), [[Pawn Attacks (Bitboards)|PawnAttacks()]], [[Pawn Rams (Bitboards)|PawnRams()]], [[Duo Trio Quart (Bitboards)|PawnDuos()]], KingIsUpRight(). Medium complexity are ones like ConnectedRooks(), RooksCanCastle(), OnKingDiagonal(), NearKingDiagonal(), [[Outposts|OutPost()]]. Complex examples are [[Fortress|Fortress()]], PawnMass(), [[King Safety#PawnStorm|PawnStorm()]], [[Backward Pawns (Bitboards)|BackwardPawns()]], [[Material#Signature|MaterialSignature()]], [[Square Control|WeakSquareControl()]], StrongSquareControl(), [[Space|SpaceBehindPawnFront()]], StrongKnightOutposts(), [[Fianchetto|StrongFianchettoedBishops()]], WeakWhiteSquares(), [[King Safety#PawnShield|KingShelter()]], [[Game Phases|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.

Navigation menu