How to check null move??

Programming Topics (Computer Chess) and technical aspects as test techniques, book building, program tuning etc

Moderator: Andres Valverde

How to check null move??

Postby Grzegorz Sidorowicz » 24 May 2005, 15:15

Have you got any idea how to check null move??
Maybe have you got any positions where you know correct results?
I haven't got repetition detection yet.

Results in initial position without null move:
Code: Select all
 1  h2h3        2            1       0.000
 1  g2g4        4            2       0.000
 1  f2f4        8            4       0.000
 1  g1f3       20            7       0.000
 1> g1f3       20           20       0.000
 2  g1f3        0           42       0.000
 2> g1f3        0           81       0.000
 3  g1f3       20          146       0.000
 3> g1f3       20          623       0.000
 4  g1f3        0         1184       0.016
 4> g1f3        0         2160       0.016
 5  g1f3       16         4042       0.016
 5> g1f3       16        11346       0.016
 6  g1f3        0        22992       0.016
 6> g1f3        0        49020       0.047
 7  g1f3       10        98713       0.125
 7> g1f3       10       432469       0.312
 8  g1f3        0       983764       0.656
 8  e2e4        4      1821744       1.297
 8> e2e4        4      2138083       1.562
 9  e2e4       12      7985752       5.750
 9> e2e4       12     12845888       8.688
10  e2e4        8     48057366      34.235
10> e2e4        8     73989230      56.377


Results in initial position with null move:
Code: Select all
 1  h2h3        2            1       0.000
 1  g2g4        4            2       0.000
 1  f2f4        8            4       0.000
 1  g1f3       20            7       0.000
 1> g1f3       20           20       0.000
 2  g1f3        0           42       0.000
 2> g1f3        0           81       0.000
 3  g1f3       20          146       0.000
 3> g1f3       20          623       0.000
 4  g1f3        0         1185       0.000
 4> g1f3        0         2120       0.000
 5  g1f3       16         3862       0.000
 5> g1f3       16         3919       0.000
 6  g1f3        0        14934       0.000
 6> g1f3        0        45982       0.032
 7  g1f3       10        67950       0.047
 7> g1f3       10        69027       0.047
 8  g1f3        0       399614       0.266
 8  e2e4        4      1461721       1.016
 8> e2e4        4      1463558       1.016
 9  e2e4        2      2686623       1.969
 9> e2e4        2      2717829       2.000
10  e2e4        1     15717371      10.876
10> e2e4        1     16041693      11.094


Results in initial position with null move (only doing by white side):
Code: Select all
 1  h2h3        2            1       0.000
 1  g2g4        4            2       0.000
 1  f2f4        8            4       0.000
 1  g1f3       20            7       0.000
 1> g1f3       20           20       0.000
 2  g1f3        0           42       0.000
 2> g1f3        0           81       0.000
 3  g1f3       20          146       0.000
 3> g1f3       20          623       0.000
 4  g1f3        0         1184       0.000
 4> g1f3        0         2160       0.000
 5  g1f3       16         3900       0.000
 5> g1f3       16        11224       0.000
 6  g1f3        0        22406       0.016
 6> g1f3        0        46653       0.031
 7  g1f3       10        90395       0.062
 7> g1f3       10       424851       0.250
 8  g1f3        0       820093       0.516
 8  e2e4        4      1652828       1.141
 8> e2e4        4      1955943       1.375
 9  e2e4       12      7620314       5.406
 9> e2e4       12     12570049       8.453
10  e2e4        8     43789695      31.298
10> e2e4        8     70278420      52.486


