Этот вопрос касается подхода к компьютерным оппонентам, который я создал и который в настоящее время используется или планируется использовать в нескольких компьютерных играх.
Фон
В прошлом году, когда я пытался улучшить компьютерного противника для игры под названием «Флаги Сапер» (краткое описание: пошаговая многопользовательская версия Сапер, где вам нужно брать больше мин, чем противнику) , я сильно изменил способ работы моих алгоритмов. , Вместо того чтобы использовать такой подход, как if-else-if-else, я использую набор «счетчиков» с указанными весами, чтобы определить, какой ход лучше.
Вы можете подумать, что для такой игры, как Minesweeper Flags, дело только в том, чтобы делать ходы, которые дают вам наибольшую вероятность взятия мин, но это не так просто. Какой ход компьютер сделает, обычно зависит от нескольких особенностей этого конкретного хода в текущем игровом состоянии. Примеры функций:
- Какова вероятность этого хода, забив мин?
- Какова вероятность раскрытия чего-либо моему оппоненту здесь?
Описание системы
Система в основном работает так:
- «Предварительные счетчики»: некоторый предварительный анализ проводится для текущего состояния игры (с точки зрения флагов минного тральщика это обычно: вычисление всех вероятностей)
- «Оценщики»: ряд обычных оценщиков просят определить оценку для каждого возможного хода, каждый оценщик применяет оценки в соответствии со своими собственными критериями. Оценщики могут проверить результаты проведенного предварительного анализа.
- Баллы, рассчитанные на предыдущем этапе, суммируются вместе и устанавливаются как баллы за ход.
- Ходы сортируются в соответствии с их счетом и ранжируются таким образом, чтобы все движения с одинаковым счетом получали одинаковый ранг.
- «Оценщики»: результаты вышеупомянутого могут быть отправлены «Оценщикам», у которых есть возможность изменять оценки любых полей любым способом, который они хотят, согласно собственным правилам оценщика.
При объединении группы предварительных оценщиков, оценщиков (с их весами) и последующих оценщиков, это становится тем, что я называю конфигурацией счета .
Пример результата
Это пример оценки, примененной к Флаги Сапер. Это карта, которая была забита:
И это вывод фактической конфигурации счета. Он показывает ранг возможных ходов, где 1 - лучший ранг и выделен белым цветом:
Благодаря написанию очень гибкого кода этот подход к ИИ может быть вставлен и в другие игры.
Преимущества и недостатки
Ниже приведены некоторые преимущества и недостатки этой системы, которые я могу себе представить.
преимущества
- Очень легко создать множество различных конфигураций для ИИ.
- Можно использовать с генетическими алгоритмами: каждый бомбардир имеет связанный вес, вес может стать геном.
- Используя некоторые инструменты, можно проверить, почему был сделан конкретный ход и какие бомбардиры были в основном ответственны за этот ход.
- Используя инструменты, можно создать карту общего балла / ранга возможных ходов (как на скриншоте выше)
- Применяя баллы к тому, как играет человек, можно создать «#AI_Mirror», который пытается делать ходы, которые, по его мнению, будет делать человек.
Недостатки
- Может быть чрезвычайно трудно правильно настроить конфигурацию партитуры, чтобы ИИ играл как можно лучше.
Вопросов
Широко ли известна система, которую я построил здесь, в мире ИИ? Как бы это называлось в терминах реального ИИ?
Имеет ли этот подход смысл или есть другой подход, который вы бы порекомендовали?
Какие есть способы, которые могли бы упростить процесс настройки партитуры?
Что касается последнего вопроса, я знаю о возможности использования генетических алгоритмов, я также немного осведомлен о SARSA (и я думаю, что мои оценщики напоминают описание функций этого сайта с весами, но из моего понимания, что это не совсем то, что я создал Вот). Я думаю, что проблема с SARSA заключается в том, что вы не знаете награду до тех пор, пока игра не закончится, лучшим ходом часто является ход, который вообще не дает награду (мину). Ваши текущие шансы на выигрыш зависят как от текущего счета (сколько мин вы и ваш противник взяли), так и от того, как выглядит текущая карта.
Этот вопрос был первоначально размещен на ныне не существующем сайте Искусственного интеллекта .
Код (Java), используемый для этого подхода, теперь опубликован в Code Review .
источник
Да, техника начисления очков, основанная на определенных аспектах позиции, является стандартной при написании ИИ для игр. Например, почти все шахматные программы работают, выигрывая позиции в наибольшей степени исходя из имеющихся фигур, с меньшими бонусами в зависимости от их позиций (например, пешки защищают друг друга). Затем они пытаются рассчитать наилучший доступный ход, используя алгоритм поиска соперника, такой как альфа-бета.
Поиск состязаний может быть затруднен из-за большого фактора ветвления - в любой позиции, законные шаги должны отметить или показать любой неизвестный квадрат. С другой стороны, возможно, что вы можете значительно сократить коэффициент ветвления с помощью эвристики. Например, пометка или раскрытие квадрата, о котором вы вообще ничего не знаете, очень редко будет лучшим ходом. И наоборот, если вы знаете местонахождение некоторых немаркированных мин, пометка одного из них, вероятно, будет лучшим ходом в большинстве случаев. Поддержание таблицы транспонирования также, вероятно, поможет.
источник