Not logged inRybka Chess Community Forum
Up Topic Rybka Support & Discussion / Rybka Discussion / A Big Thanks and a Small Update
1 218 19 20 21 Previous Next  
Parent - - By mjlef (***) Date 2012-01-11 18:02
Vas,

The documents are often 20-30 pages long, and this forum would not let the whole text be posted.  But I extracted the Appendix A about the iterative deeping and post it below.  Please note the formatting is much easier to read in the original, so you and they would probably find that much easier to read.  Please review it below and repond to the original question:

A Root search analysis: iterative deepening
This appendix is a Fruit/Rybka comparison for a specic \chunk" of code. It is
my hope that it will exemplify various aspects of the similarities and dierences.
I rst give the Fruit 2.1 code, then the Rybka 1.0 Beta disassembly, and nally
a C++ translation of the latter. The code is the iterative deepening at the end
of root search. The Fruit 2.1 code is at the end of search() in search.cpp.
The Fruit code, reformatted, ASSERTs removed, with applicable comments:
for (depth = 1; depth < DepthMax; depth++) // DepthMax is 64
{ if (DispDepthStart) send("info depth %d",depth); // DispDepthStart is true
SearchRoot->bad_1 = false;
SearchRoot->change = false;
board_copy(SearchCurrent->board,SearchInput->board);
if (UseShortSearch && depth <= ShortSearchDepth) // UseShortSearch is true
search_full_root(SearchRoot->list,SearchCurrent->board,depth,SearchShort);
else
search_full_root(SearchRoot->list,SearchCurrent->board,depth,SearchNormal);
search_update_current();
if (DispDepthEnd) send("[...]"); // a complicated construct, omitted here
if (depth >= 1) SearchInfo->can_stop = true;
if (depth == 1 && LIST_SIZE(SearchRoot->list) >= 2
&& LIST_VALUE(SearchRoot->list,0) >=
LIST_VALUE(SearchRoot->list,1) + EasyThreshold) // this is 150
SearchRoot->easy = true;
if (UseBad && depth > 1) // UseBad is true
{ SearchRoot->bad_2 = SearchRoot->bad_1;
SearchRoot->bad_1 = false; }
SearchRoot->last_value = SearchBest->value;
if (SearchInput->depth_is_limited && depth >= SearchInput->depth_limit)
SearchRoot->flag = true;
if (SearchInput->time_is_limited
&& SearchCurrent->time >= SearchInput->time_limit_1
&& !SearchRoot->bad_2)
SearchRoot->flag = true;
if (UseEasy && SearchInput->time_is_limited // UseEasy is true
&& SearchCurrent->time >= SearchInput->time_limit_1 * EasyRatio // 0.20
&& SearchRoot->easy)
SearchRoot->flag = true;
if (UseEarly && SearchInput->time_is_limited // UseEarly is true
&& SearchCurrent->time >= SearchInput->time_limit_1 * EarlyRatio // 0.60
&& !SearchRoot->bad_2 && !SearchRoot->change)
SearchRoot->flag = true;
if (SearchInfo->can_stop
&& (SearchInfo->stop || (SearchRoot->flag && !SearchInput->infinite)))
break;
}
17Here is a commented disassembly from the Rybka 1.0 Beta 64-bit version:
0x4095a5: mov $0x1,%esi # %esi will be equal to 1 throughout
0x4095aa: mov %esi,%ebx
0x4095b0: cmp $0x5,%ebx # compare depth to 5
0x4095b3: jb 0x4095c4 # if at least 5
0x4095b5: lea -0x2(%rbx),%edx then subtract 2 before...
0x4095b8: lea 0x25af79(%rip),%rcx # 0x664538 ["info depth" string]
0x4095bf: callq 0x40d0b0 # ...printing the "info depth" string
0x4095c4: mov %ebx,%ecx # copy depth to %ecx reg for func call
0x4095c6: movb $0x0,0x262e81(%rip) # 0x66c44e set "change" to false
0x4095cd: movb $0x0,0x262e78(%rip) # 0x66c44c set "bad_1" to false
0x4095d4: callq 0x40ba70 # call search_full_root(ecx) [ecx=depth]
0x4095d9: callq 0x4070c0 # some sort of update function
0x4095de: mov 0x26706f(%rip),%r11d # 0x670654, get score
0x4095e5: cmp $0xffff8300,%r11d # fiddle around
0x4095ec: jle 0x4095fe # ...
0x4095ee: cmp $0x7d00,%r11d # with mate scores
0x4095f5: movzbl 0x262e54(%rip),%edx # 0x66c450 load "flag"
0x4095fc: jl 0x409601 # if mate score,
0x4095fe: mov %sil,%dl # set "flag" to true (esi is always 1)
0x409601: cmp %esi,%ebx # compare depth (%ebx) to 1
0x409603: jne 0x409631 # if depth == 1
0x409605: cmpl $0x0,0x267058(%rip) # 0x670664 think this is RML[1]
0x40960c: je 0x40962f # if only one legal move, skip next
0x40960e: movzbl 0x262e3a(%rip),%ecx # 0x66c44f "easy"
0x409615: mov 0x267449(%rip),%eax # 0x670a64 (value of move 1)
0x40961b: add $0x96,%eax # EasyThreshold of 150 [as in Fruit]
0x409620: cmp %eax,0x26743a(%rip) # 0x670a60 (value of move 0)
0x409626: cmovae %esi,%ecx # if move values differ by enough
0x409629: mov %cl,0x262e20(%rip) # 0x66c44f set "easy" as true
0x40962f: cmp %esi,%ebx # if depth > 1
0x409631: jbe 0x40964d* [0x409647]
0x409633: movzbl 0x262e12(%rip),%eax # 0x66c44c load old bad_1
0x40963a: movb $0x0,0x262e0b(%rip) # 0x66c44c bad_1 = false
0x409641: mov %al,0x262e06(%rip) # 0x66c44d bad_2 = (previous) bad_1
0x40964d* movzbl %dl,%eax # %dl: 1@4095fe (mate), "flag"@4095f5
0x409650* mov %r11d,0x262df1(%rip) # 0x66c448 last_value = score
0x409647: cmp 0x262cdb(%rip),%ebx # 0x66c328 see if depth>=depth_limit
0x409657: cmovae %esi,%eax # if depth >= depth_limit
0x40965a: mov %al,0x262df0(%rip) # 0x66c450 then "flag" is true
0x409666: mov 0x262cb3(%rip),%r8d # 0x66c320 load SearchInput->time_limit_1
0x40966d: movzbl 0x262dd8(%rip),%r9d # 0x66c44d load bad_2
0x409660* callq *0x139ca(%rip) # 0x41d030 GetTickCount -> %eax
0x409675: mov %eax,%r11d
0x40967c* sub 0x262db5(%rip),%r11d # 0x66c438 (subtract StartTime)
180x409678: lea (%r8,%r8,1),%ecx # compute 3 * time_limit_1
0x409683: mov $0xaaaaaaab,%eax # then mult by 2/3
0x409688: mul %ecx # (result goes in edx with mul here)
0x40968a: shr %edx # and div by 2 ... hmm = time_limit_1 ?
0x40968c: cmp %edx,%r11d # compare to time taken
0x40968f: jb 0x4096a6 # if small, ignore next
0x409691: movzbl 0x262db8(%rip),%ecx # 0x66c450 "flag"
0x409698: test %r9b,%r9b # if "bad_2" is false
0x40969b: cmove %esi,%ecx # ecx = 1 (esi is always 1)
0x40969e: mov %cl,0x262dac(%rip) # 0x66c450 store ecx in "flag"
0x4096a4: jmp 0x4096ac
0x4096a6: mov 0x262da4(%rip),%cl # 0x66c450 (reload "flag")
0x4096ac: mov $0xaaaaaaab,%eax
0x4096b1: mul %r8d # mult time_limit_1 by 2/3
0x4096b4: shr $0x2,%edx # and div by 4
0x4096b7: cmp %edx,%r11d # compare to time taken
0x4096ba: jb 0x4096d1 # if small, ignore next
0x4096bc: cmpb $0x0,0x262d8c(%rip) # 0x66c44f see if "easy"
0x4096c3: movzbl %cl,%eax # if not "easy", then eax is "flag"
0x4096c6: cmovne %esi,%eax # if it is "easy", then eax is true
0x4096c9: mov %al,%cl
0x4096cb: mov %al,0x262d7f(%rip) # 0x66c450 store eax in "flag"
0x4096d1: shr %r8d # time_limit_1 divided by 2
0x4096d4: cmp %r8d,%r11d # compare to time taken
0x4096d7: jb 0x4096f3 # if small, ignore next
0x4096d9: test %r9b,%r9b # if "bad_2" is true
0x4096dc: jne 0x4096f3 # then ignore next
0x4096de: cmp %r9b,0x262d69(%rip) # 0x66c44e "change", see if false
0x4096e5: movzbl %cl,%eax # if not, then eax is "flag"
0x4096e8: cmove %esi,%eax # if "change" is false, eax is true
0x4096eb: mov %al,%cl
0x4096ed: mov %al,0x262d5d(%rip) # 0x66c450 store eax in "flag"
0x4096f3: cmpb $0x0,0x262d36(%rip) # 0x66c430 see if "stop" is true
0x4096fa: jne 0x409714 # if so, then exit this function
0x4096fc: test %cl,%cl # see if "flag" is true
0x4096fe: je 0x409709 # if so
0x409700: cmpb $0x0,0x262c25(%rip) # 0x66c32c and SearchInput->infinite
0x409707: je 0x409714 # is false, then exit this function
0x409709: add %esi,%ebx # increment depth (%esi is 1)
0x40970b: cmp $0x48,%ebx # if depth < 72
0x40970e: jb 0x4095b0 # then loop
The asterisks here denote instructions that I have re-ordered, typically when
the ASM code starts laying the groundwork for the next high-level operation
prior to the completion of the previous.
19Here is a translation into a higher-level language, with Fruit as a template.
for (depth = 1; depth < 72; depth++)
{ if (depth >= 5) printf("info depth %d\n",depth-2);
change = false;
bad_1 = false; // order is switched from Fruit -- might be the compiler
search_full_root(depth); // yields "score" in a global var
some_sort_of_update_function();
if (score <= -32000 || score >= 32000) // mate scores
flag = true;
if (depth == 1 && RootMoveList[1].move != MOVE_NONE &&
RootMoveList[0].value >= RootMoveList[1].value + 150) // 409601-40962f
easy = true;
if (depth > 1) // 409631-409641
{bad_2 = bad_1;
bad_1 = false;}
last_value = score;
if (depth >= depth_limit) // 409647
flag = true;
TimeUsed = GetTickCount() - StartTime;
if ((3*time_limit_1)/3 <= TimeUsed && !bad_2) // 409691, has mult/div by 3
flag = true;
if ((time_limit_1)/6 <= TimeUsed && easy) // 20% in Fruit
flag = true;
if ((time_limit_1)/2 <= TimeUsed && !bad_2 && !change) // 60% in Fruit
flag = true;
if (stop || (flag && !SearchInput->infinite))
break;
}
As can be seen, there are various dierences, but (particularly in the ordering of
various parts) there still seems to be more similarities than one might expect.
17
It can also be noted that the 6 variables in Rybka 1.0 Beta here are allocated
in exactly the same order as in the comparative Fruit 2.1 code (see search.h):
struct search_root_t {
[...] // Rybka location
int last_value; // 0x66c448
bool bad_1; // 0x66c44c
bool bad_2; // 0x66c44d
bool change; // 0x66c44e
bool easy; // 0x66c44f
bool flag; // 0x66c450
};
17
For instance, all the settings of flag can be re-ordered, as can the parts of the compound &&
statements. Another point is that condition \depth > 1" (before the bad indicators are
updated) looks somewhat super
uous and/or unnecessary. At a higher level, an alternative
implementation is: near the top, break when \stop" is true and continue when \infinite" is;
then \flag" is unneeded, as break can instead be used when the various conditions are true.
Parent - By Vasik Rajlich (Silver) Date 2012-01-11 18:27
Mark,