Results in initial position with null move (only doing by black side):
Code: Select all
 1  h2h3        2            1       0.000
 1  g2g4        4            2       0.000
 1  f2f4        8            4       0.000
 1  g1f3       20            7       0.000
 1> g1f3       20           20       0.000
 2  g1f3        0           42       0.000
 2> g1f3        0           81       0.000
 3  g1f3       20          146       0.000
 3> g1f3       20          623       0.000
 4  g1f3        0         1185       0.000
 4> g1f3        0         2120       0.000
 5  g1f3       16         4004       0.000
 5> g1f3       16         4061       0.000
 6  g1f3        0        15540       0.016
 6> g1f3        0        45722       0.031
 7  g1f3       10        73991       0.063
 7> g1f3       10        75013       0.063
 8  g1f3        0       525705       0.328
 8  e2e4        4      1575969       1.078
 8> e2e4        4      1577810       1.078
 9  e2e4        2      3218747       2.422
 9> e2e4        2      3250030       2.453
10  e2e4        1     25945580      18.313
10> e2e4        1     26280002      18.532


As you can see result of search is different when I use null move only for white and only for black. It make me feel worry but maybe it isn't wrong behaviour of my program. Null move for white side produce results similar to this without null move but need much longer time to reach depth 10 than null move for black side. But for black side results are different a little.
Please help me! How to dicover where is problem?

Probably in consequence of this problem my program in position...
r1b1qbk1/pp2n1rp/3p1B2/1N1Pp3/Q3Pp2/1P1N1Pp1/P3B1P1/2R2RK1 w ; id "";c0 "Armageddon Chess-Thialf, 28-03-2002 11:23";
[diag]r1b1qbk1/pp2n1rp/3p1B2/1N1Pp3/Q3Pp2/1P1N1Pp1/P3B1P1/2R2RK1 w[/diag]
...can't find correct result
Code: Select all
 1  c1d1      235            1       0.000
 1  a2a3      236           11       0.000
 1  d3e5      354           12       0.000
 1  c1c8      555           20       0.000
 1  f6g7      735           32       0.000
 1> f6g7      735           43       0.000
 2  f6g7      518          213       0.000
 2> f6g7      518         2495       0.000
 3  f6g7      518         2800       0.000
 3> f6g7      518         7043       0.000
 4  f6g7      518        10061       0.015
 4> f6g7      518        11088       0.015
 5  f6g7      518        28785       0.015
 5> f6g7      518        29071       0.015
 6  f6g7   -42994        54912       0.031
 6  c1c8      149        84789       0.062
 6> c1c8      149        86100       0.062
 7  c1c8       36       241348       0.156
 7> c1c8       36       249915       0.172
 8  c1c8       15       895112       0.562
 8> c1c8       15       923341       0.578
 9  c1c8      -10      2562346       1.687
 9  g1h1        5     19260633      13.407
 9> g1h1        5     19346345      13.453
10  g1h1        2     30122419      19.297
10> g1h1        2     30842448      19.688
11  g1h1        1     98247239      61.267
11> g1h1        1    104190931      64.986


Without null move can find it:
Code: Select all
 1  c1d1      235            1       0.000
 1  a2a3      236           11       0.000
 1  d3e5      354           12       0.000
 1  c1c8      555           20       0.000
 1  f6g7      735           32       0.000
 1> f6g7      735           43       0.000
 2  f6g7      518          213       0.000
 2> f6g7      518         2495       0.000
 3  f6g7      518         2800       0.000
 3> f6g7      518         7043       0.000
 4  f6g7      518        10060       0.000
 4> f6g7      518        45265       0.016
 5  f6g7      518        58922       0.032
 5> f6g7      518       150394       0.079
 6  f6g7   -42994       216114       0.141
 6  c1c8      149       241284       0.157
 6  d3e5      195       335802       0.235
 6  b5c7      330       590969       0.391
 6> b5c7      330       837446       0.563
 7  b5c7      -93      1014529       0.688
 7  d3e5       17      1184603       0.797
 7  c1c8      149      1325017       0.891
 7  f6e7      224      2628787       1.844
 7  d3f4      306      2948726       2.032
 7> d3f4      306      3621165       2.469
 8  d3f4      119      5167001       3.516
 8> d3f4      119     20774057      13.829
 9  d3f4      101     23947240      15.923
 9  d3f2      104     53045841      36.439
 9> d3f2      104     54188344      37.158
