Який точний спосіб оцінити шахові позиції?


13

Мене на деякий час цікавили алгоритми комп'ютерних шахів AI (і я отримав можливість працювати над одним в якийсь момент), як Minimax , і як основний компонент цих алгоритмів є так звана функція оцінювання для визначення того, що таке хороша конфігурація дошки, а що погана .

Іншими словами, з огляду на конфігурацію вашої шахової дошки, як ви визначаєте, що це вам на користь і з якою мірою впевненості?

Наприклад:

  • Якщо ви є власником центру, це досить сприятливо.
  • Якщо у вас більше штук, ніж у опонента, це досить сприятливо.
  • Якщо ви втратили свою королеву, це, скоріше, не сприятливо.
  • Якщо у вас пішак, близький до просування, це сприятливо.
  • ...

Тому я хотів би попросити поради, як створити хорошу оціночну функцію, грунтуючись на деяких експертних знаннях про шахову гру в цілому. І, якщо можливо, ступінь сприятливості (скажімо, що між 1 дуже сприятливим, до 100 - надзвичайно сприятливим).

Ідея врешті-решт полягає в тому, щоб мати можливість створити алгоритм, який буде шукати в дереві можливостей до певної глибини та оцінити, яка найбільш сприятлива конфігурація для наступного руху (враховуючи кілька кроків у майбутньому) на основі того, що сприятливий для гравця і не сприятливий для суперника. Але без гарної функції оцінки алгоритм нічого.


Я думаю, що це питання було б добре для StackOverflow. Там вже багато питань щодо Chess AI
xaisoft

3
Я думав опублікувати його на SO раніше, але майже впевнений, що це буде закрито як не конструктивне або не справжнє питання. Можливо, якщо мені потрібно більше акцентувати увагу на самому коді, але я вважаю, що для функції оцінки потрібні знання про шахи, а не стільки про код чи алгоритми.
Чарльз Менгуй

Як точно. Єдиний абсолютно точний спосіб - це ви виграєте чи програєте чи зрівняєте.
edwina oliver

Відповіді:


9

Ось хороший вихідний пункт. Порівняння матеріалів є ключовим (і простим), тоді ви можете налаштувати, щоб враховувати такі позиційні аспекти, як відкриті ранги / файли / діагоналі, структура пішаків тощо.

https://www.chessprogramming.org/Оцінка


5

Додавши до відповіді @Eve Freeman, я б запропонував переглянути, як найкращий комп'ютерний двигун у світі, Stockfish, оцінює задану позицію. Оскільки вихідний код відкритий, ви можете це зробити безкоштовно. Я думаю, що файл з функцією оцінювання, яку ви шукаєте, це саме цей .


5

У мене є відчуття, що я трохи запізнююся на цю відповідь, але - я також перебуваю в процесі виготовлення двигуна. Вихідний код знаходиться в Python (який читається досить легко, навіть якщо ви цього не знаєте) і доступний тут, якщо бажаєте його прочитати. Список активних «евристик» (на момент публікації):

  • Далі розвинені (ближче до протилежного боку) шматочки краще
  • Пішаки, ближче до просування, хороші
  • Королі оцінюються окремо, залежно від того, в якій фазі знаходиться гра (відкриття, середня гра, ендгра)
  • Якщо у гравця є обидва єпископи, він отримує бонус
  • Якщо гравець заграв, отримайте бонус
  • Ізольовані пішаки (пішаки, що навколо них нічого) - це не добре
  • Подвійні пішаки (дві пішаки в одному файлі без проміжку між ними) - це не добре
  • Мати всі 8 пішаків - це не обов'язково, і це штрафується (вони захаращують дошку і заважають)
  • Погляньте на цю чудову функцію оцінювання, яка також використовується
  • Єпископів, що мають більше пішаків на тому ж кольоровому квадраті, що і єпископ, накладають покарання (вони не дуже гарні в переповнених ситуаціях)
  • Ще не реалізовано, але планується: лицарі отримують бонус у більш переповнених ситуаціях