Ok, that's a lot to wade through.

Is that a fair reconstruction of Rybka code? I would say no. Is it a valid exercise if the code is properly labeled? I would say yes. Are there strong similarities in the time management section? I can't answer this from memory, but if your analysis is correct then I would say yes.

Vas
Parent - - By Vasik Rajlich (Silver) Date 2012-01-11 16:36
Mark,

> As for Strelka, when I first saw the code it was clear to be the basic evaluation was based on Fruit 2.1.


Ok, then I stand corrected on that point. Did you mention this to anyone at the time?

> So let me ask Vas a question.  Do you think it is OK to read another programs source code then reconstruct it, step by step in another form (like C to Pascal or converting it from mailbox to bitboard)?  No copy and paste, just retyping?


I would say that that's a borderline case. It would depend on among other things the nature of the transformation and the amount of code. I wouldn't call this operation "retyping".

> You defend yourself saying everything was "typed" by you.  But that is not defense at all.  Monks hand copy manuscripts for centuries but that did not make the words original.


I made it pretty clear in that discussion that that process does not result in "original source code". Manually typing your code is a necessary condition for code originality, but it's not 100% sufficient.

> I think reusing basic ideas is OK, like knights should be in the center.  But copying a scheme adding rank and file specific ratios from another program is not.