10  d3f2     -133     86699789      58.221
10  d3f4      100    115898441      76.487
Best Regards
Grzegorz Sidorowicz
User avatar
Grzegorz Sidorowicz
 
Posts: 12
Joined: 27 Sep 2004, 08:19
Location: Poland

Re: How to check null move??

Postby Volker Böhm » 25 May 2005, 17:15

You can?t have correct or uncorrect results for nullmoves. There are many different approaches to implement nullmoves that will give different results.

Nullmoves are indeed a pruning, thus they can lead to much more depth needed to find a solution.

The only way I know how to detect problems in search (nullmove is part of search) is to implement debugging code examine the search tree comfortabely and to spend lots of hours to look at it for problems.

Greetings Volker
Volker B?hm, Spike Team
Volker Böhm
 
Posts: 66
Joined: 27 Sep 2004, 18:52
Location: Germany

Re: How to check null move??

Postby Grzegorz Sidorowicz » 26 May 2005, 13:14

You can?t have correct or uncorrect results for nullmoves. There are many different approaches to implement nullmoves that will give different results.


I can. It is positiotion which I mentioned. Fianlly I found bug and my program without any problem can find correct solution.

Code: Select all
 1  c1d1      235            1       0.000
 1  a2a3      236           11       0.000
 1  d3e5      354           12       0.000
 1  c1c8      555           20       0.000
 1  f6g7      735           32       0.000
 1> f6g7      735           43       0.000
 2  f6g7      518          213       0.000
 2> f6g7      518         2495       0.000
 3  f6g7      518         2732       0.000
 3> f6g7      518         6811       0.010
 4  f6g7      518         9802       0.010
 4> f6g7      518        11301       0.010
 5  f6g7      518        24946       0.021
 5> f6g7      518        25232       0.021
 6  f6g7   -42994        46958       0.031
 6  c1c8      149        83198       0.051
 6  d3e5      195       119184       0.071
 6  f6e7      307       179313       0.111
 6> f6e7      307       179621       0.111
 7  f6e7      223       453161       0.301
 7  d3f4      306       836491       0.551
 7> d3f4      306       839667       0.551
 8  d3f4       95      2157476       1.292
 8> d3f4       95      8989233       5.929
 9  d3f4       11     14642582       9.374
 9> d3f4       11     35490274      23.865
10  d3f4       36     59128432      36.413
10> d3f4       36    220877955     141.834
11  d3f4        5    348805108     216.201
11> d3f4        5    543454479     349.102
12  d3f4        6   1069355552     625.480
12> d3f4        6   1596231665     943.647
13  d3f4        2   4870807089    2760.900
13> d3f4        2  10834302085    6429.736


In fact I knew this position can show me my null move is corret or not and I knew how method I shuld use to discover problem but I asked help because it is always interseting for me how other people repair their programs. Now I must explain what was wrong and how I found out it.
I was checking hash code at the beginnig each node by compare it to hash code reached by computation it in the same way as we do it at the root. I expected diffrent results and I was right. Diffrence was because after null move next node got wrong information about position. It was origin quite funy effect. In initial position after moves: f2f4 b8c6 g2g4 my program unexpectadly made move f4g5. It was enpassant move! It was reason why I had difference in hash codes counting.
Simply method comparing hash codes helped me to solve my problem but I'm absolutly sure everyone know many methods like this to find out problems. It's a pity that no one wanted to share with me his knowledge :(
Best Regards
Grzegorz Sidorowicz
User avatar
Grzegorz Sidorowicz
 
Posts: 12
Joined: 27 Sep 2004, 08:19
Location: Poland

Re: How to check null move??

Postby Dann Corbit » 26 May 2005, 18:34

I was unsure of exactly what you were asking for.

Probably, the goal was not perfectly clear to some others also.
Dann Corbit
 


Return to Programming and Technical Discussions

Who is online

Users browsing this forum: No registered users and 13 guests