strelka 2.0

Discussion of anything and everything relating to chess playing software and machines.

Moderators: hgm, Rebel, chrisw

hawkeye
Posts: 62
Joined: Thu Apr 03, 2008 8:54 pm

strelka 2.0

Post by hawkeye »

will strelka be tested on time controls aside from 40/4?
rfadden

Re: strelka 2.0

Post by rfadden »

hawkeye wrote:will strelka be tested on time controls aside from 40/4?
There is no need to test Strelka because a number of us have found that the Strelka source code exactly matches the binary code of Rybka 1.0 beta.

It is a pure reverse engineer of Rybka and every single constant and every single calculation is direct from Rybka.

I found a couple of areas where the guy doing the code conversion left out a relatively minor step from Rybka 1.0 beta, and there also is one single case where the guy added a feature. This is simply a quick and dirty addition of Multi-PV. Note that Multi-PV doesn't change the search or Eval, and so when you run Strelka you are actually running Rybka 1.0 Beta.

Keep in mind that I have stepped through all of the chess logic in Strelka and for each single line of C++ I see the exact same calculation in the Rybka 1.0 Beta X86 instructions. Everything exactly matches.

Notice how Strelka plays. Notice it's rating. It is Rybka 1.0 beta, and Vasik Rajlich the author of Rybka also confirmed this.

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

By the way, some other posts on this topic talk about similarities in style or play and keep in mind I'm not referring to that kind of guess. I spent many days checking into every important line of code, and I guarantee you that Strelka is a *pure* reverse engineering of Rybka. Very pure... Exact Match.
Dann Corbit
Posts: 12540
Joined: Wed Mar 08, 2006 8:57 pm
Location: Redmond, WA USA

Re: strelka 2.0

Post by Dann Corbit »

rfadden wrote:
hawkeye wrote:will strelka be tested on time controls aside from 40/4?
There is no need to test Strelka because a number of us have found that the Strelka source code exactly matches the binary code of Rybka 1.0 beta.

It is a pure reverse engineer of Rybka and every single constant and every single calculation is direct from Rybka.

I found a couple of areas where the guy doing the code conversion left out a relatively minor step from Rybka 1.0 beta, and there also is one single case where the guy added a feature. This is simply a quick and dirty addition of Multi-PV. Note that Multi-PV doesn't change the search or Eval, and so when you run Strelka you are actually running Rybka 1.0 Beta.

Keep in mind that I have stepped through all of the chess logic in Strelka and for each single line of C++ I see the exact same calculation in the Rybka 1.0 Beta X86 instructions. Everything exactly matches.

Notice how Strelka plays. Notice it's rating. It is Rybka 1.0 beta, and Vasik Rajlich the author of Rybka also confirmed this.

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

By the way, some other posts on this topic talk about similarities in style or play and keep in mind I'm not referring to that kind of guess. I spent many days checking into every important line of code, and I guarantee you that Strelka is a *pure* reverse engineering of Rybka. Very pure... Exact Match.
Given:
[D]rnb3kr/1p1nqppp/p3p3/2ppP3/3P1N2/2NB1Q2/PPP2PP1/R3K2R w KQ - acd 15; acn 6849556469; bm Bxh7+; fmvn 1; hmvc 0; id WCSAC.0875;

Strelka 2.0 says:

Code: Select all

1) Bxh7+; fmvn 1; hmvc  
    Searching move: Bd3xh7
    Best move (Strelka 2.0 A): Nc3xd5
    Not found in: 01:00
      2	00:01	         176	0	+1.59	Nc3xd5 e6xd5 Nf4xd5
      3	00:01	         939	0	+1.55	Nc3xd5 e6xd5 Nf4xd5 Qe7g5
      4	00:01	       2.875	0	+1.61	Nc3xd5 e6xd5 Nf4xd5 Qe7g5 c2c3 c5xd4 c3xd4
      5	00:01	       8.804	0	+1.24	Nc3xd5 e6xd5 Nf4xd5 Qe7e6 000 c5xd4
      6	00:01	      29.885	933.906	+0.98	Nc3xd5 e6xd5 Nf4xd5 Qe7d8 000 Nb8c6 d4xc5 Nd7xe5
      7	00:01	      69.457	890.474	+0.67	Nc3xd5 e6xd5 Nf4xd5 Qe7d8 000 c5xd4 Qf3f4 Nb8c6
      8	00:01	     191.923	945.433	+0.26	Nc3xd5 e6xd5 Nf4xd5 Qe7d8 Qf3e4 Nb8c6 e5e6 f7xe6 Qe4xe6+ Kg8f8 Qe6d6+ Kf8g8 d4xc5 Qd8a5+ b2b4 Nc6xb4
      9	00:01	     477.652	955.304	+0.42	Nc3xd5 e6xd5 Nf4xd5 Qe7d8 Qf3e4 Nd7b6 Rh1xh7 f7f5 e5xf6/ep Nb6xd5 Rh7xg7+ Kg8f8
     10	00:03	   1.250.821	1.000.656	+0.04	Nc3xd5 e6xd5 Nf4xd5 Qe7d8 Qf3e4 Nb8c6 000 c5xd4 Rh1xh7 g7g6 Rh7xh8+ Kg8xh8 Rd1h1+ Kh8g8
     11	00:06	   3.278.548	1.033.590	+0.22	Nc3xd5 e6xd5 Nf4xd5 Qe7d8 Qf3e4 Nb8c6 000 Nd7b6 Rh1xh7 f7f5 e5xf6/ep Nb6xd5 Rh7xg7+ Kg8f8
     12	00:14	   8.052.021	1.051.589	-0.10	Nc3xd5 e6xd5 Nf4xd5 Qe7d8 Qf3e4 Nb8c6 Rh1xh7 Nd7f8 Rh7xh8+ Kg8xh8 d4xc5 Nf8g6 000 Nc6xe5 c2c3
     13	00:42	  21.296.414	1.042.000	-0.18	Nc3xd5 e6xd5 Nf4xd5 Qe7d8 Qf3e4 Nb8c6 Rh1xh7 Nd7f8 Rh7xh8+ Kg8xh8 d4xc5 Nf8g6 000 Nc6xe5 Rd1h1+ Kh8g8 Kc1b1
   4/18/2008 8:44:08 PM, Time for this analysis: 00:01:01, Rated time: 09:00
