Як покращилися двигуни після Deep Blue?


17

Комп'ютерні шахові двигуни покращилися з моменту, коли Deep Blue в 1997 році переміг Каспарова.

Чи покращилися алгоритми, чи вдосконалення здебільшого пояснювалися тим, що ті ж алгоритми працювали швидше завдяки швидшому апаратному забезпеченню тощо?

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

І якщо так, то які були поліпшення? Де я можу прочитати про них?



Як? Драматично.
Еваргало

Відповіді:


8

Можливо, ви можете подивитися на TalkChess , форумі, присвяченому комп'ютерним шахам. Я знайшов нещодавню тему, яка може бути цікавою для вас: Прогрес за 30 років через чотири інтервали 7-8 років

Пару матчів між (колишніми) топ-движками проводиться на одному і тому ж апараті . Тест свідчить про те, що останніми роками (2002-2017 рр.) Приріст в основному здійснюється завдяки вдосконаленню програмного забезпечення. У тесті Stockfish (2017) набрав вражаючих 94/100 проти RobboLito (2009), тоді як RobboLito, на свою чергу, розгромив Shredder (2002) з 92/100.

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

Двигун Stockfish є відкритим кодом, тому алгоритмічні вдосконалення є загальнодоступними. Багато документації можна знайти на https://chessprogramming.wikispaces.com


Це відповідає його твердженню. Спробуйте відповісти на питання наступного разу.
Фред Найт

1
Ну, я вважаю, що я відповів на питання: посилення в основному здійснюється завдяки вдосконаленню алгоритму. Крім того, я показав дані, які підтверджують це твердження (див. Посилання) і вказав на можливий недолік (паралелізація не вимірюється).
Maxwell86

3

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

https://chessprogramming.wikispaces.com/ - чудове джерело, але в ньому важко орієнтуватися.

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

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

Покоління, яке рухається, разом із тим, щоб зробити та робити крок, забирає багато пам’яті, оскільки його потрібно стільки разів попередньо виконати. Найпоширенішими функціями генерації є поштова скринька, бітборд, 0x88, 8x8, розширені дошки (10x10, 10x12) та заздалегідь визначений масив переміщення / таблиця (* я використовую індексовану таблицю переміщення). Поточна думка полягає в тому, що бітборди швидші, а використання магічних бітбордів прискорює це до 30%. Д-р Роберт Хаятт, професор і творець шахового двигуна, не стверджує, що немає значного збільшення швидкості.

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

ПРИМІТКА: Моя індексна таблиця. GNUChess та Jester використовують масив індексів для генерування своїх рухів. Вони ініціалізують двигун, заповнюючи масив можливими рухами. Візьміть шість штук і обчисліть юридичні кроки, доступні для кожної площі. Таким чином, кожен фрагмент мав [64] [8] масив. Я взяв цю ідею і стиснув її до двох індексів і таблиці. У таблиці міститься значення, яке вказує, чи можливі 16 рухів, один індекс утримує зміщення ходу, а інший - маску.

зміщення [] = {-8, -1, 1, 8, -9, -7, 7, 9, -17, -15, -10, -6, 6, 10, 15, 17};

маска [] = {1, 2, 4, 8, 16, 32, 64, 128, 256, ...};

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


7
Я намагаюся не відповідати на відповіді, але це просто .... Альфа-бета і бітборди були винайдені ДЛЯГО перед Deep Blue. Я також впевнений, що плата eval не має доступу до HD в жодному розумному двигуні (затримка ВЕЛИЧЕЗНА). По-четверте, я дуже скептично налаштований на те, що розмір оперативної пам’яті суттєво впливає на вашу нормальну реалізацію альфа-бета-пошуку.
MaxB

Не могли б ви додати деякі гіперпосилання на деякі з обговорених вами понять? Як комусь, хто цікавиться концепцією, але незнайомою з термінологією, важко наслідувати, бо я не знаю, що таке бітборд чи двигун Crafty Chess.
Грім

Я подумав, що мені ясно, що я не порівнюю з Deep Blue, але я розповідав коротку історію. На жорсткому диску я мав на увазі саму програму. Кожен раз, коли нова концепція eval включена в шаховий двигун, потрібно більше коду, а отже, і більше місця в HD.
Фред Найт

