Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: definition of clones: Danchess an Crafty

Author: Robert Hyatt

Date: 10:38:50 02/16/04

Go up one level in this thread


On February 16, 2004 at 13:22:56, Uri Blass wrote:

>On February 16, 2004 at 10:02:10, Robert Hyatt wrote:
>
>>On February 16, 2004 at 03:48:08, Uri Blass wrote:
>>
>>>On February 15, 2004 at 16:44:33, Robert Hyatt wrote:
>>>
>>>>On February 15, 2004 at 15:53:16, Uri Blass wrote:
>>>>
>>>>>On February 15, 2004 at 14:48:29, Robert Hyatt wrote:
>>>>>
>>>>>>On February 15, 2004 at 14:43:06, Bob Durrett wrote:
>>>>>>
>>>>>>>On February 15, 2004 at 14:29:52, Robert Hyatt wrote:
>>>>>>>
>>>>>>><snip>
>>>>>>>
>>>>>>>In view of the size and complexity of Crafty I wonder whether or not cloning
>>>>>>>Crafty is really a good idea for the newbie chess programmer to get started.
>>>>>>>
>>>>>>>On the other hand, maybe there are parts of crafty which could be used in the
>>>>>>>beginning so that the newbie programmer could concentrate on creating his/her
>>>>>>>own code for the really important parts.
>>>>>>
>>>>>>I don't disagree.  The parts that always cause me the most concern center around
>>>>>>the evaluation and search.  I didn't look at his search carefully at all, but I
>>>>>>did look at the evaluation, and that has too much copied code...  There may be
>>>>>>significant search code copied or not.  But copying either is really copying the
>>>>>>"personality" of the program...
>>>>>
>>>>>
>>>>>I think that by that logic a lot of programs copied the "personality" of Crafty
>>>>>even if they do not use bitboards.
>>>>>
>>>>>Your words imply that it is better if I continue not to evaluate correctly KRP
>>>>>vs KR endgames because if I evaluate them correctly then I copy the personality
>>>>>of Crafty that also knows to evaluate them correctly.
>>>>
>>>>No, I didn't say that.  I didn't imply that.  I didn't suggest that.  That is
>>>>your imagination.
>>>
>>>
>>>You did not say it but the words "copying the personality of the program"
>>>gave me that impression.
>>
>>If you re-read what I wrote, ".. copying search code or evaluation code is
>>really copying the personality ..."  (paraphrased).  I am _still_ talking about
>>specifically copying source code, nothing else...
>>
>>
>>>
>>>The question is how do you define the personality of the program.
>>>I think that the personality of the program is expressed by the algorithms
>>>that it is using.
>>>
>>>When I read again your post I understand better your opinion when I see that
>>>Danchess use bitboard in the same way as Crafty(Movei is not bitboard based and
>>>the bitboards that I use use mainly for pawn structure are defined different
>>>than Crafty).
>>>
>>>>
>>>>Here is what I said:
>>>>
>>>>"copying _ideas_ is perfectly OK.  Copying _source code_ is _not_ perfectly OK."
>>>>
>>>>I didn't say any more or less than that.  I am talking about copying source
>>>>code.  I would not be terribly concerned by someone copying my move generator,
>>>>in fact, since that produces deterministic output, and ten different people
>>>>could write 10 different move generators, but they had better produce the _same_
>>>>set of moves.
>>>
>>>The ouput is not deterministic because the order of moves may be different.
>>
>>Notice I said the "same set of moves".  That is definitely deterministic.  Order
>>is another issue, but even then copying my move order is not a problem.  There
>>have been database engines that depend on move order as they just store a move
>>as a single byte, in index into the stream of legal moves.
>>
>>
>>>
>>>  But if you copy the bitboards, and then you copy the static
>>>>exchange evaluator, and then the positional evaluation, and then ...  Then you
>>>>have simply gone too far.
>>>
>>>I understand.
>>>I think that the static exchange evaluator is not the main point here because
>>>static exchange evaluator is something that is leading to almost deterministic
>>>output(I do not say deterministic because my SEE stops after the first king
>>>capture that is different than Crafty's SEE and I also stop SEE in case that the
>>>result is obvious based on previous captures like Bxp QxB RxQ when it is obvious
>>>that the side with the bishop won a pawn).
>>>
>>
>>Correct.  I only used swap.c as an example because it is small enough for anyone
>>to look at and compare with mine.  evaluate.c is much harder because it is much
>>larger.  But the same idea holds...
>>
>>
>>
>>
>>>If I understand correctly the similiarity in the code inside Swap is not the
>>>main problem and the problem is also that it is using bitboards that are
>>>identical to crafty.
>>
>>The bitboards are not really the problem.  All the duplicated code is what is at
>>issue.  IE lots of arrays same size, same content (sometimes slightly different
>>names).  Eval code that is duplicated in many places...
>>
>>
>>>
>>>I guess that a code that use similiar swaplist to crafty, but use different
>>>bitboards and different functions for AttacksTo and SwapXrays than crafty and
>>>use special functions to find firstknight,firstbishop,... based on piece list
>>>and bitboard of attacks, will not produce the same problem.
>>>
>>
>>
>>No, again you are taking this too literally.  swap.c is simply _one_ example of
>>a much more pervasive problem in danchess...
>>
>>
>>
>>
>>
>>>This is the case in the code of my latest non public version of movei and I
>>>almost do not use that SEE function because based on my tests I did not find it
>>>to be productive even to prune bad captures because I have already different
>>>code to prune part of the bad captures and today I use it only to evaluate leaf
>>>nodes when the qsearch is too long(more than 7 plies).
>>>
>>>Note that in my case my SEE is more accurate than Crafty because I do not
>>>consider captures after capturing king so trading kings cannot happen.
>>>
>>>I can leave this code out of movei without big change in playing strength if you
>>>do not like it.
>>
>>Uri, please read carefully:  I don't object to _anyone_ copying any _idea_ from
>>Crafty.  Otherwise I would not have published the source in public.  I don't
>>even care if someone copies a piece here and there for some of the things in
>>Crafty.  Just not nearly complete copies of the evaluation, etc...  I can give
>>examples if you want.  IE, who does the "EvaluateDevelopment()" stuff I do about
>>castling on both wings?  danchess does.  Who has "EvaluatePassedPawnRaces"
>>stuff?  same answer.  Etc...
>
>I understand.
>
>Correct me if I am wrong but my guess based on the descreption is that the main
>problem is that the author started by copying most of the data structure of
>crafty(maybe with different names).

