Вы определенно хотели бы, чтобы ваша сеть знала важную информацию об игре, например, какие карты имеет агент ИИ (их значения и типы), запас маны, сколько карт на столе и их значения, количество ходов и так далее. Эти вещи вы должны решить самостоятельно, вопрос, который вы должны задать себе: «Если я добавлю это значение, чтобы указать, как и почему это улучшит мою систему». Но первое, что нужно понять, это то, что большинство сетевых карт имеют постоянный размер ввода, и я полагаю, что это важно в этой игре, поскольку у игроков может быть разное количество карт в руке или на столе. Например, вы хотите, чтобы NN знали, какие у него карты, предположим, что у игрока может быть максимум 5 карт в руке, и каждая карта может иметь 3 значения (мана, атака и здоровье), поэтому вы можете закодировать это как 5 * 3 вектор, где первые 3 значения представляют карту номер один и так далее. Но что, если у игрока в настоящее время есть 3 карты, простой подход - назначить нули последним 6 входам, но это может вызвать проблемы, поскольку некоторые карты могут иметь 0 мана или 0 атаки. Так что вам нужно выяснить, как решить эту проблему. Вы можете искать модели NN, которые могут обрабатывать переменные входные размеры, или выяснить, как кодировать входные данные как вектор постоянного размера.
Во-вторых, выходные данные также являются векторами постоянного размера. В случае игры такого типа это может быть вектор, который кодирует действия, которые может выполнять агент. Допустим, у нас есть 3 действия: положить карту, пропустить ход и уступить. Таким образом, это может быть один горячий кодировщик, например, если у вас есть 1 0 0 выход, это означает, что агент должен положить какую-то карту. Чтобы узнать, какую карту он должен положить, вы можете добавить к выводу еще один элемент, который будет давать число в диапазоне от 1 до 5 (5 - максимальное количество карт в руке).
Но самая важная часть обучения нейронной сети заключается в том, что вам придется придумать функцию потерь, которая подходит для вашей задачи. Может быть, стандартные функции потерь, такие как среднеквадратичные потери или L2, будут хорошими, возможно, вам придется изменить их в соответствии с вашими потребностями. Это та часть, где вам нужно будет провести исследование. Я никогда раньше не работал с NEAT, но, как я правильно понял, он использует некоторый генетический алгоритм для создания и обучения NN, а GA использует некоторую фитнес-функцию для выбора человека. Поэтому в основном вам нужно знать, какую метрику вы будете использовать, чтобы оценить, насколько хорошо работает ваша модель, и на основе этой метрики вы измените параметры модели.
PS. Эту проблему можно решить с помощью нейронной сети, однако нейронные сети не являются волшебством и не являются универсальным решением всех проблем. Если ваша цель - решить эту проблему, я бы также порекомендовал вам изучить теорию игр и их применение в ИИ. Я бы сказал, что для решения этой проблемы потребуются сложные знания из разных областей ИИ.
Однако, если ваша цель - узнать о нейронных сетях, я бы порекомендовал выполнять гораздо более простые задачи. Например, вы можете реализовать NN, который будет работать с набором эталонных данных, например, NN, который будет классифицировать цифры из набора данных MNIST. Причина этого заключается в том, что было написано много статей о том, как выполнить классификацию для этого набора данных, и вы многому научитесь и быстрее научитесь реализовывать простые вещи.