Here I strongly disagree.

> Vas says 75% of the code change around the time of Fruit release.  Change from what to what?  Out EXE analysis says it changed to closely resemble Fruit (and in the process gained something like 800 ELO).


Please note that Zach's question was for the six months between June 2005 and December 2005. My Elo gain during that time span was in the neighborhood of 200. For the 800 Elo gain my code turnover would have been something like 95%.

Vas
Parent - - By mjlef (***) Date 2012-01-11 20:10

>> As for Strelka, when I first saw the code it was clear to be the basic evaluation was based on Fruit 2.1.


>Ok, then I stand corrected on that point. Did you mention this to anyone at the time?


Yes.  I discussed this with people like several people and even posted some things to forums, like this:

http://www.talkchess.com/forum/viewtopic.php?p=167513#167513

It reads:
"I have spent a little time look at the Strelka source. Very clearly written, so I did not really need the Russian comments to figure out what it is doing. My impressions:

Very, Very Fruit-like. Some of the things identical to Fruit:
Same Trans table
Identical NULL move pruning (R=3, eval>beta, needs a piece, etc.). Same verification search if depth>5. It does correct for side to move bonus, which Fruit does not, since Fruit 2./1 did not have a side to move bonus.
Dual evals (opening and endgame) and interpolated the same way (Fruit uses 256 steps, but given there are only 24 "pawns" of pieces available, this is really the same as Strelka's system)
Same mobility ideas for pieces, although the increments are different. Some seem almost backward from Fruit (for example, having a bigger increment in the opening than the endgame).
Same basic terms for Rook on semi-open file, open file, 7th, and king files, but different values.
Same method of King Safety (but different attack values for the pieces)
Same PVS search

Some difference:
Strelka uses a big array for correcting material values (initial values are along the ratio of P=1, N=B=3, R=5 and Q=10). Strelka uses P=3399, but divides this by 32 at the end of the eval, so really P=106, and so on. Note this table is indexed for pieces and pawns of both sides (but only for up to 1 queen, 2 rooks, 2 bishops, 3 knights and 8 pawns). It has a lot of endgame knowledge (like a draw for KBK--it does this by simply filling in a negative value for if -value[bishop] for example, to pull the score towards 0). My program has used the same idea since the early 1990s, except it only kicked in close to the endgame, due to memory limits (try making a program run in only 640k DOS!). The same array has a bit field for flags to indicate special eval terms (like this is a bishop and pawn endgame). Note Vasik a few years ago posted some code to talkchess showing just this idea (but of course, the magic is in what numbers to put in there).
More extensive passed pawn eval (the regular pawn eval is the same as Fruit, but with different values). The passed pawn eval include things like a bonus for the squares in front of a pawn being cleared.
Uses a lookup table for king safety pawn shielding (indexed by the same side and opponent pawns). This is very fast. It is stored in the pawn hash table. It stores a value for K on 1-c files, e-d files, and f-h files.
Only does check extensions in non-PV nodes. In PV nodes it has check, one reply to check and P to the 7th extensions (using Fruits same criteria of a non negative SEE value). I have tried the same idea in the past, but found s few of the other extensions were useful to also use in non-PV nodes.
See uses a few tricks to terminate early (like if a NxP is being considered, but the pawn is protected by another pawn).
Side to move bonus, but it is very small.

I have no idea if Strelka is close to the original Rybka. It does things in very efficient, clever ways. I did not see any real "tricks" or "secrets", but one idea was new to me. I have not tried writing a bitboard program, so maybe this is common:

In the qsearch, it uses a twist on futility pruning. It starts with a bitboard set for all pieces and pawns. If the eval is significantly under the value of a pawn, it turns off the pawn bits. If under a minor piece worth, it turns them off, etc. Then it uses the new bitmap to indicate opponent pieces and only generates capture big enough to likely find a score high enough to be useful. Perhaps all bitmap programmers already know this.

It also uses one other form of futility I have used for a while. At depth<=3 in non-PV nodes, if the eval is low enough, it tries a qsearch to see if a move can be found. If not, it uses the max(eval-margin,search value) and exits the search. Note it sets the depth of the qsearch to be positive, and the qsearch includes all captures (and not just winning/equal captures) while depth>0. It also includes checks. So this means a regular search is replaced with a capture+checks only search as a way of verifying. Perhaps it should include passed pawn moves as well, but anyway in a lot of tactical positions, this can save a lot of nodes, at some risk of missing quiet moves.

I have read a lot of claims by people who have seen the code (and others who state things with little information!). My conclusion: mostly Fruit, with better values, the tweaks above, and a mystery how the values were determined. I see nothing inaccurate on what the apparent author has stated, or what Vas has stated. People have suggest Vas might have used lots of games to determine things like improved material imbalance scoring, piece value changes based on remaining material, etc. Looking at the numbers in the arrays, that seems to be the case in Strelka too. It would be interesting to zero out this array and see how much strength gain this idea is worth. When I added something similar to my program based on data from lots of gains, it was worth maybe 40 ELO, but I already have a lot of rules to adjust piece values based on remaining material, likely draw conditions etc.

My summary: no magic, just good, solid, bug free and fast code, without a lot of complexity. And a real genius behind the values for that material correction array.
Parent - By Vasik Rajlich (Silver) Date 2012-01-11 21:33
Ok, thanks.

Vas
Parent - Date 2012-01-11 22:29
Parent - - By mjlef (***) Date 2012-01-11 23:21 Edited 2012-01-11 23:38

>>Please note that Zach's question was for the six months between June 2005 and December 2005. My Elo gain during that time span was in the neighborhood of 200. For the 800 Elo gain my code turnover would have been something like 95%.


Lets see,  The rough rating of Rybka 1.0 was 2919 (for example from CCRL: http://computerchess.org.uk/ccrl/4040/rating_list_all.html)
If you gained 200 elo from June through December (remarkable progress in less than 6 months!) that would mean Rybka June 2005 was 2719.

In 2004, Rybka played in two public events.  The first was CCT6:
http://www.vrichey.de/cct6/index_table.htm
It came in 53 out of 54 entries.  I have not tried to calculate a rating, but lets just say it was rather weak.

The next was Chesswars 6:
Later in 2004:  (http://www.open-aurec.com/chesswar/Chesswar007/Chesswar007CSt.htm).
48 out of 70, with a calulated elo estimate of 2064.  It started on 1 October 2004.

So late 2004 Rybak had an elo under 2100.

So between roughly October 2004 and June 2005, Rybka gained over 600 elo.  Again remarkable.

Is the above accurate, and is there some explanation for your remarkable gain of about 800 elo in a year, 600 of which took just 8 months or less?

Do you have any early 2005 versions of Rybka to confirm the strength gain?
Parent - By Vasik Rajlich (Silver) Date 2012-01-12 07:47
That CCT tournament was in very early 2004. I'd guess that Rybka was around 2200 then.

The ChessWar version was from a few months later. By October it would have been out of date. I think those ratings are kind of depressed. I'd put Rybka's Elo back then in the 2300-2400 range.

2719 for the summer of 2005 and 2919 for Rybka 1 sound about right. The higher the ratings get, the less I can make sense of them. :smile:

You're right that that was fast progress. :smile: I actually think that had I made better decisions in that 2003 to 2005 time frame I could have risen through those ranks even faster. I spent a bunch of time on things which either didn't work (fe. MTD (f)) or didn't help much (fe. all kinds of fancy bitboard tricks).

Vas
Parent - - By Ray (****) Date 2012-01-12 07:50
Lets see. Just because the old boys network were never smart enough to improve their own programs rapidly, no-one else can so Vas must have cheated.

I find the whole tone of your posts unacceptable. Who do you think you are ? A judge presiding over a criminal investigation ? A judicial review ? You are merely being used as a pawn by a few individuals with an agenda, and the ICGA buddies network.

It would have been a mistake for Vas to have responded to any ICGA questions in the beginning, and it is a mistake now. Dr Riis's paper exposed the ICGA investigation for what it was - a gross miscarriage of justice. End of story.
Parent - - By Vasik Rajlich (Silver) Date 2012-01-12 07:55

> It would have been a mistake for Vas to have responded to any ICGA questions in the beginning, and it is a mistake now.


I think this is a good process. It's good that Mark is asking questions here. Otherwise this will all just go around and around and around.

(Well, it might anyway. :smile:)

Vas
Parent - - By Ray (****) Date 2012-01-12 09:25

> I think this is a good process. It's good that Mark is asking questions here. Otherwise this will all just go around and around and around.
>
> (Well, it might anyway. :smile:)
>
> Vas


They are on a fishing expedition to try and prove that their flawed processes, evidence and report and right after all

But you are right, this will never end.
Parent - By mjlef (***) Date 2012-01-12 13:18
Not a fishing expedition. These were all questions panel members had during the investigation, and now that Vas is agreeing to answer some questions, we would all like to know the answers.
Parent - - By Albert Silver (***) Date 2012-01-12 23:23

>As for Strelka, when I first saw the code it was clear to be the basic evaluation was based on Fruit 2.1.  Some programmers who probably were not familiar with Fruit did not see the similarity, but the panel agreed that Vas took Fruits evaluation and did not declare this on the entry forms.


There is one thing that confuses me, but perhaps I missed it. I see a lot of talk about Strelka, but no mention of what its author had to say. When you asked him about the evaluation he used, what did he say?
Parent - - By mjlef (***) Date 2012-01-13 01:35

>>There is one thing that confuses me, but perhaps I missed it. I see a lot of talk about Strelka, but no mention of what its author had to say. When you asked him about the evaluation he used, what did he say?


That is a very good question.  This is a quote from  "Jury Osipov" the author of Strelka.  He writes:

"Strelka (1.0 beta, 1.8 and 2.0B) was a clone (or derivative) of Rybka 1.0 beta.
But mostly it is a clone of Fruit 2.1."

He said many similar things around the time of Strelka's release.

To be clear, this is stuff emailed over the internet, so one never knows for sure who someone is there, but it matches past conversations with "Jury".

You are welcome to contact him directly via his website : http://strelkachess.narod.ru/ His email is on his "About Me" page and google translate does a decent (if unintentionally entertaining) job of translation.

Mark
Parent - - By Albert Silver (***) Date 2012-01-13 01:47 Edited 2012-01-13 01:50
I know how to contact him. I don't know why you write "Jury" with quotation marks, since he is a real person. My old boss, Viktor Zakharov from Convekta, knows him personally.

My question is whether you did. You claim that the Fruit material in Strelka was damning, which presumes you know for a fact which parts of it were Rybka and which were not. After all you cannot claim a part of Strelka is evidence that Rybka is Fruit, if you don't know which parts of it actually are Rybka, no?

Since the only way you could know this is via the author, who must have told you that some part that is identical to Fruit was not taken from Fruit, but was taken from Rybka, I am curious what he told you.
Parent - - By mjlef (***) Date 2012-01-13 02:20

>I know how to contact him. I don't know why you write "Jury" with quotation marks, since he is a real person. My old boss, Viktor Zakharov from Convekta, knows him personally.


I am very confident he is a real person.  I just cannot confirm his identity without more information, and since I only know him via emails and postings, I hesitate to sate factually that this is his real name. But thanks for relaying what you know about him.  He is a bright fellow!

>>My question is whether you did. You claim that the Fruit material in Strelka was damning, which presumes you know for a fact which parts of it were Rybka and which were not. After all you cannot claim a part of Strelka is evidence that Rybka is Fruit, if you don't know which parts of it actually are Rybka, no?


>>Since the only way you could know this is via the author, who must have told you that some part that is identical to Fruit was not taken from Fruit, but was taken from Rybka, I am curious what he told you.


I try not to trust what people tell me, but instead, confirm it with my own analysis.  So stating this, Jury claimed he used Fruit as a template for his work on Strelka, then he reverse engineers Rybka, change the code to match.

I can know it since I have the source code for Strelka and I have compared it with Rybka.  And I have the Fruit 2.1 source code and I have compared it with that.  The Rybka and Strelka evaluations are very close.  I am not sure about the material imbalance table, since it is huge and I have not compared it.  But the basic evaluation is almost identical. You are welcome to download Strelka, look at its evaluation code and compare it with the marked up assembly language listing on our site.  Here is the annotated Rybka 1.0 (64 bit) assembly code. http://icga.wikispaces.com/file/view/R1x64eval.txt  Even without formal programming training, I think everyone will see the identical form and evaluation values. If evaluated using the comparison techniques outlined on our site, the overlap is probably close to 100%, but see for yourself.
Parent - - By Albert Silver (***) Date 2012-01-13 02:28
I've said it once, and I'll say it again: this is a swimming pool with no water in it.

Claiming Rybka was taken from Fruit based on some hybrid program that could be *anything* is absurd. If you want to compare Fruit with some RE of Rybka, fine, but taking some third program that is a mish-mash of code from a variety of sources, is just crazy. To even refer to this as any kind of basis for the decisions made is equally absurd.

IMO.

-----------------------

As to Jury, yes, without going into details, Viktor Zakharov, co-founder of Convekta, whom I worked closely with for several years, knows him personally.
Parent - - By mjlef (***) Date 2012-01-13 03:08 Edited 2012-01-13 15:53
The Strelka evidence was not talked about much in the group.  It would take me a while to go through all the discussion forum postings, but the only recollection I have of it is that when people looked at Strelka, many of them noticed it was very similar to Fruit.  So when Vas claimed Strelka was a clone/derivative of Rybka, it made people's suspicions grow.  And might have been a reason Zach started reverse engineering Rybka.  You could ask him.

The decisions by the panel were based on the RE of the Rybka assembly code.

Note: I just corrected this because I mean to say "Vas claimed Strelka was a clone/derivative of Rybka," Please pardon my error.  I am on some powerful pain killers.
Parent - - By Vasik Rajlich (Silver) Date 2012-01-13 08:09

> So when Vas claimed Strelka was a clone/derivative of Fruit


I don't remember doing this.

Vas
Parent - By mjlef (***) Date 2012-01-13 15:52
I am sorry.  I meant you claimed Strelka was a clone/derivative of Rybka.  I will correct that.
Parent - - By Albert Silver (***) Date 2012-01-13 18:58

>The Strelka evidence was not talked about much in the group.


Ok, then why did you write:

>As for Strelka, when I first saw the code it was clear to be the basic evaluation was based on Fruit 2.1.  Some programmers who probably were not familiar with Fruit did not see the similarity, but the panel agreed that Vas took Fruits evaluation and did not declare this on the entry forms.


It starts by stating quite clearly "As for Strelka, when I first saw the code it was clear to be the basic evaluation was based on Fruit 2.1." and concludes "the panel agreed that Vas took Fruits evaluation". This is the same phrase and clearly is saying that based on Strelka, the panel agreed Vas (not Osipov) took Fruit's evaluation. Therefore Strelka is a source of evidence of Vas's misconduct.
Parent - - By mjlef (***) Date 2012-01-13 20:03
I think that the Strelka release, and Vas saying that Strelka was a clone/derivative of Rybka was the main reason people started taking another look at Rybka.  Because Strelka was so Fruit-like, it spurred people to investigate more (this before the panel even was formed early in 2011).
Parent - By Banned for Life (Gold) Date 2012-01-13 20:06
Anthony C. carefully looked at the Strelka code four years ago, and somehow came to the conclusion that the code was much faster, and much uglier than Fruit.
Parent - - By bmcc333 (*) Date 2012-01-11 23:52 Edited 2012-01-12 00:18
Thanks for the quick reply. I used to be able to play anyone, including those over 2600 in about an hour and win some on a regular basis. Now in the rare case when I get a chance to play, I get in time pressure on 2000 players. Unfortunately, I can not see the difference in typing code and cutting and pasting code. Although computer coding is a separate discipline, in this country the laws for intellectual property still apply. Although it is obvious that microsoft got away with stealing word perfect, Lotus and dbase to make their office suite of word/excel and access. They were sued but in this country lawyers can protect the worst criminals.

I have one question that I have not seen answered on any forum. What about the charges that code from Crafty was used typos and all? This would indicate that copy/paste was used or at least blindly typing from crafty's source code.

Thanks
Parent - - By Vasik Rajlich (Silver) Date 2012-01-12 07:52

> Thanks for the quick reply. I used to be able to play anyone, including those over 2600 in about an hour and win some on a regular basis. Now in the rare case when I get a chance to play, I get in time pressure on 2000 players.


Yeah, a lot of players go through a progression like that. :smile: Playing fast can be a pretty nice weapon, you throw off all of your opponent's in-game routines.

> Although computer coding is a separate discipline, in this country the laws for intellectual property still apply.


Sure. In computer chess nobody has bothered to try to copyright their algorithms.

> Although it is obvious that microsoft got away with stealing word perfect, Lotus and dbase to make their office suite of word/excel and access. They were sued but in this country lawyers can protect the worst criminals.


I'm not an expert on those types of cases, but I was also quite surprised when I compared Microsoft Visual Studio to Borland Builder. Visual Studio took the entire concept and layout from Builder, down to some pretty low-level details. Borland is a big company which can easily afford legal protection, so I think that there is probably more to that than just Microsoft buying wins in court.

> I have one question that I have not seen answered on any forum. What about the charges that code from Crafty was used typos and all? This would indicate that copy/paste was used or at least blindly typing from crafty's source code.


Those were private Rybka versions. I didn't release anything like that.

Vas
Parent - - By bmcc333 (*) Date 2012-01-13 00:06
Hi Vas,

When you say there was no copy and paste in the released Rybka versions, does that mean there was copy/paste Crafty code in the pre-released versions? If so, until which version?

Thanks,

Brian

> I have one question that I have not seen answered on any forum. What about the charges that code from Crafty was used typos and all? This would indicate that copy/paste was used or at least blindly typing from crafty's source code.


Those were private Rybka versions. I didn't release anything like that.
Parent - - By Vasik Rajlich (Silver) Date 2012-01-13 08:16
I don't really discuss private Rybka versions. Those are just my own little playground.

Vas
Parent - - By bmcc333 (*) Date 2012-01-13 21:23
Isn't there a difference between a pre-released version and a private version especially if they were involved in public tournaments. Are you calling all the pre-commercial versions private?

Thanks
Parent - By Ray (****) Date 2012-01-13 22:42
Lots of private engines are entered into tournaments, look at HG's monthly online tournaments for example.
Parent - - By cipri (**) Date 2012-01-13 23:37
Vas, I have one more interesting question.
(This is a question just to Vas, no other "advocates out of passion" resond to it)

I noticed that you use to answer in a fair way, and it's what i also expected from you.
I guess you (as also all/most chess programmers) owe dr. hyatt something, because we all learned from crafty (and fruit) and especially in the days when open-source chess engines where not that popular.

Since dr. hyatt is a man of science, i guess you understand his position. We believe in "what seems to be most probable to us", and the technical reports are very clearly to him. Since his assertions are based on a technical report and on his own deductions, i guess you are not at all mad on him, since you are also a man of science and can understand him (and especially because you have been in a similar situation with strelka/ippo).

And now the questions:
1)
How do you feel when you see people, that never wrote in their life a line of  c/c++ code (or even saw one) (and a chess engine even less), hitting on dr. hyatt and insulting him in the most dirty way?

2)
What do you think about such people?

(If you dont consider it favorable to answer to one of that question, I prefer that you dont answer instead of giving a polite answer.)
Parent - - By Venator (Silver) Date 2012-01-14 07:31
I have some similar questions for you:

1) What do you think of the fact that in one of his postings Bob Hyatt advised me to commit suicide?

