Я работаю над пошаговым ИИ, используя технику нейронной сети, известную как NEAT . Я пытаюсь обучить сеть, которая может перемещаться по двумерному пространству (координаты X и Y), учитывая множество значений, которые хранятся в том, что фактически является двумерным массивом.
Я вижу две стратегии использования нейронной сети:
Для каждой «ячейки» в сетке укажите оценки от различных эвристик в качестве входных данных для нейронов и создайте NN, который по сути является очень сложной системой «подсчета». Переместите неигрового персонажа (NPC) в место с наибольшим количеством очков.
Создайте сжатое значение для каждой эвристической меры (каким-то образом сжатое до минимально возможного количества бит) и предоставьте входной нейрон для каждой из этих мер.
Мне очень интересен второй вариант, потому что он представляет наименьшее количество необходимых вычислений (время выполнения игры довольно продолжительное), однако я не совсем понимаю, какой подход я мог бы использовать для создания версии «малого представления» двумерные значения heiuristic. Я знаю, что есть такие методы, как преобразования Фурье, но я не знаю, подойдут ли они моей проблеме. В основном я ищу способ преобразования массива двойных чисел 50x50 в одно или, может быть, два двойных значения. Эти два двойных значения могут быть сжаты с потерями, мне не нужно иметь возможность вернуть исходные значения, мне просто нужен разумный механизм для изменения входных данных в небольшую площадь.
Альтернатива этим двум возможностям заключается в том, чтобы каким-то образом кодировать «регион» на основе некоторого расстояния от NPC (таким образом, вы получаете фактические значения для «близкой» ячейки и приближение для «далекой» ячейки). Я не знаю точно, как бы я подключил это, но это по крайней мере избавляет от необходимости оценивать каждую клетку каждый ход игры (учитывая, что я смотрю около 5 миллионов раундов со скоростью примерно 1 секунда за раунд, любое упрощение Я могу придумать, очень помог бы).
Я прошу прощения, если это не имеет особого смысла, это довольно трудная проблема, которая поставила меня в тупик на некоторое время, и я не могу придумать простой способ описать ее.
Thankyou
Айдан
ИЗМЕНЕНО ДЛЯ ДОБАВЛЕНИЯ (и изменения названия):
Благодаря Крису мы усовершенствовали то, что я ищу. То, что я ищу, - это способ приблизить линию (я могу преобразовать 2D карту в линию) по как можно меньшему количеству параметров. Я использовал кубические сплайны для интерполяции и раньше, однако мне нужно что-то гораздо более выполнимое для набора данных, который довольно агрессивно варьируется между 0,0 и 1,0. То, что я действительно ищу, я полагаю, это "хэш" карты.
Я знаю, что есть такие методы, как кубические сплайны, из которых я могу выработать некоторые "ключевые точки", и эти значения являются разумной аналогией для того, что я ищу. Мне нужен способ взять 2500 значений и придумать небольшое представление этих значений, которые я могу использовать для нейронной сети. Я думаю, что NN можно научить выводить истинный смысл этих представлений или, по крайней мере, определить некоторую корреляцию между представлением и реальным миром, так что это не обязательно должна быть обратимой функцией, но я не думаю, что многие односторонние функции (такие как MD5, SHA) на самом деле тоже будут очень полезны ...