No crystal ball here, so I have no idea where he started.  I've never seen the
program play, I've never seen games it has played.  I have no idea how long it
has been around or anything else....

>
>His first program was clearly weaker without knowledge about king safety and
>even the latest version is weaker than Crafty so I do not think that he started
>from Crafty and modified it but it is wrong to start from that basis because
>later if you want to learn from crafty about improving your evaluation it is
>natural to add code similiar to crafty even if you do not do copy and paste and
>understand the ideas.

I didn't see his "first program".  His current program clearly knows as much
about king safety as mine.  It computes the "king tropism" exactly the same way,
using the same numbers I use.  It then runs them thru an exponential mixer to
make three close pieces way better than two close pieces.  Same array mixer,
same mixing values.  Etc.  So I can't comment on why his king safety would be
worse since what I have here (both his source and executable) seems to be
identical in regard to king safety...

I could post a code snippet or two to show what I mean if you want to see..



>
>It is important to make things clear because Dann Corbit in the winboard forum
>even suggested that it may be a bad idea to read crafty's code

This doesn't make much sense to me.  I can't imagine a better way to learn about
the insides of a chess program than to look at the source, particularly when the
program is written like Crafty with about a 50-50 ratio of instructions to
comments.  If borrowing ideas was bad, then he might be right.  But you can look
at a program without borrowing source...




>
>see the last lines of
>http://f11.parsimony.net/forum16635/messages/61857.htm
>
>
>Uri



This page took 0.02 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.