2) What do you think of the fact that when people refute Bob Hyatt's arguments, he frequently addresses them as 'idiots', 'stupid' etc?

3) Do you think that 1 and 2 are both examples of 'respectful'?

4) What do you think of the fact that Bob Hyatt copied a Fruit PST and keeps on lying about it?

Thanks for your answers.
Parent - - By cipri (**) Date 2012-01-14 12:19 Edited 2012-01-14 12:50
I was explicitely saying that i dont want comments by anyone but vas.
After i get an answer from vas i can answer to any question.
I guess you want to "water out" the subject. But i really want just to understand how vas is thinking about that. By patient. After Vas answeres, I'm here for all questions you have.
Parent - - By Venator (Silver) Date 2012-01-14 12:53
I guess you want to "water out" the subject.

No, I want your opinion on Bob's behaviour given above.
Parent - - By Albert Silver (***) Date 2012-01-14 14:28
I hate to say it, but this is ooooold news. Consider the things he wrote about Vas four years ago already (meaning he obviously thought them before this):

Over four years ago, he let it be known that he considered Vas a hooligan and supported reverse-engineering Rybka to take its secrets to use in other programs.

Here is a quote, regarding Strelka, exactly 4 years to the day:

"I am completely unconcerned about the reverse-engineering that has been done. Seems like a fair way to "even the playing field" by forcing a secretive author to expose secrets... I'm not going to lose any sleep over this at all."

