Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: piece list possibilities

Author: Paul Tillotson

Date: 20:49:11 07/07/98

Go up one level in this thread


On July 07, 1998 at 23:27:15, Robert Hyatt wrote:

>On July 07, 1998 at 23:14:58, Tom Kerrigan wrote:
>
>>Yes, this is probably what I will do.
>>
>>Anyway, a quick suggestion: what would happen if you separated your piece lists
>>into piece lists and pawn lists?
>>
>>My guess is that you would save a lot of grief in a few places...
>>
>>Cheers,
>>Tom
>>
>

I just do a quick reorganization on my piece list for a promotion so I never
need more than 16 entries.  As captures happen this whole list will be compacted
and the number of iterations will decrease.  I can also keep the move generation
order that I like without adding any other overhead aside from the reorg.  Your
16 entries for the pieces would seem to eliminate the need to that.  Of course
doing this at base nodes would never hurt, but yours would seem to be faster at
internal nodes an increase overall speed for promotions.  I don't know how much
overall improvement this would have on speed compared to the way I do it.

Enjoy!
Paul

>
>in cray blitz, my piece list was longer than yours.  I used 48 total.. the
>first 16 were white pieces, the next 8 were white pawns, the next 16 were
>black pieces, the last 8 were black pawns.  I had an index to the last
>white and black piece to avoid looping over all 24 entries (although on
>a vector machine the cost for doing so would have been zero).  I used
>16/8 for promotions... delete a pawn, increment last piece index and
>store the promote to piece there...
>
>
>
>>On July 07, 1998 at 22:23:30, Paul Tillotson wrote:
>>
>>>Hello.
>>>
>>>In my program (which I'm am relatively new to chess programming) is
>>>to 2 char[64] arrays and 2 char[16] arrays.  Basically the board[64] array
>>>has the current board status.  The 2 char[16] arrays are a sorted list of
>>>the pieces which point to the board[64] array.  The other map[64] points to
>>>the piece list.  What this does is allows me to only have 16 iterations
>>>to generate moves, eval, etc.  The map structure allows me to locate where
>>>the pieces is in the list if there is a capture, etc.
>>>
>>>A little example:
>>>board[1] == N            // board piece
>>>map[1] == 6              // index to piece list
>>>white_pieces[6] == 1     // index to board array
>>>
>>>A full circle.
>>>
>>>It may not be helpfull, but it seems to work well for me.
>>>If this seems insane to anyone please suggest an alternative.
>>>
>>>Thanks,
>>>Paul
>>>
>>>On July 07, 1998 at 21:32:42, Tom Kerrigan wrote:
>>>
>>>>Yes, the arrays you describe are mandatory if you don't want to spend most of
>>>>your CPU time looping through the board. :)
>>>>
>>>>The problem that I was thinking of, more specifically, is removing an entry from
>>>>the piece list.
>>>>
>>>>Let's say a piece is captured. How do you know which section of the piece list
>>>>it belongs to? You need a block of code like this:
>>>>
>>>>if(color[move.to]==WHITE&&piece[move.to]!=PAWN)
>>>>  remove the piece from the white piece list;
>>>>if(color[move.to]==WHITE&&piece[move.to]==PAWN)
>>>>  remove the piece from the white pawn list;
>>>>
>>>>and so forth.
>>>>
>>>>Are there any elegant solutions to this problem?
>>>>
>>>>Cheers,
>>>>Tom
>>>>
>>>>
>>>>On July 07, 1998 at 19:55:12, Robert Hyatt wrote:
>>>>
>>>>>On July 07, 1998 at 19:23:39, Tom Kerrigan wrote:
>>>>>
>>>>>>I want to write a very small chess program and I'm considering possible methods
>>>>>>to store a list of pieces.
>>>>>>Practically every time a chess program loops through a piece list, it's only
>>>>>>concerned with pieces or pawns of a particular color. Thus, I had this in mind:
>>>>>>
>>>>>>int piece_list[32];
>>>>>>/* piece_list 0 to 7: white pieces
>>>>>>   piece_list 8 to 15: white pawns
>>>>>>   piece_list 16 to 23: black pieces
>>>>>>   piece_list 24 to 31: black pawns
>>>>>>*/
>>>>>>int white_pieces;
>>>>>>int white_pawns;
>>>>>>int black_pieces;
>>>>>>int black_pawns;
>>>>>>
>>>>>>I think this is reasonable until a piece needs to be removed. Then the computer
>>>>>>needs to figure out which list the piece belongs to, and this sounds
>>>>>>time-consuming.
>>>>>>Any comments or suggestions?
>>>>>>
>>>>>>Cheers,
>>>>>>Tom
>>>>>
>>>>>
>>>>>we used this in Cray Blitz.  Since you have a board[x] array, use a
>>>>>pboard[x] array... where if you access pboard[x] it gives you an index
>>>>>into the piece list rather than the piece on that square.  Worked well
>>>>>for us, although we did it for vector-processing reasons...



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.