Тема: Шахматы: шахматы для компьютера скачать бесплатно, шахматы онлайн играть с компьютером. Новости шахмат. Статьи о шахматах. :: Разговоры о клонах. Взгляд Э. Коэзи

Прислано kosmodrom 29-03-2011 23:22

I had originally intended to stay out of this mess, since I am after all retired, but after some discussions with Mark Uniake and Zach Wegner I was persuaded put my name on the Rybka cloning letter. Since my position is not precisely identical with that letter (I'm sure none of the other authors' are either) I thought I'd do it right and write down my exact thoughts here. It seems computer chess has found yet another way to waste my time.
Clone Evidence

I have always been slightly suspicious of Rybka. Strong new programs are usually either clones or the second attempt of a previous author. It just takes time to experiment and tweak things until you get something that works. Most people forget this, but Vasik's first attempt at an engine finished 53rd out of 54 engines in CCT6. His second attempt was about 1000 elo higher; so clearly something changed in the interim. It's easy to compare this with Zappa's 17th, 3rd, and 1st place finishes as I gradually improved it over two years.

In addition Rybka was and continues to be the only program that obfuscates its output of nodes per second and depth. This is usually only done by clones who have something to hide, since users don't really care about nodes per second or reported depth except owners of big hardware who like to brag about it (you can find a hilarious thread of me trolling George Worthington in the CCC archives).

Finally I became convinced of the dubious nature of Rybka with the release of Strelka (which is so obviously similar to Fruit that it is amazing Vasik was able to dodge those accusations) and with the clear evidence from Dr. Watkins and Zach that one piece of user interface code was copied verbatim from Fruit. Most people do not understand just how large the exponential space of programs is - it is totally impossible for two people to write even a small piece of code in an exactly identical way. It is now becoming clear that 90% of Rybka 1.0's evaluation is a direct translation of Fruit, and that even Vasik's original engine was a direct copy of Crafty (how he managed to make it 500 elo weaker, we may never know). I suspect the evidence will only increase from here on out.
The (Accidental?) Genius of Vasik Rajlich

Most people don't understand how, if Vasik Rajlich is an evil cloner stealing the work of others, he could dominate the computer chess world so thoroughly for so long. In fact, I remember having dinner in Torino with Stefan, Amir, Shay, and a few other guys and we were all stumped as to why Rybka was so effective. We all thought he must have invented some new super technique, the equivalent of null move or history pruning.

This puzzle was resolved with the release of the Strelka code. I was very curious to read it, of course, but it rapidly became apparent that there were no special techniques in it at all. It was simply a highly optimized and well tuned program. After thinking about this for a few weeks I realized the secret sauce: hyperbullet testing.

If you want to see how an engine performs, you have it play games against other engines. In 2005 while I was working on what would become Zappa Reykjavik, my methodology was to play standard time control games, look at games where Zappa lost, analyze, and make changes until it would play better moves in the critical positions. This is a very reasonable way of doing things, but it isn't very scientific. It's easy to fix one position while breaking 10 others.

