Author: Jan K.
Date: 05:10:29 11/12/04
Could someone give me a hint what may cause this kind of behaviour?
Critical position: :)
[D]4r1k1/p4p1p/1p2pbp1/1P1n1q2/3P4/PQ2P1P1/3B2BP/2R3K1 w - - 0 35
Now with null move off i get something like :
4 -0.17 0.047 2649 g2d5 e6d5 c1c7 e8e7
4 -0.06 0.063 10924 c1d1 e8c8 d1f1 f5g5
4 0.03 0.088 23314 a3a4 e8d8 c1f1 f5g5
4 0.15 0.116 38460 c1f1 f5g5 g2e4 f6d4
4 -> 0.15 0.138 48557 c1f1 f5g5 g2e4 f6d4
5 0.18 0.171 58202 c1f1 f5g5 g1h1 e8c8 g2e4
5 -> 0.18 0.335 127924 c1f1 f5g5 g1h1 e8c8 g2e4
6 1.24 0.416 180370 c1f1 f5g5 f1f2 d5c7 h2h4 g5g3
6 -> 1.24 0.888 337163 c1f1 f5g5 f1f2 d5c7 h2h4 g5g3
7 1.24 0.999 441671 c1f1 f5g5 f1f2 d5c7 h2h4 g5g3 f2f6
7 -> 1.24 1.901 1384458 c1f1 f5g5 f1f2 d5c7 h2h4 g5g3 f2f6
.....with score improving every ply
with null move R=3:
4 -0.17 0.060 2042 g2d5 e6d5 c1c7 e8e7
4 -0.06 0.089 9920 c1d1 e8c8 d1f1 f5g5
4 0.03 0.110 20116 a3a4 e8d8 c1f1 f5g5
4 0.15 0.136 33296 c1f1 f5g5 g2e4 f6d4
4 -> 0.15 0.156 43026 c1f1 f5g5 g2e4 f6d4
5 0.16 0.169 48732 c1f1 f5g5 b3a4 e8e7 a4b3
5 -> 0.16 0.231 86307 c1f1 f5g5 b3a4 e8e7 a4b3
6 0.15 0.253 96360 c1f1 f5g5 g2e4 f6d4 e4d5 e6d5
6 0.16 0.388 173179 c1e1 e8c8 e1f1 f5g5 g2e4 g8h8
6 0.23 0.672 269066 b3c4 f5g5 g2e4 e8d8 c4e2 g5h6
6 -> 0.23 0.696 278514 b3c4 f5g5 g2e4 e8d8 c4e2 g5h6
7 0.24 0.843 343514 b3c4 f5g5 g2e4 f6e7 c4b3 e7d6 c1f1
7 -> 0.24 1.248 537169 b3c4 f5g5 g2e4 f6e7 c4b3 e7d6 c1f1
8 0.22 1.589 755293 b3c4 f5g5 c4d3 g5h6 g2d5 e6d5 c1c7 f6g5
8 1.74 2.019 1025469 c1f1 f5g5 b3d3 d5c7 h2h4 g5b5 d3b5 c7b5
8 -> 1.74 2.063 1065714 c1f1 f5g5 b3d3 d5c7 h2h4 g5b5 d3b5 c7b5
9 1.74 2.217 1187488 c1f1 f5g5 b3d3 d5c7 h2h4 g5b5 d3b5 c7b5 f1f6
9 -> 1.74 2.870 1659459 c1f1 f5g5 b3d3 d5c7 h2h4 g5b5 d3b5 c7b5 f1f6
.......winning move is found 2 ply later........i can't see how null move could
spoil the search in this position......
I've done the following experiment, replacing part of the code:
int AlphaBeta(...) {
.....
weird=0;
DoNull();
value=-AlphaBeta(-beta,-beta+1,....);//or -QSearch(-beta,-beta+1);
TakeBackNull();
if (value>=beta) {
//SaveHash(......);
//return value; I've taken this out so I do a null move search but I don't make
cutoffs based on its results and I replaced this with:
weird=1;
weirdValue=value;
}
.....
while (moves_left) {
DoMove();
value=AlphaBeta(...);
TakeBack();
if (value>=bestValue) {
if (value>=beta) return value;
}
//....here is the place when i exit alphabeta in case there was no fail high
after all moves were searched
if (weird) {
*
}
return alfa(bestValue);....pseudocode :))
}
Now focus on that '*' in the pseudocode.........if I write 'return weirdValue'
there, it finds 'c1f1' on ply 8. It's not certain that those are the positions
that spoil the search but they should at least be interesting.
When doing a 7 ply search, 'if (weird)' is true in exactly 6 positions. All
those position are searched with null window(alfa+1==beta there), all don't seem
that much importnant because |weirdValue-realValueReturned|<0.3pawns. Do you
have some idea what problem that might be? If you want to see those positions, I
can paste them here....
Thanks.
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.