Рубрики
Без рубрики

Реализация поиска минимакса дерева

Игра в игру – это один из способов изучения стратегий машинного обучения. Большинство игровых ботов включают в себя некоторые S … с меткой Python, Machine Learning.

Играющие боты (3 серия части)

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

Давайте узнаем о Minimax, полезной технике для создания ИИ для конкурирования в простых играх.

Поиск дерева одиночного игрока

Давайте сыграем немного игры. Объект игры состоит в том, чтобы в конечном итоге получить самое высокое число.

Для одного поворота одна игра игрока, выбор простой. Вы идете прямо, конец с оценкой 10! Это самый высокий результат в нашей маленькой игре.

Давайте сделаем это немного сложнее. В нашей игре есть два хода, что вы выбираете? На первом ходе, если вы примете такое же решение (выберите 10), это оставит у вас плохие варианты на втором ходе (2 или 3).

Чтобы достичь наивысшего балла, вам нужно выбрать 1 на своем первом ходу, чтобы иметь возможность выбрать 20 на втором ходе.

Один из способов моделирования этого – начать с дна и выбрать макс в каждом узле. Если мы сделаем это по всему нашему дереву, мы определяем нашу максимальную оценку (20) и какие решения принять (слева, слева).

Два поиска дерева игроков (Minimax)

Что если мы представим другого игрока в эту игру? Теперь два игрока соревнуются друг с другом. С небольшим настроением в правилах.

  • Игрок 1 выигрывает, если выбрано положительное число.
  • Игрок 2 выигрывает, если выбрано отрицательное число.
  • Галстук происходит, если 0 выбрано.
  • Игроки альтернативные повороты с игроком 1 уходят первым.

Давайте возьмем следующую игру. Игрок 1 (P1) делает первый выбор, затем игрок 2 (P2) имеет поворот, и, наконец, игрок 1 делает последний выбор.

Игрок 1 хочет положительных чисел, поэтому они стремятся максимизировать свой счет.

Игрок 2 хочет отрицательных чисел, поэтому они стремятся минимизировать свой счет.

Вот откуда исходит термин Minimax, от игроков, желающих либо минимизировать, либо максимизировать свой счет.

Как эта игра могла сыграть? Если каждый игрок выберет наилучший доступный вариант в то время, оптимальный результат игры составляет 7, что означает, что Player 1 выигрывает!

Давайте также смоделируем эту игру.

Опять же, игрок 1 пытается максимизировать свой счет, игрок 2 пытается минимизировать свой счет.

Игрок 1 уходит влево, игрок 2 уходит влево, и, наконец, игрок 1 идет направо, посадясь на 7.

Программирование минимакс

Давайте реализуем минимальный поиск в Python!

Сначала нам нужна структура данных для удержания наших значений.

Мы создаем Узел класс, он может содержать одно значение и ссылки на левый и правый Узел Анкет

Тогда мы создадим Выбор класс, который представляет выбор игроков.

Мы решим это, кодируя рекурсивную глубину первого алгоритма поиска. Основные проблемы, которые мы хотим иметь в виду, – это:

  1. Нам нужно отслеживать, какие игроки поворачиваются, я использую IS_MAX, чтобы отслеживать это.
  2. Нам нужно знать, когда остановить наш поиск, в рекурсии, это означает, что нам нужны некоторые базовые случаи.
  3. Мы хотим исследовать все наше дерево. Нам нужна какая -то логика сравнения, чтобы определить, какое субполовое дерево мы решим исследовать.

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

Чтобы исследовать все наше дерево, мы позвоним Минимакс На каждом подболке в нашем узле.

Убедитесь, что обратить вспять is_max Потому что игроки чередуются повороты.

Наконец, мы сравниваем результаты. Если мы максимизируем, мы получаем максимальные результаты, то если мы минимизируем, мы получаем минимальные результаты.

Давайте создадим небольшой симулятор, чтобы играть в нашу игру для нас.

Запуск этого выводит следующее:

  • Движение влево в узел со значением -2
  • Движение влево в узел со значением 3
  • Переход прямо к узлу со значением 7
  • Игра заканчивается со счетом 7

Поздравляю! Мы правильно продемонстрировали, как использовать Minimax для оптимального решения простой игры с двумя игроками.

Расставающиеся мысли

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

Для вызова, посмотрите, сможете ли вы использовать Minimax для создания TIC TAC Toe Playing Bot.

Как вы можете себе представить, с сложными играми (шахматы и GO) поиск имеет свои ограничения с учетом времени и ограничений памяти. Дальнейшие стратегии, такие как Alpha-бета-брюк и моделирование Монте-Карло, могут помочь в этих случаях.

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

Первоначально опубликовано в thesharperdev.com .

Играющие боты (3 серия части)

Оригинал: “https://dev.to/mokenyon/implementing-minimax-tree-search-1bjm”