Neptun

Neptun

https://github.com/tyzegt
Пикабушник
Дата рождения: 01 января 1980
поставил 1884 плюса и 12842 минуса
отредактировал 4 поста
проголосовал за 24 редактирования
Награды:
С Днем рождения, Пикабу!10 лет на Пикабу
122К рейтинг 233 подписчика 2 подписки 124 поста 62 в горячем

Мой пет-проект: самообучающаяся нейросеть, играющая в змейку на C#

Всем привет! Попробую разбавить волны авторским контентом.

Дисклеймер: я в курсе, что есть специализированные инструменты и библиотеки, которые могут делать всё то же самое, но быстрее и лучше. Смысл проекта в первую очередь в саморазвитии, получении более глубоких знаний, изучении механик и подкреплении всего этого практикой.

Ну так вот. В какой-то момент времени я стал интересоваться нейросетями и решил их поизучать. Почитал кое-какие книги, статьи и запилил свою первую нейросеть на python. Язык очень простой в освоении, но мне в первом приближении совсем не понравился, и я решил переписать всё на C#, чтобы лучше закрепить новые знания. Так появилась первая итерация моей библиотеки, которая умеет самые базовые вещи: стоить нейросети с заданной топологией, выполнять запросы и обучаться методом обратного распространения ошибки.

Второй итерацией я в топорно-экспериментальном режиме подключил возможность вычисления на GPU, а именно на CUDA. Эксперименты показали забавный результат: небольшие матрицы на CPU перемножаются намного быстрее, чем на GPU, а большие - наоборот, несравнимо быстрее перемножаются на GPU.

Третьей итерацией я написал консольную змейку и попытался обучать её методом обратного распространения ошибки. Результат был довольно-таки слабым, т.к. я не придумал способа эффективно собирать датасеты для обучения в автоматическом режиме, а обучать нейросеть вручную мне не хотелось, т.к. это противоречило самой идее того, что я хотел сделать.

В итоге родилась четвёртая итерация проекта, на базе генетического алгоритма: библиотека, которая умеет "мутировать" путём рандомного изменения части весов нейросети на рандомные значения, и консольная змейка, которая создаёт популяцию рандомных нейросетей, которые параллельно управляют каждая своей змейкой. После того, как вся популяция "поиграла", происходит выборка наиболее успешных игроков, которые становятся родителями в новой популяции. Каждый из них добавлется в новую популяцию сам, а так же создаёт потомство, каждый из представителей которого получает случайную мутацию. И в завершении, к ним добавляется новый набор "случайных" экземпляров, чтобы немного разбавить генофонд. Более изощрённых способов размножения, вроде суммирования весов или кроссинговера, я пока не реализовывал, но уже в таком виде проект начал работать - нейросеть начала вполне успешно обучаться, уже через сотню поколений показывая неплохие результаты.

Кому интересно посмотреть или пощупать мой говнокод - милости прошу на гитхаб: https://github.com/tyzegt/NeuralNetworkLib/tree/snake-geneti...

Ниже несколько гифок, иллюстрирующих прогресс обучения:

Мой пет-проект: самообучающаяся нейросеть, играющая в змейку на C# Разработка, Программирование, Нейронные сети, Код, Open Source, Игра змейка, Гифка, Длиннопост
Мой пет-проект: самообучающаяся нейросеть, играющая в змейку на C# Разработка, Программирование, Нейронные сети, Код, Open Source, Игра змейка, Гифка, Длиннопост
Мой пет-проект: самообучающаяся нейросеть, играющая в змейку на C# Разработка, Программирование, Нейронные сети, Код, Open Source, Игра змейка, Гифка, Длиннопост
Мой пет-проект: самообучающаяся нейросеть, играющая в змейку на C# Разработка, Программирование, Нейронные сети, Код, Open Source, Игра змейка, Гифка, Длиннопост
Мой пет-проект: самообучающаяся нейросеть, играющая в змейку на C# Разработка, Программирование, Нейронные сети, Код, Open Source, Игра змейка, Гифка, Длиннопост
Показать полностью 5

Сделал новую плашку для профиля модератора

Забирайте, пользуйтесь!

Было:

