Page 6 of 9

Re: My recent correspondence with Vasik Rajlich

Posted: Mon Jun 14, 2010 6:47 am
by Alexander Schmidt
Roger Brown wrote:I say that there should be some time limit on the length that these statements can stand unchallenged.
One year?

Expired...

Re: My recent correspondence with Vasik Rajlich

Posted: Mon Jun 14, 2010 6:52 am
by Alexander Schmidt
Well if this accusation is allowed in the public forum, I attach importance to post some defending details also in public. I know it is all discussed, no need to discuss it again. Move it to EOF if you like, but take the initial accusation with it.

Here are some details:

I am always talking about the differences between Ippolit and Rybka, I want to show some details.

Maybe my work encourages someone to proof me wrong. I would be happy about a critical factual discussion. :D

This is not meant as an evidence that Ippolit is no clone of Rybka, but it shows that the engines are different enough to ask for a proof if someone says it's a clone.

After all I am sure Ippolit is NOT based on a decompiled Rybka. In another thread I showed why I think the roots are Kaissa from Vladimir Yelin. BTW it would be a hard challange to decompile Rybka 3, translate the decompiled version to something understandable, and improve the engine along the way by 100 ELO in a half year.

I can not exclude the possibility that parts of Rybka are inside Ippolit. I am thinking about Rybkas so called tables. But they are also in Strelka, it should be easy for an expert to find them in Ippolit. Maybe something else, but who can be sure it is "stolen"? Maybe it is only the idea that was taken, since Strelka many secrets of Rybka are public.

BTW: I am not even useing Ippolit. I am more interested in Chess960, standart chess became too boring for me...

But now to the promised facts :)

Movegenerator and moveordering

There are several ways to create the movegeneration. The same movegen don't mean it is the same engine because there are not many possibilities how an engine creates it's moves. It can happen that 2 different engines create the same moves perchance. But it is still a good hint.

How to test the movegen: Let the engine analyse positions where several moves have the same score like a draw or mate. I test a viarety of King vs. King positions, and positions with a mate in 1. Chosen to see which pieces and which direction of the moves are generated first.

I have a few epd files with the moves of different engines, I can test a new engine with my epd files and find out where I have to look closer. Here is one example:

7K/8/2Q1Q3/1Q3Q2/3k4/1Q3Q2/2Q1Q3/8 w - - 0 0 bm e6d7;Crafty
1R3B1K/N1N5/2Q1Q3/7R/3k4/N1N5/2Q1Q3/R6R w - - 0 0 bm c7b5;Crafty
1R3B1K/N7/2Q1Q3/5Q1R/3k4/1Q3Q2/2Q1Q3/R6R w - - 0 0 bm a7b5;Crafty
1R3B1K/8/2Q1Q3/B6R/3k4/6B1/2Q1Q3/R1B4R w - - 0 0 bm f8g7;Crafty
1R5K/8/2Q1Q3/B6R/3k4/6B1/2Q1Q3/R1B4R w - - 0 0 bm a5b6;Crafty
1R5K/8/2Q1Q3/7R/3k4/8/2Q1Q3/R1B1B2R w - - 0 0 bm e1c3;Crafty
1R4RK/8/2Q1Q3/7R/3k4/8/2Q1Q3/R6R w - - 0 0 bm g8d8;Crafty
7K/8/2Q1Q3/8/3k4/8/2Q1Q3/R6R w - - 0 0 bm h1h4;Crafty
7K/8/2Q1Q3/8/3k4/8/2Q1Q3/R7 w - - 0 0 bm a1a4;Crafty
7B/6K1/2Q1Q3/8/3k4/8/2Q1Q3/8 w - - 0 0 bm e6d7;Crafty
6KB/8/2Q1Q3/2R1R3/3k4/2R1R3/2Q1Q3/8 w - - 0 0 bm e5h5;Crafty
8/8/3k4/8/8/3K4/8/8 w - - 0 0 bm d3e4;Crafty
8/8/3k4/8/8/3K4/8/8 b - - 0 1 bm d6c5;Crafty
8/8/8/5k2/8/3K4/8/8 w - - 0 0 bm d3d4;Crafty
8/8/8/4k3/8/3K4/8/8 w - - 0 0 bm d3c4;Crafty
8/8/8/3k4/8/3K4/8/8 w - - 0 0 bm d3e3;Crafty
7K/8/8/8/8/6k1/8/8 w - - 0 0 bm h8g8;Crafty
4K3/8/4k3/8/8/8/8/8 w - - 0 0 bm e8f8;Crafty
7k/8/8/8/8/3p4/1K6/8 w - - 0 0 bm b2c3;Crafty
8/7k/5P2/8/8/8/1K6/8 w - - 0 0 bm f6f7;Crafty

In all positions Ippolit plays a different move.

Ippolit has a _very_ different movegeneration than Rybka.


Maximum Depth

Engines have implemented a number with the maximum depth, they will not calculate deeper. Same as Movegen, it's just a hint, no proof. With this position you can find out the max depth: 4b1k1/3p1p1p/3P1PpP/6P1/1p6/pPp1p3/P1P1P3/2KB4 b - - 0 1

Ippolit has a different maximum depth than Rybka.


Search

It's quite tricky because adjusting parameters can result in a very different behaviour. So a different search don't mean different roots, but it's still a hint for originality :)

One of my test positions is this one: 2k5/8/7P/8/8/8/8/3R1K2 w - - 0 1

Look how fast Rybka reaches it's max depth, and how "slow" Ippolit gets deeper. Also you can see differences in the output: Rybka shows only the best move, Ippolit pv's.

Ippolit has a different search than Rybka.


Evaluation

