BalticBear
Во-первых, на данном этапе у меня на вход ИИ подается 65 бинарных сигнала. Анализ всех возможных комбинаций и написание для них цепочек if-then займет немало времени.
Попробуйте наивный байес использовать, с предположением о независимости переменных. Тогда будет 65*2=130 комбинаций.
Вероятности состояний бинарных переменных для байеса - как-то надо автоматически собрать (чем-то типа симуляции, через которую проходят только лучшие варианты поведения - вот эти наборы состояний для лучших вариантов и фиксировать).
Всё равно классификатора оптимальнее, чем байес - нет (имеется в виду байесово правило сравнения p(c1)p(x|c1)><p(c2)p(x|c2), ещё не испохабленное никакими аппроксимациями для вычисления условных вероятностей). А у Вас - бинарные переменные, т.е. как раз под наивный байес (если, конечно, гипотеза о независимости переменных сработает - иначе да, 2^65 возможных комбинаций).
перцептрон - он не подходит для принятия решений без учителя (т.е. в отсутствии образцов).
Подходит, если учить ген.алгоритмом.
Фогель с Челлапиллой так 15 лет назад с нуля научили нейронку играть в шашки на уровне человека-мастера.
Но таки да - это для оффлайна.
сети с обучением обратным распространением ошибки. Так получилось, что этот метод стал этаким стандартом де-факто для нейросетей в играх, хотя он излишне ресурсоемкий
Нифига. Надо просто уметь программировать быструю математику.
Хорошо оптимизированный код - работает раз в 20 быстрее "наивного". Для сеток сложной топологии (типа свёрточной сети, где в "наивном" коде получаются циклы аж 5 уровней вложенности, т.е. управляющая логика начинает доминировать над собственно математическими действиями) - на пару порядков (т.е. в 100 раз) разрыв. Говорю обоснованно - т.к. и сам многократно проходил путь по оптимизации (т.е. знаю, сколько времени исполнялся начальный код, и сколько - конечный), и сравнивал свои проги с чужими.
Т.е. если код нейросетки не использует векторизацию (SSE/AVX) и не аппроксимирует вычисление tanh - то он и будет тормозить.
BalticBear
> Я пока не видел, чтобы кто-то написал, что пробывал создать нейросети с
> обучением подкреплением и потерпел неудачу.
Так сделай - посрами всех криворуких геймдевелоперов.
Что ты нас тут убеждаешь, если ты и так все знаешь :)
BalticBear
> А если ИИ отдельных юнитов обучаются побеждать и выживать в борьбе друг с
> другом, а игрок лишь слегка помогает своим юнитам развиваться в нужном
> направлении?
Это неинтересно вдвойне, так как самое основное замечание от игроков будет (если игра дойдет до релиза) - какого хрена играет компьютер, а не я.
Виктор Царегородцев
> Попробуйте наивный байес использовать, с предположением о независимости
> переменных...
Спасибо, но у меня уже есть работающее решение :)
Виктор Царегородцев
перцептрон - он не подходит для принятия решений без учителя (т.е. в отсутствии образцов).
> Подходит, если учить ген.алгоритмом.
Для ген.алгоритма нужно множество нейросетей. Я имел ввиду не подходит для обучения одной сетки - неоткуда брать требуемое значение на выходном нейроне.
Виктор Царегородцев
сети с обучением обратным распространением ошибки. Так получилось, что этот метод стал этаким стандартом де-факто для нейросетей в играх, хотя он излишне ресурсоемкий
> Нифига. Надо просто уметь программировать быструю математику.
> Хорошо оптимизированный код - работает раз в 20 быстрее "наивного".
Заметьте, я писал это в контексте нейросетей, обучаемых в ходе игры, а не в офф-лайн.
У вас есть опыт создания нейросетей для логики принятия решений в компьютерных играх?
В моей игре на поле боя одновременно может присутствовать 10 агентов, каждый со своей нейросетью. Каждый шаг игрового цикла занимает 1/60 секунды. За этот шаг могут обучиться несколько сетей (могут даже все 10) и это практически никак не влияет на производительность, учитывая что все это происходит на мобильном девайсе с ОС андроид.
outcast
> Так сделай - посрами всех криворуких геймдевелоперов.
> Что ты нас тут убеждаешь, если ты и так все знаешь :)
Да я и не убеждаю, а просто отвечаю на посты :)
Я в шапке темы спрашивал вообще-то о другом - знает ли кто о существовании подобных механик в играх или нет. Но, обсуждение местами почему-то сместилось к тому, возможно такое сделать или нет :)
Не понял, зачем кого-то в чем-то срамить. Причиной того, что в игрострое не раскрыта тема о нейросетях, может быть отсутствие достаточной мотивации, а не криворукость геймдевелоперов.
Причина в том, что это не нужно. С точки зрения геймдизайна, игрового баланса. Нейронные сети, генетические алгоритмы -- все это подходит только для очень узкого круга игровых механик. Вводить уже обученную нейронную сеть - да, а которая обучается "по ходу дела" - нет.
Anton Riot
> Причина в том, что это не нужно. С точки зрения геймдизайна, игрового баланса.
> Нейронные сети, генетические алгоритмы -- все это подходит только для очень
> узкого круга игровых механик. Вводить уже обученную нейронную сеть - да, а
> которая обучается "по ходу дела" - нет.
вроде и +1
но с другой стороны ,если НПС не может одолеть другого НПС-а в Локации ,то ему положено слинять из нее
и не доводить до критического момента хотя в этот момент он еще может ,то есть еще возможно
продолжать наступать на грани фаталити с шансом ухода : для ГГ же гибель дружественного нпс-а может
повлиять на последующие события игры и вообщем с потерей этого нпс-и почти конец затеянной кампании
значит желательно ГГ указать нпс-у в критический момент уйти в оборону и чтобы тот в итоге как-то вышел из боя
возможно нпс даже передохнет и вернется при удачном раскладе
Anton Riot
> Причина в том, что это не нужно. С точки зрения геймдизайна, игрового баланса.
> Нейронные сети, генетические алгоритмы -- все это подходит только для очень
> узкого круга игровых механик. Вводить уже обученную нейронную сеть - да, а
> которая обучается "по ходу дела" - нет.
Да, это более вероятная причина. Никому не нужен лишний геморрой.
Ладно. Доделаю эту игру до конца. Зарелизю. А потом посмотрю как меня будет ругать сообщество игроков за баги в балансе. У меня громкого имени нет, имиджа тоже, так что терять нечего, можно и фейл словить. Буду относиться к проекту, как к научно-исследовательскому эксперименту :)
BalticBear
> Доделаю эту игру до конца. Зарелизю.
:)
Удачи!
Подключить AI к ботам - задумка, в принципе, хорошая. Но здесь лучше подошла бы не нейронная сеть, а экспертная система. Она может работать с более разнообразной информацией. А нейронная сеть это что такое? Это всего лишь громоздкий полином с коэффициентами, подогнанными под тестовые условия.
Типичная задача для нейронной сети: диагностика автомобиля (его состояние описывается показаниями датчиков, качественными признаками, типа шум в нижней части слева, вибрация при скорости выше 100 км/ч) - требуется идентифицировать поломку (состояние) и дать рекомендации (для ремонта). Похоже на логику игры, не так ли?
old_proger
Нейросетка (именно многослойный персептрон, раз уж топикстартер его использует) - для задач, когда имеется мало зависимых переменных, на каждом шаге "боевой работы" имеются значения всех независимых переменных и надо вычислять значения для всех зависимых. Да, какие-то независ.переменные могут в какой-то момент отсутствовать - но такой случай надо предварительно очень аккуратно обдумать (чтобы понять -как правильно обработать такие "дырявые" случаи). Насчёт же работы "с более разнообразной информацией" - нейронка может скушать любые типы данных, надо только головой при их кодировании думать.
ЭС (ну, например, прямой логический вывод) - для задач, где может быть много завис.переменных, где позволительно не вычислять их все (вычислятся только те, до которых "доберётся" лог.вывод), где могут быть неизвестными значения каких-то независимых переменных (и вот тут случай отсутствия значений независ.переменных никак дополнительно (на этапе конструирования модели или на этапе сработки ЭС) обдумывать и/или обрабатывать не требуется).
old_proger
> Подключить AI к ботам - задумка, в принципе, хорошая. Но здесь лучше подошла бы
> не нейронная сеть, а экспертная система. Она может работать с более
> разнообразной информацией. А нейронная сеть это что такое? Это всего лишь
> громоздкий полином с коэффициентами, подогнанными под тестовые условия.
Не совсем так. С одной стороны да, один элемент нейронной сети - нейрон - представляет собой лишь сумму взвешенных входных сигналов и функцию, которая приводит эту сумму к нужному виду. С другой стороны, разработчик нейросети совершенно не ограничен в выборе методов воздействия на весовые коэффициенты входов нейрона, т.е. методов обучения сети, а также он не ограничен в том, как обрабатывать сумму нейрона и каким образом объединять нейроны в сеть. Это дает большой простор для творчества и позволяет разработчикам находить решения для широкого круга задач. Подгон под тестовые условия - это только один из огромного множества подходов к обучению нейросети. Помимо перцептрона, например, еще существуют сети Хопфильда и сети Кохоненна. А сколько еще существует сетей не получивших известности в массах, но тихо и незаметно решающих свои специфические задачи.
Почему я решил использовать нейросеть в логике игры? Потому что с ее помощью возможно реализовать поведение персонажей, построенное по принципу причинно-следственной связи. То есть, все действия персонажа зависят от пережитого им жизненного опыта. Никаких случайностей. Каждый поступок будет иметь свое объяснение. Например, персонаж увидел чайник. Подошел к нему. Дотронулся и обжегся. В следующий раз, он этот чайник будет обходить стороной.
Нейросеть дает еще кучу преимуществ в разработке логики принятия решений. Но, я пока не буду о них писать, а то и так получилось много текста для одного поста :)
Я бы еще обратил внимание на классифицирующие системы (+обучение с подкреплением), если хорошо продумать составляющие "ситуации" на входе, то можно получить простую быстрообучающуюся систему.
Виктор Царегородцев
> ...именно многослойный персептрон, раз уж топикстартер его использует...
Нет, у меня однослойная сеть. Для логики персонажей моей игры этого вполне достаточно. Для изменения весов у меня используется обучение поддержкой (reinforcement learning). Для компьютерной игры производительность стоит на первом месте, поэтому нужно брать наиболее простое решение из возможных.
Anton Riot
> Я бы еще обратил внимание на классифицирующие системы (+обучение с
> подкреплением), если хорошо продумать составляющие "ситуации" на входе, то
> можно получить простую быстрообучающуюся систему.
Вот-вот-вот. У меня как раз нечто похожее. Нейросеть, в данном случае, можно считать классифицирующей системой, потому что она срабатывает по принципу "победитель забирает всё".
Тема в архиве.