Сделал новую плашку для профиля модератора Модератор, Обновление, Юмор, Пикабу

Стало:

Сделал новую плашку для профиля модератора Модератор, Обновление, Юмор, Пикабу

Спасибо

Просто хотел сказать спасибо всем причастным. Я уже не помню, когда в последний раз пикабу поднимало мне настроение. Приятно снова поймать это ощущение.

Исходный код "зрячего" бота для браузерной игры с использованием Emgu CV

Добрый день. Как-то раз я подсел на одну сомнительную браузерную игру (названия не будет, чтобы не создавать лишнюю рекламу этому исчадию). Если вкратце, то она оказалась слишком нудной (и донатной) и я решил её слегка автоматизировать. Не для получения выгоды, а просто потому что захотелось.


Обычного кликера, кликающего по предустановленным координатам было недостаточно, так как цепочка нажатий должна зависеть от наличия и положения интерактивных элементов на экране, а просчитывать все варианты и пытаться это всё закостылить мне не хотелось. В итоге было принято решение сделать бота "зрячим", и искать эти элементы на экране. Для этой задачи была задействована библиотека Emgu CV.


В итоге родился "умный" и "зрячий" кликер, который ищет в окне игры определённые элементы (кнопки, иконки, двери, сундуки) и кликает на них в определённом порядке.


Изначально я не планировал выкладывать его в открытый доступ, но в итоге я перестал играть в эту игру, и поддерживать разработку бота не планирую. Поэтому теперь любой, кто всё ещё играет в это, может допилить бота как захочется, а те, кто ищет точку входа в тему компьютерного зрения, может использовать его для своих целей. Более того, код можно легко переиспользовать для создания бота для любой другой браузерной игры.


Спасибо за внимание!
https://github.com/tyzegt/HwBuddy

Показать полностью

Вернуть открытие поста по клику средней кнопкой мыши

Вернуть открытие поста по клику средней кнопкой мыши

Лига для тех, кому нужна помощь с компьютером

Лига для тех, кому нужна помощь с компьютером Компьютерная помощь, Тыжпрограммист

Всем привет. Очень часто в лигу программистов люди пишут посты, которые к программированию отношения не имеют вообще. Обычно такие посты сводятся к чему-то вроде "Как отключить такую-то штуку в винде?".

Понятно, что многие люди с компьютером "на вы", и не особо-то умеют свою проблему сформулировать для гугла. Так что я решил создать "Лигу тыжпрограммистов", в которой можно задать любой вопрос связанный с компьютерами.
Сам я работаю в IT уже больше 10 лет, из которых немалую часть работал эникейщиком и объяснял бабушкам в офисе "куда нужно нажать, чтобы создать табличку в экселе". Постараюсь помочь по мере сил. Ну и приглашаю вступить тех, кто сам не против поотвечать на такие вопросы.

Лига тыжпрограммистов

Показать полностью

Клон Bomberman на Unity - Часть 3, заключительная

Привет, товарищи!


Совсем забыл, что нужно было выложить заключительную часть роликов!


В следующих трёх видео мы обучаем врагов бомбермена поиску пути при помощи A* алгоритма, а так же заставляем всех умирать от взрывов.

Клон Bomberman на Unity - Часть 3, заключительная Unity, Unity3D, Bomberman, Программирование, Dendy, Туториал, Гифка, Видео, Длиннопост
Показать полностью 3

Клон Bomberman на Unity - Часть 2

И снова здравствуйте!

Продолжаем семимильными шагами двигаться в направлении успешного клона древнего Бомбермена на Юнити!

В следующих трёх роликах мы создаём умную камеру, которая автоматически подстраивается под любой размер игрового поля, а так же анимируем персонажа и создаём подбираемые усилялки.


Учитывая, что практически в каждом моём посте кто-нибудь спрашивает "Как/где в это поиграть?", даже несмотря на то, что геймплей ещё полностью не реализован, я решил вывалить всё это дело в "играбельном" виде. Ссылка будет в комментариях.

Клон Bomberman на Unity - Часть 2 Unity, Unity3D, Bomberman, Dendy, Гифка, Видео, Длиннопост
Показать полностью 3
Отличная работа, все прочитано!