The evaluation is easier to test. Not in the middlegame, but in the endgame. Try positions like this: k7/8/8/8/8/2B5/8/K7 b - - 0 1
(Switch of tablebases)

You can see the evaluation for bishop mobility or other bonuses in a drawn position. Don't look only on the absolute values, there might be a factor implemented. Look also on changes, directions and values of the changes.

Strelka for example has exactly the same values as Rybka here!

Or this one: k7/8/8/8/8/P1B5/8/K7 b - - 0 1

Ippolit has the knowledge of the wrong bishop, Rybka don't.

Ippolit has a different eval than Rybka.

I must admit that there are a few similaries in the eval. For example not evaluating 0 in a drawn position. Also the evaluatiopn in the middlegame is sometimes similar. But we are far far away from calling Ippolit a clone because of this.


UCI Fingerprint

A very good method to find clones is to look at the UCI parser. In fact with this methode most of the clones where caught (Patriot, Fafis, Deep9, Nr.5, Toga...). Just let the engines analyse a position and look at the direct output. UCI is a protocol where an author can send info strings at any time at any place, in a row or one after the other. So you have millions of possible combinations, you get a kind of fingerprint. Usually engines look different, different versions of the same engine look mostly nearly the same - That means improiveing the engine will seldom change the UCI fingerprint. Rybka 1 Beta - Rybka 3 has the same fingerprint for example.

Look at the output below.

Ippolit has a _very_ different UCI interface than Rybka.

Likely Ippolits roots are NOT Rybka.

Rybka 3

Code: Select all

379.375-->1:go infinite
379.438<--1&#58;info depth 1
379.438<--1&#58;info depth 2
379.438<--1&#58;info depth 2 score cp 26 time 17 nodes 42 nps 2529 pv g1f3
379.438<--1&#58;info depth 2 time 17 nodes 51 nps 3072
379.438<--1&#58;info depth 3
379.438<--1&#58;info depth 3 score cp 9 time 17 nodes 65 nps 3915 pv g1f3
379.438<--1&#58;info depth 3 time 17 nodes 114 nps 6866
379.438<--1&#58;info depth 4
379.438<--1&#58;info depth 4 score cp 13 time 17 nodes 142 nps 8553 pv g1f3
379.453<--1&#58;info depth 4 time 17 nodes 190 nps 11444
379.453<--1&#58;info depth 5
379.453<--1&#58;info depth 5 score cp 9 time 32 nodes 267 nps 8544 pv g1f3 g8f6
379.453<--1&#58;info depth 5 time 32 nodes 426 nps 13632
379.453<--1&#58;info depth 6
379.470<--1&#58;info depth 6 score cp 6 time 48 nodes 722 nps 15402 pv g1f3 g8f6 b1c3
379.485<--1&#58;info depth 6 time 64 nodes 1243 nps 19888
379.485<--1&#58;info depth 7
379.500<--1&#58;info depth 7 score cp 10 time 79 nodes 1553 nps 20130 pv g1f3 g8f6 b1c3 b8c6
379.532<--1&#58;info depth 7 time 110 nodes 2284 nps 21261
379.532<--1&#58;info depth 8
379.578<--1&#58;info depth 8 score cp 6 time 157 nodes 3506 nps 22867 pv g1f3 g8f6 b1c3 b8c6 d2d3
379.656<--1&#58;info depth 8 time 235 nodes 5569 nps 24266
379.656<--1&#58;info depth 9
379.984<--1&#58;info depth 9 score cp 11 time 564 nodes 11312 nps 20538 pv g1f3 g8f6 c2c4 b8c6 d2d3 e7e6
380.048<--1&#58;info depth 9 time 626 nodes 12895 nps 21093
380.048<--1&#58;info depth 10
380.672<--1&#58;info depth 10 score cp 14 time 1251 nodes 25119 nps 20561 pv g1f3 g8f6 b1c3 b8c6 d2d4 d7d5 c1f4
380.813<--1&#58;info depth 10 time 1392 nodes 28796 nps 21183
380.813<--1&#58;info depth 11
381.406<--1&#58;info depth 11 score cp 14 time 1985 nodes 39589 nps 20422 pv g1f3 g8f6 b1c3 b8c6 d2d4 d7d5 c1f4 c8f5
381.797<--1&#58;info depth 11 time 2376 nodes 49413 nps 21295
381.797<--1&#58;info depth 12
383.078<--1&#58;info depth 12 score cp 14 time 3657 nodes 72478 nps 20294 pv g1f3 g8f6 b1c3 b8c6 d2d4 d7d5 c1f4 c8f5 e2e3
383.189<--1&#58;info currmove e2e3 currmovenumber 3
383.234<--1&#58;info currmove d2d3 currmovenumber 4
383.251<--1&#58;info currmove d2d4 currmovenumber 5
383.281<--1&#58;info currmove b2b4 currmovenumber 6
383.297<--1&#58;info currmove a2a4 currmovenumber 7
383.314<--1&#58;info currmove a2a3 currmovenumber 8
383.329<--1&#58;info currmove b2b3 currmovenumber 9
383.359<--1&#58;info currmove c2c4 currmovenumber 10
383.439<--1&#58;info currmove c2c3 currmovenumber 11
383.454<--1&#58;info currmove e2e4 currmovenumber 12
383.517<--1&#58;info currmove f2f4 currmovenumber 13
383.532<--1&#58;info currmove f2f3 currmovenumber 14
383.547<--1&#58;info currmove g2g4 currmovenumber 15
383.564<--1&#58;info currmove g2g3 currmovenumber 16
383.579<--1&#58;info currmove h2h4 currmovenumber 17
383.609<--1&#58;info currmove h2h3 currmovenumber 18
383.642-->1&#58;stop
383.642<--1&#58;info currmove b1a3 currmovenumber 19
383.657<--1&#58;info currmove g1h3 currmovenumber 20
383.672<--1&#58;info depth 12 time 4251 nodes 87771 nps 21142
383.672<--1&#58;bestmove g1f3 ponder g8f6

