Page 1 of 1

Null move question

PostPosted: 30 Jun 2008, 21:56
by Fermin Serrano
Me again asking about what I am facing programming my engine.
In this position:
r1bq4/1p4kp/3p1n2/p4pB1/2pQ4/8/1P4PP/4RRK1 w - - bm Re8
I am having a issue that I don't know if it is normal. I put my engine in two tests, one with Null-Move turned on and other with Null-Move turned off. The result is that no-null-move-version is retrieving the correct move faster than null-move-version. This sound strange to me, because the no-null-move-version take less time and less ply to reach the correct result.
does this sound normal to you?

Null Move version:
Code: Select all
ply score   time     nodes  pv
--- ----- ------ --------- -------------------------------------------------
 1    221      0       144  1. Qxc4
 2    178      0       306  1. Qxc4 Qb6+ 2. Rf2
 3    165      0      2130  1. Qxc4 Bd7 2. h4
 4    175      8     29060  1. Qxc4 Qb6+ 2. Rf2 Ne4 3. Be3
 5    158     16     53160  1. Qxc4 Qb6+ 2. Rf2 Ne4 3. Be3 Qb4
 5    184     87    291212  1. Rf3 Kf7 2. Qxc4+ Kg7 3. Bxf6+ Qxf6 4. Qd5 Qxb2 5. Qxd6
 6    281    109    365908  1. Rf3 Kf7 2. Qxc4+ d5 3. Bxf6 Qxf6 4. Qxd5+ Kg7 5. b3
 7    291    261    902833  1. Rf3 Kf7 2. Rfe3 d5 3. Re7+ Qxe7 4. Rxe7+ Kxe7 5. Qxf6+ Kd7 6. Qe5
 8    400   1203   3821874  1. Rf3 Kf7 2. Rfe3 d5 3. Re8 Qd6 4. Bxf6 b5
 8    865   2427   8243776  1. Re8 Qxe8 2. Qxf6+ Kg8 3. Bh6 Qe3+ 4. Bxe3 d5 5. Qd8+ Kf7 6. Qxd5+ Kf6 7. Qxc4


Version without Null Move
Code: Select all
ply score   time     nodes  pv
--- ----- ------ --------- -------------------------------------------------
 1    221      0       144  1. Qxc4
 2    178      0       320  1. Qxc4 Qb6+ 2. Rf2
 3    167      0      2105  1. Qxc4 Qb6+ 2. Rf2 Ne4
 4    175      7     27602  1. Qxc4 Qb6+ 2. Rf2 Ne4 3. Be3
 5    158     28     96093  1. Qxc4 Qb6+ 2. Rf2 Ne4 3. Be3 Qb4
 5    183    106    373719  1. Rf3 Kf7 2. Qxc4+ Kg6 3. Bxf6 Qxf6 4. Qd5 Qxb2 5. Qxd6+
 6    281    217    803202  1. Rf3 Kf7 2. Qxc4+ d5 3. Bxf6 Qxf6 4. Qxd5+ Kg7 5. b3
 6    423    815   2958933  1. Re8


Regards,
Fermin

Re: Null move question

PostPosted: 30 Jun 2008, 22:44
by Teemu Pudas
What's your R? After 3..null, the mate will be missed if you're in quiescence.

Consider generating quiet checks in QS, especially in response to nullmove.

Re: Null move question

PostPosted: 01 Jul 2008, 08:22
by Fermin Serrano
Teemu Pudas wrote:What's your R? After 3..null, the mate will be missed if you're in quiescence.

Consider generating quiet checks in QS, especially in response to nullmove.


Making tests, it seems that R is not the problem. Even your suggestion of generating quit checks in QS in response to nullmove does not work also. What I have modified is don't allow null move if current_depth <=2 and this show the expected move in ply 6 and 700.000 nodes, which is less than no-null-move version.

Re: Null move question

PostPosted: 01 Jul 2008, 08:26
by Harald Johnsen
It's normal.
The null move search is a boolean function that tells you if your opponent has a threat.
You cut the branch when there is none. You cut the branch but that branch could lead to a better variation than what you'll get in other branch.
You just can't know because :
1) you passed your turn so you did not play the most threatening move
2) you searched with a lower depth so you missed some tactics
3) your lower search depth lead you in quiescent search while the good move is perhaps not a capture.

HJ.