Как стать автором
Обновить
27
0
Виталий Пухов @vpuhoff

Программист в свободное от работы время

Отправить сообщение
<в идеальной стране> Ни кто не просит продавать оружие детям, уголовникам и умалишенным, тех кто продаст жестоко покарать. Сомнительно, что родители пойдут отстреливать учителей, а если же такое и произойдет 1 или 2 раза, то видимо на то есть причины и совершивший это все равно понесет соответствующее наказание. Так или иначе даже в этом случае как минимум 1 дураком станет меньше. </в идеальной стране>
А кто вам сказал что левый сенсор находится именно слева?) Суть как раз в том, что ничего такого мы сети не сообщили, она сама разобралась где у нее лево, где право и т.д. Потенциально, если у неё будет 472 сенсора со всех сторон и под разными углами и 243 двигателя, как попало натыканных по всей поверхности для нее не составит труда разобраться с тем какое влияние оказывает на нее каждый из них.
Возможно, хотя к примеру в Compute она используется для параллельной обработки.
Как оказалось Encog весь утыкан ParallelLinq, так что видимо все таки может использоваться.
Согласен, полноценный .net в unity не помешал бы. Как оказалось интегрировать в него encog задача такая уж простая, требуется полноценный 4 framework.
Отдельно уточню, в коде не говорится напрямую какой ногой нужно шевелить для достижения результата, в коде говорится что «нужно приблизиться» и «нужно отдалиться», как именно это будет делаться (пошевелить ухом, двинуть ногой или чихнуть) мы не знаем и объекту не говорим, решение о том какой из доступных ей объектов задействовать для достижения цели принимает сеть.
Вы все правильно сказали, нейронная сеть в контексте «догнать»\«убежать» может быть легко заменена на пару строк кода. Но у нейронной сети даже в простейшей задаче есть преимущество, решение не зависит от числа «ног» у нашего объекта, к примеру если объект будет представлять из себя нечто сложнее чем шарик с 4 ногами, к примеру такое:
image
Написать формулы для управления всем этим добром будет на порядок сложнее.
Очевидно конечно, что правильное описанный алгоритм будет работать лучше чем абы как сформированная нейронная сеть. Если бы я выбирал самолет с автопилотом то точно не выбрал бы тот, которым управляет нейронная сеть, во всяком случае не такая как в примерах.
Ошибки в коде конечно есть, исправляю по мере их появления, этот проект является частью следующего и призван проверить возможности нейронной сети для управления объектами, конфигурация которых будет намного сложней.
Интересная модель получилась, залипал на кувыркающийся кубик минут 10) Можно было бы повторить с нейронной сетью, посмотреть что получится.
Согласен, с unity уже немного познакомился, там не намного сложней, но не проще рисования на bitmap:) У меня на отрисовку и запись в видео идет около 10 строк, из которых половина drawcircle. К тому же есть и другая проблема, вычисление 20 объектов с несколькими тысячами нейронов в сети (в каждом объекте) не такая тривиальная задача, поэтому «отрисовка» немного не в реальном времени, что намного красивее смотрится в видео, после генерации.
Поэтому я и уточнил «принимать решения, которые можно считать относительно разумными». Я не говорил что перед объектами не будет поставлена задача, если ее не ставить, им нечего будет делать и соответственно не получится за ними наблюдать.
Согласен, цель этого исследования проверить в более «простых» условиях имеет ли смысл использовать нейронные сети для управления объектами. Дальше планировал как раз использовать полноценную среду и более сложные объекты.
Но как вы считаете это расстояние?

<spoiler title="«Обычная» функция расчета расстояния, ничего особенного">
 double GetDist(double x1, double x2, double y1, double y2)
            {
                return Math.Sqrt(Math.Pow(x1 - x2, 2) + Math.Pow(y1 - y2, 2));
            }


Каким образом?

Объект все данные сенсоров, «положение» «ложноножек» в каждый ход, после производит повторное обучение сети.
Насчет выживаемости сказать трудно, с одной стороны поведение сети выглядит разумным, с другой стороны очевидно разумом там и не пахло, а значит так или иначе это просто оптимизация.
Я не ставил цели получить объект играющий в покер, было интересно проверить будут ли объекты «биться головой об стену» вести себя нерационально или же покажут признаки разумного поведения.
Расстояние выбрано опытным путем, оно достаточно малое, чтобы случайно сблизиться было бы крайне сложно, в последней версии это расстояние равно 0.008, при «размере» выделенного пространства 1х1.
Насколько я помню, у вас это решение напрямую принимается в коде if-ом, безо всякой сети.

Верно, таким образом мы задаем сети цель, то есть то, что мы хотим получить. Задается это не в явно, а посредством передачи «шаблона» {0,0,0,0} — мы хотим чтобы на сенсорах были нули или шаблона {1,1,1,1} — на сенсорах единицы. Нельзя получить у сети решение не предоставив ей задачи.
Тогда как же нейронная сеть понимает, что она успешно «убежала»?

Она этого не знает, если она не убежала ее функционирование прекращается. Если же она смогла уйти это отразится на ее памяти, как это повлияет на саму сеть неизвестно. Как раз это и было интересно определить в первую очередь.
В целом соглашусь, ибо когда писал, опирался только на логику, в основе нет какой либо конкретной литературы, только то, что уже имелось в голове. Судя по описанию алгоритма Q-learning сходства у них есть, но это не тот самый алгоритм однозначно.
Приближение к другому объекту на очень маленькое расстояние,. «успешное», если при этом остался в живых.
«Счетчик силы» не участвует в тренировке, но косвенно влияет на решение, он нужен для того, чтобы оценить нужно ли приближаться к объекту или лучше от него убегать. Выживаемость она либо есть, либо ее нет (не выжил), в тренировке не участвует.
За успешное приближение к другому объекту увеличивается «счетчик силы», более сильные объекты могут пообедать более слабыми. Слабые погибают, сильные выживают. Другой оценки эффективности нет.
Добавил пример с наследованием генов и мутацией.
Так и есть) У объектов ничего кроме глаз\ушей\носа и «ложноножек» нет:)
Для управления нейронной сетью я использую framework Encog, насколько я помню он напрямую зависит от используемой функции активации, в данном фреймворке их 19, использовать можно любой, результаты будут различны. Для меня пока не столько важна сама сеть, сколько механизмы ее использования, поэтому я не углубляюсь пока в ее архитектуру.
Даже не задумывался над этим, сейчас глянул, если верить описанию выходит тут тоже Q-learning. Когда писал алгоритм думал только над логикой.

Информация

В рейтинге
Не участвует
Откуда
Хабаровск, Хабаровский край, Россия
Дата рождения
Зарегистрирован
Активность