Pull to refresh

Comments 17

Есть интересная идея регулировать агрессивность движка изменением процента ничей в партиях использующихся для обучения. Протестировать не удалось, так как меня метод Texel не завелся. Так и не смог разобраться почему :(


Жаль что автор Giraffe оставил свой проект.

У меня метод начал работать после выполнения трёх условий: а) использование партий программы против самой себя, а не игр сторонних игроков, б) количество партий > 10000, в) отказ от замысловатых методов оптимизации вроде случайного градиента и т.п. в пользу простейшего покоординатного спуска.

Использовал партии программы против других движков, может в этом загвоздка.

Может быть, такой же эффект можно получить, если ничейному исходу присваивать не 0.5, а какую-то другую оценку с точки зрения той стороны, чей ход. Своего рода contempt factor, который есть в настройках многих движков (даже в GreKo есть, но его корректную работу я почти не проверял).
Но, наверное, программу придётся слегка переделать — она должна научиться отличать оценку за себя от оценки за противника. Для более миролюбивой игры недостаточно меньше ценить атаку на короля — надо меньше ценить именно свою атаку, а за противника по-прежнему смотреть все угрозы и правильно от них защищаться.
Всему своё время. Пока что GreKo и Stockfish находятся в разных весовых категориях. Для тестирования удобнее использовать более близкие по силе программы, чтобы набираемый процент очков не слишком отличался от 50% в ту или другую сторону.

Я не очень понял, почему в тексте и в таблице был сделан вывод, что оценка материала не изменилась, когда из графика видно, что очень даже изменилась — от довольно причудливых значений (где это видано, чтобы за ферзя давали 12 пешек?) к классическим (9, 5 и 3 пешки за ферзя, ладью и легкую фигуру соответственно).

График изменения материала относится к другой сессии обучения, он приведён в порядке примера. Я добавлю в текст статьи соответствующий комментарий.
12 пешек за ферзя — вполне нормальное значение, оно используется не только в GreKo. Важно понимать, что это только один из членов оценки, другие связанные с ферзём и пешками признаки вносят существенные поправки.
Оффтопик: Если кому интересно, робот слева на первой картинке — это не рандомный нарисованный робот, а конкретный персонаж — Atomic Robo: www.atomic-robo.com (Про персонажа справа ничего сказать не могу.)
Спасибо! Как много интересного узнаёшь о современной культуре, занимаясь многомерной оптимизацией :)
Насколько вообще методически корректно весовые коэффициенты, полученные на партиях против самого себя, распространять на игру с другими противниками? Это же буквально означает, что программа оценивает только такую технику игры, которой сама владеет.
Хороший вопрос! Основное предположение, на котором основан метод — это то, что признаки разного сорта так или иначе встречаются в достаточном количестве в рассматриваемых партиях. Конкретное их распределение, которое может зависеть от стиля программы, нам не важно — лишь бы их было много. Дальше работает своего рода байесовский подход. Признак полезен с точки зрения статистики результатов? Повышаем его вес. Не полезен? Тогда понижаем.
А распространение на игру с другими противниками — вполне удачно, судя по приведённым в статье результатам тестов. Подождём ещё, как программа себя покажет в классическом контроле, например, в рейтинге CCRL.
В шахматах бывает не оценить позицию по отдельным признакам и материалу. Существует еще некий дух позиции, закрученность. Иногда игроки отдают фигуру, за абстракцию, за атаку, за инициативу. Компьютер оценивает ход как плохой, однако может получиться что он принесет победу. Вот эту закрученность бы както отцифровать и учесть.

Если атака не приносит позиционных или материальных преимуществ за 10-15 ходов (типичная глубина поиска современного движка) — это сомнительная атака.


Такую "лихую" тактику компьютеры обычно зевают из-за агрессивных отсечений, которые оправдывают себя с точки зрения общей силы игры. Просто потому, что они даже не проверят ход, а не потому, что они не способны его оценить.

Жертва фигуры, конечно, может привести к победе, даже в проигранной по оценке компьютера позиции, но только если соперник устал, начал ошибаться в сложной для себя позиции. Программа же не чувствует усталости, идет выбор самых сильных ходов в обход «обостряющих». Компьютерные программы и так уже давно победили человека, поэтому я думаю нет смысла в такой доработке программ.

Наверное это можно учесть "постфактум". Если "живой" игрок сделал ряд "глупых" или "невыразительных", "невразумительных" ходов а потом, вдруг, как с цепи сорвался, значит, компьютеру (или просто начал получать "необъяснимое", "невыводимое", с точки зрения компьютера, преимущество), пора запускать отдельный поток или процесс, в котором нужно будет искать, где игрок его обманул и в чем суть его стратегии а также, разгадав хитрость, определить рецепт ликвидации "нечестного" преимущества и "жестокого наказания" для хитреца.
Описанное выше подойдёт для атаки и инициативе а вот применяемую "абстракцию" придется устанавливать исходя из самой общей стратегии поведения игроков при реализации той или иной абстракции — здесь, видимо, пригодятся статистика и машобучение.
Ну и разумеется, используемые подходы в этих специальных случаях будут сильно отличаться от общих принципов игры.

Sign up to leave a comment.

Articles