@Thunderforge, одне посилання, яке я дав, пояснює кожен аспект, який ви могли б хотіти займатися шаховим програмуванням, однак я визнаю, що важко орієнтуватися. Я дізнався, читаючи вихідні коди інших, але той, який найбільше коментується, - це Crafty двигун доктора Хайата. Я вирішую бути не надто вичерпним через обмеження місця та відмінності між платформами та компіляторами. Якщо, прочитавши сторінку шахів у вікі, ви все ще розгубилися, задайте питання, і я впевнений, що багато хто дасть кращу відповідь.
Фред Найт

1
Every time that a new eval concept in included into a chess engine, more code, and therefore more HD space is required.Функції плат eval, як правило, розроблені так, щоб вони вміщувались у кеш процесора. Кеш процесора << ОЗУ << HD. Розмір HD не має різниці.
MaxB

2

Чи покращилися алгоритми?

Очевидно, так трішки.

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

Незначна нітка: Якщо алгоритми покращилися, тоді програмне забезпечення стає кращим, щоб не було "чи".

Закон Мура говорить нам, що швидкість процесора зросте приблизно вдвічі кожні 18 місяців. Це означає, що за 20 років він збільшився приблизно в 13 разів. Це робить сучасні процесори десь в районі в 8000 разів швидшими. Отже, найбільше поліпшення продуктивності двигуна відбувається завдяки швидшому апаратному забезпеченню.

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

І якщо так, то які були поліпшення? Де я можу прочитати про них?

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


2
That means it has doubled roughly 13 times in 20 years.Я думаю, ви неправильно цитуєте закон Мура. Це нічого не говорить про швидкість процесора. Насправді вона не збільшилась вдвічі.
MaxB

hardware and softwareЯ мав на увазі програмне забезпечення як при реалізації алгоритму (ASM vs C ++), але я бачу, як це заплутано. Виправлено.
MaxB

1
Закон Він Мура правильний, за винятком того, що він включає фразу "в наступне десятиліття". Це було б у 1975 році, і він був прав.
Фред Найт

-1 тому що відповідь невірна - на тому ж апаратному забезпеченні нинішні двигуни все ще розбивають колишні топ-двигуни.
Алюр

0

Вся справа в алгоритмах.

Приймаючи в руках шахіста, люди взяли один з найпотужніших у світі комп'ютерів того часу. Такий підхід до обчислень грубої сили дозволив Deep Blue оглянути шість-вісім кроків вперед. У жорсткому змаганні машина в підсумку перемогла Каспарова з 3 1/2 гри до 2 1/2.

Через шість років Каспаров був залучений до чергового конкурсу "Людина проти машини". Цього разу він грав проти наступника Deep Blue, Deep Junior. Результатом стала розіграна серія у трьох іграх. Найбільша різниця полягала в тому, що Deep Junior працював на машині з приблизно одним відсотком обчислювальної потужності Deep Blue. Алгоритми гри в шахи покращилися до того, щоб досягти практично такого ж результату, в сто разів менше обчислювальної потужності.


4
Ласкаво просимо в Шахи! Ви написали основну частину своєї відповіді так, ніби це цитата; Ви можете надати джерело?
Глорфіндель

0

Відмова від відповідальності: не експерт.

Алгоритми покращилися, і сьогодні найкращі двигуни, що працюють на 1995 рік (пам’ятаємо, Deep Blue був 1999 рік), апаратно обіграли Каспарова. Як я розумію, існують два аспекти алгоритмів:

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

Стандартним алгоритмом пошуку є альфа-бета обрізка , і він використовувався в самих ранніх шахових комп'ютерах. Я не знаю, чи Deep Blue використовував альфа-бета обрізку, але сучасні двигуни ні. В результаті їх пошуки "небезпечні" - вони можуть пропустити, наприклад, що деякі інші кроки, крім того, щоб відбити королеву, виграли б гру. Однак рідко це трапляється, і взамін вони штовхають глибину дуже високо. ("Глибина" - це технічний термін для того, наскільки глибокий пошук двигуна, тому, наприклад, двигун, який здійснює пошук на глибині 30, швидше за все, бив такий, який шукає лише на глибину 20, всі інші речі рівні).

Оцінка . Це інше назви коду двигуна. Враховуючи конкретну позицію, чи краще для білого, чорного чи рівного? Це може включати всілякі функції, наприклад

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

Сьогоднішні двигуни оцінюють позиції набагато краще, ніж Deep Blue.

Що стосується того, чи є алгоритми загальнодоступними, Stockfish на даний момент є найсильнішим двигуном у світі, і це відкритий код. Ви можете завантажити код самостійно з Github .

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