Computer Chess Club Archives


Search

Terms

Messages

Subject: History heurstic

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.