Fruit 2.1

Code: Select all

34.484<--1&#58;info depth 1
34.484<--1&#58;info depth 1 seldepth 1 score cp 26 time 0 nodes 2 pv b1a3
34.501<--1&#58;info depth 1 seldepth 1 score cp 54 time 0 nodes 3 pv b1c3
34.501<--1&#58;info depth 1 seldepth 1 time 0 nodes 21 nps 0
34.501<--1&#58;info depth 2
34.501<--1&#58;info depth 2 seldepth 2 score cp 0 time 0 nodes 44 pv b1c3 b8c6
34.501<--1&#58;info depth 2 seldepth 2 time 0 nodes 82 nps 0
34.501<--1&#58;info depth 3
34.501<--1&#58;info depth 3 seldepth 3 score cp 54 time 0 nodes 148 pv b1c3 b8c6 g1f3
34.501<--1&#58;info depth 3 seldepth 3 time 0 nodes 186 nps 0
34.501<--1&#58;info depth 4
34.501<--1&#58;info depth 4 seldepth 6 score cp 0 time 0 nodes 300 pv b1c3 b8c6 g1f3 g8f6
34.501<--1&#58;info depth 4 seldepth 6 time 0 nodes 976 nps 0
34.501<--1&#58;info depth 5
34.501<--1&#58;info depth 5 seldepth 9 score cp 48 time 0 nodes 1729 pv b1c3 b8c6 g1f3 g8f6 d2d4
34.501<--1&#58;info depth 5 seldepth 9 time 15 nodes 1933 nps 0
34.501<--1&#58;info depth 6
34.501<--1&#58;info depth 6 seldepth 12 score cp 0 time 15 nodes 3331 pv b1c3 b8c6 g1f3 g8f6 d2d4 d7d5
34.516<--1&#58;info depth 6 seldepth 12 time 15 nodes 9447 nps 0
34.516<--1&#58;info depth 7
34.516<--1&#58;info depth 7 seldepth 14 score cp 42 time 31 nodes 15332 pv b1c3 b8c6 g1f3 g8f6 d2d4 d7d5 c1f4
34.516<--1&#58;info depth 7 seldepth 14 time 31 nodes 16243 nps 0
34.516<--1&#58;info depth 8
34.531<--1&#58;info depth 8 seldepth 17 score cp 0 time 46 nodes 35078 pv b1c3 g8f6 g1f3 b8c6 d2d4 d7d5 c1f4 c8f5
34.579<--1&#58;info depth 8 seldepth 20 time 93 nodes 72286 nps 0
34.579<--1&#58;info depth 9
34.641<--1&#58;info depth 9 seldepth 20 score cp 15 time 156 nodes 125215 pv b1c3 g8f6 g1f3 b8c6 d2d4 d7d5 d1d3 c6b4 d3b5 b4c6
34.672<--1&#58;info depth 9 seldepth 21 time 187 nodes 151298 nps 0
34.672<--1&#58;info depth 10
34.954<--1&#58;info depth 10 seldepth 22 score cp 12 time 421 nodes 330356 pv b1c3 d7d5 d2d4 c8f5 g1f3 g8f6 f3h4 f5g4 h2h3 g4d7
35.017<--1&#58;info depth 10 seldepth 22 score cp 15 time 531 nodes 427686 pv g1f3 b8c6 d2d4 d7d5 b1c3 g8f6 d1d3 g7g6 c1f4 c8f5
35.109<--1&#58;info depth 10 seldepth 24 time 625 nodes 504717 nps 0
35.109<--1&#58;info depth 11
35.485<--1&#58;info time 1000 nodes 790000 nps 790000 cpuload 1000
35.485<--1&#58;info hashfull 17
35.563<--1&#58;info depth 11 seldepth 24 score cp 23 time 1078 nodes 861114 pv g1f3 b8c6 b1c3 g8f6 e2e3 d7d5 f1b5 c8g4 h2h3 g4f5 e1g1
35.578<--1&#58;info currmove b1c3 currmovenumber 2
35.610<--1&#58;info currmove d2d4 currmovenumber 3
35.657<--1&#58;info currmove e2e4 currmovenumber 4
35.703<--1&#58;info currmove d2d3 currmovenumber 5
35.720<--1&#58;info currmove e2e3 currmovenumber 6
35.735<--1&#58;info currmove b1a3 currmovenumber 7
35.735<--1&#58;info currmove g1h3 currmovenumber 8
35.750<--1&#58;info currmove b2b3 currmovenumber 9
35.750<--1&#58;info currmove b2b4 currmovenumber 10
35.750<--1&#58;info currmove g2g3 currmovenumber 11
35.766<--1&#58;info currmove g2g4 currmovenumber 12
35.766<--1&#58;info currmove a2a4 currmovenumber 13
35.781<--1&#58;info currmove h2h4 currmovenumber 14
35.781<--1&#58;info currmove c2c4 currmovenumber 15
35.781<--1&#58;info currmove f2f4 currmovenumber 16
35.781<--1&#58;info currmove c2c3 currmovenumber 17
35.781<--1&#58;info currmove a2a3 currmovenumber 18
35.781<--1&#58;info currmove h2h3 currmovenumber 19
35.798<--1&#58;info currmove f2f3 currmovenumber 20
35.798<--1&#58;info depth 11 seldepth 24 time 1312 nodes 1036135 nps 789737
35.798<--1&#58;info depth 12
35.798<--1&#58;info currmove g1f3 currmovenumber 1
36.484<--1&#58;info time 2000 nodes 1580000 nps 790000 cpuload 1000
36.484<--1&#58;info hashfull 34
36.609<--1&#58;info depth 12 seldepth 28 score cp 10 time 2125 nodes 1684642 pv g1f3 b8c6 b1c3 g8f6 d2d4 d7d5 f3e5 c8f5 e5c6 b7c6 c1f4 a8b8 b2b3
36.609<--1&#58;info currmove b1c3 currmovenumber 2
36.938<--1&#58;info currmove d2d4 currmovenumber 3
37.188-->1&#58;stop
37.203<--1&#58;info time 2718 nodes 2160000 nps 794702 cpuload 1000
37.203<--1&#58;info hashfull 45
37.203<--1&#58;bestmove g1f3 ponder b8c6

