Идея
Разговоры о том, кто у кого что украл, вообще говоря, ведутся, вероятно, от сотворения мира. Компьютерные шахматы не отстают от прочих областей знания и тоже имеют несколько классических священных войн - Рыбка и Стрелка, Рыбка и Фрукт/Крафти, Рыбка и Декабристы, Декабристы и Гудини.
С появлением в широком доступе исходных кодов от Декабристов практически любой человек, базово владеющий компилятором, может хоть по нескольку раз в день выпускать "новый" движок. Нет, я совершенно не против использования декабристского кода, но меня, как тестера, очень утомляет, например, когда кто-то берёт исходники движка "Вася", меняет вес у слона, меняет ключи компиляции - и рождает на свет движок "Петя". Движки будут играть одинаково, а время, потраченное на тестирование клона, можно было бы уделить тестированию более самобытного движка, пусть и, возможно, не такого сильного.
Мне хотелось бы иметь инструмент, позволяющий за разумное время и по чёткому алгоритму определить, насколько новый движок похож на те, что были до него. Оценить адекватность инструмента можно по уже имеющейся априорной информации (результатам тех же священных войн).
Является ли это всё попыткой открыть охоту на ведьм? И да, и нет. Каждый человек волен делать то, что считает нужным, если не нарушает закон - в этом смысле нет ничего дурного в том, что создаются и будут создаваться движки на основе кода Декабристов (может быть, они когда-нибудь смогут составить Гударту конкуренцию). С другой стороны, тестеры имеют право знать, откуда растут уши у того или иного движка. Мне, к примеру, не интересно тестирование десятка практически одинаковых движков, вполне можно ограничиться двумя-тремя.
Таким образом, оказалось, что нужно иметь программу (в узком смысле) и методику (в широком смысле) для определения степени схожести движков.
А тем временем
Оказалось, что не меня одну занимали подобные вопросы. У господ Don Dailey и Larry Kaufman (авторы движка Komodo) была готова утилита под названием Similary tester version 03 (может быть найдена по ссылке - http://komodochess.com/downloads.php).
На Имморталчесс я создала тему для обсуждения результатов работы этой утилиты - http://immortalchess.net/forum/showthread.php?t=12829
Программа работала так: пользователь указывал имя движка, время, отводимое на один ход, ждал, по окончании теста результаты заносились в базу. Протестировав несколько движков, можно было посмотреть таблицу схожести.
Ввиду закрытости программы было совершенно неясно, какие позиции давались движкам, сколько их было, как рассчитывался коэффициент совпадения. Нельзя было дать программе на тест один и тот же движок два раза - грубо говоря, без HEX-редактора проверить самосходимость (довольно важный показатель, как это будет ясно из дальнейшего) не представлялось возможным.
Icy:
В том-то и проблема, что просто сменить имя exe'шника нельзя. Программа не добавит эти результаты в свою базу. Поэтому пришлось пойти на ухищрение - править exe'шник - изменять версию Криттера. В остальном 1.2 и 1.4 один и тот же движок. И совпадение всего лишь в 70% крайне странно.
С помощью HEX-редактора я получила невиданный в то время Critter 1.4, который был полной копией Critter 1.2, только представлялся иначе. Одинаковые движки совпали с коэффициентом 69.19, что полностью ставило крест на использовании программы для получения адекватных оценок.
Следующий шаг сделал WildCat:
Т.е. движку дают разные позиции (возможно, подобраны позиции с большим количеством примерно равных ходов-кандидатов) и предлагают анализировать до глубины 50. Анализ прерывается после превышения заданного времени, но только при завершении текущей глубины. Возможно, отсюда и проблемы.
Также по его логам видно, что sim03 даже не пытается установить движок в одноядерный режим (важность этого тоже будет описана позже), поэтому два одинаковых многоядерных движка никогда в sim03 на 100% не сойдутся.
С рациональным предложением выступил jury_osipov:
Просто тест заточен на время/ход, а там пока таймер тикнет (или наоборот не тикнет), движок успеет посчитать (или не посчитать) лишних несколько десятков тысяч узлов. Отсюда и разброс.
Вот если движки запускать не на время, а на фиксированную глубину, то одинаковые движки совпадали бы сами с собой на 100%. Если они, конечно, одноядерные и с одинаковыми параметрами (например, размером хэша).
Подытоживая: sim03 не может использоваться для тестирования движков на схожесть. Нужна программа, дающая движкам считать на фиксированную глубину, а не на время, имеющая большую базу, чем sim03 (с помощью Murka 1.2 были извлечены позиции, их оказалось около 8000 штук), корректно устанавливающая движки в одноядерный режим и выставляющая одинаковые играющие роль UCI-параметры для всех движков.
---
Для продолжения
---