simple search yet a bug ?

Discussion of chess software programming and technical issues.

Moderator: Ras

Sven
Posts: 4052
Joined: Thu May 15, 2008 9:57 pm
Location: Berlin, Germany
Full name: Sven Schüle

Re: simple search yet a bug ?

Post by Sven »

jwes wrote:I would guess it is an eval problem. Try doing a static evaluation of these two positions and see which your program thinks is better.
[d]8/8/2q4p/2k5/8/3Q1PP1/5K1P/8 w - - 0 1
[d]8/8/2q4p/2k5/8/3Q1PP1/5K1P/8 w - - 0 1
Oops? Two identical positions ...
Chan Rasjid
Posts: 588
Joined: Thu Mar 09, 2006 4:47 pm
Location: Singapore

Re: simple search yet a bug ?

Post by Chan Rasjid »

Code: Select all

i16 mat_table_w_half[9][9][3][3][3][3][3][3][3][3];
static int eval_kpk(const int side);

int eval(const int side, const int alpha, const int beta, const int ply) {
   const int xside = side ^ 1;
   int i, j, k;
   assert(vBishop == vKnight);
   assert(alpha < P_MATE);
   assert(beta > M_MATE);
   assert(db_board());

   eval_type = EX;
   if (!IS_SINGLE_PAWN);
   else{
      draw_move = 0;
      j = eval_kpk(side);
      ASSERT_COLOR_SYMM(j);
      return j;
   }
   
/*
Material Imbalance table 
=============
can identify and flaged material draws  - bug is here
*/

   i = mat_table_w_half
       [num_piece[0][Pawn]][num_piece[1][Pawn]]
       [num_piece[0][Knight] < 3 ? num_piece[0][Knight] : 2]
       [num_piece[1][Knight] < 3 ? num_piece[1][Knight] : 2]
       [num_piece[0][Bishop] < 3 ? num_piece[0][Bishop] : 2]
       [num_piece[1][Bishop] < 3 ? num_piece[1][Bishop] : 2]
       [num_piece[0][Rook] < 3 ? num_piece[0][Rook] : 2]
       [num_piece[1][Rook] < 3 ? num_piece[1][Rook] : 2]
       [num_piece[0][Queen] < 3 ? num_piece[0][Queen] : 2]
       [num_piece[1][Queen] < 3 ? num_piece[1][Queen] : 2];

   const int phase = (i >> 3) & MAX_PHASE;
   assert(phase <= MAX_PHASE);

   if (!(i & FLAG_MASK));
   else{
   
      /*
//      here is what is causing the bug; when commented out - ok
      if (i & MF_DRAW){
         draw_move = 0;
         return 0;
      }
      */
      if (i & MF_EVAL_PST){
         //easy returns - pst only
         j = ((int)i >> 8) * 2;// w bonus
         j -= side * j * 2;
         ASSERT_COLOR_SYMM(j);
         j += mat[side] - mat[xside] + ((pstopen * phase + pstend * (MAX_PHASE - phase)) >> 5);
         ASSERT_COLOR_SYMM(j);
         return (j <= -2 || j >= 2 ? j : -2);
      }
   }
   
   // this is to test returning only mat+pst+bonus 
   opening[side] -= opening[xside];
   ending[side] -= ending[xside];
   i = mat[side] - mat[xside] + ((opening[side] * phase + ending[side] * (MAX_PHASE - phase)) >> 5);
   ASSERT_COLOR_SYMM(i);
   return (i <= -2 || i >= 2 ? i : -2);

...
   // may continue usual eval(), eg. pawn-structure, passers.. ok 

}
I have identified that it is an evaluation ( or search ?) bug. It is wrong flagging of material draws. But I have to confirm the details.

The above is the beginning of my eval().
My pre-calculated material tables will identify material draws like mat = 0, N/B draws etc. The bug is there. If I comment out the "draws", it will just do a QxQ as is expected. Whether just returning mat+pst+bonus or with further evaluation of pawn structures, passers, etc., the program now just wins the game simply as it should be. So it means that generally, the other parts of my eval() and search() is working normally.

It is this kind of bugs that shows itself only by playing in strange ways that is difficult to trace.

I have yet to go into the details of how my initialization of draws is bad.

Thanks to all,
Rasjid
Chan Rasjid
Posts: 588
Joined: Thu Mar 09, 2006 4:47 pm
Location: Singapore

Re: simple search yet a bug ?

Post by Chan Rasjid »

vladstamate wrote:When analyzing in Plisk, for the first few plies it tries Qe3+ but then it find Qxc6 and sticks with it.

Also like Miguel said, notice how, as it searches deeper the score increases as well. So maybe your problem is depth? Or, if you have SEE maybe you value the trade as negative and somehow you prune the capture?

