Computer Chess Club Archives




Subject: Re: The Code for the Rybka-Mate-Bug

Author: Robert Hyatt

Date: 13:29:53 12/13/05

Go up one level in this thread

On December 13, 2005 at 11:52:03, Álvaro Begué wrote:

>On December 13, 2005 at 08:47:51, Chrilly Donninger wrote:
>>Just for the curious, below is the code for the Rybka-Mate bug. I have seen
>>another bug in the Beta-Code too. There are in every programm hundreds of bugs,
>>so it would be more surprising to say: I have seen no other bug.
>>.text:0040CD07                 mov     ebp, [esp+868h+var_854]
>>.text:0040CD0B                 cmp     ebp, 0FFFF810Ch
>>.text:0040CD11                 mov     dword_667A14, edi
>>.text:0040CD17                 jnz     loc_40CDCA
>>.text:0040CD1D                 mov     eax, [esp+868h+arg_C]
>>.text:0040CD24                 neg     al
>>.text:0040CD26                 pop     edi
>>.text:0040CD27                 pop     ebx
>>.text:0040CD28                 pop     esi
>>.text:0040CD29                 pop     ebp
>>.text:0040CD2A                 sbb     eax, eax
>>.text:0040CD2C                 and     eax, 0FFFF8300h
>>.text:0040CD31                 add     esp, 858h
>>.text:0040CD37                 retn
>>In C this reads as:
>>if(Bestscore == -32500( // No legal move found
>>   if(InCheck) {
>>      return -32000;
>>   }
>>   else { // Stalemate
>>      return 0;
>>   }
>>The bug is, that all mates are the same. In fact shorter mates are better for
>>the mate-giving side (or worse for the mated side) than longer mates. One has to
>>subtract the Plies/Distance from the starting position.
>>The bug is in my opinion a consequence of a bad design decision. There are 2
>>different "minus-infinite" values. In BestScore minus infinite is -32500, for
>>mate its -32000. If one sets bestscore at the first place to -32000+Ply one gets
>>cleaner and more efficient code and avoids the bug.
>>I had the same bug in Nimzo 1.0. But I must admit, that Rybka 1.0 is stronger.
>I use the exact same solution that Chrilly proposes, combined with the "store
>only bounds for mating scores in the hash table" idea that I picked from Bruce
>Moreland's website. As far as I can tell, it works great.

The question is "why store only bounds"?  Makes no sense to me.  I've always
stored exact (corrected for distance to root) for mate scores.  Allows me to
store all the EGTB mates as well.

Never understood the reasoning for not storing exact mate scores.  Never had a
single problem doing so in either of my programs, spanning _many_ years...

This page took 0.02 seconds to execute

Last modified: Thu, 07 Jul 11 08:48:38 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.