Pull to refresh

Comments 49

Очень интересно. Спасибо за статью.
Спасибо всем за отзывы. Рад, что многим понравилось. Вечером постараюсь по подробней ответить на замечания и вопросы.
О! Отличная статья. А не подскажите, реально ли на сегодня создать подобие модели простейшего живого существа? В принципе если представить память(компьютера) как жизненное пространство, а процессорное время как питательная среда, должно что-то само развивающееся получиться.
Возможно уже и создали — всё зависит от того, какое понятие вкладывать в простейшее живое существо. Мне кажется, определяющую роль играет среда обитания — на голых скалах кроме «лишая» ничего не вырастит.
Машинную память, если мне не изменяет она же, пожирали самые первые компьютерные вирусы.

Когда включаешь-выключаешь гены, тултипы остаются и мешают.
Пока не знаю как исправить — похоже, тултипы не успевают перерисовываться во время обсчёта графа большого размера. В этом случае я останавливаю «процесс», выключаю/выключаю ген и запускаю снова.
Так… «Волостая окружность», «пальцастая гантелька», записал :)
Да, по-моему, названия шедевральны.
А вообще алгоритм очень интересен и наглядность программы радует. Сам занимаюсь КА.
Спасибо автору за утренний позитив!
Это не я :-) Большую часть названий придумала моя пятилетняя дочка, которая была использована «в тёмную» в качестве альфа тестера. Она ведь думала, что играет. Кроме «странной фигуры 1 и 2», т.к. ничего странного она в этих «кустах» не нашла :-)
А не поделитесь программкой? Уж очень хочется самому потыкать :)
UFO just landed and posted this here
Это самое интересное! Мозг частенько выламывает. Ну и, возможно, кто-нибудь найдёт ошибки в реализации.

Пока могу предложить следующее: сегодня-завтра добавлю кнопку загрузки хромосомы из xml (xaml) файла и выложу вместе с примером такого файла. На «настольной» версии я так и делаю, так как удобного интерфейса по редактированию генов не придумал.

Единственное, в сильверлайт версии не отображается в виде текста текущее и предыдущее состояние узла — не совсем удобно «отлаживать» код (генетический).


а как самому писать гены?
Возиться с программой очень занимательно, особенно отрезать куски от графов и смотреть как они вырастают заново
Автор молодец, что тут скажешь.
Желаю успехов в дальнейших планах!
Криминально интересно, спасибо!
Люди, сильверлайт не нужен, остановитесь пока не поздно!
По поводу сильверлайта: так было легче всего, практически без переделок, «опубликовать» готовое десктопное C#|WPF приложение. Понятно, что у половины народу пока не получиться «пощупать», но тратить время на другую технологию не хотелось. Совсем не против, если кто-нибудь сделает на SVG или Flash — уверен, можно сделать не хуже.
Плохо, что люди используют не кроссплатформенную технологию, да. И чем более она популярна, тем обломнее пользователям альтернативных ОС.
а вы проверили под moonlight?
или только предполагаете, что не будет работать?
у меня под moonlight не заработало.
Это кросс-платформенная технология.
Да. Но работает она только на платформах Microsoft.
У нас внутреннее приложение написано на сильверлайт. Пришли к клиенту, а у него под линуксом на ASUS eee PC 900 оно крутится. Были удивлены.
Усложнять правила для атвоматов не стоит, как показал дяденька Вольфрам, поведения произвольной сложности (универсальности в вычислительном смысле) можно достичь с минимальным набором и сложностью правил, лишь бы автомат с таким набором был способен показывать поведения класса 4. А дальше уже GA создадут нужный генотип.
Да, как раз и есть желание нащупать необходимый минимум операций.
Правда, от идеалов может быть придётся и отступить: в конце концов, и в современные процессоры регулярно добавляют всё новые и новые расширения (SSE, раньше FPU и прочие) для удобства «программирования» и/или из-за архитектурных соображений, а не сводят всё к машине Тьюринга.