В одному з цих пунктів я згадав "фазу" гри (наприклад, відкриття, середня гра, ендгра), і якщо ви хочете включити це у свій движок, ви, мабуть, зіткнетеся з тією ж проблемою, що і я: немає чітка лінія, що розділяє їх. Моя функція, яка визначає, в якій фазі знаходиться гра, використовує кілька речей:

  • Кількість матеріалу на дошці (як тільки будь-який шматочок буде вбитий, він позначає гру як не на відкритті)
  • Кількість рухів (менше 6 повних ходів - це відкриття, незалежно від того, що)
  • рух королеви (якщо обидві королеви були переміщені, позначте гру як середня гра)

Ця відповідь, можливо, була давньою, пізньою і поза темою, але я сподіваюся, що вона все-таки була корисною.


4

Дивно, але виявляється, що двигун Minimax буде грати досить добре, коли функція оцінки є випадковою ; це відоме як ефект Біля і випливає з принципу, що позиції, які дають вам більше варіантів, а ваш противник менше варіантів, як правило, сприятливі. Один розумний спосіб генерувати випадкові оцінки послідовно та ефективно - це генерувати хеш-код Zobrist для позиції (використовуючи коефіцієнти, вибрані випадковим чином на початку гри) та отримувати випадкову оцінку безпосередньо з хеша.

На протилежному кінці шкали AlphaZero та Leela проводять надзвичайно складну оцінку кожної шуканої позиції, використовуючи велику нейронну мережу . По-людськи недоцільно описувати, які функції ефективно реалізує ця мережа, але це, безперечно, ефективніше, ніж функція оцінювання Stockfish. Дослідницький документ AlphaZero вказує, що цей підхід найкраще працює в пошуках дерев Монте-Карло, а не в Minimax.

Якщо, з іншого боку, ви хочете розробити механізм аналізу, який допоможе гравцям або коментаторам людини зрозуміти нюанси позиції, можливо, варто застосувати звичайну функцію оцінювання, використовуючи встановлені матеріальні цінності та теорію позицій . Хороший приклад подає Ед Шредер « Внутрішній бунт» , який документує основні конструктивні особливості добре розглянутого двигуна, який використовується в декількох шахових комп’ютерах Мефісто. Ви можете скористатися певним ступенем машинного навчання для визначення відносної важливості кожного елемента вашої функції оцінювання, а також окремо викласти ці елементи для представлення в графічному інтерфейсі.


3

Я думаю, що шахові програмісти, як правило, не покладаються на знання сильних шахістів при розробці своїх оціночних функцій, а замість цього випробовують різні елементи, а потім перевіряють їх в іграх проти інших двигунів і вирішують, що їх тримати. Ларрі Кауфман справедливо розповідає про свої погляди на те, що таке розуміння людини, але, схоже, і Райліх, і Дейлі були дуже орієнтованими на результати, і не прийняли ідеї Кауфмана оптом.

Одна стаття, що мені здалася цікавою, - Зак Вегнер, порівнюючи функції оцінювання Рибка та Фрукта. Однією з областей, де Рибка, можливо, представляв крок вперед, було включення таблиць матеріального дисбалансу на основі конкретних комбінацій фрагментів. Про це також написав Кауфман.

http://www.top-5000.nl/ZW_Rybka_Fruit.pdf http://danheisman.home.comcast.net/~danheisman/Articles/evaluation_of_material_imbalance.htm


0

Це посилання є найкращою відправною точкою ІМХО. Я використовую це як вихідну точку для власної шахової програми, і вважаю її простою для розуміння і корисної.

https://chessprogramming.wikispaces.com/Simplified+evaluation+function


2
Чи можете ви, будь ласка, коротко розширити вміст посилання?
Пабло С. Окаль

Зараз сайт Wikispaces не працює. Виправлене посилання на його новий будинок: chessprogramming.org/Simplified_Evaluation_Function
Chromatix

0

Коротше кажучи, стандартним підходом до налаштування параметрів шахового двигуна є:

  1. Визначте параметри
  2. Дайте параметрам номінальні (стартові) значення
  3. Запустіть двигун, щоб побачити, як він працює
  4. Налаштуйте значення параметрів, щоб спробувати підвищити його продуктивність

Потім повторіть кроки 3 та 4, поки ви не досягнете своєї мети для виконання.