Robert Hyatt (Jan 14, 2008)

An example of unbiased investigator looking into the affair.
Parent - - By Venator (Silver) Date 2012-01-14 14:53
Thanks for sharing. We already found out that envy and hate towards Vas played a major part in Hyatt's actions. He said something like 'I gave him a lot, but never got anything in return'. Then Vas went commercial and so he looked for a way to punish him.

It will not surprise you that I have a very low opinion about Hyatt and your quote made it even worse :-).
Parent - - By Albert Silver (***) Date 2012-01-14 15:03

>He said something like 'I gave him a lot, but never got anything in return'. Then Vas went commercial and so he looked for a way to punish him.


If you check the 'hooligan' quote, you will see it is said precisely in that context:

"OK, then what about the people that come here, ask questions, get lots of ideas and algorithms from active programmers, then they find a new idea, hide it and go commercial. I think they are 'hooligans' just as much as this case."
Parent - By Venator (Silver) Date 2012-01-14 15:06
So in fact Hyatt thinks it is OK to 'steal' if you are not sharing and even encourages it!

Man, this guy is really sad....
Parent - - By Rebel (****) Date 2012-01-14 20:52
And recently repeated:

My one and only complaint with Vas was that (a) he spent a couple of years asking all sorts of questions, which I and many others painstakingly answered, (b) then he ran away and decided to not reveal anything he found that was new.