В GUCA, например, условие по предыдущему состоянию добавил лишь для удобства «программирования» графов (сокращает количество кода и время на отладку), но отключив это условие при поиске решений генетическим алгоритмом, заметил что GA находит решение примерно за тоже самое время, что и с дополнительным правилом.
Я считаю, что это направление очень перспективное. Поздравляю!
Честно говоря, не знаю, насчёт перспективности. Может быть и тупиковое. Но путь пройти всё равно надо, считаю :-)
Полюбуйтесь хотя бы на цветы, продукты эволюции, и перестаньте слушать скептиков.
эх под бубунтой 64 в хроме — пустой экран(
Интересно!

> Соединение узла с ближайшим не соединённым узлом, находящимся в состоянии X
А ближайший узел определяется по топологии графа или геометрически?
Ближайший узел определяется по топологии, причём узел не должен находится на расстоянии более чем 2-3 ребра (задаётся глобальным параметром) — это чтобы обеспечить условие локальности… и производительности тоже. Если узла «поблизости» нет, то соединение не происходит.

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

Например, если замедлить «внутриклеточные» процессы в «странной фигуре 1», то она вытянется вдоль и концевые узлы будут далеко друг от друга, а если ускорить «метаболизм» (или замедлить среду обитания сделав её вязкой) — то новорождённые узлы не будут успевать отойти друг от друга на большое расстояние.

То, что граф в демонстрационном приложении отображается на плоскости, не должно вводить в заблуждение о механизме его происхождения — можно запросто изменить «отображалку» на 3D-версию и выглядеть тот же самый граф в пространстве будет заметно по другому. А такие приложения графов, как нейронная сеть, вряд ли должны зависеть от параметров отображения графов для зрителей.

Конечно, можно и даже любопытно «наворачивать» и/или параметризовать правила используя и другие меры (геометрические), и на самом деле, в известной нам жизни так и происходит (грубо говоря, выделяются гормоны — сиськи растут). Да и при росте организмов в известной нам жизни, геометрия именно трёхмерного мира, без условно, определяет «упаковку» и взаимное расположение делящихся клеток относительно друг друга.

Но это задача уже следующего уровня, мне кажется. Для небольших многоклеточных организмов «близкодействие» весомее «дальнодействия».
Спасибо за развернутый ответ! Да, топологически с практической точки зрения правильнее. А геометрически могут очень интересные штуки получаться.
Очень интересная статья и, вообще, тема. Сразу же закралась мысль, нельзя ли сделать самовоспроизводящийся «организм». Возможно, все решилось бы добвалением нового действия «разорвать связь» в конечный автомат. Потом решил почитать, как именно это реализовано у природы. Пошел смотреть в гугл как воспроизводится ДНК. Оказалось совсем не похоже на то, что у Вас. Там напрочь отсутствует конечный автомат. Вся репликация проходит за счет связей между элементами.
Идея хорошая… Рад, что подобные идеи приходят не только в мою голову — есть с кем обсудить :-).

Как раз такая операция введена («отсоединения от узла X обозначим –X»). И, если у Вас в браузере отображается демонстрационное приложение, Вы и сами можете понаблюдать как она работает — в «волосатой окружности» и её гибриде, а также в шестиугольнике. Чтобы рассмотреть подробности — лучше замедлить процесс, установив флажок «Slow down...»

Более того, если бы в демонстрационном приложении, отрезанные «осколки» графа не удалялись бы автоматически, то можно было бы увидеть, что «осколки» иногда тоже начинают расти и жить.

Ничто не мешает «запрограммировать» граф таким образом чтобы после его «разворачивания» из начального зародыша (узла в состоянии А), он на определённой стадии отстреливал от себя один или несколько таких же зародышей. Тогда будет цепная реакция.

Что касается ДНК — я как раз стремился абстрагироваться от подробностей конкретной реализации жизни на нашей планете, сконцентрировавшись именно на принципах образования формы (морфогенеза). Единственное что роднит GUCA с ДНК, так это буквы сокращений нуклеиновых оснований её РНК-отпечатка (G, U, С, A -гуанин, урацил, цитозин, аденин).

Насколько я понял, клетка устроена не проще аэробуса и ДНК/РНК могут кодировать уйму туч самых разных белков и прочих деталек, участвующих в сложных многоходовках химических/механических процессов. Если уж проводить аналогию, то состояние в клеточном автомате — это макросостояние клетки — определённый её химический/электростатический состав с определённым набором уже извлечённых из генома белков/ферментов. Клетки взаимодействуют с соседними и в зависимости от этого взаимодействия, а также от текущего состояния извлекают из генома другие вещества (белки/гены), которые меняют её исходное состояние на другое или запускают операцию деления… или смерти. И так далее… Пока не съедят :-)
Если честно, пока «как есть» просто стыдно публиковать — много мусорного кода да и без краткого описания «конструкционных» решений не всегда можно разобраться. На выходных постараюсь почистить (не поломав) и опубликовать проект.
UFO just landed and posted this here
да это же Brawler из Total Annihilation! :)
Огромное спасибо за статью. Я и сам давно интересуюсь генетическими алгоритмами и вообще эволюцией. Мне очень понравилась идея о размножении графов. Здесь уже пахнет Искусственной Жизнью. Остается только добавить движение и взаимодействие между особями. Я бы с большим удовольствием сам поэкспериментировал с живыми графами. Очень хочется увидеть ваш код, чтобы не писать это все с нуля. Буду рад, если вы поделитесь ссылкой на исходники.
Привет. Ссылка на исходники указана в UPD2. Уже тогда несколько продвинулся дальше и «рожаю» с помощью генетического алгоритма новые «виды», но на это планируется (уже который год) отдельная статья
Подход и сами «живые» графы похожи на графы вычислительной Вселенной: habr.com/ru/post/518206. Скорее всего, они ими и являются, просто правила в другом формате записи.

«Странная фигура 1» демонстрирует распад физического пространства на несвязанные области, ака чёрные дыры или разбег галактик. А «Кокошник» в своей внутренней структуре действительно должен быть искривлён гравитацией из-за энергии, поддерживающей структуру этого 2D пространства.
Да видел, спасибо. Возможно, как не раз бывало в истории науки, междисциплинарный подход поможет выработать более компактную модель мира и эволюционные биологи, программисты помогут физикам найти нужное правило на графах, а математики с физиками подскажут биологам как работает эволюция сложных систем.
Sign up to leave a comment.

Articles

Change theme settings