Code: Select all

 1 0:0 +3.61 1.Qf4 Qd5  (92/0)
 2 0:0 +3.85 1.Qe3+ Kb5 2.g4  (983/61)
 3 0:0 +3.72 1.Qe3+ Kb5 2.g4 Qd6  (1874/117)
 4 0:0 +3.73 1.Qe3+ Kd5 2.Qd3 Ke6 3.g4  (6661/416)
 5 0:0 +3.70 1.Qe3+ Kd5 2.Qd2 Kc5 3.g4 Qf6  (16610/535)
 6 0:0 +3.80 1.Qe3+ Kd5 2.Kg2 Qe6 3.Qd3 Kc6 4.g4  (44077/565)
 7 0:0 +3.79 1.Qe3+ Kd5 2.g4 Qe6 3.Qxe6 Kxe6 4.f4 Kf6 5.Ke3  (110970/711)
 8 0:0 +3.83 1.Qe3+ Kd5 2.g4 Qe6 3.Qd2 Kc6 4.Kg2 h5 5.Qc3 Kd7  (214562/809)
 9 0:0 +3.83 1.Qe3+ Kd5 2.Qd2 Ke5 3.g4 Qf6 4.Qe3 Kd5 5.Kg2 h5  (411336/849)
Pondering: Qxc6 (1/32)
10 0:1 +3.84 1.Qe3+ Kd5 2.Qd2 Ke5 3.g4 Qf6 4.Qe3 Kd6 5.h3 Qe6 6.Qf4 Kc6 7.Kg1  (993531/872)
Pondering: Qxc6 (1/32)
11 0:2 +4.26 1.Qxc6+ Kxc6 2.g4 Kd5 3.Ke3 Kd6 4.f4 Kd5 5.h3 Kd6 6.f5 Ke5  (2325365/882)
Pondering: Qe1 (30/32)
12 0:3 +4.16 1.Qxc6+ Kxc6 2.g4 Kd5 3.Ke3 Kd6 4.f4 Kd5 5.Kd3 Ke6 6.Kd4 Kf6 7.h4 (3272036/900)
Pondering: Qd4 (10/32)
13 0:5 +4.38 1.Qxc6+ Kxc6 2.g4 Kd5 3.Ke3 Kd6 4.f4 Kd5 5.Kd3 Kd6 6.Kd4 h5 7.gxh5 Ke6  (4895855/939)
Pondering: Kg2 (3/32)
Pondering: Qd4 (10/32)
14 0:9 +4.44 1.Qxc6+ Kxc6 2.g4 Kd5 3.Ke3 h5 4.gxh5 Ke6 5.h3 Kf6 6.Kf4 Kg7 7.Kg5 Kf7 8.f4  (8614184/943)
Pondering: f4 (2/32)
Pondering: g4 (4/32)
Pondering: Ke3 (5/32)
Pondering: Qd5 (11/32)
Pondering: Qf4 (20/32)
15 0:17 +4.58 1.Qxc6+ Kxc6 2.g4 Kd5 3.Ke3 Kd6 4.f4 Kd5 5.h3 Kd6  6.Kd4 Ke6 7.Ke4 Kd6 8.f5 Kc5  (16656353/967)
Pondering: f4 (2/32)
Pondering: g4 (3/32)
Pondering: Qc4 (14/32)
Pondering: Qe2 (16/32)
Pondering: Qg6 (22/32)
16 0:30 +4.76 1.Qxc6+ Kxc6 2.g4 Kd5 3.Ke3 Kd6 4.Ke4 Ke7 5.f4 Kf6 6.h4 Ke7 7.g5 h xg5 8.fxg5 Ke6 9.h5  (29109385/967)
Regards,
Vlad.
Currently, my programs still have not the ability to do analysis as yours.

After commenting out the "draws" that gives the bug, it takes < 1 sec to know QxQ is best. I can't yet give various scores for the different choices.

Intuitively, I expected a program w/o "bugs" to be able to end the game easily. Remember Rybka and KQK !

Rasjid.
Sven
Posts: 4052
Joined: Thu May 15, 2008 9:57 pm
Location: Berlin, Germany
Full name: Sven Schüle

Re: simple search yet a bug ?

Post by Sven »

Chan Rasjid wrote:

Code: Select all

i16 mat_table_w_half[9][9][3][3][3][3][3][3][3][3];
//...
   i = mat_table_w_half
       [num_piece[0][Pawn]][num_piece[1][Pawn]]
       [num_piece[0][Knight] < 3 ? num_piece[0][Knight] : 2]
       [num_piece[1][Knight] < 3 ? num_piece[1][Knight] : 2]
       [num_piece[0][Bishop] < 3 ? num_piece[0][Bishop] : 2]
       [num_piece[1][Bishop] < 3 ? num_piece[1][Bishop] : 2]
       [num_piece[0][Rook] < 3 ? num_piece[0][Rook] : 2]
       [num_piece[1][Rook] < 3 ? num_piece[1][Rook] : 2]
       [num_piece[0][Queen] < 3 ? num_piece[0][Queen] : 2]
       [num_piece[1][Queen] < 3 ? num_piece[1][Queen] : 2];
//...
      /*
//      here is what is causing the bug; when commented out - ok
      if (i & MF_DRAW){
         draw_move = 0;
         return 0;
      }
      */
