September 2nd, 2018

дилетантские советы для компьютерных шахмат

Как известно, 8 месяцев назад Гугл выкатил шахматную программу АльфаЗеро, которая показала удивительный уровень позиционной игры. Программа была основана не на прямом пересчете вариантов, а на нейросетевых технологиях. Партии были очень впечатляющими, но саму программу публике не предоставили, однако рассказали об общих способах ее организации. Так вот, мне захотелось узнать чего новенького. От Гугла пока новостей нет, но энтузиасты замутили проект построения подобной программы под названием ЛилуЧесс. Результаты пока двойственные - прогресс есть, но программа может играть очень неустойчиво, например начисто переигрывает соперника в дебюте, а потом зевает фигуру на ровном месте. Но что интересно, позиционно похоже такой подход ведет к очевидно лучшим результатам.

Но это так, была присказка, а вот что мне захотелось посоветовать.

У меня как-то была идея, что каждую позицию надо смотреть на предмет, сколько раз конкретное поле доски бьется\защищается твоими фигурами и фигурами соперника.
Просто смотришь, как расставляет фигуры АльфаЗеро, и как различается сила его слона открытого и слона(соперника), запертого пешками, начинаешь думать, что может быть эта простая характеристика на самом деле может быть учтена (то есть посчитать ее нет проблем даже для человека, но вот правильный коэффициент(вклад в позицию) определить можно будет только с учетом всего остального).

Вторая идея: а что если на мгновение отказаться от поиска лучшего хода и вместо этого генерировать поиск лучшей позиции, как можно более близкой к данной. И только потом уже пытаться соединить текущую позицию и идеальную конкретными ходами, естественно с учетом контригры соперника. Хитрость в том, что здесь снижается комбинаторная сложность, ибо позиций меньше, и более того, плохие позиции как раз можно отсекать сразу. Кстати, насколько я понимаю, в переборных алгоритмах эта идея вполне используется - если позиция уже рассматривалась в каком-то расчете, то нет смысл повторять расчет, если можно запомнить. Но тут именно идея, что генерируется позиция, а потом рассматривается вопрос как к ней придти из текущей, если вообще.
И третья, у меня сложилось ощущение что нейросетевые движки явно лучше понимают силу проходных пешек с правильным учетом потенциала превращения в ферзя. Но вот как это конкретизировать в виде простых признаков непонятно.

Вообще, нейросетевые движки просто фонтанируют позиционными жертвами. Их шахматы просто тупо интереснее в этом смысле. Переборные же движки, оценка позиций которых зависит в основном от материала, жертвуют лишь, если нашли вариант с отыгрышем материала. Потому-то партии АльфаЗеро и произвели такое впечатление, что там была куча примеров жертв казалось бы за просто так. У любительского движка ЛилуЧесс тоже есть такие примеры, с тем отличием, что потом движок может запросто пропустить простую тактику.

https://www.youtube.com/watch?v=3sWCMUAdbHc