Ippolit 0080b

Code: Select all

662.234<--1&#58;info depth 1
662.234<--1&#58;info time 0 nodes 21 nps 0 score cp 1 depth 1 seldepth 2 pv h2h4
662.250<--1&#58;info time 0 nodes 23 nps 0 score cp 6 depth 1 seldepth 2 pv g2g4
662.250<--1&#58;info time 0 nodes 27 nps 0 score cp 29 depth 1 seldepth 2 pv e2e4
662.250<--1&#58;info time 0 nodes 38 nps 0 score cp 58 depth 1 seldepth 2 pv g1f3
662.267<--1&#58;info depth 2
662.267<--1&#58;info time 0 nodes 117 nps 0 score cp 19 depth 2 seldepth 6 pv g1f3 b8c6 b1c3 g8f6 d2d3
662.267<--1&#58;info depth 3
662.267<--1&#58;info currmove g1f3 currmovenumber 1
662.267<--1&#58;info time 0 nodes 216 nps 0 score cp 19 depth 3 seldepth 6 pv g1f3 b8c6 b1c3 g8f6 d2d3
662.267<--1&#58;info currmove e2e4 currmovenumber 2
662.267<--1&#58;info currmove g2g4 currmovenumber 3
662.267<--1&#58;info currmove h2h4 currmovenumber 4
662.267<--1&#58;info currmove h2h3 currmovenumber 5
662.267<--1&#58;info currmove g2g3 currmovenumber 6
662.267<--1&#58;info currmove f2f4 currmovenumber 7
662.267<--1&#58;info currmove f2f3 currmovenumber 8
662.267<--1&#58;info currmove e2e3 currmovenumber 9
662.267<--1&#58;info currmove d2d4 currmovenumber 10
662.267<--1&#58;info currmove d2d3 currmovenumber 11
662.267<--1&#58;info currmove c2c4 currmovenumber 12
662.267<--1&#58;info currmove c2c3 currmovenumber 13
662.267<--1&#58;info currmove b2b4 currmovenumber 14
662.267<--1&#58;info currmove b2b3 currmovenumber 15
662.267<--1&#58;info currmove a2a4 currmovenumber 16
662.267<--1&#58;info currmove a2a3 currmovenumber 17
662.267<--1&#58;info currmove g1h3 currmovenumber 18
662.267<--1&#58;info currmove b1c3 currmovenumber 19
662.267<--1&#58;info currmove b1a3 currmovenumber 20
662.267<--1&#58;info depth 4
662.267<--1&#58;info currmove g1f3 currmovenumber 1
662.267<--1&#58;info time 0 nodes 532 nps 0 score cp 19 depth 4 seldepth 7 pv g1f3 b8c6 b1c3 g8f6 d2d3
662.267<--1&#58;info currmove e2e4 currmovenumber 2
662.267<--1&#58;info currmove g2g4 currmovenumber 3
662.267<--1&#58;info currmove h2h4 currmovenumber 4
662.267<--1&#58;info currmove h2h3 currmovenumber 5
662.282<--1&#58;info currmove g2g3 currmovenumber 6
662.282<--1&#58;info currmove f2f4 currmovenumber 7
662.282<--1&#58;info currmove f2f3 currmovenumber 8
662.282<--1&#58;info currmove e2e3 currmovenumber 9
662.282<--1&#58;info currmove d2d4 currmovenumber 10
662.282<--1&#58;info currmove d2d3 currmovenumber 11
662.282<--1&#58;info currmove c2c4 currmovenumber 12
662.282<--1&#58;info currmove c2c3 currmovenumber 13
662.282<--1&#58;info currmove b2b4 currmovenumber 14
662.282<--1&#58;info currmove b2b3 currmovenumber 15
662.282<--1&#58;info currmove a2a4 currmovenumber 16
662.282<--1&#58;info currmove a2a3 currmovenumber 17
662.282<--1&#58;info currmove g1h3 currmovenumber 18
662.282<--1&#58;info currmove b1c3 currmovenumber 19
662.282<--1&#58;info currmove b1a3 currmovenumber 20
662.282<--1&#58;info depth 5
662.282<--1&#58;info currmove g1f3 currmovenumber 1
662.282<--1&#58;info time 0 nodes 1464 nps 0 score cp 6 depth 5 seldepth 21 pv g1f3 b8c6 b1c3 g8f6 d2d4 d7d6 h2h3 c8e6 e2e4
662.282<--1&#58;info currmove e2e4 currmovenumber 2
662.282<--1&#58;info currmove g2g4 currmovenumber 3
662.282<--1&#58;info currmove h2h4 currmovenumber 4
662.282<--1&#58;info currmove h2h3 currmovenumber 5
662.282<--1&#58;info currmove g2g3 currmovenumber 6
662.282<--1&#58;info currmove f2f4 currmovenumber 7
662.282<--1&#58;info currmove f2f3 currmovenumber 8
662.282<--1&#58;info currmove e2e3 currmovenumber 9
662.282<--1&#58;info currmove d2d4 currmovenumber 10
662.282<--1&#58;info currmove d2d3 currmovenumber 11
662.282<--1&#58;info currmove c2c4 currmovenumber 12
662.297<--1&#58;info currmove c2c3 currmovenumber 13
662.297<--1&#58;info currmove b2b4 currmovenumber 14
662.297<--1&#58;info currmove b2b3 currmovenumber 15
662.297<--1&#58;info currmove a2a4 currmovenumber 16
662.297<--1&#58;info currmove a2a3 currmovenumber 17
662.297<--1&#58;info currmove g1h3 currmovenumber 18
662.297<--1&#58;info currmove b1c3 currmovenumber 19
662.297<--1&#58;info currmove b1a3 currmovenumber 20
662.297<--1&#58;info depth 6
662.297<--1&#58;info currmove g1f3 currmovenumber 1
662.297<--1&#58;info time 0 nodes 1900 nps 0 score cp 6 depth 6 seldepth 21 pv g1f3 b8c6 b1c3 g8f6 d2d4 d7d6 h2h3 c8e6 e2e4
662.297<--1&#58;info currmove e2e4 currmovenumber 2
662.297<--1&#58;info currmove g2g4 currmovenumber 3
662.297<--1&#58;info currmove h2h4 currmovenumber 4
662.297<--1&#58;info currmove h2h3 currmovenumber 5
662.297<--1&#58;info currmove g2g3 currmovenumber 6
662.297<--1&#58;info currmove f2f4 currmovenumber 7
662.297<--1&#58;info currmove f2f3 currmovenumber 8
662.297<--1&#58;info currmove e2e3 currmovenumber 9
662.297<--1&#58;info currmove d2d4 currmovenumber 10
662.297<--1&#58;info currmove d2d3 currmovenumber 11
662.297<--1&#58;info currmove c2c4 currmovenumber 12
662.297<--1&#58;info currmove c2c3 currmovenumber 13
662.297<--1&#58;info currmove b2b4 currmovenumber 14
662.297<--1&#58;info currmove b2b3 currmovenumber 15
662.297<--1&#58;info currmove a2a4 currmovenumber 16
662.297<--1&#58;info currmove a2a3 currmovenumber 17
662.297<--1&#58;info currmove g1h3 currmovenumber 18
662.297<--1&#58;info currmove b1c3 currmovenumber 19
662.314<--1&#58;info currmove b1a3 currmovenumber 20
662.314<--1&#58;info depth 7
662.314<--1&#58;info currmove g1f3 currmovenumber 1
662.314<--1&#58;info time 15 nodes 3201 nps 213000 score cp 7 depth 7 seldepth 25 pv g1f3 b8c6 b1c3 g8f6 h2h3 d7d6 d2d3 c8e6 c1e3 h7h6 f3d4
662.314<--1&#58;info currmove e2e4 currmovenumber 2
662.314<--1&#58;info currmove g2g4 currmovenumber 3
662.314<--1&#58;info currmove h2h4 currmovenumber 4
662.314<--1&#58;info currmove h2h3 currmovenumber 5
662.314<--1&#58;info currmove g2g3 currmovenumber 6
662.314<--1&#58;info currmove f2f4 currmovenumber 7
662.314<--1&#58;info currmove f2f3 currmovenumber 8
662.314<--1&#58;info currmove e2e3 currmovenumber 9
662.314<--1&#58;info currmove d2d4 currmovenumber 10
662.314<--1&#58;info currmove d2d3 currmovenumber 11
662.314<--1&#58;info currmove c2c4 currmovenumber 12
662.314<--1&#58;info currmove c2c3 currmovenumber 13
662.314<--1&#58;info currmove b2b4 currmovenumber 14
662.314<--1&#58;info currmove b2b3 currmovenumber 15
662.314<--1&#58;info currmove a2a4 currmovenumber 16
662.314<--1&#58;info currmove a2a3 currmovenumber 17
662.314<--1&#58;info currmove g1h3 currmovenumber 18
662.314<--1&#58;info currmove b1c3 currmovenumber 19
662.314<--1&#58;info currmove b1a3 currmovenumber 20
662.314<--1&#58;info depth 8
662.314<--1&#58;info currmove g1f3 currmovenumber 1
662.314<--1&#58;info time 31 nodes 4339 nps 139000 score cp 7 depth 8 seldepth 25 pv g1f3 b8c6 b1c3 g8f6 h2h3 d7d6 d2d3 c8e6 c1e3 h7h6 f3d4
662.329<--1&#58;info currmove e2e4 currmovenumber 2
662.329<--1&#58;info currmove g2g4 currmovenumber 3
662.329<--1&#58;info currmove h2h4 currmovenumber 4
662.329<--1&#58;info currmove h2h3 currmovenumber 5
662.329<--1&#58;info currmove g2g3 currmovenumber 6
662.329<--1&#58;info currmove f2f4 currmovenumber 7
662.329<--1&#58;info currmove f2f3 currmovenumber 8
662.329<--1&#58;info currmove e2e3 currmovenumber 9
662.329<--1&#58;info currmove d2d4 currmovenumber 10
662.329<--1&#58;info currmove d2d3 currmovenumber 11
662.329<--1&#58;info currmove c2c4 currmovenumber 12
662.329<--1&#58;info currmove c2c3 currmovenumber 13
662.329<--1&#58;info currmove b2b4 currmovenumber 14
662.329<--1&#58;info currmove b2b3 currmovenumber 15
662.329<--1&#58;info currmove a2a4 currmovenumber 16
662.329<--1&#58;info currmove a2a3 currmovenumber 17
662.329<--1&#58;info currmove g1h3 currmovenumber 18
662.329<--1&#58;info currmove b1c3 currmovenumber 19
662.329<--1&#58;info currmove b1a3 currmovenumber 20
662.329<--1&#58;info depth 9
662.329<--1&#58;info currmove g1f3 currmovenumber 1
662.329<--1&#58;info time 46 nodes 11517 nps 250000 score cp 13 depth 9 seldepth 25 pv g1f3 g8f6 b1c3 b8c6 d2d4 d7d6 e2e4 h7h6 h2h3
662.329<--1&#58;info currmove e2e4 currmovenumber 2
662.329<--1&#58;info currmove g2g4 currmovenumber 3
662.329<--1&#58;info currmove h2h4 currmovenumber 4
662.329<--1&#58;info currmove h2h3 currmovenumber 5
662.329<--1&#58;info currmove g2g3 currmovenumber 6
662.345<--1&#58;info currmove f2f4 currmovenumber 7
662.345<--1&#58;info currmove f2f3 currmovenumber 8
662.345<--1&#58;info currmove e2e3 currmovenumber 9
662.345<--1&#58;info currmove d2d4 currmovenumber 10
662.345<--1&#58;info currmove d2d3 currmovenumber 11
662.345<--1&#58;info currmove c2c4 currmovenumber 12
662.345<--1&#58;info currmove c2c3 currmovenumber 13
662.345<--1&#58;info currmove b2b4 currmovenumber 14
662.345<--1&#58;info currmove b2b3 currmovenumber 15
662.345<--1&#58;info currmove a2a4 currmovenumber 16
662.345<--1&#58;info currmove a2a3 currmovenumber 17
662.345<--1&#58;info currmove g1h3 currmovenumber 18
662.345<--1&#58;info currmove b1c3 currmovenumber 19
662.345<--1&#58;info currmove b1a3 currmovenumber 20
662.345<--1&#58;info depth 10
662.345<--1&#58;info currmove g1f3 currmovenumber 1
662.345<--1&#58;info time 62 nodes 20357 nps 328000 score cp 19 depth 10 seldepth 25 pv g1f3 g8f6 b1c3 b8c6 d2d4 d7d6 e2e4 h7h6 d4d5 c6b4 c1e3 e7e5
662.345<--1&#58;info currmove e2e4 currmovenumber 2
662.345<--1&#58;info currmove g2g4 currmovenumber 3
662.345<--1&#58;info currmove h2h4 currmovenumber 4
662.345<--1&#58;info currmove h2h3 currmovenumber 5
662.345<--1&#58;info currmove g2g3 currmovenumber 6
662.345<--1&#58;info currmove f2f4 currmovenumber 7
662.345<--1&#58;info currmove f2f3 currmovenumber 8
662.345<--1&#58;info currmove e2e3 currmovenumber 9
662.345<--1&#58;info currmove d2d4 currmovenumber 10
662.345<--1&#58;info currmove d2d3 currmovenumber 11
662.359<--1&#58;info currmove c2c4 currmovenumber 12
662.359<--1&#58;info currmove c2c3 currmovenumber 13
662.359<--1&#58;info currmove b2b4 currmovenumber 14
662.359<--1&#58;info currmove b2b3 currmovenumber 15
662.359<--1&#58;info currmove a2a4 currmovenumber 16
662.359<--1&#58;info currmove a2a3 currmovenumber 17
662.359<--1&#58;info currmove g1h3 currmovenumber 18
662.359<--1&#58;info currmove b1c3 currmovenumber 19
662.359<--1&#58;info currmove b1a3 currmovenumber 20
662.359<--1&#58;info depth 11
662.359<--1&#58;info currmove g1f3 currmovenumber 1
662.359<--1&#58;info currmove e2e4 currmovenumber 2
662.359<--1&#58;info currmove g2g4 currmovenumber 3
662.359<--1&#58;info currmove h2h4 currmovenumber 4
662.359<--1&#58;info currmove h2h3 currmovenumber 5
662.359<--1&#58;info currmove g2g3 currmovenumber 6
662.359<--1&#58;info currmove f2f4 currmovenumber 7
662.359<--1&#58;info currmove f2f3 currmovenumber 8
662.359<--1&#58;info currmove e2e3 currmovenumber 9
662.359<--1&#58;info currmove d2d4 currmovenumber 10
662.359<--1&#58;info currmove d2d3 currmovenumber 11
662.359<--1&#58;info currmove c2c4 currmovenumber 12
662.359<--1&#58;info currmove c2c3 currmovenumber 13
662.359<--1&#58;info currmove b2b4 currmovenumber 14
662.359<--1&#58;info currmove b2b3 currmovenumber 15
662.359<--1&#58;info currmove a2a4 currmovenumber 16
662.359<--1&#58;info currmove a2a3 currmovenumber 17
662.359<--1&#58;info currmove g1h3 currmovenumber 18
662.359<--1&#58;info currmove b1c3 currmovenumber 19
662.359<--1&#58;info currmove b1a3 currmovenumber 20
662.359<--1&#58;info depth 11
662.359<--1&#58;info currmove g1f3 currmovenumber 1
663.484-->1&#58;stop
663.516<--1&#58;info time 1281 nodes 646037 nps 504000 score cp 9 depth 13 seldepth 33 pv g1f3 g8f6 b1c3 b8c6 d2d4 d7d5 d1d3 e7e6 e2e4 h7h6 c1f4
663.516<--1&#58;bestmove g1f3

