Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Some thoughts on Dann Corbit's rotated alternative

Author: Dann Corbit

Date: 10:55:12 03/04/06

Go up one level in this thread


On March 04, 2006 at 13:50:14, Dann Corbit wrote:

>On March 04, 2006 at 13:47:50, Dann Corbit wrote:
>
>>On March 04, 2006 at 02:46:22, Gerd Isenberg wrote:
>>
>>>>OK.  So you make an array of 128 function pointers then, and do this:
>>>>
>>>>status = method[hashval(BB)]();
>>>
>>>Yes, if you like, you can do either switch with a contiguous range as well.
>>>But to get pure attacksets, there are no function pointers at all, but pointers
>>>to bitboards.
>>>
>>>>
>>>>PGO seems to take a lot of the sting out of missed branch predictions, but of
>>>>course there will always be some.
>>>
>>>It would be interesting to see some pseudocode what your /* Do Stuff */ in the
>>>cases does, to implement a kind of "ray-base" e.g. with the position you
>>>mentioned recently. If you are interested in a1-h8 related properties of let say
>>>square g7.
>>>
>>>[D]7k/3n2q1/5p2/8/6N1/2Q5/1B6/Q1K5 w - -
>>
>>There is probably a lot less magic in my stuff than you might imagine.
>>
>>First of all, I have direct attack bitmaps, shadow bitmaps, and half-pin bitmaps
>>(I tried quarter-pin, but so far they seem to be too expensive for the payback,
>>but half pin are clearly worthwhile).  For this position, half pin is enough.
>>Quarter pin positions are very rare.
>>
>>Anyway, the interesting guy is the pawn at f6.  When I go to my switch, I will
>>have precalcuated stuff against the full bitmap and also white and black, as
>>well as piece.
>>
>>The upshot is that I have for every square on the board a list of attackers by
>>type and by type of attack (direct, x-ray, half-pin).  So let's consider the
>>pawn.  He has:
>>
>>white attackers             black attackers(defenders)
>>pawn   direct(0)            pawn direct(0)  {no such thing as indirect for P}
>>knight direct(1)            knight direct(1) {no such thing as indirect for N}
>>bishop direct(0)            bishop direct(0)
>>bishop x-ray(1)             bishop x-ray(0)
>>bishop half(0)              bishop half(0)
>>rook direct(0)              rook direct(0)
>>rook x-ray(0)               rook x-ray(0)
>>rook half(0)                rook half(0)
>>queen direct(1)             queen direct(1)
>>queen x-ray(0)              queen x-ray(0)
>>queen half(1)               queen half(0)
>
>Forgot to list the king attacks (both 0).
>I consider a pawn attack to be the strongest attack and a king attack is the
>weakest.
>
>>In addition, we know that black is upside down on the pin, that the pinned piece
>>is a queen and that the shadow pinned piece is a king (type of piece that is
>>BEHIND the pinned piece is crucial and actually changes my pin type).
>>
>>My makemove actually updates these counts* (so movegen suffers a bit and will
>>never compete with the fastest).  As a side point, it makes a legal only move
>>generator a snap.
>>
>>[*]  The function pointers I was referring to are the things that:
>>1.  Remove the influence of the piece from the board (imagine picking it up)
>>2.  Add the new influence of the piece to the board (imagine putting it down)
>>
>>Besides helping out the evaluation a great deal, it is also stupendously helpful
>>for move ordering.  You can tell at a glance from the information presented that
>>the queen's pawn capture is winning (makemove alone does not know it, but
>>evaluation does without search).

After the makemove, every square on the board is tagged as white kingsafe, white
queensafe, white rooksafe ... black queensafe, black kingsafe.

Now, these safety evaluations are only approximate (sort of a free SEE helper)
but putting a king on a square that is not kingsafe for the color will not be
attempted (illegal move) and putting a queen on a square that is not queensafe
will be the last move searched.



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.