Author: scott farrell
Date: 10:47:16 09/14/02
Go up one level in this thread
On September 14, 2002 at 13:27:12, Tony Werten wrote:
>On September 14, 2002 at 13:00:09, scott farrell wrote:
>
>>I have been reading plenty on hash replacement schemes.
>>
>>I have read Breuker's thesis, and done some (slow) searching through the CCC
>>archives.
>>
>>I am going over my code and redoing the hashing parts, only to realise I have
>>borken IID (internal iterative deepening).
>>
>>Now I am unsure of what I should be aiming at in relation to hashing code.
>>
>>I am also unsure of exactly what multi-probing the hash tables is. I am guessing
>>there is still only one hashtable, and different equations to go from
>>key/checkkey to the hashtable index, so that there can be several alternative
>>slots that a hash entry for a position could appear at. Is Multi-probe just
>>aiming at reducing collisions - or is the idea to store more than one hash entry
>>for popular positions (say 1 for "depth based", and one for "replace always")?
>>
>>I think I am correct that I need atleast one of the probes as "replace always"
>>to get IID to work. What else do I need to guarantee that I get the best moves
>>from IID backed up to the main search?
>>
>>When people say "replace always" do that mean literaly, just store it all the
>>time? It seems over simplistic - but I tried it, and it works pretty much the
>>same as my code below that tries to keep the deeper entries.
>>
>>Any help apprecated.
>
>What most people do is have 2 tables. In the first you only store if the
>searchdepth >= table depth (and you move the former entry to the second table).
>If not then store in 2nd table.
Thanx for that Tony. I'll give it a go.
>
>Tony
>
>PS I advise you to create a structure and create an array of that. Your
>implementation of serveral arrays kills the cache.
Java is a bit slack at arrays of objects, hence multiple arrays of primitives.
>
>>
>>Here is some of my code
>>
>>//////////////////////////////////////////////////////////////////////////////////////////////////////
>>// SET A TABLE ENTRY
>>//////////////////////////////////////////////////////////////////////////////////////////////////////
>>public final static void store(
>> int _depth,
>> int _value,
>> Move _best,
>> char _flag,
>> boolean _estOnly,
>> short _reqSE,
>> Board _b,
>> boolean usingSecondTE_notbeingused,
>> boolean _dontNullMove)
>>{
>> int key= 0;
>> long checkKeyt= 0;
>>
>> if (_b.sideToMove == Board.BLACK)
>> {
>> key= ~_b.key & (size - 1);
>> checkKeyt= ~_b.checkKey;
>> } else
>> {
>> key= _b.key & (size - 1);
>> checkKeyt= _b.checkKey;
>> }
>>
>> boolean collision=
>> checkKeyt != checkKey[key] && checkKey[key] != 0 && stale[key] == false;
>>
>> if (_best != null)
>> {
>> s1[key]= (byte) _best.s1;
>> s2[key]= (byte) _best.s2;
>> }
>>
>> }
>>
>> if (stale[key]
>> || (_depth > (int) depth[key])
>> || (_depth == (int) depth[key] && _flag > flag[key]))
>> {
>>
>> depth[key]= _depth;
>> value[key]= _value;
>> flag[key]= _flag;
>> SERequired[key]= _reqSE;
>> stale[key]= false;
>> checkKey[key]= checkKeyt;
>> dontNullMove[key]= _dontNullMove;
>>
>> } // end if replace
>> else
>> {
>> // store2nd(_depth, _value, _best, _flag, _reqSE, _b,
>>_dontNullMove);
>> }
>>}
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.