Re: My recent correspondence with Vasik Rajlich

Posted: Mon Jun 14, 2010 1:08 pm
by Sven
Alexander Schmidt wrote:Well if this accusation is allowed in the public forum, I attach importance to post some defending details also in public. I know it is all discussed, no need to discuss it again. Move it to EOF if you like, but take the initial accusation with it.

Here are some details:

I am always talking about the differences between Ippolit and Rybka, I want to show some details.

Maybe my work encourages someone to proof me wrong. I would be happy about a critical factual discussion. :D

This is not meant as an evidence that Ippolit is no clone of Rybka, but it shows that the engines are different enough to ask for a proof if someone says it's a clone.

After all I am sure Ippolit is NOT based on a decompiled Rybka. In another thread I showed why I think the roots are Kaissa from Vladimir Yelin. BTW it would be a hard challange to decompile Rybka 3, translate the decompiled version to something understandable, and improve the engine along the way by 100 ELO in a half year.

I can not exclude the possibility that parts of Rybka are inside Ippolit. I am thinking about Rybkas so called tables. But they are also in Strelka, it should be easy for an expert to find them in Ippolit. Maybe something else, but who can be sure it is "stolen"? Maybe it is only the idea that was taken, since Strelka many secrets of Rybka are public.
I do consider the theory that the initial working code base of Ippolit was another engine, like Kaissa, as not bad. Indeed I think it is quite likely, taking into account the many differences that have been found between Ippolit and R3, that parts of the Rybka search and/or evaluation might have been incorporated into a different working code base via disassembling, with several adaptations and also many changes of course. I mentioned that possibility in the past already but did not get too much feedback at that time. What would make this really doable IMO is the fact that Ippolit and R3 have (according to the "BB" paper) a very similar, although not identical, board representation based on rotated bitboards.
Alexander Schmidt wrote: But now to the promised facts :)
<details omitted here>
You have already posted that part in the past, nothing new so far. I recall that I replied to it, but never mind, here is my reply again from my current viewpoint:

