macroevolution (
macroevolution) wrote2012-07-07 06:02 pm
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
3D
Количество щупалец у нашей 3D-медузы определяется чувствительностью сигнального каскада, который блокирует превращение клеток "ободка" в клетки - зачатки щупалец. Сигнальное вещество, блокирующее это превращение, выделяется клетками - зачатками щупалец (отрицательная обратная связь). Таким образом, из состояния "одно щупальце" в состояние "очень много щупалец" медуза может перейти в результате одной мутации, которая подпортит что-нибудь в сигнальном каскаде, сделав его менее чувствительным к сигнальному веществу. Цифирки - пороговые концентрации сигнального вещества, при которых клетки ободка не могут превратиться в зачатки щупалец.
Я все надеюсь выложить эту программу в сеть, чтобы все могли скачать, поиграть, посоздавать зверей... Может быть, в ближайшие дни удастся это сделать.
Про 2D-версию - доклад
no subject
Вообще-то тезис Чёрча-Тьюринга как бы говорит нам, что на любом тьюринг-полном языке можно выразить любой алгоритм, то бишь любой набор операций над данными. Посему рассмотрение генома как языка программирования ничуть не теряет в общности.
> И нет разницы, на каком языке был этот объект создан.
Вы так говорите, как будто я не знаю, что на любом тьюринг-полном языке можно написать любой другой.
> И нет разницы, какой язык мы эмулируем: какой нам удобней, такой и делаем.
Я бы сказал, что языки по степени удобства (особенно для эволюции) заметно различаются, посему разница налицо. Представьте, например, что вы задаёте геномы своих агентов на чистом С++. Каково вам будет их мутировать и какой их процент будет хотя бы компилироваться?
> У каждой описательной модели найдётся дело, мне кажется. Сети хороши для одних функций, последовательное вычисления для других. Важно найти, как к этим функциям из приспособить.
Насколько я знаю, нейронные сети плохо масштабируются. То бишь сложно получить нейронную сеть, которая бы хорошо справлялась со сложной задачей. Да и вообще, на языке программирования нейронную сеть написать - раз плюнуть, а сделать на нейронных сетях язык программирования - ну разве что составлять из нейронов целый процессор с памятью.
> Потому что вроде бы обеспечить эволюцию их тела, чтоб всякие лапки-рожки вырастали и шевелились, ещё примерно понятно как то вот касательно появления неожиданной функциональности, у меня пока больше вопросов, чем ответов.
Я на эту тему думаю следующее. Физическую модель надо простейшую. Зато надо наделить агентов способностью атаковать друг друга, обмениваться сообщениями и прилипать друг к другу. Тогда мы сможем получить, например, самопроизвольное возникновение многоклеточности - понятное дело, что двоим атаковать одного сподручнее. А дальше, возможно, будут возникать более сложные коллективы клеток и системы управления в них. Также должны и эволюционировать и системы распознавания "свой-чужой" - ведь атаковать своих не имеет смысла, но с другой стороны паразиты запросто могут представляться своими. По идее так может возникнуть и дипломатия (т. н. social intelligence hypothesis). На мой взгляд это было бы интереснее, нежели просто эволюция рогов-копыт. Хотя ежели в физической модели будет возможность фиксации и определения относительного положения клеток, то и рога с копытами вполне смогут образовываться.
no subject
Да я согласен, С++ как есть не годится для генома. На нём пишется программа-оболочку, а внутри неё строится подъязык, оптимальный для конкретной задачи. Не знаю, лучше ли лисп для этого подходит, не пробовал.
Впрочем, эта дискуссия не такая уж принципиальная, лучше обсуждать средства реализации тогда, когда у нас уже появится идея совместного эксперимента.
> Насколько я знаю, нейронные сети плохо масштабируются. То бишь сложно получить нейронную сеть, которая бы хорошо справлялась со сложной задачей
А вот я как раз пытаюсь модифицировать архитектуру нейронной сети и механизм её эволюции, чтоб она умела постепенно нащупывать сложные стратегии. Не скажу, что на даный момент я достиг в этом больших успехов, но идей для эксперимнтов много, думаю, среди них найдётся работающая.
> а сделать на нейронных сетях язык программирования - ну разве что составлять из нейронов целый процессор с памятью
Вообще-то нейросеть является языком программирования, просто очень специфическим. Писать на нём программу значит добавлять нейроны, соединять их с другими нейронами и модифицировать синапсы.
> надо наделить агентов способностью атаковать друг друга, обмениваться сообщениями и прилипать друг к другу. Тогда мы сможем получить, например, самопроизвольное возникновение многоклеточности
Да, это интересно. Если возникнет синхронизация делений, чтоб группа соединившихся агентов размножалась одновременно и дети образовывали бы такую же связанную группу - например, за счёт возникновения "языка" связей между ними, чтоб все знали, к кому цепляться. И чтоб всё это развивалось на фоне спецификации отдельных членов этого метаорганизма. Хотя я бы это назвал скорей симбиозом, а не многоклеточностью. Многоклеточность - это когда геном один и тот же у всех клеток, и дети вырастают в организм путём деления и дифференциации отдельных клеток.
no subject
> А вот я как раз пытаюсь модифицировать архитектуру нейронной сети и механизм её эволюции, чтоб она умела постепенно нащупывать сложные стратегии.
Было бы интересно ознакомиться. Кстати, вам знакомы такие слова, как EANT и NEAT? А то я знаю одного человека, который NEAT пытается улучшать.
> но идей для эксперимнтов много, думаю, среди них найдётся работающая.
Огласите весь список, пожалуйста.
> Вообще-то нейросеть является языком программирования, просто очень специфическим.
Разумеется. Я хотел сказать, что "человеческим" языком программирования в львиной доле случаев проще выразить алгоритм, оттого, собственно, программы пишутся на "языках", а не на "сетях". И что с моей точки зрения такие языки (конечно, с некоторыми поправками) должны быть эффективнее и в эволюционном процессе.
> Хотя я бы это назвал скорей симбиозом, а не многоклеточностью.
Ну скажем так, я думаю, что изначально будет наблюдаться как раз многоклеточность, то бишь нерасхождение "продуктов деления" - ибо это куда проще и вероятнее, нежели сотрудничество с неродственным агентом. С другой стороны, в силу этой же причины неродственная кооперация была бы ещё более интересна. Ежели, конечно, будет наблюдаться.
> Многоклеточность - это когда геном один и тот же у всех клеток
Не совсем - иначе бы, например, не было раковых заболеваний. Собственно говоря, и коллективность интересна не сама по себе, а в свете того, что коллектив может быть легко угроблен одним затесавшимся (или случайно возникшим) паразитом. Ежели бы все коллективы, единожды сложившись, вечно бы процветали, то и интереса бы в них никакого не было. А вот когда коллектив можно легко разрушить изнутри - тогда он должен изобретать какие-то методы защиты от паразитов. А когда он их изобретёт, то запросто может возникнуть паразит, на которого этот метод не действует. Тогда изобретается новый метод, появляется новый паразит и т. п. Получаем классический эффект красной королевы - эволюция сама себя подстёгивает к тому, чтобы идти быстрее. Правда, в моделях пока что добиться такого эффекта не получается - либо возникают нерушимые коллективы, либо непобедимые паразиты, и всё заканчивается. Но очевидно, что в "живой природе" сия гонка зашла уже весьма далеко, и ежели подобное удастся воссоздать в модели, то это и будет подтверждением гипотезы о социальном интеллекте, а может быть, даже и сильным ИИ.
> тогда, когда у нас уже появится идея совместного эксперимента.
Я подозреваю, что это будет всё же не совместная идея, а комбинация "личных" идей. Посему жду ваших предложений, а со своей стороны помимо озвученного упомяну следующую вещь - создать эдакий фреймворк для искусственной жизни, дабы, во-первых, можно было бы менять среду для агентов, а во-вторых - в общей среде сталкивать агентов, построенных на различных принципах - например, ваш нейроэволюционный алгоритм против лисп-подобного языка и против однослойной нейронной сети. Соль в том, что это позволит напрямую сравнить, какой "язык" круче. Пока что я видел проекты только с одним языком и одним игровым миром, что не позволяет совершенствовать то и другое на основании сколько-либо осмысленных критериев.