Excellent idea Chris!      Of course you could also hash the hash!   But
then we are talking about using even more CPU time. 

- Don


Chris Fant wrote:
> Another thing about Zobrist hashes...  after you select the canonical
> hash, you will end up with a non-uniform distribution.  If this value
> is going to be used in binary tree, you may wish to swap the low-order
> bits with the high-order bits to keep the tree more balanced.
>
>
> On Dec 19, 2007 10:44 AM, Don Dailey <[EMAIL PROTECTED]> wrote:
>   
>> I actually have a routine in Lazarus that rotates a full board.   It's
>> called transformBoard() and it takes 2 arguments - a board to rotate and
>> a transformation   (0 through 7) and returns a new rotated board.
>>
>> I don't use it much except for debugging or stuff done at the root,
>> because there are faster ways to do things.
>>
>> I also have a routine called canHash()  which returns a canonical hash
>> of the board by trying all 8 transformations and returning the lowest
>> valued one.     It is more efficient (but not efficient) because it
>> doesn't actually produce a new board - it just builds 8 hashes of the
>> board from scratch without touching anything.    This routine is only
>> used at the root for storing opening book moves.
>>
>> You can use zobrist hashing for maintaining all 8 keys incrementally,
>> but you probably need a fairly good reason to do so.     Incrementally
>> updating of 1 key is almost free, but 8 might be noticeable if you are
>> doing it inside a tree search or play-outs.   It depends on how "fat" or
>> "lean" your program is.   Even 8 keys may not be noticeable if your
>> program does a lot of work at each move (or an end nodes.)    If you are
>> not,  then it doesn't really matter how you do it.
>>
>> I typically have 2 routines for everything - I have a slow_make() and a
>> fast_make() and the fast_make() doesn't care about superko (although it
>> checks for simple-ko) or anything that fast play-outs doesn't care
>> about.   So the fast make doesn't even try to update zobrist keys.
>>
>>
>> - Don
>>
>>
>>
>>
>>
>>
>> Ben Lambrechts wrote:
>>     
>>> Hi all,
>>>
>>> I am planning a fuseki database.
>>> Now I got the following problem: how to rotate/mirror the board for a
>>> unique representation.
>>>
>>> $$c
>>> $$ +---------------------------------------+
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . O . . . . . , . . . . . X . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . , . . . . . , . . . . . , . . . |
>>> $$ | . . . . . . . . . . . . . . . . 5 . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . O . . . . . , . . . . . , . . . |
>>> $$ | . . . . . . . . . . . . . . . X . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ +---------------------------------------+
>>>
>>> $$c
>>> $$ +---------------------------------------+
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . 5 . . . . . . . . . . |
>>> $$ | . . X , . . . . . , . . . . . X . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . , . . . . . , . . . . . , . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . O . . . . . , . . . . . O . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ | . . . . . . . . . . . . . . . . . . . |
>>> $$ +---------------------------------------+
>>>
>>> Both are the same board, but has anyone made an algorithm that rotates
>>> the board or an area of the board in a unique way?
>>> I don't need the move order, just the "snapshot" of the board.
>>>
>>> Ben
>>> _______________________________________________
>>> computer-go mailing list
>>> computer-go@computer-go.org
>>> http://www.computer-go.org/mailman/listinfo/computer-go/
>>>
>>>       
>> _______________________________________________
>> computer-go mailing list
>> computer-go@computer-go.org
>> http://www.computer-go.org/mailman/listinfo/computer-go/
>>
>>     
> _______________________________________________
> computer-go mailing list
> computer-go@computer-go.org
> http://www.computer-go.org/mailman/listinfo/computer-go/
>
>   
_______________________________________________
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/

Reply via email to