I think that in the Ippo* case "black box" tests like yours are not sufficient to derive anything from it, since Ippo* has very likely different roots, so the question is much more complex than just "Is Y a clone of X or not?", like in the former clone cases you cited. No doubt: the UCI interface is most probably very different from R3, and so is most probably the move generator. But that does not say where the major components of a chess engine X, search and evaluation, come from and whether resp. how much they are based on another engine Y. Especially you simply can't judge about differences or similarities of the search just by running black box tests and looking at the move choices and/or PVs. We discussed exactly that a while ago, do you remember? A huge number of things influences the result of the search, and even with two identical search implementation you can get very different results just if any of these factors are slightly different.

The only thing that helps, if a comparison of C source code is not possible [at the moment], is the approach of "BB" who really seems to have done a comparison on assembler code level. I'll comment on that later on.

Sven

Re: My recent correspondence with Vasik Rajlich

Posted: Mon Jun 14, 2010 2:33 pm
by Hood
All engines have similarities and differrences but it not make them clones or illegal.

Re: My recent correspondence with Vasik Rajlich

Posted: Mon Jun 14, 2010 2:46 pm
by Sven
bob wrote:
Sven Schüle wrote:These percentages are very plausible for me. I don't know whether many non-programmers can follow but nevertheless I suggest to all interested members to reread what I already posted five weeks ago on that topic (EO subforum). Read especially my quite detailled comments on each of the points from Zach's pages under the heading "My details". If I had to match these 11 points with the 40-40-20 estimate by Vas then I would perhaps come to similar numbers as he did.