The Hyattian will imposed.

Let us bow.

Else retaliation.
Parent - By Banned for Life (Gold) Date 2012-01-14 20:55
Let us Tebow. :lol:
Parent - By Ugh (*****) Date 2012-01-14 21:05
Yup, love, hate and betrayal
Parent - By RFK (Gold) Date 2012-01-14 15:13
I'm surprised that no one has coalesced the questions that were raised in 2008 regarding the studies technical veracity, and juxtaposing that against Hyatt's responses then and now.
Parent - By Homayoun_Sohrabi_M.D. (***) Date 2012-01-14 17:42
I didn't know about these quotes, thank u so much sir for posting them.   Very sad and pathetic...
Parent - By Venator (Silver) Date 2012-01-14 15:04
As soon as you are going to answer my questions, please also give your opinion on the following Bob Hyatt statement:

"I am completely unconcerned about the reverse-engineering that has been done. Seems like a fair way to "even the playing field" by forcing a secretive author to expose secrets... I'm not going to lose any sleep over this at all."
Parent - - By Homayoun_Sohrabi_M.D. (***) Date 2012-01-14 08:20
Who are you and what are your credentials?   Your posts seem to be trollish garbage so far, I hope I am wrong and you do have some education....

By the way just because Hyatt knows how to program, it doesn't give him the right to pass false judgement on other people, if you were truly educated you would know that.   Some of us don't program but we have common sense enough to know that you don't put a guy's fellow competitors to pass judgement on him, you don't lie about a vote being unanimous when it was anything but....

