Что нового
  • Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

На Пути К Deep Blue: Пошаговое Руководство По Созданию Простого Ии Для Игры В Шахматы

Sascha

Заместитель Администратора
Команда форума
Администратор
Регистрация
9 Май 2015
Сообщения
1,071
Баллы
155
Возраст
52
Рассмотрим некоторые базовые концепции, которые помогут нам создать простой искусственный интеллект, умеющий играть в шахматы:

  • перемещение;
  • оценка шахматной доски;
  • минимакс;
  • альфа-бета-отсечение.

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

Готовый алгоритм можно найти на

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

.

Шаг 1. Генерация ходов и визуализация шахматной доски


Мы будем использовать библиотеки

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

для генерации ходов и

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

для визуализации доски. Библиотека для генерации ходов реализует все правила шахмат. Исходя из этого, мы можем рассчитать все ходы для данного состояния доски.


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.


Визуализация функции генерации движения. Исходное положение используется как вход, а на выходе — все возможные ходы из этой позиции.


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

var calculateBestMove =function(game) {
//Генерация всех ходов для данной позиции
var newGameMoves = game.ugly_moves();
return newGameMoves[Math.floor(Math.random() * newGameMoves.length)];
};

Хотя этот алгоритм не очень солидный шахматист, но это хорошая отправная точка, поскольку его уровня достаточно, чтобы сыграть с нами:


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.


Черные играют случайными ходами


Посмотреть, что получилось на данном этапе, вы можете на

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

.

Шаг 2. Оценка доски


Теперь попробуем понять, какая из сторон сильнее в определенном положении. Самый простой способ добиться этого — посчитать относительную силу фигур на доске, используя следующую таблицу:


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.



С помощью функции оценки мы можем создать алгоритм, который выбирает ход с наивысшей оценкой:

var calculateBestMove = function (game) {

var newGameMoves = game.ugly_moves();
var bestMove = null;
//Используйте любое отрицательное число
var bestValue = -9999;

for (var i = 0; i < newGameMoves.length; i++) {
var newGameMove = newGameMoves;
game.ugly_move(newGameMove);

//Возьмите отрицательное число, поскольку ИИ играет черными
var boardValue = -evaluateBoard(game.board())
game.undo();
if (boardValue > bestValue) {
bestValue = boardValue;
bestMove = newGameMove
}
}

return bestMove;

};

Единственным ощутимым улучшением является то, что теперь наш алгоритм съест фигуру, если это возможно:


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.


Черные играют с помощью простой функции оценки


Посмотреть, что получилось на данном этапе, вы можете на

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

.

Шаг 3. Дерево поиска и минимакс


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

Прим. перев. В одной из наших статей мы уже имели дело с

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

— учились создавать ИИ, который невозможно обыграть в крестики-нолики.

В этом алгоритме рекурсивное дерево всех возможных ходов исследуется до заданной глубины, а позиция оценивается на «листьях» дерева.

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


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.


Визуализация минимакса в искусственном положении. Лучший ход для белых — b2-c3, так мы можем гарантировать, что доберемся до позиции, где оценка равна -50


var minimax = function (depth, game, isMaximisingPlayer) {
if (depth === 0) {
return -evaluateBoard(game.board());
}
var newGameMoves = game.ugly_moves();
if (isMaximisingPlayer) {
var bestMove = -9999;
for (var i = 0; i < newGameMoves.length; i++) {
game.ugly_move(newGameMoves);
bestMove = Math.max(bestMove, minimax(depth - 1, game, !isMaximisingPlayer));
game.undo();
}
return bestMove;
} else {
var bestMove = 9999;
for (var i = 0; i < newGameMoves.length; i++) {
game.ugly_move(newGameMoves);
bestMove = Math.min(bestMove, minimax(depth - 1, game, !isMaximisingPlayer));
game.undo();
}
return bestMove;
}
};

С минимаксом наш алгоритм начинает понимать основную тактику шахмат:


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.


Минимакс с уровнем глубины 2


Посмотреть, что получилось на данном этапе, вы можете на

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

.

Эффективность минимакса в значительной степени зависит от достижимой глубины поиска. Именно это мы улучшим на следующем шаге.

Шаг 4. Альфа-бета-отсечение



Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

— это метод оптимизации алгоритма «минимакс», который позволяет игнорировать некоторые ветви в дереве поиска. Это позволяет нам намного глубже оценить дерево поиска, используя те же ресурсы.

Альфа-бета-отсечение основано на ситуации, когда мы можем прекратить оценивать часть дерева поиска, если найдем шаг, который приведет к худшей ситуации, чем та, к которой приводил ранее обнаруженный шаг.

Альфа-бета-отсечение не влияет на результат минимакса, оно только ускоряет его.

Этот алгоритм будет более эффективным, если мы сначала проверим те пути, которые ведут к хорошим ходам:


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.


Позиции, которые нам не нужны, если используется альфа-бета-отсечение. Дерево посещается в описанном порядке.


С альфа-бета-отсечением мы получаем значительное улучшение минимакса, как показано в следующем примере:


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.


Количество позиций, которые нужно оценить в случае поиска с глубиной 4 и начальной позицией, изображённой на картинке.


Посмотреть, что получилось на данном этапе, вы можете на

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

.

Шаг 5. Улучшенная функция оценки


Первоначальная функция оценки довольно наивна, поскольку мы просто подсчитываем очки фигур, которые находятся на доске. Чтобы улучшить её, мы начнём учитывать положение фигур. Например, конь в центре доски «дороже», потому что он имеет больше доступных ходов и, следовательно, более активен, чем конь на краю доски.

Мы будем использовать слегка скорректированную версию квадратных таблиц, первоначально описанных в

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

.


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.


Визуализация квадратных таблиц. Мы можем уменьшить или увеличить оценку в зависимости от местоположения фигуры.


Применив это улучшение, мы получим алгоритм, который неплохо играет в шахматы, по крайней мере, с точки зрения простого игрока:


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.


Улучшенная оценка и альфа-бета-отсечение с глубиной поиска 3


Посмотреть, что получилось на данном этапе, вы можете на

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

.

Заключение


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

С помощью методов, которые представлены здесь, мы смогли запрограммировать шахматный алгоритм, который может неплохо играть в шахматы. В финальном алгоритме реализация ИИ занимает всего 200 строк кода — это означает, что базовые принципы довольно просты. Вы можете посмотреть

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

программы на GitHub.

Вот некоторые дополнительные улучшения, которые мы могли бы внести в алгоритм:


Если вы хотите узнать о шахматных алгоритмах больше, зайдите на

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

.


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

.
 
Вверх