Руководство по обучению бота AI Connect 4Python

Программы на Python
Anonymous
Руководство по обучению бота AI Connect 4

Сообщение Anonymous »

(Если StackOverflow — не место для подобных общих вопросов, укажите мне, где мне их задать 😊)
Привет!

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

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

Типичная игра Connect 4 проводится на доске 7x6 и, следовательно, имеет 42 ячейки. Поэтому я подумал, что входной слой нейронной сети будет состоять из 42 узлов, и для каждого узла значение 0 будет представлять пустую ячейку, значение 1 будет представлять фигуру ИИ, а значение -1 будет представлять фигуру противника.

За этим будет несколько слоев посередине, чтобы обеспечить стратегию, а затем последний слой будет иметь 7 узлов, каждый из которых представляет столбец, в котором ИИ может захотеть играть. Узел с наибольшим значением будет тогда интерпретироваться как выбор ИИ.
Что касается метода обучения, я думал, что на самом деле я буду обучать 2 ИИ (идентичная структура нейронной сети, разные веса и смещения) и постоянно противопоставлять их друг другу. Таким образом, мы надеемся, что они смогут улучшить игру без вмешательства человека. Мой план состоит в том, чтобы проводить эту тренировку на моем компьютере 24 часа в сутки, 7 дней в неделю и ежедневно играть в тестовую игру против каждого ИИ, чтобы увидеть, как они себя чувствуют.
Что касается оценки физической подготовки, я подумал о двух возможных подходах:

Основной подход заключался бы в том, чтобы просто присвоить фитнес 1 ИИ, который выиграл матч, и фитнес -1 проигравшему ИИ.

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

Я намеренно не хочу включать в оценку физической подготовки какую-либо эвристику «насколько я был близок к победе», а также какое-либо представление о качестве стратегии, отображаемой во время матча. Это делается для того, чтобы ИИ естественным образом придумывал (надеюсь) лучшие стратегии, мотивированные только победой и не ограниченные какими-либо показателями, которые я мог бы придумать, или тем, что человек мог бы назвать «умным ходом».

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

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

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

    Более конкретно, я предполагаю, что тот факт, что на 1 ячейку доски приходится 1 входной узел, может привести к тому, что ИИ будет в значительной степени игнорировать верхние ряды доски при принятии решений, поскольку большинство игр не используют многие из них перед завершением. Это может привести к тому, что ИИ будет плохо играть в играх, которые длятся так долго.
  • Должен ли ИИ всегда выполнять ход выходного узла с наибольшим значением? Или ход должен быть чем-то вроде броска взвешенных кубиков, в котором значения узлов действуют как вероятности?

    Изменяется ли ответ на этот вопрос в зависимости от того, находимся ли мы на этапе тренировки или в игровом процессе после завершения тренировки?
  • Какой подход к определению показателя пригодности лучше: базовый или детальный? Есть ли лучший подход, который я не рассматривал?

    Если я выберу предложенный мной детальный подход, как мне определить значение N? (Количество матчей, сыгранных за итерацию)
  • Из видео на YouTube, которые я видел, где люди тренируют ИИ, обучение часто застревает в локальных минимумах. Поможет ли тот факт, что я тренирую ИИ, заставляя их сражаться друг с другом, предотвратить их застревание? (Поскольку им постоянно придется искать способы перехитрить друг друга, верно?)
  • Если они застрянут на локальных минимумах, есть ли какой-нибудь тест/эвристика, которую я могу использовать, чтобы автоматически обнаружить, что они застряли? Есть ли какое-то изменение в методе обучения, которое я могу автоматически применить в таких случаях, чтобы, надеюсь, подтолкнуть их к локальному минимуму? (Может быть, какой-то способ временно сказать им «больше рисковать» во время игры?)
  • Есть ли что-то, что я пропустил и что мне следует знать/учитывать? Изменили бы вы что-нибудь в моей реализации? Вы бы предложили полностью другую реализацию?
Кроме того, у меня есть несколько вопросов об инструментах, которые я могу использовать:
  • Мне особенно нравится программировать на Rust, и я хотел бы использовать свой графический процессор для обучения. Какие библиотеки машинного обучения Rust считаются лучшими? Каковы их сильные и слабые стороны?
  • Следует ли мне писать логику игры (расстановка фигур на доске/проверка, выиграл ли кто-то) на Rust? Или в каком-нибудь «шейдере» графического процессора, чтобы избежать накладных расходов центрального процессора, постоянно взаимодействующего с графическим процессором?
  • Я понимаю, что большинство людей используют Python для подобных проектов. Есть ли причина, по которой мне следует выбрать Python вместо Rust? Каковы сильные и слабые стороны различных библиотек машинного обучения Python?
Заранее спасибо и извините, что так много тявкал 😅

Вернуться в «Python»