Nice definition of a 10-dimensional array :-)
So obviously one of the following conditions erroneously evaluates to true after initializing the table:

Code: Select all

(mat_table_w_half[2][0][0][0][0][0][0][0][0][0] & MF_DRAW) != 0
(mat_table_w_half[2][1][0][0][0][0][0][0][0][0] & MF_DRAW) != 0
(mat_table_w_half[2][0][0][0][0][0][0][0][1][1] & MF_DRAW) != 0
(mat_table_w_half[2][1][0][0][0][0][0][0][1][1] & MF_DRAW) != 0
Just print these four entries at the end of the table init?

Sven
Chan Rasjid
Posts: 588
Joined: Thu Mar 09, 2006 4:47 pm
Location: Singapore

Re: simple search yet a bug ?

Post by Chan Rasjid »

Sven Schüle wrote:
Chan Rasjid wrote:

Code: Select all

i16 mat_table_w_half[9][9][3][3][3][3][3][3][3][3];
//...
   i = mat_table_w_half
       [num_piece[0][Pawn]][num_piece[1][Pawn]]
       [num_piece[0][Knight] < 3 ? num_piece[0][Knight] : 2]
       [num_piece[1][Knight] < 3 ? num_piece[1][Knight] : 2]
       [num_piece[0][Bishop] < 3 ? num_piece[0][Bishop] : 2]
       [num_piece[1][Bishop] < 3 ? num_piece[1][Bishop] : 2]
       [num_piece[0][Rook] < 3 ? num_piece[0][Rook] : 2]
       [num_piece[1][Rook] < 3 ? num_piece[1][Rook] : 2]
       [num_piece[0][Queen] < 3 ? num_piece[0][Queen] : 2]
       [num_piece[1][Queen] < 3 ? num_piece[1][Queen] : 2];
//...
      /*
//      here is what is causing the bug; when commented out - ok
      if (i & MF_DRAW){
         draw_move = 0;
         return 0;
      }
      */
Nice definition of a 10-dimensional array :-)
So obviously one of the following conditions erroneously evaluates to true after initializing the table:

Code: Select all

(mat_table_w_half[2][0][0][0][0][0][0][0][0][0] & MF_DRAW) != 0
(mat_table_w_half[2][1][0][0][0][0][0][0][0][0] & MF_DRAW) != 0
(mat_table_w_half[2][0][0][0][0][0][0][0][1][1] & MF_DRAW) != 0
(mat_table_w_half[2][1][0][0][0][0][0][0][1][1] & MF_DRAW) != 0
Just print these four entries at the end of the table init?

Sven
You probably are right - but all here are just too fast for me. Like the one who sees the needle that floated up from the ocean floor.

I will be slower.

BTW, is anyone laughing at my tables or is there REALLY something wrong with 10 dimensions, etc...

I just do what was said Vasik Rajlich did - large tables is good for the elo - 4 mega bytes best. I don't know how to peek into the innards of Rybka 3, so just do from guts.

Rasjid
jwes
Posts: 778
Joined: Sat Jul 01, 2006 7:11 am

Re: simple search yet a bug ?

Post by jwes »

Sven Schüle wrote:
jwes wrote:I would guess it is an eval problem. Try doing a static evaluation of these two positions and see which your program thinks is better.
[d]8/8/2q4p/2k5/8/3Q1PP1/5K1P/8 w - - 0 1
[d]8/8/2q4p/2k5/8/3Q1PP1/5K1P/8 w - - 0 1
Oops? Two identical positions ...
Sorry, second position should be
[d]8/8/2k4p/8/8/5PP1/5K1P/8 w - - 0 1
Sven
Posts: 4052
Joined: Thu May 15, 2008 9:57 pm
Location: Berlin, Germany
Full name: Sven Schüle

Re: simple search yet a bug ?

Post by Sven »

Chan Rasjid wrote:BTW, is anyone laughing at my tables or is there REALLY something wrong with 10 dimensions, etc...

I just do what was said Vasik Rajlich did - large tables is good for the elo - 4 mega bytes best. I don't know how to peek into the innards of Rybka 3, so just do from guts.
I did not intend to laugh at your tables, or at you for creating them, nor is there anything wrong with it. It just looked funny for me since I did not see 10-dim arrays quite often yet, but in fact there is nothing bad about it. So please apologize if my posting gave the wrong impression that there were something bad or laughable. Sometimes people smile, or even laugh, just because they are surprised.

Sven
User avatar
hgm
Posts: 28391
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: simple search yet a bug ?

Post by hgm »

a nice rule of thumb is this:

If the leading side has no pawns, halve the score. If ther are no pieces, double the score.

With those rules, I would be surprised if there was any reluctance trading the Queen. Even discarding passer bonuses you would be at +4 after the trade...
Chan Rasjid
Posts: 588
Joined: Thu Mar 09, 2006 4:47 pm
Location: Singapore

Re: simple search yet a bug ?