One note @Zach here: for me claiming that something is "wrong", or "standard CC concept" does not mean anything about your competence, and also nothing personal. I just try to keep as objective as possible. If someone would make 4 wrong statements out of 11 then this does not turn him "incompetent" at all. Just to let you know. EDIT: I see no reason why Vas should view this differently.
I believe that I responded to your post back then point by point also. Your "refutation" offers _zero_ details. And I _do_ mean _zero_. When we started the analysis, we were comparing rybka binary to fruit source, and since the binary is stripped of symbols, and since it is in asm, it takes some work to go from asm back to C. And that code was posted here. And there were howls of protest because our goal was to take the binary and map it directly back to C that matches fruit. I tried to point out that C to binary is a many-to-one mapping, as there are many ways to code up an algorithm where the source looks completely different but the binary is identical. Students try this all the time by changing variable names, procedure names, switching from a for loop to a while loop, and so forth. So going blindly from asm to C is not helpful, but _if_ you ask the question, "Can I use this assembly code, in its entirety without adding instructions or having any left over, and map it back to the exact C source in fruit?" then the answer was yes in more than one instance, the first was the main loop where commands are read and the infamous do_parse() procedure is called.

If you don't accept any of that, that's your choice. But there _is_ ample evidence to show that code was copied. It is not about how much was copied, it is about was _any_ copied, and the answer is most certainly "yes". It is time to get out from behind this false cover of "not too much" or "just a little". One more time, you can't be just a little bit pregnant. Ideas are not the same as code. We are talking about _code_.

Another new excuse is "Rybka is bitboard, fruit is not, can't be copied". Baloney. Much of my early evaluation was not bitboard since I have always maintained a mailbox copy of the board to make it easy to figure out what piece is on a particular square. And I converted that code directly to bitboard code later. Are you _really_ saying that is not copied. When I copy A to B, then modify B to use a different board representation, and now B is not a copy of A. That's convoluted thinking, to be kind about it.

What if the robo* guys convert from bitboards? Are they _also_ OK by this definition, even though it looks more and more like they are already OK, based on continually arriving data.
"Zero details" is as imprecise as possible. This was part of my post that I linked to above:

Code: Select all

piece square tables&#58;
- I can see no similar code, just similar values used


