Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: History heurstic

Author: Mikael Bäckman

Date: 04:21:06 02/08/04

Go up one level in this thread


On February 08, 2004 at 07:02:12, Michel Langeveld wrote:

>Just wanted to share some experience with history_heuristic.
>
>I played today a bit with different kinds of history heuristic.
>Nullmover doesn't have history heuristic yet.
>
>I tried 4 methods as follows:
>
>Method 1(PSQ):
>This is the current method of Nullmover.
>Sort the silent moves on basis of piece square tables
>
>Method 2(from-to):
>sort silent moves on basis of from and to square as follows:
>int history_heuristic[65536];
>
>Method 3(piece-from-to):
>sort silent moves on basis of piece, from and to square, as follows:
>int history_heuristic[16][65536];
>
>Method 4(piece-to):
>sort silent moves on basis of piece, and to square, as follows:
>int history_heuristic[16][256];
>
>I used this position for the test:
>[D]4r1k1/p5p1/2p4p/4rp1P/P4Q2/2RbBPP1/q7/4R1K1 b - - bm Qd5
>In this position Nullmover didn't see during CCT6 that Rxe3 and g5 were draw
>within time.
>
>Method 1(PSQ):
>{0.24b}*12 127 24050 90090402 1... Qd5 2.Rcc1 c5 3.Bf2 Rxe1+ 4.Rxe1 Rxe1+ 5.Bxe1
>Be2 6.Qb8+ Kh7 7.Qxa7 Bxf3 8.Bc3 Qd1+ 9.Kf2 {374596}
>
>Method 2(from-to)
>{0.24b}*12 118 24631 99179328 1... Qd5 2.Rcc1 R5e6 3.Bf2 Rxe1+ 4.Rxe1 Rxe1+
>5.Bxe1 Be2 6.Kf2 Bd1 7.a5 Qa2+ 8.Qd2 Qb1 {402656}
>
>Method 3(piece-from-to):
>{0.24b}*12 130 20459 80854356 1... Qd5 2.Rcc1 a6 3.Rcd1 R5e6 4.Bf2 Qb3 5.g4
>Rxe1+ 6.Rxe1 Rxe1+ 7.Bxe1 Qb6+ 8.Kh1 Qb1 {395194}
>
>Method 4(piece-to):
>{0.24b}*12 127 19816 78817880 1... Qd5 2.Rcc1 c5 3.Bf2 Rxe1+ 4.Rxe1 Rxe1+ 5.Bxe1
>Be2 6.Qb8+ Kh7 7.Qxa7 Bxf3 8.Bc3 Qd1+ 9.Kh2 {397755}
>
>Preliminary Conclusions:
>
>- sorting moves on basis of PSQ works great for:
>  small depths and less time.
>- with Method 2(from-to) and Method 3(piece-from-to) Nullmover doesn't get an
>idea what are active silent moves and what are see a differents between stupid
>silent moves and active silent moves
>- Method 4(piece-to) looks more like "killerfields" for pieces and gives
>similiair pv's as evalmove.
>- the 2nd move of black differs in above positions. If I let nullmover search
>this position then it switches quickly between a6 and c5 until it finally wants
>a6.
>
>Futher:
>Maybe a combination of some methods works even more better.
>
>Method1 works as follows:
>
>int evalMove(moveType *m)
>{
>   pieceType piece = p.board[m->b.fromField];
>
>   switch(piece)
>   {
>   case WHITEPAWN:
>      return whitePawnScore[m->b.toField] - whitePawnScore[m->b.fromField];
>   case BLACKPAWN:
>      return blackPawnScore[m->b.toField] - blackPawnScore[m->b.fromField];
>   case WHITEBISHOP:
>      return whiteBishopScore[m->b.toField] - whiteBishopScore[m->b.fromField];
>   ....
>   ....
>}
>
>Have fun!
>
>Michel



Hi Michel,

I think it is better to use a set of positions for running tests. I may be that
one method simply gets lucky in the above position.

I've tried Methods 1, 2 and 4 in Chepla and my results were:

Method 1. Better in quiet positions.
Method 2. Better in tactical positions.
Method 4. No perfomance difference from Method 2, but it saved me some bytes of
memory and one 'if' which gave about 0.1% more NPS :) so I use this method
currently.


Regards,
Mikael



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.