Anyways, people are treating Hyatt the same way he has been treating them, and besides how you or Bob or Harvey or me ,etc, have been treated is totally irrelevant.   The relevant issue here is how Vas has been treated.
Parent - - By bob (Gold) Date 2012-01-14 15:27
There is an example of "deranged reasoning".
Parent - - By Homayoun_Sohrabi_M.D. (***) Date 2012-01-14 17:34
Lol Bob, you are an example of a deranged person, but after 10,000 posts across various forums repeating the same garbage over and over, please continue to think you are normal.  

The good news is that now you have an anonymous forum troll buddy.
Parent - - By bob (Gold) Date 2012-01-14 22:54
You appear to be the deranged one here, in the middle of a discussion you have no hope of even BEGINNING to understand.  "fools rush in ..."
Parent - - By Homayoun_Sohrabi_M.D. (***) Date 2012-01-15 01:55
Lol Bob, what discussion I have no hope of understanding my friend?  I understand that you are a liar.  I understand that you suffer from facebook addiction syndrome, even to the point of being ridiculed as some type of compulsive poster on the most widely read chess website.   I mean these are people who have known you and they think you are a clown. 

You conducted the process with so many holes that I can drive a truck through it.    I understand enough now not to believe your lies.   If I really cared to understand this any more deeply, I'd spend a few thousand dollars (which is what you pathetic idiot should have done in the first place) and hire my own independent programmer, or run it by one of my several programmer relatives who work up in Seattle for Boeing and Microsoft.    