Звичайним підходом до цього є створення лабораторії, де двигуни стикаються в турнірах з двигунами. Використовуються кілька ігор, в яких двигун грає обох кольорів. Основні турніри, що представляють інтерес, включають запуск двигуна зі значенням параметра A на протилежне до того ж двигуна зі значенням параметра B.

Як ви можете напевно здогадатися, результати такого підходу сильно залежать від:

  • Вибрані параметри
  • Як вказані параметри
  • Як змінюються значення параметрів протягом тестування
  • Як працюють двигуни (обмежена глибина шару, обмежений час, чутливість тощо)

Такий підхід також забирає багато часу.

Більш свіжий (та інноваційний підхід) був розроблений у 2010 році дослідниками, що використовують методи генетичного алгоритму, щоб: а) вказати параметри та б) налаштувати значення параметрів. Спочатку слідчі запустили двигун із стартовим, номінальним набором значень параметрів проти набору гросмайстерських ігор, щоб побачити, чи може він ефективно вибрати «найкращий хід». "Найкращий хід" визначався як хід, який зробив гросмейстер *. Де б це не було зроблено, це було записано. Потім було випробувано інший набір параметрів, і було визначено відносну продуктивність та попередній запуск.

Потім було спробувано програмний підхід до об'єднання значень параметрів , використовуючи принцип генетичного алгоритму виживання "придатних". Тут "пристосований" означає той, який генерує вихід, який найбільше відповідає ідеалу. (Також трапляється каламбур за статистичну техніку регресії «найменших квадратів») - метод, який використовується для оцінювання якості наближення.)

Лише після того, як будуть знайдені параметри двигуна, які можуть добре імітувати GM, починається фактична фаза турніру з двигуном. На цій фазі різні набори параметрів знову описуються один проти одного, на цей раз безпосередньо . Методи вдосконалення генетичного алгоритму застосовуються для генерування послідовно кращих поколінь двигуна.

У цьому дослідницькому проекті було використано 36 параметрів, включаючи всі матеріальні цінності шматочків, і багато більш поширених критеріїв стратегічної оцінки, такі як відсталі пішаки, слабкі квадрати, єпископська пара тощо. Однак дослідники додали нові параметри, такі як "тиск короля", значення "мобільності" для кожного виду штук, ладья на файл, що прилягає до короля, ладья на напіввідкритий файл, ладья, що атакує короля на - / b- / g- / h-файл, розділення між пройденим пішаком і королем, що захищається, тощо.

На жаль, дослідники не пояснюють, як вони придумали цей набір параметрів і які альтернативні параметри вони могли перевірити та відхилити. Було б розумно припустити, що вони починалися зі значно більшого набору, і визначали (шляхом спроб та помилок), які з них мали найбільший вплив на продуктивність, а які - незначні або похідні, і тому їх можна відмовити.

Якщо це здається, що це може бути корисним, ви можете знайти тут дослідження .

* Застереження про фазу підходу, яку використовували дослідники, є в порядку. У своєму вступі до розуміння шахового руху від Move , Джон Нанн обрав "... важкі боротьби між сильними гросмейстерами ..." для ілюстрації своїх тем. Потім він додає:

Читачі можуть бути дуже здивовані, побачивши кількість знаків запитань, які прикрашають ігри в цій книзі. Звичайно, ви можете подумати, щоб вибрати лише тридцять ігор, щоб знайти звукові ігри, було б легко. Однак можу запевнити, що цього не було. ... можна знайти вина практично з будь-якою складною, жорстокою грою ... Я ніколи не відчував, що моя гра була десь поблизу абсолютно точною, тому я особисто не вважаю цих відкриттів неприємними. Однак деяким може бути важко визнати, що шахи, як грають люди, менш точні, ніж вважалося раніше.

Точка, яку підкреслює доктор Нанн, говорить про те, що початковий підхід дослідників до встановлення параметрів двигуна, вимагаючи, щоб вони наслідували ходи гросмейстера, можуть бути помилковими, оскільки людська гра є хибною . Насправді добре встановлено, що двигуни вже грають краще, ніж люди .

Тому, можливо, кращим підходом до встановлення початкових параметрів було б відповідність нового двигуна проти передового існуючого двигуна .


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.