Author: Robert Hyatt
Date: 08:37:59 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];
>
This came up a few years ago. Several of us played with various ideas, exactly
as you mention above. I found that the <from><to> (history[4096]) type indexing
was as good as anything, and had a smaller cache footprint.
One note, don't test on one position. Test on a couple of dozen at least,
including opening, middlegame and endgame positions...
Also after you have tried N moves using history (at a given ply) you should just
give up and search the rest in order they were generated, as this is likely an
ALL node where ordering is meaningless.
>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
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.