Author: Inmann Werner
Date: 01:56:44 11/10/99
Go up one level in this thread
On November 09, 1999 at 22:29:17, Nicolas Carrasco wrote:
>Dear Guys,
>
>I have tryed to build a move generator using a single a array faster than TSCP.
>(I know how to increase a bit TSCP gen), and it seems that for move-generator is
>better a pair of arrays, but I guess to know if it is the same or equal speed
>for an eval function. I know that this depends of how you do that ,but try to
>answer considering your experince.
>
>Maybe a pair of 64 int arrays is slower than a single one for eval functions
>and/or hashing functions.
>
> I am asking you this in order to select the apropiate board representation for
>a long time before going to bitboards.
>
>I also found an interesting board representation that uses this:
>
>{ 0, 1, 2, 3, 4, 5, 6, 7,
> __, __, __, __, __, __, __, __,
> 16, 17, 18, 19, 20, 21, 22, 23,
> __, __, __, __, __, __, __, __,
> 32, 33, 34, 35, 36, 37, 38, 39,
> __, __, __, __, __, __, __, __,
> 48, 49, 50, 51, 52, 53, 54, 55,
> __, __, __, __, __, __, __, __,
> 64, 65, 66, 67, 68, 69, 70, 71,
> __, __, __, __, __, __, __, __,
> 80, 81, 82, 83, 84, 85, 86, 87,
> __, __, __, __, __, __, __, __,
> 96, 97, 98, 99, 100, 101, 102, 103,
> __, __, __, __, __, __, __, __,
> 112, 113, 114, 115, 116, 117, 118, 119 } // THE MAP TO CALCULATE THE VECTORS
>
>int initial_board[120]=
>{
> BR, BN, BB, BQ, BK, BB, BN, BR,
> __, __, __, __, __, __, __, __,
> BP, BP, BP, BP, BP, BP, BP, BP,
> __, __, __, __, __, __, __, __,
> XX, XX, XX, XX, XX, XX, XX, XX,
> __, __, __, __, __, __, __, __,
> XX, XX, XX, XX, XX, XX, XX, XX,
> __, __, __, __, __, __, __, __,
> XX, XX, XX, XX, XX, XX, XX, XX,
> __, __, __, __, __, __, __, __,
> XX, XX, XX, XX, XX, XX, XX, XX,
> __, __, __, __, __, __, __, __,
> WP, WP, WP, WP, WP, WP, WP, WP,
> __, __, __, __, __, __, __, __,
> WR, WN, WB, WQ, WK, WB, WN, WR
>
>};
>
>BP,WP,....,..., are number definitions :)
>
>the "__" are elements are not being used.
>
>here I skip the mailbox check doing :
>
>#define BOARD(z) ((z&0x88)==0) /* To check if a position z is inside
>the board */
>
>So if I put
>gen()
>{
> if(BOARD(any_position)) /// I SAVE THE MAILBOX FUNCTION
> THIS IS A LEGAL MOVE
>}
>
>The problem that I founded here is that I have to eat 64 unused
>elements or run an if statement to skip them, and that slows too much.
>
>Thanks
This board representation looks funny, but not very useful IMHO.
I think, the most useful representations are:
1) BOARD signed char[64]; hope is clear... 8*8
2) BOARD signed char[120]; 10*12
ad 2) (I use it, but now also with bitboards...)
BOARD[21]=a1;BOARD[31]=a2 ........
0 is empty, 99=not allowed, 6=White King,-6=Black King,1 =white Pawn......
it is nice for move generating, cause i give the non used outer fields an
impossible value (99), so you have not to check for leaving the board. Useful
for Knights and also Q,R,B. also you have no problem to get out of the array.
(less bugs)
for evaluation, it is not as good, cause you can not so fast determine the row
and line of a field. I use lookuptables, which seem to be faster than field/10
and field%10.
If you change to Bitboards, you always have to change a lot, but it would be
easier to take a 8*8 cause it is closer to the bitboard.....
In using two arrays, I see no win. If you use one array and say White King =6
and Black King=-6 you can work nice.
You may introduce some figure-lists. One for white and one for black, where the
figure is in and the position. Maybe better than parse the whole board for
figures. (Best here is Bitboards!!!)
If you think of which system you use you have to think of three routines mainly
(IMHO)
1) move generator
2) evaluation
3) make-unmake move
3) can get rather big and slow, if you use some strange things....., and you
have always an exchange. Either you make evaluate slow with calculating there
everytime everything new, or you make "make-unmake move" slow by calculating
there "on the fly" (IMHO most time second is better).
Make-unmake move at the beginning of my programming was the most growing
routine, as calculating hash, something with pawn structure......
hope it helps
Werner
P.S: If you find something useful in your above board representation (120 fields
with emty lines) let me know!
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.