BalticBear
> В моей игре нейросеть решает задачу принятия решения. Каждый нейрон - это
> действие, которое способен выполнять агент (например, атака ближнего боя, атака
> дальнего боя, самолечение, прыжок в сторону и т.д.). Сетка работает по принципу
> "победитель забирает всё", то есть срабатывает нейрон с наибольшей суммой.
Но чтобы принять решение, надо понимать пути приведения решения в жизнь. Т.е. без связи нейросети с пасфайндером не обойтись. А для этого придется карту предcтавить нейросетью или подобной ей структурой (как сеть независимых вычислительных элементов).
Иначе юнит не будет способен осознать ситуацию, что он в окружении, или где пролегают пути к отступлению. Как не сможет он внятно кооперировать с напарниками по группе.
snv
> Но чтобы принять решение, надо понимать пути приведения решения в жизнь.
Существует ряд сигналов, подаваемых на вход нейрона, которые кратко описывают ситуацию. Например, находится ли агент под атакой ближнего или дальнего боя, сколько врагов взяли его в цель, сколько врагов окружили ячейку агента, в каком состоянии находится агент (его здоровье, энергия, мана и т.д.). Если агент выбирает цель, то он получает информацию по состоянию каждого врага на поле боя.
Блок вариантов для отступления представляет собой 6 нейронов - каждый для своего направления. И каждый нейрон обрабатывает входные данные независимо от другого. Входные данные представляют собой оценку каждого врага, нацеленного на агента: сравнивается здоровье, определяется близко он или далеко, а также в каком направлении он расположен.
Таким образом, на вход нейросети подается уже "разжеванная", сжатая картина окружающего мира в виде определенных бинарных сигналов, по которым агент и учится принимать решения.
BalticBear
Это все понятно, так же начинал. А как ты делал обучающую серию?
На автомате (на реальных раскладах и последствиях) оказалось слишком муторно и смутно представлялось в реализации.
Рисовать таблицы вручную— Ну его нахрен.
Mira
Поначалу посылал рэндом на вход сети и смотрел как она себя ведет. Потом сталкивал двух агентов лбами и наблюдал как они меняют поведение, либо сам сражался с одним из агентов. В общем, да, получается работал с реальными раскладами и последствиями.
У меня использовались однослойные сети, а они быстро обучаются. Поэтому тенденции в изменении поведения обнаруживались скоро. И по ним уже делались поправки, если они были чересчур неадекватными.
Про текущую версию нейросети, используемую в данной игре, тоже нельзя сказать, что она идеальна. Агенты не обучаются всегда оптимальным образом. Случаются синдромы "труса" (когда агент боится близко приближаться к врагам, после полученных в прошлом тумаков) или "милосердия" (когда микроб отказывается добивать тяжелораненого и переключается на более здоровую цель. Не знаю даже, откуда они это берут. Такое встречается только у микробов). То есть, как у людей - всё очень сложно )
а таки что с вашим сайтом?
BalticBear
> Случаются синдромы "труса"
вы таки не можете проверить состояние автомата данного микроба?
П.с. интересно, состояние автомата "милосердного" микроба
philosoph
А что с сайтом не так, не открывается? Проверил только-что, работает.
> вы таки не можете проверить состояние автомата данного микроба?
> П.с. интересно, состояние автомата "милосердного" микроба
Я могу посмотреть состояние весовых коэффициентов. Например, вот весовые коэффициенты "милосердного" микроба на нейроне атаки ближнего боя:
--Melee
{A_Health1=0, A_Health2=5, A_Health3=3, A_Health4=5, A_Energy1=5, A_Energy2=4, A_Energy3=5,
A_Energy4=5, A_Mana1=5, A_Mana2=5, A_Mana3=4, A_Mana4=5, A_Act_Idle=-3, A_Act_Jump=5,
A_Act_Melee=-1, A_Act_Moving=5, A_Act_Ranged=5, A_Act_Shield=5, A_Act_Heal=5,
A_Targeted1=3, A_Targeted2=3, A_Targeted3=4, A_UnderRAttack=5, A_UnderMAttack=-5,
A_EnemiesAround1=5, A_EnemiesAround2=5, A_EnemiesAround3=3, O_Health1=-5, O_Health2=5, O_Health3=5, O_Health4=4,
O_Energy1=5, O_Energy2=5, O_Energy3=5, O_Energy4=5, O_Mana1=4, O_Mana2=4, O_Mana3=5, O_Mana4=5,
O_Act_Idle=2, O_Act_Jump=-1, O_Act_Melee=2, O_Act_Moving=5, O_Act_Ranged=5, O_Act_Heal=5,
O_Targeted1=5, O_Targeted2=4, O_Targeted3=-5, O_UnderRAttack=5, O_UnderMAttack=-1,
O_EnemiesAround1=5, O_EnemiesAround2=5, O_EnemiesAround3=4, R_Health_LT_Other=5, R_Health_GT_Other=-1, R_IsOtherCloseToMe=5}O_Health1=-5, O_Health2=5, O_Health3=5, O_Health4=4 - это веса на сигналах, указывающих уровень здоровья цели. Видно, что агент предпочитает цели со здоровьем 25-100% от максимума, а к целям со здоровьем менее 25% относится отрицательно. Более того, судя по этим весам: R_Health_LT_Other=5, R_Health_GT_Other=-1, агенту вообще нравится атаковать только цели, у которых здоровье больше, чем у него.
Но, по значениям весов нельзя определить, как они были установлены. Можно только догадываться, какой такой жизненный опыт привел агента к этому поведению.
Не пробовал им замутить эволюцию?
Интересно бы было поиграться
Mira
У меня есть одна из таких идей для будущих игр, где успешные агенты имели бы возможность "рожать" детей, нейронная сеть которых состояла бы из частей от "папы" и "мамы". Но, пока рано еще об этом серьезно думать. Надо пока разобраться в самих самообучающихся нейросетях и посмотреть как игроки отнесутся к играм, где они используются.
BalticBear
> Проверил только-что, работает.
работает, но почему то не в моём FF. ( Но да обходным путём зашел туды.
BalticBear
> Но, по значениям весов нельзя определить
логи, логи были бы полезны. ) А иначе как понимать, что НС работает с багами?
П.с. это таки не ИИ, а хороший, развернутый конечный автомат. Хотя, его и пытаются назвать ИИ, коим он не является. А впрочем, как первый шаг к оному, такая НС имеет вполне шанс жить)
philosoph
> работает, но почему то не в моём FF
Странно, у меня в Firefox 38-ой версии открывает... Обновил до 40-ой. Тоже открывает. Видимо настройки какие-то мешают.
philosoph
> логи, логи были бы полезны. ) А иначе как понимать, что НС работает с багами?
Согласен, тут логи бы не помешали. Первое время делал их, пока нейронов и входных сигналов было немного и агентов было всего два. Потом перестал, слишком много текста стало приходить.
philosoph
> П.с. это таки не ИИ, а хороший, развернутый конечный автомат. Хотя, его и
> пытаются назвать ИИ, коим он не является. А впрочем, как первый шаг к оному,
> такая НС имеет вполне шанс жить)
Да, можно было бы это назвать конечным автоматом (рассматривать каждое действие агента, как одно из состояний автомата, а взвешенную сумму на входе нейрона, как функцию перехода в определенное нейроном состояние), если бы не процесс обучения после каждого действия, меняющий функцию перехода в это действие(состояние). Именно самообучаемость этого автомата и делает его неким подобием ИИ, хотя и весьма примитивным.
Биологический организм это тоже конечный автомат только более совершенный.
Это все будет интереснее когда аппаратную поддержку сетям. Типа NPU )
Пока меня их скорость напрягает, в игре кроме как считать сети бывает ещё и графон и прочее. Для игр типа agar можно
Mira
> Биологический организм
ошибаетесь.
BalticBear
> если бы не процесс обучения
Ну дык, поэтому это развернутый конечный автомат. Хотя с учётом "обучения" вашего автомата, фиксированный автомат работал бы быстрее. Кстати, с помощью вашего автомата, можно составлять идеальные модели поведения для разных ситуаций. И в итоге написать великолепный конечный автомат, с огромным числом реакций на самые различные ситуации. В общем то использовать ваш автомат можно самым разнообразным способом)
BalticBear
> его неким подобием ИИ
Безусловно. Подобие, но не ИИ) как и говорю, как шаг к настоящему очень хороший, шаг.
BalticBear
> Видимо настройки какие-то мешают
есть такое.
BalticBear
> слишком много текста стало приходить.
а нужна...оптимизация логов. )
philosoph
Таким образом, можно любую логику принятия решений назвать конечным автоматом )
Как происходит принятие решения в конкретной ситуации? Есть некий набор вариантов решений (т.е. состояний). В ходе анализа (т.е. вычисления функций переходов к состояниям) текущей ситуации (т.е. входных данных для функций) выбирается одно из решений (т.е. происходит переход в состояние с наилучшим результатом функции). Следовательно, логика принятия решений является по сути конечным автоматом )
BalticBear
> любую логику принятия
ошибаетесь.
BalticBear
> некий набор вариантов решений
ошибаетесь. Вот в этом конкретном месте. И именно эту ошибку люди делающие ботов любят более всего)
BalticBear
> в конкретной ситуации?
да и тут тоже. Дело в том, что конкретная ситуация имеет огромное число абстракций и точек зрения даже со стороны одного объекта. От самых локализованных до самых глобальных. )
philosoph
Даже у людей набор вариантов решений не бесконечен. Он ограничен их возможностями. Человек не может принять решение, которое физически не может сформироваться в его сознании.
philosoph
> Дело в том, что конкретная ситуация имеет огромное число абстракций и точек
> зрения даже со стороны одного объекта. От самых локализованных до самых
> глобальных. )
Абстракции и точки зрения - это лишь обработанные когда-то и сохраненные в памяти входные данные. Весовые коэффициенты у моих агентов можно назвать аналогом абстракций. Они меняются в зависимости от пережитого опыта агента. В итоге, у каждого агента появляется своя точка зрения на то, как поступать в конкретной ситуации. Конечно, их восприятие и возможности не идут ни в какое сравнение с тем, на что способен человек. У них всего 11 нейронов, а не 1011 )
Тема в архиве.