pawn_get_info&#40;)&#58;
- I can see no similar code, just ideas may have been reused


eval_piece&#40;)&#58;
- "Rybka code" may look similar but is a bitboard translation with several other changes, so only ideas were reused but no literal code copying


eval_king&#40;)&#58;

- using a flag that defines whether king safety is used or not is a common idea that many programs share, and its existence in R1 does not prove copying of code but just reusing an idea

- attacks evaluation is a bitboard translation, so the code is changed => only idea reused

- final score calculation&#58; one source line is shown that contains the same idea in R1 as in Fruit but has 3 changes in R1, so no unchanged literal code copying

- shelter&#58; implementations show look quite similar BUT Zach states that this code is not present in Rybka binary but is "an equivalent" created manually by Zach so this can be ZERO proof for anything
  "All of this shelter evaluation code in Rybka above is an equivalent; it doesn't appear in the Rybka binary. It is there simply to illustrate what is in the precomputed tables. These precomputed tables are used during the pawn evaluation to quickly evaluate shelters."

- storm&#58; very different code, only same ideas


eval_passer&#40;)&#58;
- "Rybka code" presented looks very different, just ideas may have been reused


eval_pattern&#40;)&#58;
- common ideas but completely different implementations


material&#58;
- implementations of "MatKingFlag", "DrawBishopFlag", and game phase look quite similar
  => assembler code of R1 should be shown to prove that the code shown as "Rybka" is really in R1, and not part of Strelka source only &#40;which would not prove anything&#41;
How is that "zero"? You have to open a second browser window or tab with the related Zach pages, of course, to see, parse, and understand what I mean. Is it that difficult to get the meaning of my comment that I see no similarities of the presented code pieces left and right side, for instance? Do I have to repeat what is written on Zach's pages to make my comment more readable? I guess no. I guess you have not even read my comments to 11 points. That excuses your reply.

Regarding "bitboard translation": yes, if I copy code and modify it to use bitboards then it is no longer a literal copy. Simple.

Regarding "asm to C", this was not my topic at all in my referenced post, you have drifted to another topic with that.

Regarding "copying actual code" and "a little bit pregnant", you simply can't show actual code copying merely with a website like Zach's where left and right sides do not match, it needs some more work like the recent one from "BB" for that IMO. So *there is no code copying proven*. It is proven, and was admitted very early by Vasik, that R1 was influenced by many Fruit ideas. He says "legally", would you assume he does not know what that means, as a software developer? You say something like: he copied the evaluation code from Fruit to Rybka and adapted it to match the Rybka needs. He says something like: he wrote original code, took some ideas from Fruit and legally implemented them in Rybka. You come and say he is dishonest, and you "prove" that with a website where left and right sides do not match but the text says they were "virtually identical". A couple of serious chess programmers raise their doubts. But you insist. Fabien does not care about it, he obviously has no strong feelings in this area.

Why do you insist on this campaign, Bob?


I also think that it is important to carefully clean up the accusation that Rybka were derived from Fruit, simply because this "derivation" assumption may serve as kind of an excuse for having been allowed to publish parts of copyrighted material as "public domain" source code, provided that has happened (still open for me although many think that everything's fine now after the "BB report").

Sven

Re: My recent correspondence with Vasik Rajlich

Posted: Mon Jun 14, 2010 2:52 pm
by mariaclara
:idea: I feel this is common sense,

a vital part of person's "psyche"

:arrow: A person's honor/reputation is very important.

If I'm correct, countries even went to war over honor/reputation.

R. Hyatt:

If one cares about his/her reputation, then one will take the necessary time to defend it when necessary. One will take the necessary time to produce supporting data if it is available.

Re: My recent correspondence with Vasik Rajlich

Posted: Mon Jun 14, 2010 3:00 pm
by S.Taylor
mariaclara wrote::idea: I feel this is common sense,

a vital part of person's "psyche"

:arrow: A person's honor/reputation is very important.

If I'm correct, countries even went to war over honor/reputation.

R. Hyatt:

If one cares about his/her reputation, then one will take the necessary time to defend it when necessary. One will take the necessary time to produce supporting data if it is available.
i.e., might (going to war) makes right (reputation)?

Re: My recent correspondence with Vasik Rajlich

Posted: Mon Jun 14, 2010 4:26 pm
by oreopoulos
I wonder, did you get permission to publish private emails?
Private emails, like private conversations are not to be published without the consent of both sides. Without the consent its illegal.

Re: My recent correspondence with Vasik Rajlich

Posted: Mon Jun 14, 2010 4:30 pm
by Dann Corbit
oreopoulos wrote:I wonder, did you get permission to publish private emails?
Private emails, like private conversations are not to be published without the consent of both sides. Without the consent its illegal.
There will only be a problem if Vas decides to sue him, which I think is pretty doubtful. {read:no way there will be a problem}

However, I think it was a mistake to publish them. If Vas wanted them public, he would have made them public. I have a similar collection of email from Vas that I do not post because he never asked me to do it.

Re: My recent correspondence with Vasik Rajlich

Posted: Mon Jun 14, 2010 4:30 pm
by Roger Brown
oreopoulos wrote:I wonder, did you get permission to publish private emails?
Private emails, like private conversations are not to be published without the consent of both sides. Without the consent its illegal.

Hello Oreopoulos,

This is taken from Sven's first post in this thread.

Note the section in bold and underlined:

Dear readers,

in case someone is interested, please find below the full contents of an email dialogue I had with Vasik Rajlich during the past two days. I did not remove or edit any part of the original emails except mail addresses, line break issues, and presentation of URLs. Both involved parties explicitly allow publishing of these emails in the TalkChess forum.

Later.