Искусственная жизнь. Борьба кланов. Технические детали модели.

Поделиться
HTML-код
  • Опубликовано: 28 мар 2024
  • В ролике описываю некоторые технические детали проекта "Борьба кланов", где происходит эволюция виртуальных клеток, способных создавать многоклеточные организмы.
    1:14 последовательность выполнения
    5:07 движение энергии внутри организма
    11:34 устройство генома
    Поддержать канал можно на Boosty ( boosty.to/foo52ru )
  • НаукаНаука

Комментарии • 374

  • @robdemo51
    @robdemo51 2 месяца назад +231

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

    • @justafish_
      @justafish_ 2 месяца назад +8

      Как по мне из за этих звуков и отсутствия музыки атмосфера в последних видосах стала какой то давящей

    • @PJutch
      @PJutch 2 месяца назад +3

      @@justafish_ мне нормально вс1 видео, кроме заставки "Wallcraft" в начале. До скримера она не дотягивает, но звук жутковатый)

    • @404notfound2
      @404notfound2 2 месяца назад

      Как ты сказал, так и услышал. Ты прав. А то голос , как пердеда😂 любя😊

    • @boy4en660
      @boy4en660 2 месяца назад

      Таки кого я вижу...

    • @user-us3ss1jo9h
      @user-us3ss1jo9h Месяц назад

      Мистический триллер)

  • @baronfox8829
    @baronfox8829 2 месяца назад +31

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

    • @progressive_agriculture
      @progressive_agriculture 2 месяца назад

      Нравится - займись программированием. По минимуму тут ни чего сложного. Научись кусотром двигать точку по экрану, или графики/линии рисовать.

    • @baronfox8829
      @baronfox8829 2 месяца назад

      @@progressive_agriculture Да дело в том что я не считаю программирование такой уж полезной профессией, все нужные программы для обычного человека уже созданы, если создаешь игры то там скорее лотерея в том заметят ли твою игру, ведь есть столько хороших проектов которые умирают из-за того что их не заметили, я и так на самом базовом уровне понимаю как код устроен, этих знаний мне хватает в повседневной жизни например Картинку вытащить, скачать оригинал видео, убрать защиту от пиратства с игры или найти ключ внутри (обычно это очень нишевые игры где защита считай от обычных людей), иногда делаю мелкие модификации для игры чисто для себя, один раз даже смог скачать то что было удаленно используя одну уязвимость что я нашел в сайте, звучит круто, но это не так круто на самом деле, просто для меня важно что бы я лично сам считал профессию полезной для людей что ли, а тут дело в том что я явно не буду одним из тех кто создает передовые технологии, а буду кем то кто например создает очередной аналог скайпа для компании что бы их беседы были конфиденциальными или что то такое, то есть по факту буду делать велосипед, мне это не нравиться, я люблю создавать то чего ещё не было, а придумать то чего ещё не было очень затруднительно, хотя конечно есть несколько нишевых областей где я заметил что нет реально нужных программ и то, тогда не было, может сейчас уже есть, например в игре crossout есть рейды и они случайно сменяются каждый час на другие, какие следующие будут ты не знаешь, дело в том что одни выгоднее чем другие и потому было бы хорошо иметь прогу которая смогла бы уведомлять тебя о том какие сейчас рейды без твоего личного захода в игру, один чел даже сделал одну, но он её забросил и в конце концов она перестала работать, ведь игра не стояла на месте в отличии от программы, а исходный код он никому не захотел отдавать, учитывая тот факт как редко я встречаю случаи когда действительно нет специализированных программ для любой ситуации я считаю что профессия программиста это из рода создания велосипеда, что мне и не нравиться

  • @Doctor_Sad
    @Doctor_Sad 2 месяца назад +30

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

    • @progressive_agriculture
      @progressive_agriculture 2 месяца назад

      Не все... Ой, не все! На чем написано? Многоточность есть? Какова скорость? Как производится формирование видео записи? И т.д....

  • @user-oe3oh3eu8d
    @user-oe3oh3eu8d 2 месяца назад +40

    Объяснения доступны и приятны глазу. Супер!

    • @user-or6fu5dc4s
      @user-or6fu5dc4s 2 месяца назад +3

      Теперь всем стало ясно, для чего нужна предельность скорости света- чтобы успеть обсчитать процесс😂

    • @user-or6fu5dc4s
      @user-or6fu5dc4s 2 месяца назад +2

      И это не шутка

    • @user-vm1hi7bo5s
      @user-vm1hi7bo5s 2 месяца назад

      @@user-or6fu5dc4s Да, без этого никак, скорость света должна быть конечной. Иначе совсем банальные вещи, такие как два направленных друг на друга зеркала, создают неразрешимый парадокс. Это примерно как неостановимая сила сталкивается с неразрушимой стеной.

  • @Lux-Sphinkx
    @Lux-Sphinkx 2 месяца назад +4

    Это настолько невероятно и чудно
    Такая дикая сложность и простота
    Немыслимый контент
    сколько труда любви и времени
    чудо

  • @alexandr_s
    @alexandr_s 2 месяца назад +5

    Такты работы мира можно просчитывать для каждой клетки параллельно.
    1. расчет действий
    2. определение конфликтов
    3. разруливание конфликтов по правилам или рандому для начала
    4. фиксация нового состояния после такта
    Этот алгоритм не только ближе к реальности, но и гораздо более производительный при многопоточной реализации

  • @AntonDudko1988
    @AntonDudko1988 2 месяца назад +12

    Приветствую ТехноШаман и всех зрителей! Вопрос/предложение: В реальном мире организм жив пока у него есть энергия\пит. в-ва, но в данной симуляции при отсутствии клетки ростка или семени весь организм по цепочке отмирает. Что мешает организму вернув цепочку энерго передачи к изначальной клетке не создать новый росток, или даже лучше не дожидаться возврата к изначальной клетке а создать её на первой энерго избыточной клетке от конца ростка. На подобии создания почек у растений у основания поврежденной ветви, или продолжении роста поврежденных кораллов. Таким образом тело организма не превратиться в статичный путь транспорта энергии а будет способен к восстановлению\адаптации, и избыток энергии не будет смертельным.

    • @progressive_agriculture
      @progressive_agriculture 2 месяца назад

      У него есть понятие семян. придется еще одно понятие вводить.

    • @foo52ru
      @foo52ru  2 месяца назад +3

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

  • @bearmike_360KB
    @bearmike_360KB 2 месяца назад +3

    Сам увлекаюсь кодом и внимательно слежу за проектом. Огромное спасибо за сегодняшнее видео. Идея использования генома до сих пор меня удивляет. Потому крайне интересно смотреть на этот результат.

  • @user-px2rw3bt4l
    @user-px2rw3bt4l 2 месяца назад +5

    Классный формат и подача! Такие видео очень полезны, ждем продолжения
    Занимаюсь симуляцией производственных процессов, для этих целей активно используется ECS (entity component system) на базе архитипов. Есть ощущение, что для ваших задач может быть полезно. Из доступных/готовых решений, что используем мы в своих проектах: Arch и Flecs.

  • @ertitup-ch9vg
    @ertitup-ch9vg 2 месяца назад +8

    Это то видео для которого я захожу на ютуб

  • @user-db2th5em3v
    @user-db2th5em3v 2 месяца назад +14

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

    • @foo52ru
      @foo52ru  2 месяца назад

      У меня реализована возможность сохранять данные симуляции в csv-файле. Но никак руки не дойдут до анализа данных, нагенерированных симуляцией :(

    • @user-db2th5em3v
      @user-db2th5em3v 2 месяца назад

      @@foo52ru , как знать, может таблицы и анализ поможет сформулировать новые вводные для экспериментов

  • @busy_beaver
    @busy_beaver 2 месяца назад +7

    Очень качественно сделан ролик. Спасибо! Было интересно.

  • @user-gf2yq5vn6f
    @user-gf2yq5vn6f 2 месяца назад +5

    Атмосфера завораживающая! Лайк!

  • @user-ul6ik9cp8d
    @user-ul6ik9cp8d 2 месяца назад +6

    Супер! Обожаю твои видео про то, как работают твои симуляции
    Сейчас смотрю (пока только 3 минуты :D)
    Решил внезапно своё мнение вставить: я у себя просто перед каждым новым шагом симуляции перемешиваю порядок всех ботов тасованием Фишера Йетса, работает достаточно быстро и справедливо по-моему

    • @foo52ru
      @foo52ru  2 месяца назад

      хорошая идея

  • @BSpont
    @BSpont 2 месяца назад +13

    Круто, спасибо за детали, очень интересно так долго наблюдать за проектом

  • @stas_v
    @stas_v 2 месяца назад +8

    Очень просто и доходчиво. Захотелось самому повторить. Спасибо!

  • @ustredzo
    @ustredzo 2 месяца назад +2

    Очень хотелось посмотреть как раз про устройство системы на этом уровне, большое спасибо!

  • @FAL0C
    @FAL0C 2 месяца назад +4

    Братан, хорош, давай, вперёд! Контент в кайф, можно ещё? Вообще красавчик! Можно вот этого вот почаще?

    • @progressive_agriculture
      @progressive_agriculture 2 месяца назад

      Это немного с другого канала 😁

    • @FAL0C
      @FAL0C 2 месяца назад +1

      @@progressive_agriculture главное, что контент в кайф 😏

    • @foo52ru
      @foo52ru  2 месяца назад

      @@progressive_agriculture с какого?

    • @progressive_agriculture
      @progressive_agriculture 2 месяца назад

      @@foo52ru Я на этом сталкиваюсь @ExtremeCode

    • @foo52ru
      @foo52ru  2 месяца назад +1

      @@progressive_agriculture не совсем понял. У нас есть какие то одинаковые ролики?

  • @nikitasssprogramming8710
    @nikitasssprogramming8710 2 месяца назад +2

    Это мы так долго ждали

  • @duard8652
    @duard8652 2 месяца назад +2

    Оч классно! Спасибо!

  • @Ground1981
    @Ground1981 2 месяца назад +2

    Спасибо ! Круто 👍

  • @yobi3d
    @yobi3d Месяц назад

    Спасибо вам большое! Очень познавательно 👍

  • @replay3069
    @replay3069 2 месяца назад +1

    Это просто офигенно!

  • @user-gc9pw2uo6m
    @user-gc9pw2uo6m 2 месяца назад +1

    Успехов!

  • @alexnorton1305
    @alexnorton1305 2 месяца назад

    Молодец. Посвящать часть своей жизни чему-то, а результатом делиться с другими говорит о личных качествах.

  • @gt34m62
    @gt34m62 2 месяца назад +3

    Возможно, я не правильно понял принцип фаз A и B, но вроде можно просто было сделать буфер для энергии, куда попадала бы перемещаемая энергия. А в конце хода она уже передавалась из этого буфера самой клетке.
    Т.е этим мы просто не дадим конкретной еденице энергии перемещаться более одного раза за ход.

    • @foo52ru
      @foo52ru  2 месяца назад

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

    • @gt34m62
      @gt34m62 2 месяца назад

      @@foo52ru разве? Это ведь будет (должно) работать просто как перекладывание всех энергии на одну клетку.

  • @dofidf3570
    @dofidf3570 2 месяца назад +1

    Здравствуй. У меня есть предложения по поводу Очередности клеток и Перемещения энергии.
    1) Начнем с очередности:
    Так как подразумевается в симуляции, что все действия происходят одновременно, то нам понадобятся 2 списка:
    • Первый список (ПС) - список клеток участвующих в цикле;
    • Второй список (ВС) - список новых клеток (добавляются в конец ПС при новой итерации цикла).
    ПС можно обходить: от 1 до N с шагом 1 (то как показано в видео).
    А можно еще обходить таким образом:
    a) заведем простое число P, где P > N и N - количество элементов в ПС;
    b) заводим переменную: текущий индекс (ТИ) равную 0;
    c) вычисляем индекс клетки в ПС по формуле: ТИ = (ТИ + P) mod N, где mod - это остаток от деления (11 mod 3 = 2).
    Таким образом мы будем «прыгать» по клеткам из ПС в псевдослучайном порядке и если сделать N таких «прыжков», то мы побываем во всех клетках без повтора. И при каждой итерации цикла будем начинать не с клетки из предыдущего цикла, а с новой:
    - из этого следует, что не будет отдаваться предпочтение какой-либо клетки;
    - больше случайности будут добавлять новые клетки из ВС, присоединённые к ПС;
    - больше случайности можно добавить путем использования при каждой итерации цикла нового простого числа P (можно использовать список простых чисел).
    ВС при таком подходе необходимо использовать так как при увеличении количества клеток в ПС (кода еще полностью не обошли его): часть клеток не будет задействована, а другая часть пойдет по второму кругу.
    ВС также поможет находить клетки, которые пытаются встроится на одну и туже область, тут как поступить решает автор, единственное что я придумал:
    - это либо отдавать предпочтение раньше появившиеся клетки в ВС (при разных P порядок появление в ВС тоже псевдослучайный);
    - или при добавлении в ВС проверять не претендует ли другая клетка на туже область.
    2) Перемещение Энергии:
    Для перемещения энергии можно использовать такой же механизм как в реальных клетках.
    Немного теории, адаптированной к нашей ситуации:
    - у клетки есть Накопитель Энергии (НЭ): в единицах или штуках;
    - у клетки есть Степень Требования Энергии (СТЭ): от 0 до 100% с шагом 0.1% (думаю такой шаг будет нормальным);
    - у клетки есть Степень Наследования Энергии (СНЭ): от 0 до 100% с шагом 0.1%;
    - клетка берет/передает энергию со всех соседей вокруг разом;
    - при делении клетка передает долю НЭ в зависимости от СНЭ.
    Объяснение:
    - НЭ - это то сколько есть энергии у клетки, которую она вырабатывает/тратит/передает, при 0 клетка умирает, возможен верхний лимит (в зависимости от автора);
    - СТЭ - это доля НЭ, которую клетка берет/передает соседям, тут такой смысл если:
    • СТЭк клетки меньше соседней СТЭс, то передаем долю НЭ соседней, долю считаем как: доля = СТЭс - СТЭк;
    • СТЭк клетки равна соседней СТЭс, то не передаем НЭ (по формуле выше это видно);
    • СТЭк клетки больше соседней СТЭс, то берем долю НЭ из соседней (формула выше);
    • СТЭк клетки значительно больше соседней СТЭс, то получаем раковую клетку (обычно так и происходит + ещё реплицируется постоянно).
    • Можно использовать в условиях (которые выше) не доли СТЭ, а конечное количество энергии (ККЭ), то есть: ККЭ = НЭ * СТЭ, а по результатам пересчитывать как передача среднего_значения( ККЭс - ККЭк ) или както по другому (тут решает автор).
    - СНЭ - это доля НЭ, которая передается при делении клетки наследнику (если можно так сказать):
    • так как было выше сказано при НЭ равно 0 клетка умирает, то при делении обязательно нужно передать часть НЭ;
    • причем передать такое количество НЭ, чтобы наследник смог некоторое время продержатся;
    • можно при делении изменить значение СНЭ у родителя, чтобы не объедать наследников или более сложного поведения, или выстроение магистрали с постоянным значением СНЭ, или при каждом делении уменьшать значение СНЭ пока клетка не сможет физически передать столько энергии и умрет, тут сложно прогнозировать что лучше;
    • можно поставить ограничение на количество делений (прям как в реальности ≈50).
    - Что касаемо передачи энергии от всех/всем соседей(ем), то можно:
    • каждому соседу по отдельности;
    • или вычислять общее кол-во передаваемой энергии от клетки, а соседи забирают её в зависимости от своей доли.
    - Реализация - 2 переменные (сколько получили (Дебет) и сколько потратили (Кредит)):
    • в начале: клетка увеличивает свой НЭ энергией, переданной от Предыдущего цикла;
    • в середине: тратит/передает энергию, на действия или передача соседям;
    • в конце: получает энергию, выработкой или от соседей.
    Таким образом при каждой итерации цикла мы получаем что все клетки передали/получили энергию соседям(ей). При таком решении клетки не будут умирать сразу, как только потеряют свою «цели жизни», а будут жить пока не израсходуют свой ресурс. Тут нужно подумать стоит ли пересчитывать сколько тратит каждая клетка энергии.
    Также этот метод можно использовать в передаче ресурсов между клетками.
    Надеюсь помог.

    • @progressive_agriculture
      @progressive_agriculture 2 месяца назад

      При наличии буферов, чтоб энергия за 1 шаг не могла дальше 1 клетки сместиться, вся эта заумь ни к чему.

  • @turdakhov
    @turdakhov Месяц назад

    Спасибо за ваши видео! Коммент в поддержку!

  • @MrQuazar
    @MrQuazar Месяц назад +1

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

  • @Roid92
    @Roid92 2 месяца назад +26

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

    • @Grey_Slime
      @Grey_Slime 2 месяца назад +1

      Звучит логично

    • @darkfrei2
      @darkfrei2 2 месяца назад

      Для простоты объяснения же.

    • @Roid92
      @Roid92 2 месяца назад

      @@darkfrei2 возможно. не пришла такая мысль, когда писал комментарий)

    • @progressive_agriculture
      @progressive_agriculture 2 месяца назад +3

      Потому что памяти в современных компьютерах "немерено," А работа с битовыми операторами в 2 раза медленней, чем просто с числами. В таких симуляциях самое сложное добиться приемлемой скорости исполнения. Такая пробежка волны по экрану может десятки тысяч циклов занять. И исполняется 1 цикл за 10 сек, или 10 циклов за 1 сек - очень сильно влияют на желание этим заниматься вообще. Ждать результат в чашке Петри приятней, чем на дубовой роще.

    • @foo52ru
      @foo52ru  2 месяца назад +2

      Боюсь современные компиляторы для значения boolean используют байт, а не бит. Но это не точно.
      Для генома мне нужен был массив байтов, но в Processing байт интерпретируется, как число от -128 до 127, а мне нужно было от 0 до 225. Наверно это как то можно исправить, но я не стал заморачиваться и использовал массив int

  • @igorshingelevich7627
    @igorshingelevich7627 2 месяца назад +1

    Спасибо!

  • @user-qc2qb6lx9i
    @user-qc2qb6lx9i 2 месяца назад +1

    Отличное видео, нужно начинать переписывать всё это на видеокарту и запускать обучаться где-нибудь в google collab))

  • @MrFEARFLASH
    @MrFEARFLASH 2 месяца назад +8

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

  • @igorkroshkin9354
    @igorkroshkin9354 2 месяца назад +2

    Классно же :)

  • @drago285
    @drago285 27 дней назад +2

    Привет Шаман! Есть у меня для тебя и твоих нейронок интересная идея, точнее загадка. Играют в шахматы двое, один читает мысли, другой прыгает во времени. Оба знают только правила игры и то как ходят фигуры. Читающий мысли узнает планы и стратегию прыгуна как только тот окажется перед ним возвращаясь из будущего. Прыгающий во времени может когда угодно вернуться в любую секунду от начала игры до того момента в котором сам находится. И он знает что играет с чтецом мыслей. Игра прекращается как только объявлен шах и мат. Кто победит? Это типа неразрешимая загадка, но я подумав над ней несколько дней прихожу к выводу что если бы эта игра начиналась снова и снова, не зависимо сохранялся бы опыт и знания от предыдущей выигрывал бы за частую один и тот же - читающий мысли. Кто прочёл это - ставь лайк что бы автор увидел.

    • @Shedshebolda
      @Shedshebolda 17 дней назад

      Интересная идея

  • @user-cd9kj2rv1u
    @user-cd9kj2rv1u Месяц назад

    Давно подписан, классный контент, уважение и успехов Вам!✨️👍💎

  • @dyvniy_vershitel
    @dyvniy_vershitel Месяц назад

    Замечательная работа!
    Спасибо за подробный описание логики работы своей программы.
    Теперь Ваше дело непременно будет продолжено.
    Может и я смогу собраться с мыслями, чтобы реализовать это на видеокарте, или в ботнете.

  • @jaros.chashin
    @jaros.chashin 2 месяца назад +4

    Если максимальное количество клеток определено заранее (даже если пока не доходило до того лимита) совсем новые души рождаться не смогут. Будет лишь реинкарнация старых. Умерла 4ая клетка и теперь ждёт пока какая-нибудь другая клетка её заново родит в эту очередь.

    • @user9x0Hj4
      @user9x0Hj4 2 месяца назад +1

      Максимальное количество клеток определенно размером мира: на поле 100x100 не может быть больше 10 000 клеток.

    • @foo52ru
      @foo52ru  2 месяца назад +2

      Всё верно. У меня реализован механизм реинкарнации душ. У каждой клетки есть прошлая жизнь. :)

  • @user-wz7ov1xt6x
    @user-wz7ov1xt6x Месяц назад

    У тебя просто талант!!

  • @KogothLetsPlays
    @KogothLetsPlays 2 месяца назад +5

    Идея: Что если добавить клеткам нейроны, которые будут принимать решения о том нужно ли порождать новые клетки, и каким типам отдать предпочтение в зависимости от общих суммарных параметров всего тела? (размер тела, накопленная энергия всего тела, скорость получения энергии всем телом, какой тип энергии более доступен) Это может ограничить рост супер организмов или заставить их переключаться с солнца на переработку трупов. Нейроны как в нейросетях вместо генов, думаю будут более гибко обучаться управлению.

    • @pka_human
      @pka_human 2 месяца назад +3

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

    • @Maturman
      @Maturman 2 месяца назад +3

      Так уже есть в клетках условия. Они делают тоже самое, если что

    • @neutrinozh2070
      @neutrinozh2070 2 месяца назад

      @@Maturman Вроде бы как эти условия выполняються только один раз (при порождении клетки). Нейросеть функционировала б на протяжении всей жизни клетки.

    • @progressive_agriculture
      @progressive_agriculture 2 месяца назад

      ​@@neutrinozh2070 Эти условия выполняются в каждом цикле симуляции.

    • @KogothLetsPlays
      @KogothLetsPlays 2 месяца назад

      @@Maturman В клетках сейчас есть гены, которые всегда одинаковые отростки дают, а я говорю о том чтобы учесть параметры всего растения.

  • @user-qi6pv9jh7o
    @user-qi6pv9jh7o 2 месяца назад +1

    Кста, вспомнил флешку garden of war
    Там боëвка основана на отрезании снабжения (у каждой территории, состоящей из граничащих покрашенных клеток, есть столица, в которой хранится голда, собираемая по 1 штуке с каждого шестиугольника каждый ход. Тратится она на содержание юнитов, и каждый юнит уровня Х абсолютно неуязвим для юнитов с таким же уровнем или слабее, а заодно защищает до 6 соседних клеток своего цвета(так сказать, зона контроля). Но чем выше уровень, тем ниже скорость, а снабжение вообще утраивается. Если столицу отрезать от территории с войском, то у новой территории появится новая с 0 голды, а и скорее всего затраты этой столицы превысят прибыль. Как только такое происходит, на следующий ход все юниты становятся гробами, а гробы территорией нежити. Нежить очень опасна, так как, несмотря на уровень силы 0, игнорирует зоны контроля и не требует снабжения, так что может всех окружать, создавая ещё больше гробов)

  • @1382200
    @1382200 Месяц назад

    Лайк, подписка, комментарий!

  • @alexorlov8875
    @alexorlov8875 2 месяца назад +1

    Круто

  • @user-pf4so7sd5d
    @user-pf4so7sd5d Месяц назад

    Я прям кайфую от представленного.

  • @TheVadych
    @TheVadych Месяц назад

    Спасибо за видео.
    Для полноты картины не хватает вводной с описанием мира и типов клеток

  • @acectent9335
    @acectent9335 Месяц назад

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

  • @hpw-dev
    @hpw-dev 2 месяца назад +1

    Хорошие визуализации

  • @47clere
    @47clere 2 месяца назад +1

    Ккккайф!) название топ)

  • @user-si2iw8hl1q
    @user-si2iw8hl1q 2 месяца назад +51

    читаю комменты и просто не понимаю ........ вы КТО? Вы зачем пишите вообще?) Ни один не задал вопроса по теме .... И уж тем более свои идеи.....
    То что делает этот человек - гениально......

    • @leok2640
      @leok2640 2 месяца назад +12

      Твои идеи и вопросы по теме? М?

    • @sergeyfamiliy2781
      @sergeyfamiliy2781 2 месяца назад +4

      По голосу, с монотонным и без интонации звучанием , понятно что это ИИ-учитель со сверхинтеллектом разработанный в Нашей РОССИИ!

    • @greatorb61
      @greatorb61 2 месяца назад

      ​@@sergeyfamiliy2781чего

    • @user-sc4gc5mt1h
      @user-sc4gc5mt1h 2 месяца назад +5

      Люди оставляют комментарии ради поддержки канала. Алгоритмам Ютуба важно количество, а не качество. Решение писать лишь "конструктивные" комментарии уменьшит их общее количество и распространение ролика соответственно.

    • @user-yf5zn9us5z
      @user-yf5zn9us5z 2 месяца назад +3

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

  • @grummusss
    @grummusss 2 месяца назад

    У меня 2 идеи по такому проекту:
    Вместо того что бы симулировать передачу енергии каждой ход между клетками которые не являются носителем генома можно пересчитывать приток енергии к клеткам носителям генома при событиях приводящим к перераспределение енергии
    Не знаю как реализован геном но нету необходимостью давать каждому организму(отростку) копию всех данных генома. Например когда отросток создаёт 2 новых отростка без мутации то они оба будут подключены 1 геному различаясь только номером активного гена и тд. Также возможно разделить геном на более и менее стабильные части которые имеют иерархической порядок(то-есть есть типо корневая часть генома и дальнейшее части генома которые ссылаются на корневой геном/прошлую часть генома)

  • @zix2421
    @zix2421 2 месяца назад +1

    Это было очень интересно! Интересные решения в транспортировке энергии и геноме(условия).
    Вопрос: а как процессор справляется технически? Судя по видео, карта огромная, а вычислений много

    • @foo52ru
      @foo52ru  2 месяца назад +1

      Карта 3840 на 2160.
      Для одного ролика обычно больше недели симуляции уходит. (примерно 2 миллиона шагов).
      Сейчас симуляции крутятся на двух ПК. Раз в день заглядываю, что там происходит

  • @nowar452
    @nowar452 2 месяца назад +2

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

    • @progressive_agriculture
      @progressive_agriculture 2 месяца назад

      Если вирусов много, то они иногда и на отростки попадать будут. Другой вопрос, что это приведет к прекращению роста этой ветви и быстрому отмиранию.

  • @user-ze3ez3iy6c
    @user-ze3ez3iy6c 2 месяца назад +1

    Безумно интересно, хочу скачать openGL и повторить!
    Из идей - добавить организмам размножение с участием двух родителей.
    ***
    Семечко движется, пока не врежется в какую либо живую клетку. Как врежется - копирует некоторые числа из её генома в свой, предварительно проверив, достаточно ли геномы различны.
    Ксли геномы не слишком похожи - размножению быть. Семечко копирует числа. Каждое из 672 чисел скопируется с шансом 50/50. Таким образом, семечко получает новый геном, производит с шансом 1/100 мутацию и приступает к его выполнению

  • @user-bj4hj9gy7r
    @user-bj4hj9gy7r 2 месяца назад +3

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

    • @progressive_agriculture
      @progressive_agriculture 2 месяца назад

      Проблема преимущества несколько надуманна. Она таковой является в самом начале только если в симуляции 1 не большой многоклеточный организм. Когда организм большой и/или их много, да еще после волны вымирания. Ведь, полагаю, свободные ячейки в начале списка заполняются новорожденными элементами. Иначе, в каждом цикле придется отрабатывать все элементы массива, при том что их столько же, сколько точек на карте. То объекты начнут отрабатываться в разнобой. Уж такой цельной последовательной волны точно не будет. А если последний элемент переносить в свободную ячейку в перед по списку вместо вымершей, там такой салат будет, что ни каких преимуществ ране/поздно рожденных не останется.

    • @user-bj4hj9gy7r
      @user-bj4hj9gy7r 2 месяца назад

      @@progressive_agriculture в целом вся моделируемая система выглядит несправедливо из-за того что все равно существует приоритет исполнения и может случиться каша в случайный момент
      Нужен эксперимент с одинаковыми начальными данными - с разными способами приоретизации и без нее вовсе

  • @Artovna
    @Artovna Месяц назад

    Извините, я на этом канале 5 минут после листания шортсов, вопрос: Борьба кланов будет в открытом доступе? Я так понимаю, что это симулятор эволюции, но когда публикация (Полноценная версия)?

  • @Myself0094
    @Myself0094 2 месяца назад +1

    Я бы порекомендовал портировать вычисления на Vulkan или cuda - они могут стать в разы быстрее. Вдобавок, можно распараллелить процессы дампа состояний и отрисовки кадров(если это не так), чтобы не перегружать симуляцию графическими процессами. По файлам дампов (json например) рисовать графику можно будет как после завершения симуляции, так и параллельно в отдельном потоке, что удобно.

    • @progressive_agriculture
      @progressive_agriculture 2 месяца назад

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

    • @foo52ru
      @foo52ru  2 месяца назад

      У меня нет опыта в программировании видеокарт. Я не являюсь профессиональным программистом.
      Сейчас программирую в среде Processing - это обрезанная Java для дизайнеров.
      Насколько я понимаю, видеокарты накладывают ряд ограничений на код, чего нет у процессора.
      Так что пока на процессоре. Хотя я встречал интересные проекты на видеокарте, работающие в реальном времени.

    • @Myself0094
      @Myself0094 Месяц назад +1

      @@progressive_agriculture Хм, я сейчас посчитал, дамп кадра из миллиона клеток с таким жирненьким геномом может занимать ~600мб. Если однобайтовый геном заменить полубайтовым и там понерфить чуток флаги и буферы, можно снизить до 350мб, что тоже не мало. Если уменьшить длину таблицы генов до 16, можно ужаться до 168байт на клетку и 168мегабайт на миллион клеток. Если поверх применить какой-нибудь дефлейт, можно скукожить результат еще процентов на 30, а то и больше, то есть дойти до 110-120мб, что уже гораздо проще и с ростом дампа будет увеличивать ратио компрессии, тк монотонность будет расти за счет большого числа одинаковых чисел. В итоге немаленькая эволюция системы в 200к прохождений линкед листа через нулевую клетку с дампом на каждые 20 проходов займет терабайт дискового пространства. Мда, похоже процессорным временем в данном случае действительно проще пожертвовать, чем памятью, т.к. стейт уж больно тяжел.
      Но вот на счет графики есть мысль, что состояние уж больно математично, поэтому существенную часть ветвлений можно заменить на математические операции а ля branch avoidance. Даже довольно сложные выражения в батче видеокарта потенциально может выполнять в десятки раз быстрее. Но от алгоритма конечно зависит.

  • @ghost_n0
    @ghost_n0 2 месяца назад +1

    Жесть, не думал что настолько много факторов нужно учитывать при создании корректной симуляционной системы

    • @progressive_agriculture
      @progressive_agriculture 2 месяца назад

      А там и не надо думать, хотя, можно. Оно само в процессе приходит, когда в одну сторону начинает расти активней, чем в остальные.

  • @Rizomus
    @Rizomus 2 месяца назад

    У каждого цикла есть начальные условия (НУ) - результат изменений предыдущего цикла. Мы хотим исключить фактор последовательности обхода клеток, т.к. в нашей реальности все клетки действуют одновременно. Иными словами, при итерации по клеткам в рамках одного такта эволюционное правило, применяемое к клетке, должно опираться ровно на те же НУ, что и остальные. Поэтому имеет смысл в начале нового цикла делать, что называется, snapshot начальных условий и для каждой клетки, брать входные значения из него.
    Понятно, что при таком подходе будут возникать коллизии. Для их разрешения можно придумать дополнительный слой логики, либо отдавать приоритет рандомно. В последнем случае история будет похожа на развитие квантовой системы, которая также из состояния суперпозиции (все возможные варианты исхода) каждый такт "схлопывается" в какое-то одно (ну или разделяется по параллельным вселенным, если вам больше нравится Эверетт и т.п.)

  • @ViktorRussia14477
    @ViktorRussia14477 Месяц назад

    Можно попробовать поэкспериментировать с ускорением и замедлением мутаций.

  • @euwaq
    @euwaq 2 месяца назад +1

    превью крутое)

  • @user-sm7xb9xt8l
    @user-sm7xb9xt8l 2 месяца назад

    Крутяк

  • @user-cf3rm2xs5u
    @user-cf3rm2xs5u 2 месяца назад +5

    если честно я бы посмотрел на мир где место в начале списка даёт приимущестово, ьыло бы интерсено посмотреть как органищмы к этому адоптируються

    • @progressive_agriculture
      @progressive_agriculture 2 месяца назад

      Реальный мир не? Быть первыми в списке людей не дает преимущества по сравнению с последними?

  • @ruru_farm6856
    @ruru_farm6856 Месяц назад

    Творец!

  • @QuaterfoilFikusS
    @QuaterfoilFikusS 2 месяца назад

    ничего не понял, но звучит шикарно

  • @fluffybobber
    @fluffybobber Месяц назад

    Уважаемый техношаман, спасибо за разъяснения. Я как-то писал, что реализовывал схожие алгоритмы, даже в 3д. Вот сначала вы описываете список и объясняете недостатки, а потом предлагаете свой вариант с ссылками. Поясните пожалуйста почему ссылки ? При этом при добавлении элементов вы меняете ссылки у соседей, но разве это технически возможно, изменить ссылку? Разве это тогда не указатели ли? Подскажите пожалуйста почему вы противопоставляете свой метод списку, разве контейней с указателями на соседей не является классическим двусвязным списком? 😊

  • @syntet8743
    @syntet8743 Месяц назад

    foo52ru ТехноШаман 5:00 Есть идея о справедливом массовом ходе(шагах) организмов. Тебе надо создать иллюзию одновременности, это как в игре мафия, пока все участники не походят, действий не будет, и только когда город проснётся (это у тебя клетка 0) только тогда выполнится все запланированные действия. То есть будет одновременно убиты 2,3 клетки, рождены новые 2-3 клетки. Тогда преимущество первоочерёдных клеток будет полностью нивелировано.

  • @Engineer_KO
    @Engineer_KO 23 дня назад

    Здравствуйте, я создал свой проект по типу первого "пруда" с ботами. Хочу поделится с сообществом, но не могу найти старую ВК группу на тему кибербиологии. Подскажите пожалуйста, где можно своим творчеством поделиться?

  • @crystalrain7776
    @crystalrain7776 Месяц назад

    чел ты крут

  • @user-sd6xh2jo7k
    @user-sd6xh2jo7k 2 месяца назад

    Что мешает сделать 2 массива - входной и результат, пото меняем их местами?

  • @Losinkyilos
    @Losinkyilos 2 месяца назад

    Интересно, какие методы для решения таких же задач предпринял бы ИИ.

  • @razvigor2819
    @razvigor2819 Месяц назад +2

    Теперь понятно, откуда описанные в предыдущих роликах проблемы. 32 генов банально не достаточно для кодирования тех возможностей, что потенциально заложены в геноме. А рудимент с 3 направлениями с заранее типизированными отростками добивает картину, т.к. чтобы просто закодировать все возможные варианты ветвления требуется 5*5*5=125 генов. А ведь еще и нужен запас на гены-условия, минимум столько же. Итого получается, что чтобы в данной структуре генома получить не урезанный по возможностям организм, необходимо не 32 гена, а 256.
    Решить эту проблему частично можно возвратом к коротким генам цифровых деревьев, увеличив число строк за счет их длины. Более оптимальное, имхо, решение: выделение нетипизированных побегов, которые выберут кем стать сами, по проверке параметров энергонасыщенности и органики в месте своего появления, тогда потребуется меньше генов, но вырастет размер самого гена на +6.

  • @user-ju7xj3qu6k
    @user-ju7xj3qu6k 2 месяца назад

    ТехноШаман, твои проблемы являются следствием преждевременного изменения состояния клеток. Для преодоления этого можно ввести фазы подготовки к изменению и изменения состояния. На фазе подготовки мы рассматриваем состояние всех клеток "только для чтения" и формируем дельту состояния для каждой из них. А на фазе изменения состояния мы эту дельту применяем, в условиях запрета на чтение состояний других клеток.

  • @nothing4542
    @nothing4542 2 месяца назад

    Благодарю за технический ролик, но мне все ещё интересно сколько ресурсов компьютера ест такая симуляция?

    • @progressive_agriculture
      @progressive_agriculture 2 месяца назад

      В идеале, 100% потока, а если паралелить вычисления, то и 100% процессора. А памяти в зависимости от сложности объектов и размера поля. В силу любопытности экспериментатора - "а что будет если объекты сложней? А что будет, если полянка по больше?" память тоже можно утилизировать на 100%. Видеокарта 5%. Тут для нее работы нет. На диске тоже считаные мегабайты занимает.

    • @foo52ru
      @foo52ru  2 месяца назад +2

      В приделах 3 шагов симуляции в секунду. Для ролика надо где то неделю, что бы пара миллионов шагов просчиталось.

    • @nothing4542
      @nothing4542 2 месяца назад

      @@foo52ru благодарю

  • @NickProkhorenko
    @NickProkhorenko 2 месяца назад

    Ничего не понял, но очень интересно.

  • @igorcoolman
    @igorcoolman 2 месяца назад

    а можно как-то использовать где-нибудь Чи́сла Фибона́ччи - элементы последовательности : 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, то-есть следующее число это сложение текущего с предыдущим.

    • @progressive_agriculture
      @progressive_agriculture 2 месяца назад

      Их не используют. В больших системах они сами вылазят как неотъемлемое свойство вселенной.

  • @whitelrabbit
    @whitelrabbit 2 месяца назад

    Подскажите пожалуйста, если я хочу такое повторить у себя и смотреть на такие вселенные, с чего мне начать? И готовое и сделать самому мне было бы очень интересно

    • @user-sc4ic3ey7i
      @user-sc4ic3ey7i 2 месяца назад +1

      Научиться программировать

    • @1kvolt1978
      @1kvolt1978 2 месяца назад +4

      Начни с простого - запрограммируй классическую конвеевскую "Жизнь".

    • @whitelrabbit
      @whitelrabbit 2 месяца назад

      @@1kvolt1978 Спасибо большое

  • @INGVAR_K
    @INGVAR_K 2 месяца назад +2

    ОНО ЖИВОЕ!

  • @Relat_Mensal
    @Relat_Mensal 2 месяца назад

    Ужас как сложно, завтра опять пересмотрю и попытаюсь Все понять

  • @user-hr9vz7zm9o
    @user-hr9vz7zm9o 16 дней назад

    предлагаю добавить новую клетку такую как лунная клетка она будет потреблять и выробатывать2/3 от обычной солнечной но если добавить четыре периода сменяющие друг друга каждые 50 циклов работы клеток
    1 период - утро: солнечные клетки работают на 80%, лунные на 20%
    2 период - день: солнечные клетки работают на 100%, на 0%
    3 период - вечер: и солнечные и лунные клетки работают на 50%
    4 период - ночь: солнечные работают на 0%, лунные на 100%
    таким образом все виды без лунных клеток не получающие по другому энергию будут вымирать ночью, а без солнечных днем.
    также можно добавить клетки-клыки которые будут отстреливаться и лететь по прямой оставляя за собой энергетическую дорожку а встречая другую клетку заменять ее на энергетическую дорожку и тем самым соединяя два организма в один
    также можно добавить воздух и сделать так чтобы он распределялся равно мерно по всей карте
    в воздухе будет три вещества: кислород, азот, углекислый газ
    лунной и солнечной клетке нужен углекислый газ для работы они его перерабатывают в кислород
    семечку, отростку, клыку нужен кислород для работы
    органическому корню(красной клетке) и энергетическому корню(синей клетке) нужен и кислород и углекислый газ
    но им нужна прохлада
    кислород выравнивает температуру
    углекислый газ повышает температуру
    азот понижает температуру
    можно добавить также клетку которая будет перерабатывать все газы в энергию и на оборот для тех случаев когда не хватает газов но эта клетка будет потреблять большое количество энергии
    можно кислород раскрашивать зеленым, азот - синим, углекислый газ красным

  • @tohtarbekovabzal189
    @tohtarbekovabzal189 2 месяца назад

    Это звучит очень круто, желаем вам удачи! Вы лучший!

  • @UsualNerd
    @UsualNerd 2 месяца назад +1

    Если новое состояние клеточного автомата строить исключительно на основе старого (read-only), то порядок перебора клеток никак не может повлиять на результат.
    По какой-то причине этот способ не подошёл, и в вашем варианте состояние только одно, и по мере вычислений изменяет само себя?

    • @KTonberry
      @KTonberry 2 месяца назад

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

    • @progressive_agriculture
      @progressive_agriculture 2 месяца назад

      @@KTonberry 1 клетка победит. Ни чего страшного. Если 2 воробья бросаются на 1 зернышко, то достается, обычно, одному. А вот куда в очереди попадет потомок - это вопрос. Но он уже будет конкурировать и с предком и соседом, при том, сместившись. Опять же, на следующем такое каждая из клеток окажется в своем новом состоянии исполняя свою часть генома. Шанс того, что 2 соседа будут стремиться к одному и тому же - занять клетку, объесть ее, отрастить потомка - не велик.

    • @foo52ru
      @foo52ru  2 месяца назад

      Это не клеточный автомат.
      Или я не правильно понимаю, что такое клеточный автомат

    • @UsualNerd
      @UsualNerd 2 месяца назад

      @@foo52ru Так и есть, в вашем случае это не клеточный автомат, потому что клетки вычисляют своё новое состояние S(t+1) на основе не только старого S(t), но и самого себя, т.е. рекурсивно, отсюда и неопределённости.

  • @sabbat8310
    @sabbat8310 2 месяца назад

    Спасибо за видео! Вечер обещает быть интересным :)

  • @chillbear7051
    @chillbear7051 2 месяца назад +2

    А может сделать гексагональную сетку?

    • @foo52ru
      @foo52ru  2 месяца назад

      Можно, но немного сложнее. По моим представлениям, это кардинально ничего не меняет, но должно выглядеть более красиво и естественно

  • @VErshov.
    @VErshov. 2 месяца назад +1

    Считай мы в расчёте

  • @ruby_linaris
    @ruby_linaris 2 месяца назад

    вместо хранения прошлой-следующей в списке "всех", хранить только указатель на клетку (картотека живых клеток) (можно просто битовой картой, раз матрица статическая, и хранить индекс первой незаполненной), можно распараллелить, и хранить N списков-N картотек, например, 2х2, порождающий 4-е картотеки, (k00, k 01, k10, k11) разбивая карту на 4 равноправные непересекающиеся подкарты-полосы, для минимизации взаимного влияния от соседних полос.
    но возникает проблема синхронизации, которая может просадить быстродействие полностью, упростим:
    каждая подкарта может отправлять запрос к процессам рождения, уничтожения, которые, уже в свою очередь, получают управление после того как все подкарты отработают свой цикл.
    а вставлять/убирать (отдельным от подкарт циклом) уплотняя карты живых... работая исключительно с началом и концом свободных позиций...
    хм... с энергией что-то странное ... лучше сразу разбить на мир энергетических, мир транспортных и мир жующих... и просто контролировать, чтобы не было однофамильцев. и...?! зачем симулировать передачу энергии? если есть источник, есть путь, есть приемник ... то можно успокоится, и ждать когда что-то поломается, тогда уже перерисовать путь передачи энергии, и отправить все запросы на очистку и освобождение.
    с aG-table мое предложение модификации... If_P_aG If_P_aG If_P_aG Cmd_aG1_aG2, те проверка первого условия - первый ген или команда, на второе условие его ген или команда, третье - аналогичное, а потом рандомно либо команду, либо замену гена, как условие "иначе".

    • @progressive_agriculture
      @progressive_agriculture 2 месяца назад +1

      Втыкать новорожденных, или смещать на границе подвижных можно отдельным потоком в цикле в процессе отработки по заявкам от больших массивов. Делать их очень много очень маленьких - нет смысла. Не более, чем 2-4 чисел ядер у процессора. В современных реалиях порядка 16/64 полей. Опять же, если в конкретный момент существует 4 элемента, бить их на 64 процесса смысла нет. Должно быть некое минимальное количество, что параллелить.

  • @user-ze3ez3iy6c
    @user-ze3ez3iy6c 2 месяца назад +1

    Посчитал...
    Поле размером 8192х8192.
    Что бы в каждой клетке хранить геном, понадобится 42 Гб оперативы

    • @xelizy
      @xelizy Месяц назад

      128GB + Xeon + 4090.

    • @Valentin_I
      @Valentin_I Месяц назад

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

  • @shoxruX_wantxo
    @shoxruX_wantxo 2 месяца назад

    ТехноШаман на какой программе происходит визуализация?

  • @gok-pro
    @gok-pro 2 месяца назад

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

    • @foo52ru
      @foo52ru  2 месяца назад

      язык Processing. Библиотеки не используются

  • @Green_slimer
    @Green_slimer 2 месяца назад +1

    Когда видео про кочевников это мой любимые существа!!!???

  • @SIM31r
    @SIM31r 2 месяца назад

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

    • @progressive_agriculture
      @progressive_agriculture 2 месяца назад

      Всему свое время. Половину времени жизни на зкмле ни каких сейронов не было вообще. Были одноклеточные без нервов и мозгов. Торопиться не надо!

  • @PJutch
    @PJutch 2 месяца назад

    Кстати, забыл спросить, а почему выбрана такая система распределения энергии? Можно же распространять её, например, диффузией. Правда тогда нужно как-то по-другому понимать, когда организму умирать или уметь создавать новые отростки... Вообще было бы интересно сделать, чтобы организмы развивали свою систему распределения энергии со всякими регуляторами и аккумуляторами... Хотя я подозреваю победит что-нибудь простое, вроде спамь генераторами и не парься, но ведь не факт)

    • @foo52ru
      @foo52ru  2 месяца назад

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

    • @PJutch
      @PJutch 2 месяца назад

      @@foo52ru кстати с диффузией энергия от суперорганизмов будет равномерно распределяться по поверхности, а не скапливаться в линиях. Это наверное может к вымиранию привести.

  • @Shedshebolda
    @Shedshebolda 2 месяца назад

    Ураааааааа

  • @snickersdestroyer
    @snickersdestroyer 2 месяца назад

    Ех хочется 2х часовую версию без коментариев. Посмотреть как ячейки бегают суетятся

  • @ataksanimation176
    @ataksanimation176 2 месяца назад +1

    А техношаман не думал о веб версии такой симуляции - или непотянет?

  • @Maturman
    @Maturman 2 месяца назад +1

    А если мутациям дать возможность не просто менять геном, а создавать его участки. Т. е. Был геном с одним условием - стало 2, было 4 условия, стало 3. А чтобы не стало слишком много условий храниться, то чем их больше тем чаще она удаляется. Можно, например для КАЖДОГО условия сделать шанс удаления, чтобы всё было относительно нормально

    • @progressive_agriculture
      @progressive_agriculture 2 месяца назад +1

      Можно, но тогда это будет на порядок сложней написать. Сейчас все объекты одинаковые по структуре, а там все будут разные. И работать такая тема сразу после написания станет медленней.

    • @Maturman
      @Maturman 2 месяца назад +1

      @@progressive_agriculture С чего бы? Он же не проверяет код каждый раз, а проходится по нему последовательно. Просто идея реализации неограниченного количества условий для клетки.

    • @progressive_agriculture
      @progressive_agriculture 2 месяца назад

      @@Maturman Потому что структура генома и последовательность действий четко заточена на размер таблицы генома. А если количество условий меняется произвольно от клетки к летке, то структура вычислений будет разная. размер таблички будет разный да и количество табличек у одной клетки может быть разным. А это значит, что больше вычислений, больше сложность. Дольше обсчитывать. Даже на первом элементе. Клетка одна, учитывать возможную сложность надо уже с первого цикла.

    • @Maturman
      @Maturman 2 месяца назад

      @@progressive_agriculture Естественно, если больше условий, то и больше вычислений. И так и не понял вас¯\_(ツ)_/¯

    • @progressive_agriculture
      @progressive_agriculture 2 месяца назад

      @@MaturmanСейчас количество условий одинаковое. Количество генов у всех клеток одинаковое. Структура программы простая. Скорость выше. Ошибок меньше. Добавляем возможность иметь больше условий - усложняется структура программы. Скорость работы падает. Размерность генома меняется. Растет время на обсчет - скорость падает. Повышается сложность обработки генома - падает скорость. Растут ошибки.
      В целом. Сложней, медленней, косячней. Попробуй все это удержи в голове и расчитай! Вот возьми и попробуй! 😉

  • @akotchnev
    @akotchnev 2 месяца назад

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

    • @pka_human
      @pka_human 2 месяца назад +1

      Тоже изначально так подумал, но прикол вот в чём. Допустим у нас есть некие две клетки, клетки находятся близко но не касаются (фактически между ними одна клетка) . Каждая из клеток хочет сделать ответвление в сторону соседней как можно быстрее. Вопрос, какая из клеток породит ещё одну? Вот зачем автор рассказывал о приоритетах, проблему с приоритетами нужно решить справедливо для всех клеток. Насколько я знаю у него в симуляции используется, как вы выразились "два списка" (вообще по правильному они называются буферы). При опоре на текущее состояние в попытке создать новое всё-равно будет всплывать проблема приоритетов. Это не "игра в жизнь", это нечто гораздо более сложное.

  • @melrim3958
    @melrim3958 2 месяца назад

    Техношаману. Энергия не является веществом, энергия также не является полем. Энергию следует понимать как процесс перехода материи из одного состояния в другое. Условия для энергии, или цепного запуска изменений, соблюдаются всегда. Мы называем этот набор условий материальным миром.
    Вы говорите, что в многоклеточном организме движется энергия!? Что там движется?
    Является ли процесс моделирования в компьютере материальным миром?

  • @Rocalic
    @Rocalic 2 месяца назад +1

    3:57 а что насчёт противоположной стороны от родительской клетки?

    • @Rocalic
      @Rocalic 2 месяца назад +1

      Или например выбирать случайные из списка?

    • @foo52ru
      @foo52ru  2 месяца назад

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

    • @Rocalic
      @Rocalic 2 месяца назад

      @@foo52ru нет, в смысле, например, на тайкоде клетка 7 создаёт клетку между пятой и четвёртой.

  • @EVpatiy_
    @EVpatiy_ 2 месяца назад +7

    Когда многопоточная оптимизация?

    • @Roid92
      @Roid92 2 месяца назад

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

    • @user-wi4hz9lo7p
      @user-wi4hz9lo7p 2 месяца назад

      @@Roid92 Спасибо, тоже мучился этим вопросом. Подскажи а перевод вычислений на видеокарту возможен? и если да, как это повлияет на производительность?

    • @Myself0094
      @Myself0094 2 месяца назад

      @@Roid92 ну вообще смысл может быть, если отрисовка фреймов для видео происходит последовательно в процессе симуляции. Дампить стейт каждые сколько-то итераций основного цикла симуляции в одном потоке грубо говоря и рисовать фреймы, читая дамп в другом потоке может быть более выгодно. Если сделать все это например на CUDA, то и то и другое станет ощутимо быстрее

    • @user-wi4hz9lo7p
      @user-wi4hz9lo7p 2 месяца назад

      @@Myself0094 но опять вылезает проблема синхронизации между потоками ((( Спасибо что уделил время👍

    • @Roid92
      @Roid92 2 месяца назад

      @@Myself0094 отрисовка кадра выполняется практически моментально после полного расчета следующего шага (либо шага отдельно взятого организма). кадр ведь составлен из простейших примитивов, на двумерной плоскости. тут тупо ведь простейшая математика и условные переходы во всех их многообразии, никаких векторных величин, а тем более алгоритмов трасировки нет...
      грубо говоря отрисовка кадра в этом всем мероприятии занимает меньше 1% времени...
      и отсюда вытекает вопрос, стоит ли вообще думать в эту сторону, если скорость работы в лучшем случае увеличится на 1%, а скорее всего наоборот даже упадет. ведь всей симуляции постоянно нужно что-то записывать в энергонезависимую память (а это только через процессор). так же простейшие математические операции выполняются процессором быстрее, чем графическим ядром (название ядра как бы намекает, да?)
      а вообще у меня есть огромное подозрение, что это не запись экрана на видео - а отдельно сгенерированные кадры каждого шага, которые потом сложены в секвенцию из обычных картинок на постобработке. причем возможно у автора генерируются несколько изображений сразу для каждого кадра (с разным видом карты: организмы, энергия, органика в почве и т.д.). на выходе несколько секвенций идеально засинхронизированных. все остальное в видео - постобработка и монтаж).
      такой подход позволяет спокойно держать одну симуляцию неделями, не боясь перебоев электричества и тому подобного. я бы вообще запускал такую симуляцию на условной малинке без монитора, и просто раз в день забирал с нее картинки))

  • @Occultist_
    @Occultist_ 2 месяца назад

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