Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: about using killers in Rebel and about programming

Author: Robert Hyatt

Date: 22:01:24 12/31/02

Go up one level in this thread


On December 31, 2002 at 20:32:28, Uri Blass wrote:

>On December 31, 2002 at 19:50:43, Robert Hyatt wrote:
>
>>On December 31, 2002 at 17:49:52, Uri Blass wrote:
>>
>>>From Ed programmer stuff
>>>
>>>Killer-One [current ply]      110
>>>Killer-One [current ply-2]    108
>>>Killer-Two [current ply]      106
>>>Killer-Two [current ply-2]    104
>>>
>>>I until today used only
>>>
>>>Killer-One [current ply]
>>>Killer-Two [current ply]
>>>
>>>I am interested to know if using 4 killers is a new idea or maybe this idea is
>>>known to be used by other programs.
>>
>>It was known in 1975.  Chess 4.0 used this.  You can find it mentioned in
>>the chess 4.7 chapter of "Chess Skill in Man and Machine."
>>
>>We did that in Cray Blitz, but we also did more killers, going back to the
>>root in fact...
>>
>>
>>
>>>
>>>I did try part of the idea that Ed suggested without clear results.
>>>
>>>I changed the order of moves in movei to
>>>
>>>Killer-One [current ply]
>>>Killer-One [current ply-2]
>>>Killer-Two [current ply]
>>>
>>>instead of
>>>
>>>Killer-One [current ply]
>>>Killer-Two [current ply]
>>>
>>>I found that it is better only in part of the cases and have not clear results
>>>if it is better or worse than previous order but I had a bug in the
>>>implementation and I checked killer[ply-2] even in cases when ply-2<0.
>>>
>>>It is surprising that the program did not crush and even performed better in
>>>part of the cases.
>>>
>>>I still do not use check bound software.
>>>I asked in a previous discussion about checking bounds but I solved the
>>>problem that caused me to ask about it and I also read a claim that if a
>>>varaible is out of bound the program should crush.
>>>
>>>I also looked for a software that will help me under visual C++ but after I
>>>asked to get it for free evaluation and I only got an email that suggest me to
>>>contact them by fax or telephone I did not respond(I responded by email but my
>>>email was blocked for some reason and I decided that the subject is probably not
>>>very important).
>>>
>>>I think now that it may be important because a chess program may even play well
>>>inspite of the fact that it calls killer[-1] so it is possible that I have more
>>>mistakes like that.
>>>
>>
>>That probably won't hurt a thing.  That move probably would not pass your
>>legality check, so even a garbage move would just waste a tiny bit of time
>>as you notice it is not legal in the current position.
>
>Yes but I can still imagine problems.
>
>1)If I am unlucky a garbage move may be legal so it can be counterproductive.
>
>2)I thought that garbage may do something worse than giving a random
>number.
>I thought that if my program try to look at some place that does not exist the
>program may crush and not give me a random number or may change another array.
>
>I also cared not to have -1
> A[x]=1; and not
>if (x>=0)
>A[x]=1;

That doesn't hurt a thing.  a[-1] is one "thing" before a[0].  If a is an
integer, a[-1] is simply 4 bytes in front of a[0]...

>
>If you are right then it means that there are cases when I can save time by
>doing something like
>
>A[x]=1; instead of
>if (x>=0)
>A[x]=1;

You can do that just so you _know_ what is in front of A.  IE in fortran,
arrays go from 1 to N, rather than 0 to N-1 as in C.  But in Cray Blitz we
wanted to reference a[i] where i could be 0, 1, ... and all we did was make
sure that there was a memory word that could safely be zapped, in front of
a[1].  We did it like this:

common /x/  dummy, a(10)

a(1) thru a(10) are normal array references.  a(0) actually stores on top of
"dummy".




>
>The point is that if I understand correctly then I understand from your post
>that a[x]=1 when x=-1 can not change relevant information.

No, it can _definitely_ change something, just not exactly what you think it
is changing.  :)  It will change what is in _front_ of the array.  In C, the
only way to know what is in front of the array is to put the array in a
structure, and then put something right in front of that array declaration
to declare the "dummy" space needed for a[-1].  Or a[-2] if you want to go
backward even farther.



>
>If I assume that the condition x>=0 happen in most of the cases then it seems
>clear that A[x]=1 is faster.

Correct.  If you know that -1 <= x <= N, then one dummy word in front of the
array will let you eliminate the test.

>
>Uri



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.