Создаём мозг для "змейки". Часть 2.

แชร์
ฝัง
  • เผยแพร่เมื่อ 12 ก.ย. 2024
  • Создание простейшего мозга для змейки из классической игры.
    В первой части было обучение змеек змеек вручную.
    В этой части, обучение с помощью естественного отбора и выставление весов сети вручную.
    Естественно с проведением чемпионатов.
    Хотел бы сделать полноценную нейронную сеть для змейки, но пока не определился с оптимальной конфигурацией, так что, если есть идеи - пишите.
    Исходники проекта(Pixilang)
    yadi.sk/d/_fNx...
    Моя группа ВКонтакте electro...
    Выражаю благодарность тем, кто поддерживает меня финансами.
    Реквизиты для финансовой поддержки можно найти в
    / foo52ru

ความคิดเห็น • 439

  • @White_Drake
    @White_Drake 6 ปีที่แล้ว +372

    Теперь нужно научить змеек загонять врагов в ловушки :)

    • @boriskopeykin3209
      @boriskopeykin3209 5 ปีที่แล้ว +12

      а может нейронка путем эволюции научиться загонять в ловушки?

    • @johndeper5295
      @johndeper5295 4 ปีที่แล้ว +9

      @ZYEV а чем меньше врагов, тем больше еды, ловушки, или зажимы, самое то

    • @user-bi2ug2hw9u
      @user-bi2ug2hw9u 4 ปีที่แล้ว +4

      Это дельное дополнение. Но пока что в коде(геноме) нет возможности анализировать не несколько ходов вперёд.

    • @user-bi2ug2hw9u
      @user-bi2ug2hw9u 4 ปีที่แล้ว +7

      @@boriskopeykin3209 нет Гена отвечающего за это. Змейка принимает решение в последний момент, считай. Змейка не видит всего поля.

    • @shn0105
      @shn0105 4 ปีที่แล้ว +4

      Сами научиться через 20 миллионов естественный отбором

  • @nRADRUS
    @nRADRUS 6 ปีที่แล้ว +388

    дарвин вообще говоря был оптимизирован не под чемпионат, а под жизнь с размножением и прочим )

    • @foo52ru
      @foo52ru  6 ปีที่แล้ว +92

      Всё верно. Но условия близки. Эта одна из причин, почему естественный отбор мало где можно применить на практике. Зато он завораживает. :)

    • @YouROK85
      @YouROK85 6 ปีที่แล้ว +34

      Обучать боями нужно было :)

    • @AnShyv
      @AnShyv 6 ปีที่แล้ว +14

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

    • @nRADRUS
      @nRADRUS 6 ปีที่แล้ว +5

      AS , вообще в видео афтор сказал, что ваш вариант - искусственный отбор, а почти свободная жизнь в клетке - естественный.

    • @AnShyv
      @AnShyv 6 ปีที่แล้ว +1

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

  • @Oleg_Chajkin
    @Oleg_Chajkin 5 ปีที่แล้ว +102

    Смотрю я на это шедевральное видео,
    и с грустью понимаю что мы и есть эти "змейки"...

    • @rozdmit
      @rozdmit 4 ปีที่แล้ว +5

      А я с гордостью. Если бы система хотела бы убить тебя, она бы убила. А это всего лишь препятствие в жизни, чтоб усовершенствовался = стал быстрее/умнее/сильнее.

    • @user-ln3dy5ho3p
      @user-ln3dy5ho3p 4 ปีที่แล้ว +3

      у меня тоже такая мысля промелькнула. И ктото параметры выставляет, чтобы сильно не размножались, но и не вымерли совсем

    • @Yurek33
      @Yurek33 4 ปีที่แล้ว +3

      С гордостью осознаю, что являюсь представителем углеводородной формы жизни на планете Земля =)

    • @user-ue8yg6ky9h
      @user-ue8yg6ky9h 2 ปีที่แล้ว +1

      Мы можем пойти путем гуманизма, помогая друг другу, а не животной конкуренции без контроля разума.

  • @Rayvenor
    @Rayvenor 6 ปีที่แล้ว +76

    Заметил, что Адам убивался чаще, чем Дарвин. Если это за большое количество повторений не исчезает, значит выживаемость у Дарвина как-то реализована в его весах. Может он больше боится подходить к стенам, что статистически снижает запутывание? Жаль этот параметр в "небольшой статистике" не был представлен.
    И поддержу идею, что Дарвин был заточен под выживание и размножение, а Адам только под обжорство.

    • @FoxSlyme
      @FoxSlyme 4 ปีที่แล้ว +27

      "Адам" "был заточен" "под обжорство"
      А ведь в змейке обычно в качестве еды делают яблоки. Получается, что Адам больше заточен на поедание яблок, т.е. грешить?

    • @user-gd3om6dl3w
      @user-gd3om6dl3w 2 ปีที่แล้ว +3

      @FlyMaster гений конспирологии…

    • @user-qi6pv9jh7o
      @user-qi6pv9jh7o 2 ปีที่แล้ว +5

      @@FoxSlyme но при этом Адам-змей... Змей_ка

    • @user-qi6pv9jh7o
      @user-qi6pv9jh7o 2 ปีที่แล้ว +1

      @@FoxSlyme очень сложный культурно-мифологический концепт

    • @FoxSlyme
      @FoxSlyme 2 ปีที่แล้ว

      @@user-qi6pv9jh7o а ведь точно

  • @drseedon
    @drseedon 5 ปีที่แล้ว +9

    Обожаю когда речь идет о каких-либо искусственных мозгах которые надо учить посредством эволюции, и не только эволюции. По-больше бы таких видео.

  • @artemk6096
    @artemk6096 6 ปีที่แล้ว +201

    Плз начни эволюцию с кода адама сможет ли естественный отбор усовершенствовать адама???

    • @noitaukkokronk
      @noitaukkokronk 6 ปีที่แล้ว +48

      И Еву ему для полового отбора

    • @47syorha52
      @47syorha52 5 ปีที่แล้ว +7

      он деградировал :(

    • @ДмитрийДавыдов-е3ю
      @ДмитрийДавыдов-е3ю 4 ปีที่แล้ว +1

      Скажу по секрету, Бог поручил Адаму дать имена всем животным и определить их назначение. Как думаете мог Адам деградировать? Думаю вы деградируете. Библию надо читать а не слушать

    • @joytonyhook9016
      @joytonyhook9016 4 ปีที่แล้ว +8

      @@ДмитрийДавыдов-е3ю во дурачьок

    • @madness_a
      @madness_a 4 ปีที่แล้ว +5

      @@ДмитрийДавыдов-е3ю сам читай эту дрянь!

  • @ПавелПронин-у8м
    @ПавелПронин-у8м 6 ปีที่แล้ว +42

    12:43 Ну, добавление нелинейности позволяет сделать более сложную модель (линейный классификатор с любым количеством слоёв может быть "упрощён" до однослойного, а с нелинейными функциями это невозможно).Более сложная модель - не панацея. Гарантии никто не даст, что она сможет избежать самоубийства методом "сходить под себя" ^____^ Но чем сложнее модель, тем, теоретически, более сложному поведению она может обучиться. Как-то так.Скажем, если подавать на вход достаточное количество информации об окружающей среде, нейронка сможет предсказать на несколько шагов вперёд возможные ходы и их последствия... И чем больше слоёв/нейронов/входов, тем сложнее могут быть предсказания. Но, проблема в том, что обучение ест. отбором - это мееееедленно. Крайне медленно... Сейчас нейронки на практике так не обучают. Используют метод обратного распространения ошибки (градиентного спуска) и его усовершенствованные разновидности, которые быстрее сходятся. Ну а ест. отбор - это скорее удел вот таких вот исследовательско-развлекательных сред just for fun :)
    ЗЫ: не пробовали тренировать амёб с помощью программы проекта amebas.ru/downloads/ ? Там используется несколько иной подход: исполнимое ДНК (executable DNA) вместо нейросети. Т.е. геном амёбы представляет собой некое подобие программы на своеобразном ассемблере. При выполнении некоторых условий срабатывают триггеры, которые вызывают на исполнение определенные участки генома, что заставляет амёбу совершать какие-то движения... А так, тоже естественный отбор с мутациями и половым размножением. Но проект, к сожалению, автором фактически заброшен. Раньше велись соревнования, была движуха на форуме, а сейчас тишина...

    • @foo52ru
      @foo52ru  6 ปีที่แล้ว +4

      Спасибо, посмотрю

    • @user-ue8yg6ky9h
      @user-ue8yg6ky9h 2 ปีที่แล้ว

      Это нечто совершенно новое для меня! Подпишусь на Вас!

  • @inketroll5984
    @inketroll5984 4 ปีที่แล้ว +3

    Осторожно молодой человек вы играете в бога

  • @АлександрЦой-я3щ
    @АлександрЦой-я3щ 4 ปีที่แล้ว

    Нашел этот канал случайно, но очень заинтересовался. Заинтересовался так что тоже решил заняться изучением нейросетей. Что касается того можно ли считать Это нейросетью - думаю что да. Это не жесткий код, а гибкий и адаптирующийся, можно сказать самообучающийся для поставленной цели.
    Благодаря этому каналу я начал немного разбираться в этой теме. Все доступно и понятно. Ну а дальше - время покажет.
    Особо понравилось - подача материала и эмоциональное состояние автора. Так держать. Ждем продолжения. Даже спустя год от последней активности есть люди которым эта тема интересна. Тем более что все сводится к тому что за нейросетями будущее.

  • @АлексейКэрриган
    @АлексейКэрриган 4 ปีที่แล้ว +2

    Привет! Классные видео, очень мало такого контента в сети, делай больше) Хочу отметить что Дарвин тренировался в Мире - где оне не вырастает больше 16 и в этот момент отбрасывает хвост. А в Чемпионате он часто дох когда становился длинным, его естественный отбор к такому не готовил. Вторая мысль - попробуй запусти Адама в мир - и среди них отбери Креационисткого Дарвина)))

  • @КостикВалери
    @КостикВалери 6 ปีที่แล้ว +12

    Думаю, что надо дать змейке осознание самой себя. Врезаются в основном из-за того, что голова не знает где находится тело. Сразу пропадут замкнутые спирали. Дарвиновские змейки учились выживать в других условиях и сравнивать с Адамом не совсем корректно. Пробовали выпускать адамов и дарвинов в те же условия и в том же количестве в которых обучались дарвиновские? Насколько я понял у дарвиновских слабая боязнь стенок из-за большого поля при самообучении.

    • @CapitanSuk
      @CapitanSuk 6 ปีที่แล้ว +4

      Мне кажется, для змеек что другая змейка, что стена - одно и то же.

    • @foo52ru
      @foo52ru  6 ปีที่แล้ว +5

      Всё верно, змейка "видит" препятствие, не разделяя их на тела или стены.

  • @user-rr7ki8xt7d
    @user-rr7ki8xt7d 6 ปีที่แล้ว +16

    Ура, новое видео

  • @enderbeat8878
    @enderbeat8878 6 ปีที่แล้ว +52

    Дарвин против Адама. победил компуктер

  • @user-cm7dl7oo6m
    @user-cm7dl7oo6m 4 ปีที่แล้ว +1

    Группа поддержки этих змеек - бомба! =)

  • @Jokero74
    @Jokero74 4 ปีที่แล้ว

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

  • @user-tx8om1kg1q
    @user-tx8om1kg1q 3 ปีที่แล้ว +1

    Опять интересно! И опять мне сложно уловить все налету. Но круто! Спасибо

  • @user-ue8yg6ky9h
    @user-ue8yg6ky9h 2 ปีที่แล้ว +1

    Удивительное видео! Спасибо! Физматы всегда умняшками были! :)

  • @TrishkaBum
    @TrishkaBum 4 ปีที่แล้ว +15

    Как круто о.о

    • @antokhinabalalayka7579
      @antokhinabalalayka7579 4 ปีที่แล้ว

      О, тришка! Я твой подписчик

    • @spbmsk_
      @spbmsk_ 2 หลายเดือนก่อน

      Динаху 🤮🤮

  • @TVideoNo
    @TVideoNo 5 ปีที่แล้ว +1

    Твой алгоритм хорошо подойдет для игры в качестве врага, который видит препятствия, обходит и идет за игрокам. Да, есть поиски пути, но тут же он будет как живой, а точнее как тот, кто был его учителем)

    • @user-ue8yg6ky9h
      @user-ue8yg6ky9h 2 ปีที่แล้ว

      Ой. Уже был фильм про то как, в детские игрушки по ошибке вставили военные чипы, способные к обучению. Ахах. Фантасты плохие идеи подают для реализации. Без них ученые тоже догадалась бы. У нас у всех мозги все же имеют много общего в мышлении.

  • @alexanderv.2751
    @alexanderv.2751 6 ปีที่แล้ว +1

    Стиль подачи материала - огонь!

  • @lubyshev
    @lubyshev 5 ปีที่แล้ว

    Можно добавить "ощущение в пространстве" -- при равнозначном выборе направления двигаться в ту сторону, где меньший вес тела.
    + конечно просчитать хоть один ход вперед. Хотя бы такой: если в результате текущего хода следующий ход причинит смерть - то не двигаться туда ни в коем случае )
    + неплохо добавить несколько видов на дарвиновскую площадку. Например добавить Адама, но не изменять его,- чтобы Дарвин приспособился убивать Адамов ))))

  • @tolaybaton7344
    @tolaybaton7344 6 ปีที่แล้ว +45

    а если Адама пустить в эволюционный процесс?

    • @user-ln5uj7wy1u
      @user-ln5uj7wy1u 6 ปีที่แล้ว +51

      Толя Батон, он испортится, станет грешным и несовершенным.

    • @47syorha52
      @47syorha52 5 ปีที่แล้ว +8

      @@user-ln5uj7wy1u ты оказался прав

    • @JosephStalin6730
      @JosephStalin6730 5 ปีที่แล้ว +1

      @@user-ln5uj7wy1u Ахах. XD

  • @DmitryMikutsky
    @DmitryMikutsky 5 ปีที่แล้ว +3

    Можно алгоритм выхода из лабиринта прикрутить, по ближайшему пути - он простой. рекурсией. на колво шагов не меньше длины змейки, сможно даже учесть длину змейки и движение соперниц. Будет мега змейка!

  • @Mr.Shokoladniy
    @Mr.Shokoladniy 5 ปีที่แล้ว

    Было бы интересно, если бы змейки видели все поле, видели головы друг друга, обучение было бы команда на команду и мутировали бы победившие команды, ну и такую змейку запустить соревноваться с Адамом и Дарвином

  • @user-tt6uq1mb8h
    @user-tt6uq1mb8h 4 ปีที่แล้ว +8

    можешь адам поставить в стимуляцию с мутациями как дарвина , но уже адама и он прокачается на макс посмотрим что получается (люди пролайкайте пост что бы он увидел этот комент, плиз)

  • @alexneigh7089
    @alexneigh7089 4 ปีที่แล้ว +4

    "Попа превращается в голову" хахахаха

  • @Dyas777
    @Dyas777 6 ปีที่แล้ว +15

    Ваши видео вызывают у меня желание тоже поэкспериментировать с генетическими алгоритмами. Спасибо)
    Интересно имеет ли смысл на этом этапе внедрение полового размножения для снятия генетического груза?

    • @happer2009
      @happer2009 4 ปีที่แล้ว +1

      А так-же добавить фактор старения. Прополз 800 клеток - смерть (последние 200 клеток замедлять червя в 2 раза). Размножение только в интервале между 200 и 400 клетками проползания. Ну и не забыть поделить на самок и самцов. А заодно почему бы не добавить разнообразия и внести "гомочервей" которые будут только хавать и умирать. А под занавес заставить родительских гетеро-червей таскать корм детям-червям не достигшим 100 ходов (которые перемещаются к примеру в 3 раза медленнее половозрелых особей).

    • @panda_gty
      @panda_gty 4 ปีที่แล้ว

      @@happer2009 Ну ты замутил, и еще влюбляться у кого приоритет, и спариваться,

    • @happer2009
      @happer2009 4 ปีที่แล้ว

      @@panda_gty Согласен. Сделать цветовую дифференциацию по RGB и чем ближе положим B тем больше шансов на спаривание. :-) Ползающий бессмертный коронавирус добавлять пока не будем ?

  • @user-ue8yg6ky9h
    @user-ue8yg6ky9h 2 ปีที่แล้ว

    Статистика классная! Интересно очень!

  • @MasterElp
    @MasterElp 3 ปีที่แล้ว

    Отличное музыкальное сопровождение

  • @Pifamar
    @Pifamar 2 ปีที่แล้ว

    Сделай на безе игры Mini Metro игру где, будет нейросеть выбирать как соединять станции что бы получить наиболее большею выгоду, она будет как нейросеть--босс, а также есть рабочие-нейросети которые будут машинистами поездов, там будет система решать на какой станции поезду задерживаться, и на сколько будет задерживаться. И также будут нейронки-пассажиры которые должны выбрать наикратчайший путь до нужный им станции, даже если придётся выбирать путь между несколькими пересадочными пунктами. Надо будет добавить систему интервала поездов, расписание которому надо придерживаться и светофоры. Пусть ещё боссу будет поступать сигнал где показывается сколько пассажиров на станции, от чего он должен выбирать поезд. На пример есть 3 проезда разных длин и стоимости. Первый поезд самый дешёвый, но и в нём меньше мест для пассажиров и в нём хуже управление... От чего нейросети-машинисту будет сложнее ориентироваться. Сделай ещё 3D-мир в котором можно будет только следить за поездами и пассажирами, там будет можно выбирать рандомный поезд и переключать на него камеру, или на пассажира. Пусть и это будет не достаток мир - что в нём можно только наблюдать, но за то можно будет проследить за нейросетью, на пример почему некоторые нейросети-пассажиры не садятся в поезд . Ответ прост - и сразу же ответов два. 1 - Это поезд заполнен. 2 - этот поезд не едет на станцию где можно пересаживаться на другую линию (на пример так в маршруте написано) и 3 или 0 - это то что сам поезд едет по другому пути который вообще ведёт в другую сторону. Думаю что остальное ты сам можешь додумать, либо в попросить меня придумать, просто дальше я уже устал писать.

  • @user-ll4dc2fv2v
    @user-ll4dc2fv2v 4 ปีที่แล้ว +1

    10:06 какой напряжённый бой!
    (За музыку отдельный респект)

  • @user-bb9go8bi9e
    @user-bb9go8bi9e 5 ปีที่แล้ว

    был пример в англоязычном сегменте с нейросетью, там змейка достаточно эффективно научилась не заходить в тупик, сеть была 24х6х4, многослойный перцептрон. Видела в 8-и направлениях еду, стену и себя.

  • @jekavorobianinov2445
    @jekavorobianinov2445 6 ปีที่แล้ว +1

    Хочу предложить идею! Нужно добавить возможность поедать умерших змеек. Чтобы змейка врезавшаяся в стену, или в себя, или в тело другой змейки своей головой умирала, а ее тело оставалось на поле в качестве еды. Тогда вполне могут появиться виды в геномах. Например хищники одиночки, хищники колективисты, падальщики и просто травоядные. Но для поведения охотников нужно существенно усложнять сеть (добавить несколько слоев, реккурентность) Хотя, скорее всего, без обеспечения инвариантности восприятия окружающего пространства хороших хитрых хищников не выйдет))

  • @ka4an784
    @ka4an784 6 ปีที่แล้ว +19

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

    • @ka4an784
      @ka4an784 6 ปีที่แล้ว +4

      Осенило, пишу экспромтом, не обессудь.
      1. Веса на препятствия вообще не нужны. Ибо препятствие в соседней клетке - это верная смерть, а в дальних клетках бесполезны, по такому алгоритму пожалуй не вычислить закнутую область. Нужно просто запретить змейкам ходить под себя и в стену. Это не интеллект, это инстинкт.
      2. Ввести вес "свободности клетки". Алгоритм такой:
      а)для каждой клетки рассчитать коэффициент А, равный кол-ву свободных клеток вокруг неё (0-8) (но скорее всего считать только в "крест", т.е. 0-4)
      б)для каждой клетки рассчитать коэффициент Б, равный сумме коэффициентов А восьми клеток вокруг неё (наверно тоже только четырех клеток)
      в)аналогично В, Г, Д....
      г)Змейка смотрит своим челом на коэффициент Д ближайших трех клеток.
      Коэффициенты коэффициентов должны быть подобраны так, чтоб самоубийства не свершилось, даже если хавка будет у самого носа.
      но тут опять Адам-2 получается, т.е. матрично-линейное программирование...

    • @Axil-ww
      @Axil-ww 6 ปีที่แล้ว +1

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

    • @user-ue8yg6ky9h
      @user-ue8yg6ky9h 2 ปีที่แล้ว

      Ухты как интересно. Спасибо, что не поскупились на комментарий. Такие, как я, в этом плохо смыслят, но хотят хоть что-то понять.

  • @DannyPhantom288
    @DannyPhantom288 3 ปีที่แล้ว +1

    Качественно и интересно супер спасибо класс

  • @user-ue8yg6ky9h
    @user-ue8yg6ky9h 2 ปีที่แล้ว

    Всегда появляется кто-то новый более сильный. Остановитесь, животные! Ни один "геном" вечно не протянет даже в одних и тех же природных условиях, если будет появляться новый вид. Ни один вид тогда навсегда не сможет остаться, даже мутируя или эволюционируя.
    Эта конструкция - тупик. Всего не предусмотришь. Я считаю, что будет больше благополучия, если все, если не помогать, то хоть лишнее и чужое брать не будут, а еще перестанут пытаться выжить других. Если беда придет, только близкие помогут. Не надо только на себя рассчитывать. Если есть возможность помогать, то помогай. Чужого не бери ни силой, ни хитростью. В идеале все бы начали брать пример друг с друга.
    А так берем пример только с плохого, с войны и всяких убийц. Если своя жизнь дорога, то уважай и жизнь других. Хотя бы не порть намеренно и не ломай, не лезь, если не просят. Но нет же. Без тормозов.
    Эти IT-модели тормошат похороненные переживания.
    Эволюция, тоже мне. Я против.
    Мне не нравится, что я тут в какой-то моральный бред ударилась.
    Пожалуйста, не пропагандируйте насилие! Это бесит!

  • @dma3166
    @dma3166 5 ปีที่แล้ว

    Можно использовать чётные дорожки - для движения в одном направлении и нечётные - для движения в противоположном направлении, таким образом будет оставаться "лазейка" для выхода в случае тупиковой ситуации.

    • @foo52ru
      @foo52ru  5 ปีที่แล้ว

      Прикинул, нет не получается.

  • @che19801
    @che19801 5 ปีที่แล้ว +2

    Для меня видео было очень полезно. В плане понимания, что генетический метод не панацея и даже далеко не оптимальный вариант получения AI во многих случаях.

  • @mishatsaritsyn4843
    @mishatsaritsyn4843 2 ปีที่แล้ว

    Уважаемый автор, возможно, уже немного поздно комментировать, но я нашёл это видео только сейчас. То, как вы обучали самых первых змеек - это фактически современные методы обучения без учителя, которыми тренируют нейросетки для шахмат, старкрафта и прочих игр. Единственное отличие - там это делают автоматически следующим образом. Пока змейка жива, запоминаются все её ходы и все датчики, которые были активны на каждом ходу. Затем, если змейка подбирает еду, всем датчикам выдаётся "вознаграждение": их веса увеличиваются, а когда змейка умирает, датчики "наказываются" уменьшением весов. Можно хранить не все ходы, а лишь сколько-то последних, и чем дальше отстоит ход от текущего момента, тем меньше делать вознаграждение и наказание для его датчиков (например, для последнего хода +1, для предпоследнего +0.5, потом +0.25 и так далее). Таким образом, после множества циклов жизни змейки её мозг оптимизируется идти по пути с наибольшей наградой и наименьшим наказанием, то есть жить как можно дольше и есть как можно больше.
    Кроме того, за смерть можно наказывать сильнее, чем награждать за яблоко. Например, награда +1, а наказание -10, тогда она будет стараться избегать смерти даже ценой потери яблока.

  • @mels9485
    @mels9485 4 ปีที่แล้ว +1

    Огромное спасибо за труд !

  • @alexneigh7089
    @alexneigh7089 4 ปีที่แล้ว

    Классный сериал. Смотрим Рэмбо-2.

  • @user-ue8yg6ky9h
    @user-ue8yg6ky9h 2 ปีที่แล้ว

    9:47 - так странно, что один из сиреневых запутался и напоролся на себя.
    Зелёные на фоне фиолетовых кажутся более хаотичными и медленнее собирают еду.
    Какие интересные раунды! Надеюсь, они останутся только в виде моделей.

  • @stanislav0803
    @stanislav0803 6 ปีที่แล้ว +1

    Отличный контент! Ждём не хуже)

  • @aemarkov
    @aemarkov 6 ปีที่แล้ว

    Добавление скрытых слоев с нелинейностью позволит аппроксимировать более сложные функции, т.е. нейронка сможет научится "замечать" более сложные закономерности во входных данных. Правда, ее стоит обучить классическим методом обратного распространения ошибки (я описал примерную схему в комментарии к предыдущему видео). Но в любом случае она будет ограничена датчиками и тем, что каждое решение применяется только на основе текущей ситуации, не учитывая предыдущие. Я думаю, что стоит разделить датчик препятствия на два - датчик стены и датчик змейки. Добавить память о прошлом можно с помощью рекурентной нейронной сети (напр. LSTM).
    Также можно попробовать метод, называемый обучением с подкреплением (англ. reinforcement learning). Сейчас это очень трендовый и перспективный метод. С помощью алгоритма Deep Q-learning нейронная сеть научилась играть в старые Atari-игры. Есть и более сложные методы, когда и состояние, и действия представляются не дискретным, а непрерывным множеством, но в Вашем случае, я думаю, хватит и простого Deep Q-Learning. Хороший цикл уроков на эту тему: medium.com/emergent-future/simple-reinforcement-learning-with-tensorflow-part-0-q-learning-with-tables-and-neural-networks-d1a95264329d0, перевод: habr.com/company/newprolab/blog/343834/. Тем не менее, обучение с подкреплением является весьма неустойчивым, может не сходится или требовать очень много итераций.

  • @user-hi6nz2sx3q
    @user-hi6nz2sx3q 4 ปีที่แล้ว

    Чтобы змейка не заходила в тупик: когда змейка коснется головой препятствия, даже по диагонали, нужно чтобы змейка выпускала своего рода заливку из своей головы. То есть появляются 2-3 заливки. затем нужно повернуть в заливку с большей площадью. Заливка может совершатся не на весь уровень а скажем на квадрат со стороной 20

  • @user-mg6jq9ll6k
    @user-mg6jq9ll6k 6 ปีที่แล้ว +4

    для избежания самостолкновения можно применять рекуррентную нс, например lstm

    • @nRADRUS
      @nRADRUS 6 ปีที่แล้ว +1

      и сколько слоёв придётся делать ? )

    • @boriskopeykin3209
      @boriskopeykin3209 5 ปีที่แล้ว

      @@nRADRUS правда, сколько?

  • @Leonard_Gray
    @Leonard_Gray 4 ปีที่แล้ว

    Оценивать своё и чужое место относительно всего поля.
    Создавать группы, которым присваиваются одинаковые "роли". Змейкам надо дать возможность считать много ходов вперёд и передавать информацию о запланированных ходах внутри группы. Это может привести к таким удивительным событиям, как например, организованные нападения, захват территории, контроль численности...

  • @mnzznxplay9747
    @mnzznxplay9747 6 ปีที่แล้ว

    Можно попытаться научить змейку как можно более эффективно заполнять пространство, как мы обычно и пытаемся сделать играя в нее. Например, можно использовать способ тренировки мультика, только сделать больше препятствий и указывать ей направления, в которые желательно идти чтобы не оказаться в ловушке. Ещё, чтобы змейка правильно выбирала куда ей идти, можно сделать так, чтобы змейка высчитывала количество клеток без препятствий, в которые может добраться, и с той стороны где их было бы больше, туда она бы и шла. В этом случае она тоже может ошибиться, выбрав большое ограниченное пространство вместо узкого коридора, выход из которого лежит за пределами поля зрения, но это тоже можно исправить, если учитывать доступные клетки на границе ее поля зрения. Это змейка может начать проверять, когда препятствия находятся по углам в радиусе 1 клетки, те когда змейка может сделать роковую ошибку и пойти не в ту сторону

  • @user-fd9kl9bk4k
    @user-fd9kl9bk4k 6 ปีที่แล้ว +4

    Круто было бы увидеть эту программу, да и как ты программируешь

  • @ИванИванов-б3у8н
    @ИванИванов-б3у8н 6 ปีที่แล้ว +1

    Мне кажется, это видео немного разжигает)) Боюсь даже ставить лайк)

    • @Alex_Ekb
      @Alex_Ekb 6 ปีที่แล้ว

      В таком случае смотреть также не стоило

    • @foo52ru
      @foo52ru  6 ปีที่แล้ว +3

      Тут скорее оскорбление чувств атеистов. За это нет статьи, можешь смело ставить лайк ;)

    • @ИванИванов-б3у8н
      @ИванИванов-б3у8н 6 ปีที่แล้ว

      Поставил, спасибо!) Мой - 348-й, если что, - вы уж берегите его)

  • @barmaley3859
    @barmaley3859 4 ปีที่แล้ว

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

  • @Epenckorn
    @Epenckorn 4 ปีที่แล้ว

    Чтобы не загонять себя в тупик, нужно научить змеек определять замкнутый контур и точку выхода из него.
    Если голова находится в замкнутом контуре с точкой выхода, то точка выхода должна становится приоритетной целью.
    Если голова находится в 1 клетке от замкнутого контура, то нужно сменить направление на клетку вне этого контура.
    Если голова находится в замкнутом контур без точки выхода, то нужен дополнительный бит состояния (0 - свободен / 1 - заперт). Если 1, то приоритетной целью становится поиск точка выхода, а не еда.
    Разумеется всё это проверяется только в обозримой области.

  • @volodymyrdonets4166
    @volodymyrdonets4166 5 ปีที่แล้ว +1

    Спасибо Вам, за Ваше видео, очень интересно и позновательно!

  • @serverbotbot8809
    @serverbotbot8809 5 ปีที่แล้ว +2

    Первое правило чемпионата змеек - никому не рассказывай о чемпионате змеек, второе правило чемпионата змеек - никогда никому не рассказывай о чемпионате змеек, третье правило чемпионата змеек - в схватке участвуют только две команды... ))

  • @alexkapobel
    @alexkapobel 2 ปีที่แล้ว

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

  • @VideoEffekts
    @VideoEffekts 4 ปีที่แล้ว

    я делал змейку которая не врезается, и даже их может быть большое количество. Принцип рассчитать ходы на перед на столько сколько сама змейка. Если расчет расчет попадает в тупик. Расчет происходит заново. Даже если выбраться из лабиринта нужно 1000 попыток, для пк это микросекунды.

  • @zealot4325
    @zealot4325 4 ปีที่แล้ว +1

    Я раньше и не думал, что такие штуки можно с помощью программирования сделать)

    • @user-ue8yg6ky9h
      @user-ue8yg6ky9h 2 ปีที่แล้ว +1

      Я тоже :) чудо технологий!

  • @АлександрЦой-я3щ
    @АлександрЦой-я3щ 4 ปีที่แล้ว

    Что касается конкретно данной задачи, то думаю надо расширить объем памяти "мозга" - увеличить дальность видения змейки (хуже точно не будет). И возможно добавить способность различать стены и змей и себя еще отдельно. Так можно отдавать предпочтение тому яблоку где меньше народу крутится.

  • @SplashT
    @SplashT 3 ปีที่แล้ว +1

    Ну я реально ничего не понимаю, очень прикольно. Анимация огонь 🔥

  • @jaloliddinsalaev6987
    @jaloliddinsalaev6987 5 ปีที่แล้ว +3

    Очень!!! Интересное видео, совершенно интересное направление, Автор ты только не оставь это

  • @zzzzzzzz6792
    @zzzzzzzz6792 2 ปีที่แล้ว

    13:18 Еще на первом видео подумал, почему так спокойно меняется поле, ведь оно является основополагающей составляющей весов для такого интеллекта, иначе их вычисленные значение перенесены на иную карту нивелируется. Ну или если не вносить веса в анализ всей карты игры, на которой учтены другие
    игроки, или хотя бы что бы змейка имела весы на собственное ощущение тела и своего пространственного положения, что бы иметь возможно корректировать или планировать свои хода исходя из ее окружения

  • @Valentin_I
    @Valentin_I 4 ปีที่แล้ว +2

    13:19 эпичный звук умирающий змейки)))

  • @kotanhp3115
    @kotanhp3115 6 ปีที่แล้ว +2

    Примени к Адаму естественный отбор. Видео суперкрутое.

  • @FoxSlyme
    @FoxSlyme 4 ปีที่แล้ว +1

    8:12 а если бы ты всегда поворачивал угол обзора вместе с головой змейки (как в первой серии), т.е. оставил только влево/вправо/вперёд, то осталось бы 3 значения. А если ещё смещать все числа так, чтобы "вперёд" было всегда 0 (как сейчас ты и сказал), то хранить можно уже 2 значения. Таким образом, можно:
    1) исключить возможность мгновенного самоубийства;
    2) хранить ещё на одно число меньше.
    Таким образом, мы храним уже не 4 (как изначально), не 3 (как ты сказал), а уже 2 числа.

  • @user-zg6mr7fk4q
    @user-zg6mr7fk4q 4 ปีที่แล้ว +1

    Очень залипательно и интересно)))

  • @slawenchikok9819
    @slawenchikok9819 4 ปีที่แล้ว +1

    вау, ты реально нереально крут

  • @originalshow5519
    @originalshow5519 4 ปีที่แล้ว +1

    Тебя бы в президенты, порядок в стране навести))))

  • @TheMrKMen
    @TheMrKMen ปีที่แล้ว

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

  • @ProgrammerForever
    @ProgrammerForever 4 ปีที่แล้ว

    Дарвин не написал в консоль: "оО Какого хрена хвост не отваливается??"
    У ютюба странные алгоритмы рекомендаций. То рекомендует идиотские видосы ранга "Режем раскаленным ножом говно" или "Укуси/лизни челлендж", то вот такую годноту. Видимо тоже боты неоптимизированы. Подписался.

  • @user-wi7bz9zq3e
    @user-wi7bz9zq3e 5 ปีที่แล้ว +2

    Здравствуйте, а вы не могли бы сделать видео с полным разбором кода?
    Чтобы бы не было проблем по поводу ЯП, предлагаю псевдокод?
    Надеюсь на вашу отзывчивость :D

  • @ggeshundra
    @ggeshundra 6 ปีที่แล้ว +82

    Опа нна
    опа нна
    Нанананнананананнананананан

  • @ivanpetrov8600
    @ivanpetrov8600 4 ปีที่แล้ว +1

    Спасибо за отличное видео!

  • @SmaIlHum
    @SmaIlHum 4 ปีที่แล้ว +2

    я хуею
    проводить турниры собственно выведенных видов "животных" на компе
    достойно больше,чем заслужий пьюдипай и Т-сериис

  • @alexandernevsky5055
    @alexandernevsky5055 6 ปีที่แล้ว

    Настоящая эволюция это прикольно, но даже здесь не эффективна, если веса устанавливаемые человеком оказываются круче эволюционированных. Вообще тут следовало дать змеям перебор на определенную глубину, чтоб они хотя бы в себя не закручивались. Либо обучить настоящую нейронку, на вход которой подавать заданную видимую область, в нее навешать сверток, а на 4 выхода вероятности направлений.

  • @shlemkin
    @shlemkin 4 ปีที่แล้ว

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

  • @babichfx
    @babichfx 3 ปีที่แล้ว

    Ахха, я в восторге!

  • @fractal-cucumber
    @fractal-cucumber 6 ปีที่แล้ว

    Как вариант позволить змейке иметь выбор куда повернуть. Скажем, если веса определились как [1,2,3,4], то есть 1 шанс из десяти, что змейка повернет в первом направлении, 2/(1+2+3+4) во втором и т.д.
    По поводу 'попасть в ловушку'. Для этого как минимум нужно менять площадь обзора в сторону увеличения.
    По поводу естественного отбора. Стоит следить какая из змеек наиболее часто подбирает еду и размножать именно ее, так как в чемпионате залог победы это именно скорость поедания

    • @foo52ru
      @foo52ru  6 ปีที่แล้ว +1

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

  • @Rayvenor
    @Rayvenor 6 ปีที่แล้ว

    Благодарствую за обновление код к обучению эволюцией. Чуток переделал и получаю быстрый рост численности:
    В файле 00_ga_main:
    view=1
    again:
    //view=1 //-1
    т.е. вынес за цикл, чтобы каждый раз после гуфа всех змеек отключенная анимация не включалась. Если рестарт долго не происходит - можно включить анимацию - будет куча жрущих тварей.
    Чуть ниже добавил два настроечных параметра
    mutation_force=5 //сила мутации
    mutation_rate=2 //частота мутаций
    Чуть изменил исходные значения
    FEED = 10000//140 // еды на поле
    ENERGY=50//24 // шагов даётся на поиск еды
    В файле ga_step вставил добавленные параметры:
    $SS=mod(rand(),mutation_rate) // генерируем случайное число от 0 до 3
    { snake[$SSS,$newSN*2] = snake[$SSS,$newSN*2] + mod(rand(),2*mutation_force+1)-mutation_force } // на случайное число от -5 до 5
    snake[$SSS,$newSN*2+1] = snake[$SSS,$newSN*2+1] + mod(rand(),2*mutation_force+1)-mutation_force
    Вроде больше ничего не менял.
    з.ы. Этот язык ппц неудобный. Я нашёл как загружать txt файл, но читается он настолько криво. Почему-то читает только первую строку.
    Я даже придумал выгружать веса НС через картинку. Мадкад умеет делать bmp файлы из матрицы в оттенках серого. Точность получается не очень, но терпимо. А Pixilang не умеет загружать bmp!!! Умеет jpeg, но при конвертировании в Pixilang вижу какие-то левые цифры. Морока жуткая. А через код вводить таблицу - не по феншую.

    • @Rayvenor
      @Rayvenor 6 ปีที่แล้ว

      Ещё в файле 00_ga_main:
      if step_count0==1000
      {
      step_count0=0
      step_count1=step_count1+1
      //отображение поля при достижении 999 шага
      paintField()
      frame()

    • @Rayvenor
      @Rayvenor 6 ปีที่แล้ว

      Не очень, что еда спавнится плотными рядами. Сделал чуток разряжение:
      if field[$x,$y] == EMPTY
      {
      if (field[$x-1,$y] == EMPTY && field[$x,$y-1] == EMPTY)||
      (field[$x+1,$y] == EMPTY && field[$x,$y+1] == EMPTY)
      {
      field[$x,$y] = FOOD

  • @user-fx2cw4gg7x
    @user-fx2cw4gg7x 5 ปีที่แล้ว

    Хотябы один дарвин в любом раунде с мультиком обязательно отправлялся отдыхать

  • @user-jr6ue7rk9p
    @user-jr6ue7rk9p 2 ปีที่แล้ว

    Чтоб змейка не заводила себя в тупик, она должна видеть на два шага вперёд.

  • @karmanov2004
    @karmanov2004 5 ปีที่แล้ว +3

    Вот ты читер Сам создал , сам сломал)

  • @zix2421
    @zix2421 7 หลายเดือนก่อน

    2:08 понимаю, пытался последние пару дней сделать свой проект с эволюцией, там тоже рандомные веса не выживали или тупили

  • @Hershtein
    @Hershtein 4 ปีที่แล้ว

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

  • @Родик-Выиубилис
    @Родик-Выиубилис 4 ปีที่แล้ว

    Если добавить 3-е измерение и погонять программу подольше, получится не мультик - пультик, а Агент Смит, и замучает автора, как Морфиуса. Вы балуйтесь аккуратнее, Нео просил передать.

  • @Синемордый
    @Синемордый 4 ปีที่แล้ว +1

    13:19 мне нужна 10 часовая версия

  • @darkfrei2
    @darkfrei2 5 ปีที่แล้ว +50

    Двенадцать безмозглых змеек поставили дизлайки.

    • @dawaskrabas8541
      @dawaskrabas8541 4 ปีที่แล้ว +1

      Столько же змеек поставили лайк твоему комменту, а может это они🤔😁😁

    • @kaemey4330
      @kaemey4330 4 ปีที่แล้ว +1

      уже 25 гулых "змейки", а по факту не понявших школьников, поставили дизлайки

    • @NMelis
      @NMelis 4 ปีที่แล้ว +1

      о нет!, они размножаются и ставять дизлайки, следую по стопам своих пердков))

    • @empty1685
      @empty1685 4 ปีที่แล้ว +1

      очень надеюсь что тупым быть эволюционно не выгодно чтоб они все померли без потомства и дизлайков

  • @Tunethetone
    @Tunethetone 4 ปีที่แล้ว

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

  • @Krot63
    @Krot63 5 ปีที่แล้ว +1

    Во время эволюции нужно каждое следующее поколение окрашивать в иной цвет.
    Будет нагляднее и залипательнее.
    Спасибо.

  • @nikdatura
    @nikdatura 4 ปีที่แล้ว

    Это надо отправить Александру Маркову с биол. факультета МГУ )) заценит

  • @vadimche9564
    @vadimche9564 4 ปีที่แล้ว

    Мужик ты голова!

  • @N05off
    @N05off 6 ปีที่แล้ว +19

    интересно было бы посмотреть на это в трёхмерном измерении)

  • @РайанКупер-э4о
    @РайанКупер-э4о 6 ปีที่แล้ว +3

    Можно было начинать эволюцию не со случайных мутаций, а с Адама. Тогда получилось бы эффективней.

    • @artemk6096
      @artemk6096 6 ปีที่แล้ว

      Райан Купер да было бы интересно превзойти адама

    • @radzewil
      @radzewil 5 ปีที่แล้ว +1

      @@artemk6096 Не превзошел бы, так как у Адама максимально возможно эффективный алгоритм

  • @klimelk7208
    @klimelk7208 5 ปีที่แล้ว

    А что если сделать прогнозирование перед очередным ходом на основе анализа имеющихся данных. Например, змейка определилась с ходом на основе данных с датчиков. Далее, мы кэшируем данные с датчиков(только по препятствиям, еду ингорируем) в той области, которую видит змейка на данный момент. Создаем как бы новый мир, ограниченный этим закэшированным полем, по которому и будет перемещаться наша виртуальная змейка с первым ходом, который мы рассматриваем как приоритетный. Дадее смотрим. Если после i-хода(ограниченного размером поля) змейка умерла - значит изначальный ход неверный и нужно проанализировать 3 других направления на предмет выживания. Если змейка упирается в край кэша, но при этом там нет стены, т.е. уходит с локации выжившей, изначальный ход принимается как правильный. В случае смертей по всем 4-м направлениям из точки начала - выбирать то, где больше всего ходов. Понятное дело возрастут расчетные нагрузки, однако так мы избежим нелепых смертей от среднесрочной слепоты.

  • @Partey-xh3fr
    @Partey-xh3fr 6 ปีที่แล้ว

    Спасибо)
    Буду ждать след видео и пытаться повторить что увидел

  • @FirsovF
    @FirsovF 6 ปีที่แล้ว

    Как же охеренно интересно!

  • @xakkep9000
    @xakkep9000 5 ปีที่แล้ว

    С этими турнирами, ну просто интриган! а ты не учитель часом?)

  • @user-ln5uj7wy1u
    @user-ln5uj7wy1u 6 ปีที่แล้ว +2

    Пили видосы больше!))
    Ну и на будущее, может быть поработаешь со своей дикцией? Ты достоин миллионов подписчиков!

    • @user-ue8yg6ky9h
      @user-ue8yg6ky9h 2 ปีที่แล้ว +1

      Дикция хорошая. Наш преподаватель информатики точно также разговаривал.

  • @DannyPhantom288
    @DannyPhantom288 3 ปีที่แล้ว

    Спасибо за видео очень интересно и полезно

  • @illiakozachok9487
    @illiakozachok9487 ปีที่แล้ว

    Спасибо

  • @4u4ell91
    @4u4ell91 4 ปีที่แล้ว

    Соревнования змеек круче чем наш футбол