Ви, безумовно, хочете, щоб ваша мережа знала важливу інформацію про гру, наприклад, які картки мають AI-агент (їх значення та типи), пул мани, скільки карт на столі та їх значення, кількість ходу тощо. Ці речі ви повинні зрозуміти самостійно, питання, яке ви повинні задати собі: "Якщо я додаю це значення, щоб ввести, як і чому це покращить мою систему". Але перше, що потрібно зрозуміти, - це те, що більшість NN розроблені таким чином, щоб вони мали постійний розмір вводу, і я вважаю, що це важливо в цій грі, оскільки гравці можуть мати різну кількість карт в руці або на столі. Наприклад, ви хочете повідомити NN про те, які карти у нього є, припустимо, у гравця може бути максимум 5 карт у руці, і кожна карта може мати 3 значення (мана, атака та здоров'я), тому ви можете кодувати це як 5 * 3 вектора, де перші 3 значення представляють собою номер номер однієї картки тощо. Але що робити, якщо у гравця в даний час є 3 карти, простим підходом буде призначення нулів останнім 6 входам, але це може спричинити проблеми, оскільки деякі карти можуть мати 0 витрат мани або 0 атак. Тож вам потрібно розібратися, як вирішити цю проблему. Ви можете шукати NN-моделі, які можуть обробляти змінний розмір вводу або зрозуміти, як кодувати вхід як вектор постійного розміру.
По-друге, результати - це також вектори постійного розміру. У випадку подібного типу гри це може бути вектор, який кодує дії, які може здійснити агент. Тож скажімо, у нас є 3 дії: покласти карту, пропустити чергу і поступитися. Таким чином, це може бути один гарячий кодер, наприклад, якщо у вас є вихід 0 0, це означає, що агент повинен поставити якусь карту. Щоб знати, яку картку слід поставити, ви можете додати ще один елемент до виводу, який дасть число в діапазоні від 1 до 5 (5 - максимальна кількість карт у руці).
Але найважливішою частиною тренування нейронної мережі є те, що вам доведеться придумати функцію втрат, яка відповідає вашим завданням. Можливо, стандартні функції втрат, такі як середня втрата або L2, будуть хорошими, можливо, вам знадобиться змінити їх, щоб відповідати вашим потребам. Це та частина, де вам потрібно буде зробити дослідження. Я ніколи раніше не працював з NEAT, але, як я правильно зрозумів, він використовує певний генетичний алгоритм для створення та тренування NN, а GA використовує певну функцію фітнесу для вибору людини. Тому в основному вам потрібно буде знати, який показник ви будете використовувати, щоб оцінити, наскільки добре ви працюєте, і виходячи з цього показника, ви зміните параметри моделі.
PS. Можна вирішити цю проблему з нейронною мережею, однак нейронні мережі - це не магія і не універсальне рішення всіх проблем. Якщо ваша мета - вирішити цю певну проблему, я також рекомендую вам зануритися в теорію ігор та її застосування в ШІ. Я б сказав, що для вирішення цієї проблеми потрібні комплексні знання з різних галузей ШІ.
Однак якщо ваша мета - дізнатися про нейронні мережі, я рекомендував би взяти набагато простіші завдання. Наприклад, ви можете реалізувати NN, який буде працювати на наборі даних орієнтирів, наприклад, NN, який класифікуватиме цифри від набору даних MNIST. Причиною цього є те, що було написано багато статей про те, як зробити класифікацію на цьому наборі даних, і ти багато чого навчишся, і швидше навчишся впроваджувати прості речі.