Bottom line is that, through our various discussions in the past, I have reached the conclusion that you are a liar and I will absolutely refuse to believe anything that u say about any subject.
Parent - - By bob (Gold) Date 2012-01-15 15:23
You do not understand ANY of the evidence.  You do not understand ANY part of the process used to develop the evidence.  You do not understand any aspect of computer chess programming, nor programming in general.  You do not understand WHERE the ICGA came from, WHY it was formed, nor WHO was involved in creating it.  You do not understand the basic concept of competition as it applies to computer chess, specifically.  In fact, I have not seen any evidence at all  that you understand ANYTHING at all about the topic, the process, or the history as it relates to ANYTHING computer chess.  You just install a program and use it and are suddenly, via osmosis, an expert?

And yet you want to criticize all of the above as being out of touch.  :)

The "perfect critic"?  The "critic" that doesn't understand ANYTHING.  So he becomes a "critic" that criticizes EVERYTHING.

Makes perfect sense, I suppose?
Parent - - By Rebel (****) Date 2012-01-15 18:10

> You do not understand ANY of the evidence.


Off topic.

A judgement on your character was given.
Up Topic Rybka Support & Discussion / Rybka Discussion / A Big Thanks and a Small Update
1 218 19 20 21 Previous Next  

Powered by mwForum 2.27.4 © 1999-2012 Markus Wichitill