And Rybka 1.0 says:

Code: Select all

1) Bxh7+; fmvn 1; hmvc  
    Searching move: Bd3xh7
    Best move (Rybka v1.0 Beta.w32): 0-0-0
    Not found in: 01:00
      3	00:01	         768	12.483	+0.46	Nc3xd5
      4	00:01	       2.469	32.003	+0.25	Nc3xd5
      5	00:01	       5.995	39.101	-0.32	Nc3xd5 e6xd5
      5	00:01	       8.136	44.315	+0.04	d4xc5 Nd7xe5
      6	00:01	      14.429	49.581	-0.04	d4xc5 Nd7xe5 Qf3h3
      7	00:01	      34.788	61.524	-0.02	d4xc5 Nd7xe5 Qf3h5 Nb8c6
      8	00:02	      86.174	67.983	-0.08	d4xc5 Nd7xe5 Qf3h5 Nb8c6 Bd3xh7+ Kg8f8
      9	00:05	     283.692	70.135	-0.28	d4xc5 Qe7xc5 Qf3h5 h7h6 00 Nb8c6
      9	00:06	     377.239	73.133	-0.27	000 g7g6 d4xc5 Qe7xc5 Bd3e2 Nd7xe5 Nc3a4
     10	00:10	     668.111	73.826	-0.19	000 g7g6 d4xc5 Nb8c6 Qf3g3 Nc6xe5 Rd1e1
     11	00:17	   1.202.604	80.173	-0.20	000 g7g6 d4xc5 Nb8c6 Qf3g3 Nc6xe5 Rd1e1 Qe7xc5
     12	00:21	   2.148.887	79.588	-0.24	000 g7g6 d4xc5 Nb8c6 Qf3g3 Nc6xe5 Rd1e1 Qe7xc5 Kc1b1
     13	00:55	   4.281.458	80.782	-0.26	000 g7g6 d4xc5 Nb8c6 Qf3g3 Nc6xe5 Rd1e1 Qe7xc5 a2a3 b7b5
   4/18/2008 8:58:39 PM, Time for this analysis: 00:01:00, Rated time: 02:00
Given:
[D]2r1r1k1/1p1qbp1p/3p1p2/p2P4/3Q4/5N2/PP2RPPP/4R1K1 w - - acd 17; acn 6948581674; bm Rxe7; fmvn 1; hmvc 0; id WCSAC.0247;

Rybka 1.0 says:

Code: Select all

1) Rxe7; fmvn 1; hmvc 0 
    Searching move: Re2xe7
    Best move (Rybka v1.0 Beta.w32): h2-h3
    Not found in: 01:00
      3	00:00	         377	386.048	+0.81	g2g3
      4	00:00	         812	831.488	+0.80	g2g3
      4	00:00	       2.376	143.119	+0.89	Nf3d2
      5	00:00	       3.442	110.144	+0.75	Nf3d2 f6f5
      5	00:00	       4.289	91.498	+0.77	g2g3 f6f5
      5	00:01	       5.853	93.648	+0.82	Qd4d3 Rc8c5
      6	00:01	      10.361	84.203	+0.72	Qd4d3 f6f5 Nf3d4
      6	00:01	      13.214	86.185	+0.81	g2g3 f6f5 Nf3h4
      6	00:01	      16.670	90.317	+0.88	h2h3 f6f5 Re2e3
      7	00:01	      34.304	86.307	+1.09	h2h3 Rc8c5 Nf3d2 f6f5
      8	00:01	      65.729	89.622	+1.28	h2h3 Rc8c7 Nf3d2 b7b5 Nd2e4
      9	00:01	      94.194	93.463	+1.21	h2h3 Rc8c7 Nf3d2 b7b5 Nd2e4 Kg8g7
     10	00:02	     179.016	99.356	+1.34	h2h3 Rc8c7 Nf3d2 f6f5 Re2e3 h7h6 Nd2c4
     11	00:05	     480.684	104.973	+1.37	h2h3 Be7f8 Re2xe8 Rc8xe8 Re1xe8 Qd7xe8 Qd4xf6 Qe8e2 Qf6g5+ Bf8g7
     12	00:07	     781.554	114.559	+1.36	h2h3 Be7f8 Re2xe8 Rc8xe8 Re1xe8 Qd7xe8 Qd4xf6 Qe8a4 Qf6f5 h7h6
     13	00:15	   1.692.695	130.207	+1.36	h2h3 Be7f8 Qd4xf6 Re8xe2 Re1xe2 Bf8g7 Qf6g5 Kg8f8 b2b3 Rc8c5
     14	00:25	   3.254.167	120.524	+1.42	h2h3 Be7f8 Qd4xf6 Re8xe2 Re1xe2 Bf8g7 Qf6g5 b7b5 b2b3 Rc8c7
   4/18/2008 8:49:41 PM, Time for this analysis: 00:01:00, Rated time: 03:00
