Я не можу говорити за алгоритм, який використовується для 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, ...};
Тоді генерація ковзаючого ходу є настільки ж простою, як і пошук дійсності його маски в допустимих зрушеннях від таблиці переміщення.