This all changed in 2005 when Fabien Letouzey appeared with Fruit. He used blitz testing: make changes, play a few thousand games, and compute the error bars for your change. This is nicely analytical but requires a huge number of games; even after several thousand games played there is an 95% error bar of +/- 20 elo, and many changes have a much smaller effect. Nonetheless, blitz testing was effective enough for Fruit to become a top engine in only a year or two (it's also worth noting that unlike Rybka, its easy to see a solid progression in the strength of the Fruit versions). The surprise for a lot of us was how accurately strength at slow time controls matches strength at long time controls, which I thought at the time was more dominated by evaluation and less by search.

I had a discussion with Vasik in Mexico about his tuning. His procedure was to play games at 3-4 ply which would finish in 10 seconds or so. At that speed the context switching and parsing of UCI would be much to slow, so he had written a special tester to link two versions of Rybka. To accurately measure 2-3 elo changes requires about 100,000 games; at 10 seconds per game that equates to about 10 days of computer time. With a few quad core machines this is eminently practical and the logical extension of Fabien's approach. I think he and Fabien can be compared to Kepler and Copernicus: Fabien broke the ground, and Vasik perfected it. The massive improvement in engine strength from 2005 (when GMs could still play computers and not embarrass themselves too badly) to 2010 is mostly due to them.

So I think Vasik Rajlich is simply a good programmer with the chess knowledge of an International Master and no moral issues with plagiarizing the work of others who was using a better tuning method than the rest of us. I'm guessing here, but I don't think he really understood that and instead considered other engine authors incompetent morons (understandable when you go from zero to domination in 6 months, even when you are starting with something decent), which also explains why he was willing to tell me his procedure in Mexico.

Of course the other possibility is that Vasik is a genius and the rest of us really are incompetent morons, but I think the simpler explanation is a lot more likely.
Sour Grapes

One of the things that I found very surprising about the whole Strelka controversy was how people were willing to give Vasik every benefit of the doubt, and claim that all these cloning accusations were just attempts to win by legal means what we could not do at the chessboard. To me it was quite obvious at that point that Rybka was at least very shady if not a full-blown clone at its inception, tainting any further success, and it was amazing to see people making every possible excuse for him. Some of this is celebrity bias, like how pro athletes can get away with rape and murder (chess engine authors can only get away with minor crimes), but a lot of it is that for some reason people tried to associate themselves with Rybka to gain status and are now having to backpedal.

Many people have pointed out that the source code from Fruit and Crafty is available and everyone reads it. This is certainly true; I have read both and taken some ideas. For example, Zappa's SEE routine is quite similar to Crafty's (but better, because it uses CMOV. Interestingly Vasik also figured out this optimization since it shows up in Strelka). But what most of these people do not understand is that its very difficult to take one piece of a chess engine and add it to another, because all the pieces depend on each other. An evaluation pattern that fixes a gaping hole in one program may be partially covered by three other patterns in another, resulting in no gain, and the same is true for search terms. To give a personal example: after the release of Strelka, I decided to give futility pruning a shot. The biggest difference between Zappa Mexico and Zappa Mexico II is that futility pruning is on by default. The new version crushed the old one in self play, but against other engines it was a miniscule improvement. According to CCRL there is only an 80% chance that its an improvement at all, and there were a few bugfixes in there as well. So copying a full engine and modifying it is a completely different thing from looking at the source code and taking a few pieces. As a final note, I really got almost nothing from Fruit. In fact I was always kind of irritated because I would figure things out which would then later appear in Fruit for all the world to see. The free version of Zappa is within 80 elo of Fruit 2.1 on CCRL and was released 6 months earlier.

There is no doubt in my mind that we would never have seen a strong Rybka in 2005, and probably not in 2006 either (and remember, without sales he gets to do what the rest of us did, and that is work in the evenings for two years) if Vasik had tried to develop an engine from scratch on his own, so he obviously obtained a huge advantage from his intellectual theft. For comparison, it took me two years of steady work (2003-2005), and I had access to the Crafty source code, I just didn't copy it wholesale. Again, it's not impossible that Vasik is 10 times smarter than I am, but I doubt it.

I consider stealing code immoral, but there is one big point where I diverge from the open letter. In my opinion, his advantage was not insurmountable to the rest of us. To make a sports analogy, Vasik was not using steroids, making him much stronger and faster than any normal athlete at the cost of testicle size and roid rage, but rather having his rich parents buy him training sessions with excellent coaches. Or it's like playing against a basketball team that gets a few bad calls in their favor: if your team is good, you should win anyway. So I feel that even though he clearly had an unfair advantage, and without his intellectual theft it's quite possible no one in computer chess would have ever heard the name of Rajlich, it is not one that we as commercial engine authors could not have overcome.

At this point I am out of computer chess with no intention of returning. I think as a field it is almost solved at this point, and my collaboration with Zach on Rondo was about 10% me and 90% him (you guys may not believe this, but in 2005 after winning the title in Reykjavik I considering forming a similar partnership with an aspiring author since I needed to devote a lot of time to graduate school. The first candidate I had in mind: Vasik Rajlich, mainly because he seemed reasonably smart from my conversations with him during the CCTs. As it happened, he found another, cheaper, codebase to use).

So I while I would like the truth to come out, I don't really have a dog in this fight. Technically Zappa would pick up a title in 2007 if Rybka is forfeited, but under the circumstances I couldn't really be proud of that.

Finally, I find it incredibly amusing and hypocritical that the Rybka team is constantly attacking the various engines based on disassembling Rybka 1.1 (Strelka) and Rybka 3 (Ippolit). I can't really condone it, but AFAIK disassembly is legal, while direct code theft is not.


Перевод Вячеслава Перевозчикова (Украина):

Энтони Коззи

Я изначально намеревался остаться в стороне от всей этой метушни, так как я в конце концов ушёл в отставку, но после некоторых обсуждений с Марком Униэком и Заком Вегнером, меня убедили поставить свою подпись под письмом о клонировании Рыбки. Так как моя позиция не точно совпадает с тем письмом (я уверен, что у других авторов также есть разночтения), я думаю, что будет правильно, если я запишу мои точные мысли здесь. Кажется, что компьютерные шахматы нашли еще один способ потратить впустую мое время.

Доказательства клонирования

Я всегда немного с подозрением относился к Рыбке. Сильные новые программы обычно - это либо клоны, либо вторая попытка предыдущего автора. Необходимо время, чтобы экспериментировать и настроить всё таким образом, пока Вы не получаете что-то, что действительно работает. Большинство из нас забывают это, но первая попытка движка Васика закончилась 53-им местом из 54-ёх движков в CCT6. Его вторая попытка была приблизительно на 1000 elo сильнее; таким образом ясно, что-то сильно изменилось за это время. Легко сравнить это с 17-ыми, 3-ьими, и 1-ыми местами Заппы, когда я постепенно улучшал её более чем два года.

Кроме того, Rybka была и продолжает быть единственной программой, которая запутывает ее вывод узлов в секунду и глубину. Это обычно делается только клонами, у которых есть что скрывать, так как пользователи на самом деле не сильно заботятся об узлах в секунду или о набираемой движком глубине, кроме владельцев мощных компьютеров, которым нравится хвастаться этим (Вы можете найти веселую тему на этот счёт того, как я троллил Джорджа Уортингтона в архивах CCC).

Наконец я убедился в сомнительном происхождении Rybka после выхода Strelka (которая настолько очевидно похожа на Фрукт, что удивительно, как Васик смог избежать обвинений уже тогда), и с явным доказательством от доктора Уоткинса и Зака, что одна фигура пользовательского кода интерфейса была скопирована дословно с Фруктов. Большинство людей не понимает только, насколько большим является экспоненциальное пространство программ - двум программистам невозможно полностью написать даже маленький кусок кода абсолютно идентичным образом. Теперь становится ясно, что 90 % оценки Rybka 1.0 - это прямой перевод Фрукта, и что даже оригинальный движок Васика был прямой копией Crafty (как ему удалось сделать его на 500 elo слабее, мы никогда, возможно, не узнаем). Я подозреваю, что доказательства только увеличатся с этого момента.

(Случайный?) Гений Васик Райлих

Большинство людей не понимает, если Васик Райлих является злым клонером, крадущим работы других, как он мог бы доминировать над компьютерным шахматным миром так полностью и так долго. Фактически, я помню как обедал в Турине со Штефаном (Майер-Каленом), Амиром (Баном), Шаем (Бушинским), и некоторыми другими парнями и все мы были озадачены тем, из-за чего Rybka была настолько эффективной. Все мы думали, что он, должно быть, изобрел некоторый новый метод высшего качества, эквивалент нулевого хода или сокращения истории (history pruning).

Эта загадка была решена с выходом кода Strelka. Конечно, мне было очень любопытно читать его, но вскоре стало очевидно, что не было никаких особых методов вообще. Это была просто чрезвычайно оптимизированная и хорошо настроенная программа. После размышления об этом в течение нескольких недель я понял секретный соус: тестирование на ультракоротких контролях.

Если Вы хотите видеть, как движок выступает, Вы должны проводить игры против других движков. В 2005 году, в то время как я работал над тем, что впоследствии станет Заппа Рейкьявиком, моя методология состояла в проведении игр со стандартным контролем времени, глядя на игры, где Заппа проиграла, анализируя их, и делая изменения, до тех пор, пока она не делала бы лучшие ходы на критических позициях. Это очень разумный способ добиться успеха, но он не является строго научным. Легко исправить одну ошибку, наделав при этом 10 других.

Это все изменилось в 2005-ом, когда появился Фабьен Летузи с Фруктом. Он использовал тестирование в блиц: делал изменения, проводил несколько тысяч игр, и вычислял значение погрешности для своего изменения. Это весьма аналитический подход, но требует огромного количества игр; даже после нескольких тысяч игр, сыгранных таким образом, 95%-ое значение погрешности +/-20 elo, и много изменений имеют намного меньший эффект. Тем не менее, тестирование в блиц показало достаточную эффективность для Фрукта, чтобы стать лучшим движком буквально через год или два (стоит отметить, что в отличие от Rybka, легко увидеть твердый прогресс в силе версий Фрукта). Удивление для большого количества из нас состояло в том, как точно сила в поединках при небольших контролях времени совпадает с силой движка при проведении матчей с долгими контролями, которые, как я думал в то время, были больше во власти оценки и меньше - поиска.

У меня был разговор с Васиком в Мексике касательно настроек. Его метод состоял в том, чтобы сыграть партии на глубине 3-4 полухода, которые закончатся через 10 секунд или около этого. На этой скорости взаимодействие внутри протокола UCI является очень медленным, таким образом, он написал специальную программку-тестер, чтобы связать две версии Rybka. Чтобы точно измерить изменения в 2-3 elo требуется приблизительно 100 000 партий; при 10 секундах на партию это составляет приблизительно 10 дней машинного времени. Используя несколько квадов, это чрезвычайно практично и явилось логическим продолжением метода Фабьена. Я думаю, что его и Фабьена можно сравнить с Кеплером и Коперником: Фабьен открыл новые возможности, и Васик усовершенствовал их. Серьёзное усиление силы движка с 2005 (когда гроссмейстеры могли все еще играть компьютерами и не расстраивались слишком ужасно) по 2010 происходит главным образом из-за них.

Таким образом, я думаю, что Васик Райлих является просто хорошим программистом с шахматным уровнем международного мастера и не имеющим никаких моральных проблем с кражей работы других, кто использовал лучший метод настройки, чем остальная часть нас, программистов. Я предполагаю здесь, но я не думаю, что он действительно считал других авторов движков некомпетентными идиотами (понятно, когда Вы идете от ноля до доминирования через 6 месяцев, даже когда Вы начинаете с чего-то приличного), что также объясняет, почему он был готов сказать мне свою процедуру работы в Мексике.

Конечно, другая возможность состоит в том, что Васик - гений, и остальная часть нас действительно некомпетентные идиоты, но я думаю, что более простое объяснение намного более вероятно.

Кислый Виноград

Одна из удивительных вещей, которую я понял относительно этого дела со Стрелкой было то, как люди готовы предоставить Васику презумпцию невиновности, и утверждали, что все эти обвинения в клонировании были только попытками выиграть иным путем то, что не получается сделать на шахматной доске. Для меня это было совершенно очевидно в тот момент, что Рыбка, по крайней мере очень вероятный, если не полномасштабный клон с самого возникновения, и было удивительно видеть, как люди делают все возможное оправдание для него. Это своего рода снисхождение к знаменитости, например, когда выдающемуся спортсмену может сойти с рук изнасилование и убийство (авторы шахматного движка могут уйти безнаказанными только с незначительными преступлениями), но многие люди почему-то пытались ассоциировать себя с Рыбкой, чтобы получить определённый престиж и сейчас вынуждены идти на попятную.

Многие отмечают, что исходный код Фрукта и Crafty доступен, и каждый может его прочитать. Это, безусловно, верно, я читал оба, как и взял из них некоторые идеи. Например, процедура SEE в Заппе очень похожа на таковую в Crafty (но лучше, потому что он использует CMOV. Васик также использовал эту оптимизацию, поскольку она проявляется в Стрелке). Но большинство людей не понимает, что очень трудно взять одну часть шахматного движка и вставить её в другой движок, потому что все части кода зависят друг от друга. Шаблон оценки, который исправляет зияющую дыру в одной программе может быть частично покрыт за счет трех других шаблонов в другом месте, в результате мы не получаем никакого усиления, и то же самое верно и для элементов поиска. Приведу личный пример: после выхода Стрелки, я сделал попытку внедрения futility pruning. Самая большая разница между Zappa Mexico и Zappa Mexico II состоит в том, что в последней futility pruning включена по умолчанию. Новая версия крушила старую в играх между собой, но против других движков улучшения были незначительными. Согласно данным CCRL существует только 80% шансов, что улучшения присутствуют вообще, и кроме того было исправлено несколько ошибок там же. Таким образом, полное копирование движка и его изменение - это совершенно разные вещи. В качестве последнего замечания, я действительно не получил почти ничего из Фрукта. На самом деле я всегда был немного раздражен, потому что я бы мог понять те вещи, которые потом появились во Фрукте и стали доступными для всего мира. Бесплатная версия Zappa находится в пределах 80 ЭЛО От Фрукта 2.1 согласно рейтингу CCRL и была выпущена на 6 месяцев раньше.

У меня нет никаких сомнений сомнений, что мы никогда бы не увидели сильную Рыбку в 2005 году, и, также вероятно, в 2006 (и помните, что без продаж он делал то же, что делали и остальные из нас, и что это всё - работа по вечерам в течение двух лет), если бы Васик сам стремился написать движок с нуля, так что он, очевидно, получил огромное преимущество от его интеллектуального воровства. Для сравнения, у меня ушло два года непрерывной работы (2003-2005), и у меня был доступ к исходному коду Crafty, я просто не стал копировать его на продажу. Опять же не исключено, что Васик в 10 раз умнее меня, но я сомневаюсь в этом.

Я считаю, что кража кода - это аморальный поступок, но есть один большой пункт, где моё мнение не совпадает с открытым письмом. На мой взгляд, его преимущество не являлось непреодолимым для остальных из нас. По спортивной аналогии, Васик не использовал стероиды, чтобы стать гораздо сильнее и быстрее, чем любой нормальный спортсмен, получив стероидную ярость в ущерб размеров яичек. Скорее подойдёт следующая аналогия: богатые родители купили ему тренировочные занятия у отличных тренеров. Таким образом, я думаю, что, хотя он явно получил несправедливое преимущество, и без его кражи интеллектуальной собственности вполне возможно, что никто в компьютерных шахматах никогда бы и не услышал имя Райлих, это не тот случай, который мы, как авторы коммерческих движков не могли б преодолеть.


На данный момент я покинул компьютерные шахматы и не намерен возвращаться. Я думаю, как поле деятельности они почти решены на данный момент времени, и мое сотрудничество с Заком по движку Рондо было таким, что 10% моей работы и 90% его (вы, ребята, можете не верить этому, но в 2005 году после завоевания титула в Рейкьявике я рассматривал формирование аналогичных партнерских отношений с честолюбивым автором, поскольку мне нужно было уделить много времени на окончание колледжа, и первым кандидатом я имел в виду Васика Райлиха, главным образом потому, что он казался достаточно умным из моих бесед с ним во время CCT. Но как оказалось, он нашел другой, более дешевый, метод).

Честно говоря, у меня в самом деле нет фаворита в этой борьбе. Технически Zappa могла бы заполучить титул чемпиона в 2007 году, если Рыбка будет дисквалифицирована, но в данных обстоятельствах я не могу гордиться этим.

Наконец, я нахожу невероятно забавным и лицемерным тот факт, что команда Рыбки постоянно атакует различные движки на основе декомпиляции Rybka 1.1 (Стрелка) и Rybka 3 (Ипполит). Я не могу смириться с этим, но насколько я знаю, декомпиляция является законным методом, а прямая кража кода - нет.