Choose Language
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
Abak Logo
ABK-GOFAI: Добрый старый искусственный интеллект

ABK-GOFAI: Добрый старый искусственный интеллект для игры в Abak Evolution Backgammon.

Без помощи нейронной сети разработка искусственного интеллекта (ИИ) для Abak оказалась сложной задачей и со временем достигла видимого предела. Тем не менее, это был увлекательный процесс, и этот ИИ до сих пор используется на уровнях «лёгкий», «нормальный» и «продвинутый». Это статья о том, как он работает и как был создан.

Фаза 1, GOFAI PHP

Первая версия ИИ Abak была написана на PHP и была обречена вызывать сбои системы с ошибками «нехватка памяти», но она проложила путь для версии на C++. Это была площадка для прототипирования, где я пытался понять, как вообще создать ИИ. Когда я впервые запустил его, подключив к веб-серверу (то есть я фактически играл против него), ему потребовалось 15 очень долгих секунд, чтобы выбрать ход, и когда я увидел, как сервер делает ходы сам по себе, я пришёл в полный восторг и, возможно, даже станцевал. Не уверен.

Фаза 2, GOFAI C

Итак, версия ИИ на C/C++, первая вышедшая в продуктивную среду, мой любимый движок GOFAI, родилась на пепле PHP. Она выполняет 29 алгоритмов анализа над тысячами позиций за наносекунды и работает так:

  • Дана позиция на доске и набор кубиков.
  • Вычислить состояние
  • Получить все возможные ходы.
  • Проанализировать каждый ход и присвоить ему оценку.
  • Выбрать «лучшую» оценку.

Вот диаграмма процесса.

Diagrama Abak-GOFAI Artificial Intelligence

Он состоит из четырёх основных функций:

  • Получить действия (Вычислить допустимые ходы):

    Данная позиция доски и бросок кубиков — вычисляет каждый допустимый ход.

    Допустимых ходов может быть от 0 до десятков тысяч.

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

  • Получить состояние (Вычислить состояние доски):

    Данная позиция доски — вычисляет семантическое состояние; названия говорят сами за себя:

    • Начало
    • Середина игры
    • Бег без надежды
    • Бег с надеждой
    • Эндшпиль
    • Вход домой
  • Анализ хода (Вычислить оценки позиции на доске):

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

    ИИ начинал с 8 алгоритмов и закончил с 29, вот некоторые из них:

    • Высота столбцов
    • Риск быть взятым
    • Риск быть пойманным
    • Сила дома
    • Точки выхода
    • Шашки на баре
    • Безопасные шашки

    Многие из этих алгоритмов поначалу были очень примитивными или просто не существовали.

    Со временем я работал над ними, добавляя функции и настраивая коэффициенты.

  • Выбрать действие (Выбрать «лучший» ход):

    Этот алгоритм относительно тривиален, если вам нужна просто наивысшая оценка (как на продвинутом уровне).

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

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

Фаза 3, Настройка GOFAI C

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

Процесс был увлекательным, но мучительно медленным. Я много играл против компьютера, и всякий раз, когда видел слабый ход, обращался к этим инструментам, чтобы разобраться, что пошло не так. Иногда это вело меня к исправлению алгоритма, настройке коэффициента или созданию новой модели анализа. А иногда, и это было прекрасно, это заставляло меня пересмотреть свои стратегии в Abak Evolution.

Abak-GOFAI Debug Tool Screenshot 1 Abak-GOFAI Debug Tool Screenshot 2

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

Фаза 4, Отчаяние

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

И у этого подхода есть множество недостатков:

  • Он вычисляет состояние доски на основе текущей позиции, и это состояние используется для изменения коэффициентов алгоритмов анализа для каждого допустимого действия. Однако это действие могло изменить состояние, но движок не учитывает этого.
  • Ручная настройка коэффициентов требовала огромного количества времени. Весёлое время, но тонны его тем не менее.
  • Состояние крайне сложно вычислить, учитывая количество возможных сценариев. Этот алгоритм всегда был несовершенным.
  • Эквити партии невозможно вычислить точно, потому что этот движок использует произвольную систему оценок для каждого алгоритма анализа, и итоговая оценка не отражает вероятность победы — она лишь работает как сопоставимая оценка между различными позициями на доске. Можно сказать, что она имеет относительное значение, а не абсолютное.

Фаза 5, Пробуждение

И вот, однажды, в 2018 году, Google победил чемпиона по Го с помощью нейронной сети AlphaGo, и было столько шума, и появились новые потрясающие библиотеки машинного обучения с открытым исходным кодом, использующие домашние GPU для ускорения процесса обучения.

Конечно, я уже немного знал о нейронных сетях, но никогда не строил их и, честно говоря, считал это задачей выше моих возможностей.

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

Но эта история заканчивается здесь.

Если вы дочитали до этого места, я поражён.

Этот текст был написан для целей SEO честной командой Abak Evolution,
Он же Сами Гариб.

Abak Evolution Backgammon — это потрясающий вариант нард с классами шашек, который буквально добавляет новое измерение в классическую настольную игру.