Rebel wrote:BB+ wrote: I don't see any reason to continue posting on this matter. As long as you are arguing about "code theft", and/or comparing Rybka/Fruit to direct clones, the relevance of your work to the ICGA investigation and decision is almost nil.
Then don't deny the reality of that. You are relative new in this world. I have dwelled among them for 25 years. I know them personally. I know what moves them, what upsets them, pretty much the same as me. And I have been in your VIG camp remember? I know exactly how they think, what they think, also about this case, cryptic rule #2 became the stick to beat Vas for
copying Fruit. It's what they believed and I can give you the public quotes of Zach, Bob, Lefler (to name a few) that proofs it. And even you, although more careful have hinted to that, for example:
1. Mark Watkins:
It also seems (see node counts and depth) that Rajlich did in fact have "obfuscation" as one of the things on his mind during this period [though maybe just externally].
2. Mark Watkins:
I think the case for "copyright infringement" (or plagiarism) of the evaluation function as a whole is quite weighty, particularly when combined with the various other Fruit 2.1 bits that appear here-and-there in Rybka 1.0 Beta.
~~~~~~~~~~~~~~~~~~~~~~
So then following your wish let's talk about rule #2.
My main beef with your and Zach's document:
Mark Watkins:
I think the case for "copyright infringement" (or plagiarism) of the evaluation function as a whole is quite weighty,
Zach Wegner:
Simply put, Rybka's evaluation is virtually identical to Fruit's.
And more of this type of qualifications.
Then when we go in depth and let's take the code snippet already posted, the evaluation of open c.q. semi open rook files:
Code: Select all
// Start ROOK eval [ RYBKA 1.0 ]
// ===============
if (!(v84 & HIDWORD(qword_667BA0[0]) | v83 & qword_667BA0[0]) ) // open / semi open rook files
{ // when semi-open
v271 += 256; // endgame+256
v6 += 64; // opening+64 }
if ( !(v84 & HIDWORD(qword_667BA8[0]) | v83 & qword_667BA8[0]) )
{ // when open file
v6 += 971; // opening+971
v271 += 172; // endgame+172 }
So what is evaluated here? Simple public available chess knowledge you will find in chess teachings books to put your rooks on open files and the less open files (expressed in this case via MG/EG, a public available technique introduced in Phalanx, predating Fruit and Rybka with 4-5 years) the more important it becomes. Every reasonable open source has it, no big secret, so has Fruit, so has Rybka, so have I since the early 80's. Rook (semi) open file evaluation in a most simply form, common chess knowledge.
And it's coded differently even if we remove the mailbox-bitboard difference, as Sven Schuele correctly pointed out:
Regarding the "rook on open file" evaluation, both Zach Wegner and Mark Watkins have observed correctly that there is an important difference between Fruit in Rybka, in contrast to Fruit, Rybka does NOT consider friendly pawns behind the rook (e.g. Ra3, Pa2) to determine a "semi-open file" or "open file".
The Zach Wegner Rybka equivalent code seems to reflect that correctly if we assume that the bitmask mask_open_file_w[square] has all white pawns on ranks lower than 'square' masked out. Since the assembler code would match the "Zach Wegner code" it seems to be plausible. BUT the major point is, this Fruit-Rybka difference is indeed a SEMANTICAL DIFFERENCE.
~~~~~~~~~~~~~~~~
I mean, seriously, this is tunnel vision | VIG thinking. How can common chess knowledge fall under the interpretation of rule #2 which is about originality? There is no originality in chess knowledge, it's fixed, you better follow the rules of the books that teach chess else your engine will perform bad.
I could go on, I can post a dozen of other examples (as above) where (especially) Zach reasoned this way to incriminate Rybka while in reality it's about common chess knowledge and coded DIFFERENTLY than in Fruit even after removing the mailbox / bitboard difference.
What the hell does rule #2 mean?