Author: Michel Langeveld
Date: 04:02:12 02/08/04
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
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.