Author: Tony Werten
Date: 00:47:20 04/15/03
Go up one level in this thread
On April 15, 2003 at 01:59:00, Gerd Isenberg wrote: >On April 14, 2003 at 23:37:39, Robert Hyatt wrote: > >>On April 14, 2003 at 18:09:37, Gerd Isenberg wrote: >> >>>On April 14, 2003 at 17:40:03, Robert Hyatt wrote: >>> >>>>On April 14, 2003 at 15:48:48, Gerd Isenberg wrote: >>>> >>>>>Hi all, >>>>> >>>>>a minor pawn pattern idea, i like to share ... >>>>> >>>>>With (pawn) bitboards it's pretty easy to get all passers and even to get all >>>>>outside passers. The second was new to me, and i had the idea recently (thinking >>>>>bitboards ;-), but i guess the "trick" is already common or well known. >>>>> >>>>>Instead of pattern branching after a distance compare in an inner loop over >>>>>passers of one color, i use a separate bitscan and reset loop over this >>>>>dedicated set of outside passers now, eg. in pawn endings. >>>>> >>>>>For outside passers one need a precalculated array of 2*64*2 bitboards. >>>>>This array is indexed by color of passed pawns we are looking for, square of >>>>>opposite king and color of side to move. It contains set bits for all squares >>>>>with distance to promotion < king distance to promote squares, considering the >>>>>tempo. >>>>> >>>>>Next step may be to avoid such loops at all, to process some single properties >>>>>without further piece interactions. Most often one uses some piece-square >>>>>tables, indexed by the squares of the traversed bitboard. If only the >>>>>rank-position is significant, a simultanious (mmx) popcount of six consecutive >>>>>bytes may be interesting, where the bytewise population counts are multipied >>>>>afterwards with some weighting factors. >>>> >>>>I do what you are close to hitting on. I have a bitmask of 8 bits, indicating >>>>whether white has a passer on a file (one bitmap) or whether black has a passer >>>>on a file (the other bitmap). I can now use a simple table lookup >>>>is_outside[256][256] >>>>that works just fine. The first subscript is the white outside passers (files >>>>with passers) >>>>and the second is a bitmap of _all_ files that have black pawns (or the inverse >>>>for looking >>>>at black outside passers). >>>> >>>>A single probe says "white has an outside passer or not" and another probe says >>>>"black has >>>>an outside passer or not." The value returned is 0, 1 or 2, which indicate how >>>>many outside >>>>passers that side has. And when I say outside passers I mean on each wing. 0 = >>>>no outside >>>>passers, 1 = outside passer on one wing. 2 = two outside passers on opposite >>>>wings, which >>>>is almost impossible to defend against. >>>> >>> >>>Nice idea. >>> >>>Not sure whether my definition of _outside_ passer is correct. I mean pawns, the >>>enemy king can't catch anymore. Where the opposite king is outside the pawns >>>square. How do call them? >> >>That's not "outside". That is "unstoppable" and the idea is commonly >>called "the square of the king". It is a simple idea about whether the >>king can reach the promoting square quick enough to win the pawn. >> >>An "outside passer" is a passed pawn that is closest to one side of the board, >>where the other side of the board has pawns by both sides that may or may not >>be passed. The idea is that the king must stop the outside passer and after it >>does, it is too far away from the other side and the pawns there go lost... > >Thanks, Bob. > >So i mentioned about "unstoppable" passers and not "outside": > >unstoppablePassers[WHITE] = passedPawns[WHITE] > & sUnstoppableSquares[WHITE][bKing][color2move]; > >Anyway, your outside passer approach is great and delegates a lot of computation >to a precalculated table lookup. I do it in a way by computing max >file-distance by looking up an 256-element table with the file bitmask of >passers. (zero, if only one passer exists). It's a little over done. I have a byte with bits set for every file that has pawns (black or white ) Another 2 bytes has bits for every passed pawn. Find out the files of the passed pawns. What is nescessairy for a pawn to be left outside passed ? Well, there shouldn't be any pawns on the left side then. So, take an 8 byte array: [0,1,3,7,15,31,63,127] Take the entry of the filenr , AND it with all pawns, if it's 0 then the pawn is left outside passed. Same for right (with a different array) Tony
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.