And Stelka 2.0 says:

Code: Select all

1) Rxe7; fmvn 1; hmvc 0 
    Searching move: Re2xe7
    Best move (Strelka 2.0 A): h2-h4
    Not found in: 01:00
      2	00:01	         103	0	+0.71	h2h3 f6f5
      3	00:01	         973	0	+0.72	g2g3 f6f5 Kg1g2
      4	00:01	       1.657	0	+0.68	g2g3 f6f5 Kg1g2 Rc8c5
      5	00:01	      10.394	0	+2.99	Re2xe7 Qd7xe7 Qd4g4+ Kg8f8 Re1xe7 Rc8c1+ Nf3e1 Re8xe7
      6	00:01	      40.805	1.275.156	+0.77	Nf3d2 Rc8c2 Nd2c4 Rc2xe2 Re1xe2 Qd7f5 Re2e1
      7	00:01	      67.740	1.075.238	+0.71	g2g3 f6f5 Kg1g2 b7b5 b2b3 b5b4 Re2e3
      8	00:01	     132.912	1.063.296	+0.75	g2g3 f6f5 b2b3 h7h6 Qd4d2 Rc8c5 Qd2xh6 Rc5xd5
      9	00:01	     580.193	1.124.405	+1.12	h2h3 Rc8c5 Re2e3 Kg8f8 Qd4e4 f6f5 Qe4d4 f7f6 Re3e6
     10	00:01	     781.660	1.136.133	+1.15	h2h3 Rc8c5 Nf3d2 Rc5c2 Nd2c4 Rc2xe2 Re1xe2 Qd7a4 b2b3 Qa4b5 Qd4g4+ Kg8h8
     11	00:03	   1.839.817	1.154.213	+1.20	h2h3 Be7f8 Re2xe8 Rc8xe8 Re1xe8 Qd7xe8 Qd4xf6 Qe8e2 Qf6g5+ Bf8g7 Qg5d8+ Bg7f8 Qd8xa5 Qe2xb2 Qa5a7 Bf8g7
     12	00:04	   2.678.271	1.198.331	+1.20	h2h3 Be7f8 Re2xe8 Rc8xe8 Re1xe8 Qd7xe8 Qd4xf6 Qe8a4 Qf6g5+ Bf8g7 a2a3 Qa4b5 b2b3 h7h6 Qg5d2 Qb5xb3 Qd2xa5
     13	00:10	   9.041.930	1.218.260	+1.28	h2h4 Be7f8 Re2xe8 Rc8xe8 Re1xe8 Qd7xe8 Qd4xf6 Qe8b5 Qf6g5+ Bf8g7 b2b3 h7h6 Qg5f5 Qb5c5 h4h5 Bg7c3 Qf5g4+ Kg8f8
     14	00:13	  12.549.618	1.226.147	+1.26	h2h4 Be7f8 Re2xe8 Rc8xe8 Re1xe8 Qd7xe8 Qd4xf6 Qe8b5 Qf6g5+ Bf8g7 b2b3 h7h6 Qg5f5 Qb5c5 h4h5 Qc5c3 Kg1h2 Bg7f6 Qf5g4+ Kg8f8
     15	00:21	  18.860.599	1.243.118	+1.26	h2h4 Be7f8 Re2xe8 Rc8xe8 Re1xe8 Qd7xe8 Qd4xf6 Qe8b5 Qf6g5+ Bf8g7 b2b3 h7h6 Qg5f5 Qb5c5 h4h5 b7b5 a2a4 b5xa4 b3xa4 Qc5c4
     16	00:36	  35.223.129	1.262.161	+1.27	h2h4 Be7f8 Re2xe8 Rc8xe8 Re1xe8 Qd7xe8 Qd4xf6 h7h6 Qf6d4 Qe8b5 b2b3 Bf8g7 Qd4e4 Qb5c5 Qe4f5 Qc5c1+ Kg1h2 Qc1b2 Kh2g3 Bg7f6 Qf5c8+ Kg8g7 Qc8xb7 Qb2xa2
   4/18/2008 8:37:55 PM, Time for this analysis: 00:01:01, Rated time: 03:00
It is clear that Yuri Osipov borrowed from Rybka. It is also clear that Yuri borrowed from Fruit. Yuri's code is now open source, and so his requirement to meet the GPL is satisfied. If what you are saying is true, we would expect the pv's (at least) up above to agree exactly and we would also have to assume that Rybka borrows heavily from Fruit. I do not believe that either is the case (though he may certainly have received inspiration from Fruit code). If Vas really did say that the code of Strelka and Rybka is identical, then that would be something for him to worry about.

I do not say that Yuri is in the clear, even though he would be on the Fruit side of the fence now that his program is open source, but the tables designed by David Levy are obtained by questionable means. But if it were true that Rybka and Strelka are exact duplicates, I think it would also mean that Vas would have some explaining to do.

Here is something interesting to note in the source of Strelka that was pointed out by Fabian to me:

'E.g. I have called a function "note_moves" because of the frence verb "noter" = "to give a score". I suspect "to note" cannot have this meaning in english.'

From Strelka:
search.c (509): if (last > moves) note_moves(last, moves, pos_info_entry, move);
search.c (568): note_moves(last, moves_info->list, pos_info_entry, moves_info->trans_move);