Post by Chan Rasjid »

Code: Select all


void init_material_table(){
   int wp, bp, wn, bn, wb, bb, wr, br, wq, bq;
   int i, x, f, phase, mat_w, mat_b, mat_diff_w;

   memset(mat_table_w_half, 0, sizeof(mat_table_w_half));
   for (wp = 0; wp <= 8; ++wp){
      for (bp = 0; bp <= 8; ++bp){
         for (wn = 0; wn <= 2; ++wn){
            for (bn = 0; bn <= 2; ++bn){
               for (wb = 0; wb <= 2; ++wb){
                  for (bb = 0; bb <= 2; ++bb){
                     for (wr = 0; wr <= 2; ++wr){
                        for (br = 0; br <= 2; ++br){
                           for (wq = 0; wq <= 2; ++wq){
                              for (bq = 0; bq <= 2; ++bq){
                                 x = 0;
                                 if (wq == 2 || bq == 2){
                                    mat_diff_w = -1;
                                 }else{
                                    mat_w = (wp * vPawn + (wn + wb) * vKnight + wr * vRook + wq * vQueen);
                                    mat_b = (bp * vPawn + (bn + bb) * vKnight + br * vRook + bq * vQueen);
                                    mat_diff_w = mat_w - mat_b;
                                    
/*
bug - missing brackets
                                    if (wp == 0 && bp == 0
                                          && (mat_w == 0 && mat_b <= vKnight)
                                          || (mat_w == vKnight  && mat_b <= vKnight)){
                                       mat_table_w_half[wp][bp][wn][bn][wb][bb][wr][br][wq][bq] = MF_DRAW;
                                       continue;
                                    }
    */
                                
    //now ok    
                                    if (wp == 0 && bp == 0
                                          && ((mat_w == 0 && mat_b <= vKnight)
                                          || (mat_w == vKnight  && mat_b <= vKnight))){
                                       mat_table_w_half[wp][bp][wn][bn][wb][bb][wr][br][wq][bq] = MF_DRAW;
                                       continue;
                                    }
                                    
                                    
// bonus for trading pieces when a side has material advantage
                                    if (mat_diff_w){
                                       if (mat_diff_w > 0){
                                       //x  --> 0.5 as mat-->0
                                          x += mat_diff_w * (vMatMax*vMatMax - mat_w*mat_w) / (2 * vMatMax*vMatMax);
                                       }else{
                                          x += mat_diff_w * (vMatMax*vMatMax - mat_b*mat_b) / (2 * vMatMax*vMatMax);
                                       }
                                    }
                                 }

...

Sven,

I still have to first follow the "non-sophisticated" way to detect bugs - go to the codes. So there are simple brackets missing. Fixing this, I found I could enable "draws" and everything's ok.

A note on bugs
========
Earlier I suspected that the bug is in failure of my evaluation that encourages exchanging pieces when a side is up in material - Karlo Bala also brought this up. I had this few lines of codes and had no suspicion they have problems. Because of this bug, I happen to notice that these lines of codes do not work! If anyone has some lines of codes in the eval() that attempts to encourage trading of pieces, it is likely wrong!. (I think ?) It could only be hard-coded in a material tables. Please see my example above after the "draws". I am not sure if using square-scaling is ok. The games below shows some number of draws and the play is normal.


I could only print out this game with "draws" fixed :-
note the "draws"
Cowrie Chess Version 1.0, 3rd Feb 2010

ptr_malloc (0x7f20a72ca010), pTT (0x7f20a72ca080)
Transposition Table Size( 32 MB )
No of Entry( 2097152 )
tt_entry Size(16 byte)

// 40 moves / 40 secs.

NPS = 398799
root search repeat PV x 5 returns !
rootscore 329, move 1155204451
1 e4c6 ( 329) depth( 6) pvL( 2) ply(14) nps( 264963) nPc(5) stage(1) ftime(7) poll(0)
sec(0.74, 0.06) nodes(14573) q(3.5%) h(54.6%) f(41.9%) FH(43.2%)
Hash hit(37.4%) matOWrite( 56.36) draw(1) null(0.0%)
SRC ext(3.11%) reduc(44.70% / 6.05%) ply1( 4) horz(0.00%) futD12(2.15%) pruneLM (0.00%)
QS evFL(0) lowMat(0.05%) see(0.12%)
EV (99.79%) quick-all(31.39%) nom(4.39%) bound(23.19%) fut(3.81%) short(0.00%) 300(0.00%)
1 reply c5c6
2 f3f4 ( 376) depth(11) pvL( 2) ply(26) nps( 1743306) nPc(4) stage(1) ftime(111) poll(1)
sec(0.76, 0.53) nodes(925696) q(3.4%) h(40.2%) f(56.4%) FH(34.1%)
Hash hit(52.4%) matOWrite( 54.35) draw(14409) null(0.0%)
SRC ext(19.45%) reduc(46.44% / 2.47%) ply1( 30) horz(0.00%) futD12(21.66%) pruneLM (0.00%)
QS evFL(0) lowMat(0.46%) see(0.06%)
EV (99.32%) quick-all(55.13%) nom(8.12%) bound(28.11%) fut(18.90%) short(0.00%) 300(0.00%)
2 reply c6d5
root search repeat PV x 5 returns !
rootscore 376, move 553814185
3 f2e3 ( 376) depth( 7) pvL( 8) ply(15) nps( 1743306) nPc(4) stage(1) ftime(8) poll(0)
sec(0.77, 0.01) nodes(19157) q(1.1%) h(47.0%) f(51.9%) FH(34.0%)
Hash hit(73.3%) matOWrite( 8.08) draw(41) null(0.0%)
SRC ext(32.49%) reduc(56.46% / 0.78%) ply1( 12) horz(0.00%) futD12(11.45%) pruneLM (0.00%)
QS evFL(0) lowMat(0.24%) see(0.02%)
EV (99.91%) quick-all(71.64%) nom(0.80%) bound(49.54%) fut(21.29%) short(0.00%) 300(0.00%)
3 reply d5e6
root search repeat PV x 5 returns !
rootscore 376, move 587238642
4 g3g4 ( 376) depth( 8) pvL( 2) ply(14) nps( 1743306) nPc(4) stage(1) ftime(9) poll(0)
sec(0.78, 0.03) nodes(38165) q(1.8%) h(45.7%) f(52.5%) FH(36.2%)
Hash hit(61.9%) matOWrite( 35.50) draw(176) null(0.0%)
SRC ext(23.79%) reduc(47.58% / 2.21%) ply1( 13) horz(0.00%) futD12(17.73%) pruneLM (0.00%)
QS evFL(0) lowMat(0.20%) see(0.08%)
EV (99.88%) quick-all(52.31%) nom(3.89%) bound(34.09%) fut(14.32%) short(0.00%) 300(0.00%)
4 reply e6d6
root search repeat PV x 5 returns !
rootscore 403, move 528648418
5 e3e4 ( 403) depth( 9) pvL( 8) ply(20) nps( 1609703) nPc(4) stage(1) ftime(10) poll(0)
sec(0.80, 0.22) nodes(347696) q(4.5%) h(36.3%) f(59.2%) FH(32.8%)
Hash hit(57.7%) matOWrite( 40.69) draw(4169) null(0.0%)
SRC ext(24.22%) reduc(48.59% / 1.71%) ply1( 30) horz(0.00%) futD12(29.14%) pruneLM (0.00%)
QS evFL(0) lowMat(0.77%) see(0.16%)
EV (98.84%) quick-all(74.40%) nom(10.73%) bound(34.80%) fut(28.87%) short(0.00%) 300(0.00%)
5 reply d6e6
root search repeat PV x 5 returns !
rootscore 403, move 524324601
6 h2h4 ( 403) depth( 6) pvL( 2) ply(12) nps( 1609703) nPc(4) stage(1) ftime(7) poll(0)
sec(0.82, 0.00) nodes(2754) q(1.1%) h(42.5%) f(56.4%) FH(28.7%)
Hash hit(76.7%) matOWrite( 8.08) draw(6) null(0.0%)
SRC ext(34.36%) reduc(55.02% / 1.75%) ply1( 13) horz(0.00%) futD12(19.76%) pruneLM (0.00%)
QS evFL(0) lowMat(0.00%) see(0.00%)
EV (99.83%) quick-all(66.86%) nom(1.09%) bound(47.16%) fut(18.61%) short(0.00%) 300(0.00%)
6 reply e6f7
root search repeat PV x 5 returns !
rootscore 540, move 587238707
7 g4g5 ( 540) depth(12) pvL( 2) ply(26) nps( 1232535) nPc(4) stage(1) ftime(13) poll(0)
sec(0.84, 0.15) nodes(191043) q(3.0%) h(32.8%) f(64.2%) FH(37.5%)
Hash hit(42.5%) matOWrite( 48.23) draw(6990) null(0.0%)
SRC ext(27.34%) reduc(41.38% / 2.70%) ply1( 30) horz(0.00%) futD12(42.43%) pruneLM (0.00%)
QS evFL(0) lowMat(0.45%) see(0.51%)
EV (98.83%) quick-all(71.03%) nom(7.30%) bound(31.27%) fut(32.46%) short(0.00%) 300(0.00%)
7 reply h6g5
root search repeat PV x 5 returns !
rootscore 566, move 839159099
8 h4g5 ( 566) depth( 6) pvL( 2) ply(10) nps( 1232535) nPc(2) stage(1) ftime(7) poll(0)
sec(0.86, 0.00) nodes(395) q(7.6%) h(27.3%) f(65.1%) FH(20.6%)
Hash hit(73.6%) matOWrite( 1.04) draw(6) null(0.0%)
SRC ext(34.63%) reduc(43.58% / 0.00%) ply1( 3) horz(0.00%) futD12(21.40%) pruneLM (0.00%)
QS evFL(0) lowMat(0.00%) see(0.72%)
EV (96.38%) quick-all(87.97%) nom(6.02%) bound(17.29%) fut(64.66%) short(0.00%) 300(0.00%)
8 reply f7f8
root search repeat PV x 5 returns !
rootscore 566, move 566267252
9 g5g6 ( 566) depth( 9) pvL( 3) ply(20) nps( 1232535) nPc(2) stage(1) ftime(10) poll(0)
sec(0.89, 0.01) nodes(13384) q(0.9%) h(20.7%) f(78.5%) FH(35.7%)
Hash hit(52.5%) matOWrite( 18.30) draw(673) null(0.0%)
SRC ext(30.28%) reduc(26.87% / 4.25%) ply1( 17) horz(0.00%) futD12(41.35%) pruneLM (0.00%)
QS evFL(0) lowMat(0.10%) see(0.62%)
EV (99.13%) quick-all(63.37%) nom(2.27%) bound(6.75%) fut(54.34%) short(0.00%) 300(0.00%)
9 reply f8g7
root search repeat PV x 5 returns !
rootscore 716, move 478317347
10 e4f5 ( 716) depth( 7) pvL( 1) ply(11) nps( 1232535) nPc(2) stage(1) ftime(8) poll(0)
sec(0.92, 0.00) nodes(326) q(5.8%) h(26.1%) f(68.1%) FH(23.9%)
Hash hit(68.0%) matOWrite( 0.00) draw(4) null(0.0%)
SRC ext(20.27%) reduc(37.39% / 1.20%) ply1( 2) horz(0.00%) futD12(32.88%) pruneLM (0.00%)
QS evFL(0) lowMat(0.00%) see(0.00%)
EV (97.12%) quick-all(88.12%) nom(2.97%) bound(12.87%) fut(72.28%) short(0.00%) 300(0.00%)
10 reply g7h6
root search repeat PV x 5 returns !
rootscore 1211, move 478317420
11 f5f6 ( 1211) depth( 9) pvL( 2) ply(18) nps( 1232535) nPc(2) stage(1) ftime(10) poll(0)
sec(0.94, 0.04) nodes(53722) q(0.1%) h(57.6%) f(42.3%) FH(37.5%)
Hash hit(52.6%) matOWrite( 61.97) draw(1182) null(0.0%)
SRC ext(59.57%) reduc(37.04% / 0.71%) ply1( 4) horz(0.00%) futD12(7.15%) pruneLM (0.00%)
QS evFL(0) lowMat(0.00%) see(0.01%)
EV (99.99%) quick-all(93.63%) nom(81.09%) bound(0.07%) fut(12.47%) short(0.00%) 300(0.00%)
11 reply h6h5
root search repeat PV x 5 returns !
rootscore 1211, move 524324277
12 g6g7 ( 1211) depth( 6) pvL( 2) ply(10) nps( 1232535) nPc(2) stage(1) ftime(7) poll(0)
sec(0.97, 0.00) nodes(661) q(0.0%) h(54.6%) f(45.4%) FH(48.3%)
Hash hit(35.3%) matOWrite( 58.06) draw(4) null(0.0%)
SRC ext(46.67%) reduc(22.33% / 0.00%) ply1( 2) horz(0.00%) futD12(33.00%) pruneLM (0.00%)
QS evFL(0) lowMat(0.00%) see(0.00%)
EV (100.00%) quick-all(88.37%) nom(72.85%) bound(1.66%) fut(13.85%) short(0.00%) 300(0.00%)
12 reply h5g4
root search repeat PV x 5 returns !
rootscore 1211, move 524323627
13 f4f5 ( 1211) depth( 6) pvL( 2) ply(12) nps( 1232535) nPc(2) stage(1) ftime(7) poll(0)
sec(1.00, 0.00) nodes(7759) q(0.1%) h(63.0%) f(36.9%) FH(29.6%)
Hash hit(87.8%) matOWrite( 0.47) draw(0) null(0.0%)
SRC ext(71.97%) reduc(59.16% / 0.00%) ply1( 0) horz(0.00%) futD12(1.64%) pruneLM (0.00%)
QS evFL(0) lowMat(0.00%) see(0.00%)
EV (99.98%) quick-all(99.16%) nom(98.98%) bound(0.00%) fut(0.18%) short(0.00%) 300(0.00%)
13 reply g4f4
root search repeat PV x 5 returns !
rootscore 1904, move 478317933
14 f6g6 ( 1904) depth(10) pvL( 1) ply(20) nps( 1232535) nPc(2) stage(1) ftime(11) poll(0)
sec(1.04, 0.02) nodes(19955) q(2.3%) h(42.1%) f(55.6%) FH(35.3%)
Hash hit(46.7%) matOWrite( 56.35) draw(54) null(0.0%)
SRC ext(42.96%) reduc(10.97% / 0.74%) ply1( 2) horz(0.00%) futD12(7.55%) pruneLM (0.00%)
QS evFL(0) lowMat(0.01%) see(0.00%)
EV (99.35%) quick-all(95.12%) nom(84.74%) bound(0.01%) fut(10.38%) short(0.00%) 300(0.00%)
14 reply f4e5
root search repeat PV x 5 returns !
rootscore 1926, move 545295212
15 f5f6 ( 1926) depth( 6) pvL( 2) ply(14) nps( 1232535) nPc(2) stage(1) ftime(7) poll(0)
sec(1.07, 0.01) nodes(9199) q(11.7%) h(32.3%) f(56.0%) FH(36.9%)
Hash hit(47.1%) matOWrite( 60.40) draw(152) null(0.0%)
SRC ext(52.02%) reduc(18.39% / 0.00%) ply1( 4) horz(0.00%) futD12(49.94%) pruneLM (0.00%)
QS evFL(0) lowMat(0.00%) see(0.00%)
EV (96.07%) quick-all(89.55%) nom(67.83%) bound(0.49%) fut(21.23%) short(0.00%) 300(0.00%)
15 reply e5d6
root search repeat PV x 5 returns !
rootscore 7977, move 1216409078
16 g7g8q ( 7977) depth(11) pvL( 1) ply(18) nps( 1238653) nPc(2) stage(1) ftime(12) poll(0)
sec(1.11, 0.13) nodes(161025) q(1.0%) h(44.8%) f(54.2%) FH(27.8%)
Hash hit(42.2%) matOWrite( 80.01) draw(434) null(0.0%)
SRC ext(43.96%) reduc(2.11% / 0.05%) ply1( 7) horz(0.00%) futD12(9.00%) pruneLM (0.00%)
QS evFL(0) lowMat(0.00%) see(0.00%)
EV (99.67%) quick-all(98.82%) nom(96.10%) bound(0.02%) fut(2.70%) short(0.00%) 300(0.00%)
16 reply d6c5
root search repeat PV x 5 returns !
rootscore 7979, move 524323757
17 f6f7 ( 7979) depth(11) pvL( 1) ply(11) nps( 1238653) nPc(2) stage(1) ftime(7) poll(0)
sec(1.16, 0.01) nodes(18289) q(0.0%) h(0.0%) f(100.0%) FH(0.0%)
Hash hit(42.8%) matOWrite( 75.73) draw(0) null(0.0%)
SRC ext(0.00%) reduc(0.00% / nan%) ply1( 0) horz(0.00%) futD12(0.00%) pruneLM (0.00%)
QS evFL(0) lowMat(nan%) see(nan%)
EV (nan%) quick-all(nan%) nom(nan%) bound(nan%) fut(nan%) short(nan%) 300(nan%)
17 reply c5d5
root search repeat PV x 5 returns !
rootscore 7989, move 1216408558
Rasjid
metax
Posts: 344
Joined: Wed Sep 23, 2009 5:56 pm
Location: Germany

Re: simple search yet a bug ?

Post by metax »

What you describe is really not a buggy search, but rather an eval problem. Do you want to know what a buggy search is? After playing around with aspiration windows a bit (probably too much ;)), I get this:

Code: Select all

8/8/2q4p/2k5/4Q3/5PP1/5K1P/8 w - -

Engine: ChessMind 0.81 (0 MB)
by metax

10/22  0:01   +5.21    1.Qc2+ Kb6 2.Qxc6+ Kxc6 3.Ke3 Kd6 
                       4.Ke4 Ke7 5.g4 Kd6 6.f4 Kc5 (283.404) 271 

11/31  0:01   +5.18    1.Qc2+ Kb6 2.Qxc6+ Kxc6 3.Ke3 Kd6 
                       4.Ke4 Ke7 5.g4 Kd6 6.f4 Kc5 7.f5 (525.645) 290 

12/32  0:03   +5.23    1.Qc2+ Kb6 2.Qxc6+ Kxc6 3.Ke3 Kd6 
                       4.Ke4 Ke7 5.g4 Ke6 6.f4 Kf6 7.h3 Ke6 
                       8.f5+ (1.145.350) 320 

13/32  0:05   +5.90++  1.Qc2+ Kb6 2.Qxc6+ Kxc6 3.Ke3 Kd6 
                       4.Ke4 Ke7 5.g4 Ke6 6.f4 Kf6 7.h3 Ke6 
                       8.f5+ (1.871.385) 336 

13/32  0:05   +6.67++  1.Qc2+ Kb6 2.Qxc6+ Kxc6 3.Ke3 Kd6 
                       4.Ke4 Ke7 5.g4 Ke6 6.f4 Kf6 7.h3 Ke6 
                       8.f5+ (1.891.408) 337 

13/34  0:06   +6.57--  1.Qc2+ Kb6 (2.081.527) 340 

13/36  0:07   +5.87--  1.Qc2+ Kb6 (2.649.803) 344 

13/37  0:08   +5.23    1.Qc2+ Kb6 2.Qxc6+ Kxc6 3.Ke3 Kd6 
                       4.Ke4 Ke7 5.g4 Ke6 6.f4 Kf6 7.h3 Ke6 
                       8.f5+ Kd6 (3.144.238) 355 

14/37  0:13   +5.58++  1.Qc2+ Kb6 2.Qxc6+ Kxc6 3.Ke3 Kd6 
                       4.Ke4 Ke7 5.g4 Ke6 6.f4 Kf6 7.h3 Ke6 
                       8.f5+ Kd6 (4.934.206) 360 

14/37  0:13   +6.59++  1.Qc2+ Kb6 2.Qxc6+ Kxc6 3.Ke3 Kd6 
                       4.Ke4 Ke7 5.g4 Ke6 6.f4 Kf6 7.h3 Ke6 
                       8.f5+ Kd6 (4.999.949) 360 

14/38  0:14   +6.49--  1.Qc2+ Kb6 (5.304.870) 362 

14/38  0:16   +5.79--  1.Qc2+ Kb6 (6.025.391) 365 

14/38  0:19   +5.54    1.Qc2+ Kb6 2.Qxc6+ Kxc6 3.Kg2 Kd6 
                       4.Kh3 Ke5 5.Kg4 Kd4 6.f4 Ke4 7.Kh5 Kf3 
                       8.Kxh6 Kg2 (7.354.001) 367 

15/38  0:21   +5.90++  1.Qc2+ Kb6 2.Qxc6+ Kxc6 3.Kg2 Kd6 
                       4.Kh3 Ke5 5.Kg4 Kd4 6.f4 Ke4 7.Kh5 Kf3 
                       8.Kxh6 Kg2 (7.783.508) 369 

15/41  0:23   +5.80--  1.Qc2+ Kb6 (8.626.817) 373 

15/41  0:35   +6.28++  1.Qc2+ Kb6 (12.893.048) 360 

15/41  0:37   +6.18--  1.Qc2+ Kb6 (13.455.372) 361 

15/41  0:37   +6.53++  1.Qc2+ Kb6 (13.469.765) 362 

15/41  0:37   +6.43--  1.Qc2+ Kb6 (13.607.335) 362 

15/42  0:42   +5.78    1.Qc2+ Kb6 2.Qxc6+ Kxc6 3.f4 Kd6 
                       4.Kf3 Ke7 5.Kg4 Ke6 6.Kh5 Kf5 7.Kxh6 Kg4 
                       8.Kg7 Kh3 9.Kf6 (15.533.168) 366 

16/42  0:59   +6.13++  1.Qc2+ Kb6 2.Qxc6+ Kxc6 3.f4 Kd6 
                       4.Kf3 Ke7 5.Kg4 Ke6 6.Kh5 Kf5 7.Kxh6 Kg4 
                       8.Kg7 Kh3 9.Kf6 (21.535.229) 360 

16/42  0:59   +6.71++  1.Qc2+ Kb6 2.Qxc6+ Kxc6 3.f4 Kd6 
                       4.Kf3 Ke7 5.Kg4 Ke6 6.Kh5 Kf5 7.Kxh6 Kg4 
                       8.Kg7 Kh3 9.Kf6 (21.582.121) 360 

16/42  1:04   +7.31    1.Qc2+ Kb6 2.Qxc6+ Kxc6 3.g4 Kd6 
                       4.Kg3 Ke7 5.Kh4 Kf6 6.Kh5 Ke5 7.Kxh6 Kf4 
                       8.g5 Ke5 9.f4+ Kd4 10.Kg6 (23.336.629) 363 

17/45  1:40   +6.96--  1.Qc2+ Kb6 (36.460.964) 362 

17/45  2:51   +7.31++  1.Qc2+ Kb6 (60.473.177) 353 

17/47  3:01   +7.21--  1.Qc2+ Kb6 (64.368.874) 354 

17/47  3:11   +7.48    1.Qc2+ Kb6 2.Qxc6+ Kxc6 3.g4 Kd6 
                       4.Kg3 Ke7 5.Kh4 Kf6 6.Kh5 Ke5 7.Kxh6 Kf4 
                       8.g5 Ke5 9.g6 Kf6 10.g7 (68.095.652) 354 

18/47  3:25   +7.83++  1.Qc2+ Kb6 2.Qxc6+ Kxc6 3.g4 Kd6 
                       4.Kg3 Ke7 5.Kh4 Kf6 6.Kh5 Ke5 7.Kxh6 Kf4 
                       8.g5 Ke5 9.g6 Kf6 10.g7 (73.779.395) 359 

18/50  3:31   +7.73--  1.Qc2+ Kb6 (76.042.446) 359 

18/50  5:22   +7.87    1.Qc2+ Kb6 2.Qxc6+ Kxc6 3.f4 Kd6 
                       4.Kf3 Ke7 5.Kg4 Kf6 6.Kh5 Kg7 7.h4 Kh7 
                       8.f5 Kg8 9.Kxh6 Kf7 10.g4 Kf6 (114.716.869) 355 

best move: Qe4-c2 time: 5:32.438 min  n/s: 356.000  nodes: 117.812.588 
:lol: :lol: :lol: