Geschrieben von: / Posted by: Sune Fischer at 10 December 2002 00:30:02:
Als Antwort auf: / In reply to: Re: BigLion and fine 70 geschrieben von: / posted by: Dieter Bürßner at 09 December 2002 22:29:30:
the low hash cripples the TT of course.
I'm not pleased with frenzee here!
I seem to have a bug in the TT

For Yace thousand entries in the hash table are enough, to solve it fast.
Without hash it would probably need many hours (but seems possible. It needed about 10 minutes 5 ply inside the PV, and the branching factor was before the fail low around 2).
Yes. From some observations of Yace, even very bad moveordering does not hurt very much (the depth rises very fast, and depth 30 is no problem).
So, it seems you handle some cutoffs wrong (perhaps while storing, or while retrieving). If your code isn't too complicated yet, you should be able to find it rather fast - good luck.
One other idea (when you reach the depth faster). By *disabling* repetition detection, I get more consistent results. It might be a good idea for debugging/testing (because in this position, it should decrease the luck factor - see my argument in the other post).
Also, doing a material only evaluation might help testing here. And disabling any pruning/search extensions. With TTs, none of this should be needed to find the solution fast on current computer.
Regards,
Dieter
Yes, it is very clearly a hashing problem, it should scream past ply 22 if everything was working.
Thanks, I found it

I had a hunch that it might be the replacement scheme, I never really did bother to test it properly.
I conducted a quick test by simply making it a "always-replace" scheme, it worked like a charm. Now Kb1 is found at ply 18 and a winning score shown at ply 22.
I get ply 29 in no time, even with only 13 MB mem. However ply 30 takes very much longer, then ply 31 is really fast again:
18 83 15 34831 1.Kb2 Ka8 2.Kc2 Kb7
18 83 15 36294 1.Kb1
19 83 18 54666 1.Kb1 Kb7 2.Kc1 Kc7 3.Kd1 Kd8 4.Kc2 Kd8
20 83 20 66815 1.Kb1 Ka8 2.Kb2 Kb8
21 83 22 79565 1.Kb1 Ka8 2.Kb2 Kb8 3.Kc2 Kb7 4.Kc3 Ka7 5.Kd2 Kb7 6.Ke2 Kc7 7.Kf2 Kd7 8.Kg3 Ke7 9.Kh4 Kf6 10.Kh5 Kg7 11.Kg5
22 113 25 100981 1.Kb1 Kb7 2.Kc1 Kc7 3.Kd1 Kd7 4.Kc2 Ke8 5.Kd3 Kf7 6.Kc4 Kg6 7.Kb5 Kh5 8.Kc6 Kg4 9.Kxd6 Kxf4 10.Kc5 Ke3 11.d6 Kf2
23 153 36 174968 1.Kb1 Kb7 2.Kc1 Kc7 3.Kd1 Kd7 4.Kc2 Ke8 5.Kd3 Kf7 6.Kc4 Kg6 7.Kb5 Kh5 8.Kc6 Kg4 9.Kxd6 Kxf4 10.Kc5 Ke3 11.d6 Kf2 12.d7
24 218 47 248760 1.Kb1 Kb7 2.Kc1 Kc7 3.Kd1 Kd7 4.Kc2 Kc7 5.Kd3 Kb7 6.Ke2 Kc7 7.Kf2 Kd7 8.Kg3 Ke8 9.Kh4 Kf7 10.Kg5 Kg7 11.Kxf5 Kf7
25 238 56 316924 1.Kb1 Kb7 2.Kc1 Kc7 3.Kd1 Kd7 4.Kc2 Kc7 5.Kd3 Kb7 6.Ke2 Kb8 7.Kf2 Kb7 8.Kg3 Kc7 9.Kh4 Kd7 10.Kg5 Ke8 11.Kxf5 Kf7 12.Kg5 Kg8 13.f5
26 223 79 476914 1.Kb1 Ka8 2.Kb2 Kb8 3.Kc2 Kc8 4.Kd2 Kd8 5.Kc3 Kc7 6.Kd3 Kb7 7.Ke2 Kb8 8.Kf3 Kc7 9.Kg3 Kb8 10.Kh4 Ka7 11.Kg5 Kb7 12.Kh5 Ka8
27 248 100 620356 1.Kb1 Ka8 2.Kb2 Kb8 3.Kc2 Ka7 4.Kd2 Kb8
28 248 129 832013 1.Kb1 Ka8 2.Kb2 Kb8 3.Kc2 Ka7 4.Kd2 Kb8 5.Ke2 Ka7 6.Kf2 Kb8
29 253 313 2038406 1.Kb1 Ka8 2.Kb2 Kb8 3.Kc2 Kb7 4.Kc3 Kc7 5.Kd3 Kb7 6.Ke2 Kc7 7.Kf2 Kd7 8.Kg3 Ke8 9.Kh4 Kf7 10.Kg5 Kg7 11.Kxf5 Kf7 12.Kg5 Kg7 13.f5 Kf7
30 253 9719 56126815 1.Kb1 Ka8 2.Kb2 Kb8 3.Kc2 Ka7 4.Kd3
31 253 9806 56738851 1.Kb1 Ka8 2.Kb2 Kb8 3.Kc2 Ka7 4.Kd3 Kb6 5.Ke2 Kc7 6.Kf2 Kd7 7.Kg3 Ke8 8.Kh4 Kf8 9.Kh5 Kf7 10.Kg5 Kg7 11.Kxf5 Kf7
Would you say this is acceptable?
It sort of runs into the wall on the 30th ply, time is almost 1 min 37 secs where ply 29 was only 3.13 secs - that is a very large branch factor if I'm not mistaken.
It's having trouble getting the score higher, too stupid to know about passed pawns and no push pawn extension enabled here so the score is flat for some plies.
I tried 130 MB, makes things go a little faster:
30 248 247 1522191 1.Kb1 Kb7 2.Kc1 Kc7 3.Kd1 Kd7 4.Kc2 Kd8 5.Kc3
31 248 335 2086536 1.Kb1 Kb7 2.Kc1 Kc7 3.Kd1 Kd7 4.Kc2 Kd8 5.Kc3 Kc7 6.Kd3 Kb6 7.Kd3
32 248 1054 6224547 1.Kb1 Kb7 2.Kc1 Kc7 3.Kd1 Kd7 4.Kc2 Kd8 5.Kc3 Kc7 6.Kd3 Kb7
33 253 1232 7319563 1.Kb1 Kb7 2.Kc1 Kc7 3.Kd1 Kd7 4.Kc2 Kd8 5.Kc3 Kc7 6.Kd3 Kb7 7.Ke2 Kc7 8.Kf2 Kd7 9.Kg3 Ke8 10.Kh4 Kf7 11.Kg5 Kg7 12.Kxf5 Kf7 13.Kg5 Kg7 14.f5 Kf7 15.f6 Kf8 16.Kg4 Kg8 17.Kf4
34 253 1553 9172580 1.Kb1 Kb7 2.Kc1 Kc7 3.Kd1 Kd7 4.Kc2 Kd8 5.Kc3 Kc7 6.Kd3 Kb7 7.Ke2 Kc8 8.Kf3 Kd8 9.Kg3 Ke8 10.Kh4 Kf7 11.Kg5 Kg7 12.Kxf5 Kf7 13.Kg5 Kg7 14.f5 Kf7 15.f6 Kf8 16.Kg6 Kg8 17.f7+
35 293 6909 39705322 1.Kb1 Kb7 2.Kc1 Kb8 3.Kc2 Kb7 4.Kc3 Ka7 5.Kd2 Kb8 6.Ke2 Kc8 7.Kf2 Kd8 8.Kg3 Ke7 9.Kh4 Kf6 10.Kh5 Kf7 11.Kg5
Ah, I thought of doing something similar though less dramatic, namely not storing repetition draws at all. Just like we have a special "range" for mate scores, it is possible to make a range for repetition draws.
To make them work in the natural framework of alpha-beta they have to be approximately 0. I've given it the first 1 bit of the score (I use milipawn scoring so I have a few more bits). If I get a score where score&1 then I do not hash that score because it's a repetition draw. Of course normal scores must have be of the form ~1&eval()
Didn't seem to have any measurable effect at all, so I guess this is not causing instability.
Yeah, "the drill", debugging is the only downside to chess programming

-S.