Fabian's final word on the influence of Fruit in Stelka was very soft:
"No worries as far as I am concerned.
Ideas are not a legal property.
The code was rewritten so it's OK with me.
Tournament organisers might think differently."

My summary:
Yuri borrowed from both Rybka and Fruit.
Both borrowings were questionable at the time (though there also appears to be a great deal of originality in the source of fruit to me and it is very different from Fruit in the use of bitboards, etc.). Because Strelka is open source now, the use of Fruit's code would be acceptable from a legal standpoint even without Fabian's blessing.

There have been many claims that Stelka and Rybka are identical. Though there are clearly many keen similarities (even the copying of some bugs) there are also clearly major differences.
While they do play similarly (the closest ponder hit rate between families being):
Ponder hit: Most similar pairs (different families only)
# Pair Ponder hit Moves
counted
1 Rybka 1.0 64-bit – Strelka 1.8 71.4 1875

shows 71.4% of the time, they are expecting the same responses.

However, that is lower similarity than lots of other programs:

Code: Select all

Ponder hit: Most similar pairs (different families only) 
# Pair Ponder hit Moves
counted 
1 OBender 3.10.1 – Micro-Max 4.8 82.6 437 
2 Thinker 5.1c Passive – Frenzee Feb08 80.3 340 
3 Thinker 5.1c Passive – E.T. Chess 13.01.08 78.6 309 
4 Feuerstein 0.4.5.1 – Micro-Max 4.8 78.3 415 
5 Thinker 5.1c Passive – Movei 00.8.438 78.2 491 
6 Monarch 1.7 – Micro-Max 4.8 76.1 653 
7 Loop 13.6 32-bit – Fruit 051103 75.8 777 
8 Loop 13.6 32-bit – Fruit 2.2.1 75.8 1186 
9 Thinker 5.1c Passive – Ruffian 2.1.0 75.7 670 
10 Loop 10.32f – Fruit 2.2.1 75.6 1018 
11 Toga II 1.2.1a – Glaurung 2 epsilon/5 64-bit 75.6 336 
12 Feuerstein 0.4.4.2 – Micro-Max 4.8 75.2 436 
13 Delphil 1.6c – Arion 1.7 74.7 352 
14 Clueless 1.4 – Micro-Max 4.8 74.5 435 
15 Spike 1.2 Turin – Thinker 5.1c Passive 73.9 387 
16 Loop M1-T 64-bit 4CPU – Toga II 1.3.1 73.4 1306 
17 Loop M1-T 64-bit 2CPU – Toga II 1.3.1 72.7 1532 
    Rybka 1.0 64-bit – Strelka 1.8 71.4 1875 
18 Toga II 1.3.1 – Loop 13.6 32-bit 70.8 960 
[code]

Clearly Spike and Thinker play more similarly than Rybka and Strelka do, and yet nobody {in their right minds} would suspect that they were clones of one another.

I do think that Yuri should have credited the ideas that he used as to their origins at a bare minimum.

At any rate, the engines are clearly not identical {despite obvious similarities and quirks}.  If the engines were identical, then we would also have to question Vas a bit about the origins of his code.

IMO-YMMV.
Spock

Re: strelka 2.0

Post by Spock »

Regarding the ponder hit, or more correctly "expected move hit", we know the numbers are not valid for Micromax and Atlas. I'm not sure of exactly why, someone in the group said it is something like because they output ponder move sometimes but not always, or the way they build their PV into hash (or read it back out). We have on the "to-do" list to exclude these engines from the stats. But we are not aware of an such issues with other engines, so the stats are valid for those
User avatar
hgm
Posts: 27793
Joined: Fri Mar 10, 2006 10:06 am
Location: Amsterdam
Full name: H G Muller

Re: strelka 2.0

Post by hgm »

Micro-Max does not ponder, and does not print a PV (it is no longer available in the hash table by the time it completes its search). Only the first move (the one it plays).

So any statistic on ponder hits of uMax is an artifact, completely made up by the software you use to collect the statistics.
Spock

Re: strelka 2.0

Post by Spock »

hgm wrote:Micro-Max does not ponder, and does not print a PV (it is no longer available in the hash table by the time it completes its search). Only the first move (the one it plays).

So any statistic on ponder hits of uMax is an artifact, completely made up by the software you use to collect the statistics.
We are aware of this as I stated, which is why it should be ignored. I believe I said we know the numbers are not valid for Micromax and Atlas. We will remove these engines from the stats in due course. Micromax and Atlas are the 2 engines which don't give the right information, but the stats are correct for other engines and very interesting. It is more correctly referred to as "expected move hit" rather than "ponder hit", because of course all our games are ponder off.
User avatar
GenoM
Posts: 910
Joined: Wed Mar 08, 2006 9:46 pm
Location: Plovdiv, Bulgaria

Re: strelka 2.0

Post by GenoM »

Dann Corbit wrote:
rfadden wrote:
hawkeye wrote:will strelka be tested on time controls aside from 40/4?
There is no need to test Strelka because a number of us have found that the Strelka source code exactly matches the binary code of Rybka 1.0 beta.

It is a pure reverse engineer of Rybka and every single constant and every single calculation is direct from Rybka.

I found a couple of areas where the guy doing the code conversion left out a relatively minor step from Rybka 1.0 beta, and there also is one single case where the guy added a feature. This is simply a quick and dirty addition of Multi-PV. Note that Multi-PV doesn't change the search or Eval, and so when you run Strelka you are actually running Rybka 1.0 Beta.

Keep in mind that I have stepped through all of the chess logic in Strelka and for each single line of C++ I see the exact same calculation in the Rybka 1.0 Beta X86 instructions. Everything exactly matches.

Notice how Strelka plays. Notice it's rating. It is Rybka 1.0 beta, and Vasik Rajlich the author of Rybka also confirmed this.

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

By the way, some other posts on this topic talk about similarities in style or play and keep in mind I'm not referring to that kind of guess. I spent many days checking into every important line of code, and I guarantee you that Strelka is a *pure* reverse engineering of Rybka. Very pure... Exact Match.
Given:
[D]rnb3kr/1p1nqppp/p3p3/2ppP3/3P1N2/2NB1Q2/PPP2PP1/R3K2R w KQ - acd 15; acn 6849556469; bm Bxh7+; fmvn 1; hmvc 0; id WCSAC.0875;

Strelka 2.0 says:

Code: Select all

1) Bxh7+; fmvn 1; hmvc  
    Searching move: Bd3xh7
    Best move (Strelka 2.0 A): Nc3xd5
    Not found in: 01:00
      2	00:01	         176	0	+1.59	Nc3xd5 e6xd5 Nf4xd5
      3	00:01	         939	0	+1.55	Nc3xd5 e6xd5 Nf4xd5 Qe7g5
      4	00:01	       2.875	0	+1.61	Nc3xd5 e6xd5 Nf4xd5 Qe7g5 c2c3 c5xd4 c3xd4
      5	00:01	       8.804	0	+1.24	Nc3xd5 e6xd5 Nf4xd5 Qe7e6 000 c5xd4
      6	00:01	      29.885	933.906	+0.98	Nc3xd5 e6xd5 Nf4xd5 Qe7d8 000 Nb8c6 d4xc5 Nd7xe5
      7	00:01	      69.457	890.474	+0.67	Nc3xd5 e6xd5 Nf4xd5 Qe7d8 000 c5xd4 Qf3f4 Nb8c6
      8	00:01	     191.923	945.433	+0.26	Nc3xd5 e6xd5 Nf4xd5 Qe7d8 Qf3e4 Nb8c6 e5e6 f7xe6 Qe4xe6+ Kg8f8 Qe6d6+ Kf8g8 d4xc5 Qd8a5+ b2b4 Nc6xb4
      9	00:01	     477.652	955.304	+0.42	Nc3xd5 e6xd5 Nf4xd5 Qe7d8 Qf3e4 Nd7b6 Rh1xh7 f7f5 e5xf6/ep Nb6xd5 Rh7xg7+ Kg8f8
     10	00:03	   1.250.821	1.000.656	+0.04	Nc3xd5 e6xd5 Nf4xd5 Qe7d8 Qf3e4 Nb8c6 000 c5xd4 Rh1xh7 g7g6 Rh7xh8+ Kg8xh8 Rd1h1+ Kh8g8
     11	00:06	   3.278.548	1.033.590	+0.22	Nc3xd5 e6xd5 Nf4xd5 Qe7d8 Qf3e4 Nb8c6 000 Nd7b6 Rh1xh7 f7f5 e5xf6/ep Nb6xd5 Rh7xg7+ Kg8f8
     12	00:14	   8.052.021	1.051.589	-0.10	Nc3xd5 e6xd5 Nf4xd5 Qe7d8 Qf3e4 Nb8c6 Rh1xh7 Nd7f8 Rh7xh8+ Kg8xh8 d4xc5 Nf8g6 000 Nc6xe5 c2c3
     13	00:42	  21.296.414	1.042.000	-0.18	Nc3xd5 e6xd5 Nf4xd5 Qe7d8 Qf3e4 Nb8c6 Rh1xh7 Nd7f8 Rh7xh8+ Kg8xh8 d4xc5 Nf8g6 000 Nc6xe5 Rd1h1+ Kh8g8 Kc1b1
   4/18/2008 8:44:08 PM, Time for this analysis: 00:01:01, Rated time: 09:00
And Rybka 1.0 says:

Code: Select all

1) Bxh7+; fmvn 1; hmvc  
    Searching move: Bd3xh7
    Best move (Rybka v1.0 Beta.w32): 0-0-0
    Not found in: 01:00
      3	00:01	         768	12.483	+0.46	Nc3xd5
      4	00:01	       2.469	32.003	+0.25	Nc3xd5
      5	00:01	       5.995	39.101	-0.32	Nc3xd5 e6xd5
      5	00:01	       8.136	44.315	+0.04	d4xc5 Nd7xe5
      6	00:01	      14.429	49.581	-0.04	d4xc5 Nd7xe5 Qf3h3
      7	00:01	      34.788	61.524	-0.02	d4xc5 Nd7xe5 Qf3h5 Nb8c6
      8	00:02	      86.174	67.983	-0.08	d4xc5 Nd7xe5 Qf3h5 Nb8c6 Bd3xh7+ Kg8f8
      9	00:05	     283.692	70.135	-0.28	d4xc5 Qe7xc5 Qf3h5 h7h6 00 Nb8c6
      9	00:06	     377.239	73.133	-0.27	000 g7g6 d4xc5 Qe7xc5 Bd3e2 Nd7xe5 Nc3a4
     10	00:10	     668.111	73.826	-0.19	000 g7g6 d4xc5 Nb8c6 Qf3g3 Nc6xe5 Rd1e1
     11	00:17	   1.202.604	80.173	-0.20	000 g7g6 d4xc5 Nb8c6 Qf3g3 Nc6xe5 Rd1e1 Qe7xc5
     12	00:21	   2.148.887	79.588	-0.24	000 g7g6 d4xc5 Nb8c6 Qf3g3 Nc6xe5 Rd1e1 Qe7xc5 Kc1b1
     13	00:55	   4.281.458	80.782	-0.26	000 g7g6 d4xc5 Nb8c6 Qf3g3 Nc6xe5 Rd1e1 Qe7xc5 a2a3 b7b5
   4/18/2008 8:58:39 PM, Time for this analysis: 00:01:00, Rated time: 02:00
Given:
[D]2r1r1k1/1p1qbp1p/3p1p2/p2P4/3Q4/5N2/PP2RPPP/4R1K1 w - - acd 17; acn 6948581674; bm Rxe7; fmvn 1; hmvc 0; id WCSAC.0247;

Rybka 1.0 says:

Code: Select all

1) Rxe7; fmvn 1; hmvc 0 
    Searching move: Re2xe7
    Best move (Rybka v1.0 Beta.w32): h2-h3
    Not found in: 01:00
      3	00:00	         377	386.048	+0.81	g2g3
      4	00:00	         812	831.488	+0.80	g2g3
      4	00:00	       2.376	143.119	+0.89	Nf3d2
      5	00:00	       3.442	110.144	+0.75	Nf3d2 f6f5
      5	00:00	       4.289	91.498	+0.77	g2g3 f6f5
      5	00:01	       5.853	93.648	+0.82	Qd4d3 Rc8c5
      6	00:01	      10.361	84.203	+0.72	Qd4d3 f6f5 Nf3d4
      6	00:01	      13.214	86.185	+0.81	g2g3 f6f5 Nf3h4
      6	00:01	      16.670	90.317	+0.88	h2h3 f6f5 Re2e3
      7	00:01	      34.304	86.307	+1.09	h2h3 Rc8c5 Nf3d2 f6f5
      8	00:01	      65.729	89.622	+1.28	h2h3 Rc8c7 Nf3d2 b7b5 Nd2e4
      9	00:01	      94.194	93.463	+1.21	h2h3 Rc8c7 Nf3d2 b7b5 Nd2e4 Kg8g7
     10	00:02	     179.016	99.356	+1.34	h2h3 Rc8c7 Nf3d2 f6f5 Re2e3 h7h6 Nd2c4
     11	00:05	     480.684	104.973	+1.37	h2h3 Be7f8 Re2xe8 Rc8xe8 Re1xe8 Qd7xe8 Qd4xf6 Qe8e2 Qf6g5+ Bf8g7
     12	00:07	     781.554	114.559	+1.36	h2h3 Be7f8 Re2xe8 Rc8xe8 Re1xe8 Qd7xe8 Qd4xf6 Qe8a4 Qf6f5 h7h6
     13	00:15	   1.692.695	130.207	+1.36	h2h3 Be7f8 Qd4xf6 Re8xe2 Re1xe2 Bf8g7 Qf6g5 Kg8f8 b2b3 Rc8c5
     14	00:25	   3.254.167	120.524	+1.42	h2h3 Be7f8 Qd4xf6 Re8xe2 Re1xe2 Bf8g7 Qf6g5 b7b5 b2b3 Rc8c7
   4/18/2008 8:49:41 PM, Time for this analysis: 00:01:00, Rated time: 03:00
And Stelka 2.0 says:

Code: Select all

1) Rxe7; fmvn 1; hmvc 0 
    Searching move: Re2xe7
    Best move (Strelka 2.0 A): h2-h4
    Not found in: 01:00
      2	00:01	         103	0	+0.71	h2h3 f6f5
      3	00:01	         973	0	+0.72	g2g3 f6f5 Kg1g2
      4	00:01	       1.657	0	+0.68	g2g3 f6f5 Kg1g2 Rc8c5
      5	00:01	      10.394	0	+2.99	Re2xe7 Qd7xe7 Qd4g4+ Kg8f8 Re1xe7 Rc8c1+ Nf3e1 Re8xe7
      6	00:01	      40.805	1.275.156	+0.77	Nf3d2 Rc8c2 Nd2c4 Rc2xe2 Re1xe2 Qd7f5 Re2e1
      7	00:01	      67.740	1.075.238	+0.71	g2g3 f6f5 Kg1g2 b7b5 b2b3 b5b4 Re2e3
      8	00:01	     132.912	1.063.296	+0.75	g2g3 f6f5 b2b3 h7h6 Qd4d2 Rc8c5 Qd2xh6 Rc5xd5
      9	00:01	     580.193	1.124.405	+1.12	h2h3 Rc8c5 Re2e3 Kg8f8 Qd4e4 f6f5 Qe4d4 f7f6 Re3e6
     10	00:01	     781.660	1.136.133	+1.15	h2h3 Rc8c5 Nf3d2 Rc5c2 Nd2c4 Rc2xe2 Re1xe2 Qd7a4 b2b3 Qa4b5 Qd4g4+ Kg8h8
     11	00:03	   1.839.817	1.154.213	+1.20	h2h3 Be7f8 Re2xe8 Rc8xe8 Re1xe8 Qd7xe8 Qd4xf6 Qe8e2 Qf6g5+ Bf8g7 Qg5d8+ Bg7f8 Qd8xa5 Qe2xb2 Qa5a7 Bf8g7
     12	00:04	   2.678.271	1.198.331	+1.20	h2h3 Be7f8 Re2xe8 Rc8xe8 Re1xe8 Qd7xe8 Qd4xf6 Qe8a4 Qf6g5+ Bf8g7 a2a3 Qa4b5 b2b3 h7h6 Qg5d2 Qb5xb3 Qd2xa5
     13	00:10	   9.041.930	1.218.260	+1.28	h2h4 Be7f8 Re2xe8 Rc8xe8 Re1xe8 Qd7xe8 Qd4xf6 Qe8b5 Qf6g5+ Bf8g7 b2b3 h7h6 Qg5f5 Qb5c5 h4h5 Bg7c3 Qf5g4+ Kg8f8
     14	00:13	  12.549.618	1.226.147	+1.26	h2h4 Be7f8 Re2xe8 Rc8xe8 Re1xe8 Qd7xe8 Qd4xf6 Qe8b5 Qf6g5+ Bf8g7 b2b3 h7h6 Qg5f5 Qb5c5 h4h5 Qc5c3 Kg1h2 Bg7f6 Qf5g4+ Kg8f8
     15	00:21	  18.860.599	1.243.118	+1.26	h2h4 Be7f8 Re2xe8 Rc8xe8 Re1xe8 Qd7xe8 Qd4xf6 Qe8b5 Qf6g5+ Bf8g7 b2b3 h7h6 Qg5f5 Qb5c5 h4h5 b7b5 a2a4 b5xa4 b3xa4 Qc5c4
     16	00:36	  35.223.129	1.262.161	+1.27	h2h4 Be7f8 Re2xe8 Rc8xe8 Re1xe8 Qd7xe8 Qd4xf6 h7h6 Qf6d4 Qe8b5 b2b3 Bf8g7 Qd4e4 Qb5c5 Qe4f5 Qc5c1+ Kg1h2 Qc1b2 Kh2g3 Bg7f6 Qf5c8+ Kg8g7 Qc8xb7 Qb2xa2
   4/18/2008 8:37:55 PM, Time for this analysis: 00:01:01, Rated time: 03:00
It is clear that Yuri Osipov borrowed from Rybka. It is also clear that Yuri borrowed from Fruit. Yuri's code is now open source, and so his requirement to meet the GPL is satisfied. If what you are saying is true, we would expect the pv's (at least) up above to agree exactly and we would also have to assume that Rybka borrows heavily from Fruit. I do not believe that either is the case (though he may certainly have received inspiration from Fruit code). If Vas really did say that the code of Strelka and Rybka is identical, then that would be something for him to worry about.

I do not say that Yuri is in the clear, even though he would be on the Fruit side of the fence now that his program is open source, but the tables designed by David Levy are obtained by questionable means. But if it were true that Rybka and Strelka are exact duplicates, I think it would also mean that Vas would have some explaining to do.

Here is something interesting to note in the source of Strelka that was pointed out by Fabian to me:

'E.g. I have called a function "note_moves" because of the frence verb "noter" = "to give a score". I suspect "to note" cannot have this meaning in english.'

From Strelka:
search.c (509): if (last > moves) note_moves(last, moves, pos_info_entry, move);
search.c (568): note_moves(last, moves_info->list, pos_info_entry, moves_info->trans_move);

Fabian's final word on the influence of Fruit in Stelka was very soft:
"No worries as far as I am concerned.
Ideas are not a legal property.
The code was rewritten so it's OK with me.
Tournament organisers might think differently."

My summary:
Yuri borrowed from both Rybka and Fruit.
Both borrowings were questionable at the time (though there also appears to be a great deal of originality in the source of fruit to me and it is very different from Fruit in the use of bitboards, etc.). Because Strelka is open source now, the use of Fruit's code would be acceptable from a legal standpoint even without Fabian's blessing.

There have been many claims that Stelka and Rybka are identical. Though there are clearly many keen similarities (even the copying of some bugs) there are also clearly major differences.
While they do play similarly (the closest ponder hit rate between families being):
Ponder hit: Most similar pairs (different families only)
# Pair Ponder hit Moves
counted
1 Rybka 1.0 64-bit – Strelka 1.8 71.4 1875

shows 71.4% of the time, they are expecting the same responses.

However, that is lower similarity than lots of other programs:

Code: Select all

Ponder hit: Most similar pairs (different families only) 
# Pair Ponder hit Moves
counted 
1 OBender 3.10.1 – Micro-Max 4.8 82.6 437 
2 Thinker 5.1c Passive – Frenzee Feb08 80.3 340 
3 Thinker 5.1c Passive – E.T. Chess 13.01.08 78.6 309 
4 Feuerstein 0.4.5.1 – Micro-Max 4.8 78.3 415 
5 Thinker 5.1c Passive – Movei 00.8.438 78.2 491 
6 Monarch 1.7 – Micro-Max 4.8 76.1 653 
7 Loop 13.6 32-bit – Fruit 051103 75.8 777 
8 Loop 13.6 32-bit – Fruit 2.2.1 75.8 1186 
9 Thinker 5.1c Passive – Ruffian 2.1.0 75.7 670 
10 Loop 10.32f – Fruit 2.2.1 75.6 1018 
11 Toga II 1.2.1a – Glaurung 2 epsilon/5 64-bit 75.6 336 
12 Feuerstein 0.4.4.2 – Micro-Max 4.8 75.2 436 
13 Delphil 1.6c – Arion 1.7 74.7 352 
14 Clueless 1.4 – Micro-Max 4.8 74.5 435 
15 Spike 1.2 Turin – Thinker 5.1c Passive 73.9 387 
16 Loop M1-T 64-bit 4CPU – Toga II 1.3.1 73.4 1306 
17 Loop M1-T 64-bit 2CPU – Toga II 1.3.1 72.7 1532 
    Rybka 1.0 64-bit – Strelka 1.8 71.4 1875 
18 Toga II 1.3.1 – Loop 13.6 32-bit 70.8 960 
[code]

Clearly Spike and Thinker play more similarly than Rybka and Strelka do, and yet nobody {in their right minds} would suspect that they were clones of one another.

I do think that Yuri should have credited the ideas that he used as to their origins at a bare minimum.

At any rate, the engines are clearly not identical {despite obvious similarities and quirks}.  If the engines were identical, then we would also have to question Vas a bit about the origins of his code.

IMO-YMMV.[/quote]
Agree at 100%
take it easy :)
User avatar
slobo
Posts: 2331
Joined: Mon Apr 09, 2007 5:36 pm

Re: strelka 2.0

Post by slobo »

GenoM wrote: Agree at 100%
Me too.
"Well, I´m just a soul whose intentions are good,
Oh Lord, please don´t let me be misunderstood."
rfadden

Re: strelka 2.0

Post by rfadden »

Dann this is excellent information and from the information that you have I would feel the same way that you do.

I need to give you some additional information so we all can see further into this.

(Rybka has strangely Obfuscated Depth, Nodes, NPS, and Truncated PV)

First, last night I posted the Patch which removes the deliberate Obfuscation from Rybka 1.0 Beta. If you apply the patch then you will see what Rybka 1.0 Beta is really doing. It will then look to you almost exactly the same as Strelka 2.0's output. This is what I am seeing now since I use the corrected, Patched version of Rybka 1.0 Beta.

If there is any issue of trying this Patch keep in mind that I was also posting my notes which show each instruction of this simple Patch (before and after assembly code) but I have Tab Characters in my text which come out whacky here and so I am simply reformatting my text before I post it. Once I post this, people will see the source of every single byte of my patch so they will be able to see that the Patch itself is not harmful.

Now for something really interesting. I have been working out the exact lines that Strelka does not include from Rybka 1.0 Beta. There is a distinctive table that is used by Rybka 1.0 beta and it is applied in "Full_Root_Base" which then directly calls "Full_Root" as follows:

Rybka 1.0:
Start_Search -> Full_Root_Base -> Full_Root

Strelka 2.0
Start_Search -> Full_Root

Full_Root_Base is very small and all it does is apply this Table. By not using this Table the output of Strelka is perturbed enough to give you these differing results.

Ok so there are just a couple of other small changes. For example there is a line of code (one line of code) that has been added in Strelka 2.0 within "Full_Search" that is not in the binary of Rybka 1.0, and right at that line are "special comments" in Strelka as to why he added that line of code.

Man if you saw even a little of what I have been seeing for days, I believe you would be Shocked!

For example, and this is important: I did not have the variable names, functions, or function names or any such stuff figured out from Rybka 1.0 until I got the source of Strelka 2.0. What happened next was *amazing*.
I took the first important module of Strelka and I looked at the Rybka Binary and everything exactly matched the binary and I was able to walk through the X86 machine language and label every single variable and function in Rybka. I am not kidding. Every single variable, every single constant, every function called in exactly the right order with exactly the same number of arguments, the same arguments, the same EVERYTHING!

No difference.

Now keep in mind that I often am considered too intense in my attempts to convince someone of something that I know to be true, so I think it is time for me to back off a little here, otherwise I know what will happen. It is likely that I will upset you with the intensity of my arguments. That's just me, man... I have that effect on people, so since this is very important to me, I will back down now, I will back off and I'll do something uncharacteristic for me. I'll give you time to think about this and I'll ratchet down my intensity.

I AM drinking my morning coffee and I am pretty jacked up on caffeine, so I should cool it... Ha!

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

Ok I came up with a way to show that Strelka 2.0 is missing only about 50 lines of code to exactly match Rybka 1.0:

I will add those 50 lines of code to Strelka 2.0 and it will then exactly match Rybka 1.0 in every single test. The 50 lines of code can remain protected or secret to make sure that I don't give away further Rybka secrets.

(Since Strelka 2.0 gave me every single variable and Function within Rybka, my "reverse" source is now beautifully labeled and it is so easy to read. That is the only reason why I can give you the missing 50 lines of code. I can see the assembler with all of the variables properly labeled.)

Once I give you a ever so slightly modified Strelka that exactly matches Rybka 1.0 then I will show you (in private) the lines of code that the guy left out and so you can see for yourself why Strelka produces slightly different results.

At that point in time though, most importantly you will have the evidence that I have now, and that is that Strelka is a Near Perfect Reverse Engineering of Rybka 1.0 Beta.

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

I went through the code identifying variables and functions in Rybka for days of effort when all of a sudden, out of the blue I found: WHAM... A Difference! That was the one commented line of code that was in Strelka's Full Search.

So consider... if you were there with me being patient for days, finding perfect matches for days along with me, and then all of a sudden you found *one* difference and at that spot there was one line of code heavily commented in Strelka source, what would you be thinking at that time?

Sorry that's more of my typical "hard sell" type approach. That's the way I think... sorry...

I'm really on to something here and I want people to know about it. Strekla is pure reverse engineering with no original content except the addition of Multi-PV (and with 50 lines of Rybka 1.0 code missing), and with one line of code added to Full_Search.
User avatar
GenoM
Posts: 910
Joined: Wed Mar 08, 2006 9:46 pm
Location: Plovdiv, Bulgaria

Re: strelka 2.0

Post by GenoM »

so the logical conclusion of your post, Rick, is:

Vasik has to explain why his Rybka code has so much of Fruit in it.
take it easy :)