Pull to refresh

Comments 34

если долго держать смерч над помойкой, то может собраться Боинг-747.
Возможно из этого принципа сделали приложение «Социальный мониторинг»
а теперь из этих наработок сделают приложение для мигрантов

А не «правильнее» ли было бы генерировать AST, а потом из него код?
Ведь там-то дерево и всё уже готово.

возможно, что и да) но я не знаю этот модуль, гляну, спасибо
Сразу вспомнил «iPhuck 10» Пелевина. Окончание там трагическое. Но может это только у Пелевина.
это не имеет значения в данном коде сейчас
Хм… весьма интересно. А сам язык получил какое-нибудь продолжение в гражданском обороте? Просто в инете кроме этой ссылки ничего не видно на первый взгляд.
UFO just landed and posted this here
Смотря ЧТО зачем? Генератор нужен для того, чтобы у цифрового организма была возможность формировать рандомные реакции на входящие данные. А сам организм — это попытка не мучаться со сложными алгоритмами, которые так или иначе являются упрощением, а дать им вырасти самим так сказать в «естественной» среде уже без всякого упрощения. Потом их можно будет изучать и в ряде случаев, возможно, даже использовать для решения практических задач. Но о полном контроле над ними тут, конечно, надо забыть. сразу же.
Я тоже не сразу понял, но это похоже на попытку сделать что-то вроде модели для нейронной сети, но с задокументированной целевой функцией на Python.

Я не знаю что там автор хочет делать дальше, но если он хочет «цифровую жизнь в пробирке» — то можно задать этому «организму» набор доступных действий, скажем, над файлами — создать, записать, удалить, и тп. Затем нагенерировать десяток триллионов таких ЦФ и запустить в контейнерах. Возможно хоть один и сможет в итоге создать файл с «Hello» текстом внутри. Зато получим программу которая написана полностью алгоритмом.

Ну или можно запустить генерацию и запуск этих ЦФ лет на 10 непрерывно и, возможно, в итоге оно само выберется из контейнера и пришлет письмо автору. Или на Хабр напишет о себе.
Вы верно уловили про «набор доступных действий» — это будет в самом конце, когда можно будет этими наборами делать специфичные программы, заточенные под те или иные объекты. Но насчет десятилетий и триллионов генераций, я не уверен, что потребуется столько времени. Мы же не тупо генерируем исполняемую строку из 256 символов перебором, а пытаемся генерировать конструкции, что должно существенно уменьшать время. Плюс к этому следующим шагом будет разработка модели памяти, которая, как я думаю, должна мне через определенное время выдавать повторяющиеся действия, а не только хаотические — это тоже, вероятно, снизит время, особенно учитывая, что в память будет уходить не всё, а только то, что прошло по критериям.
Как-то переусложнено.
1) Есть лишь 1 вариант условия (немного смнемокоденно):
if cond :
    for j in range(1,randint(0, max_expr))
        expres
for i in range(0,randint(0, max_elif))
    elif cond :
         for j in range(1,randint(0, max_expr))
             expres
for i in range(0,randint(0, 1))
    else:
         for j in range(1,randint(0, max_expr))
             expres

Где в виде выражениями может быть либо действие, либо ещё одно ветвление.

И не забывайте, в подобной структуре будет много «интронов» — мёртвого кода вроде if false или if true
Спасибо за вариант, но в этой схеме невозможно дальнейшее ветвление elif и else, т.к. и то и другое заканчивается просто выражениями expres. Т.е. на выходе тут в общем случае будет что-то такое:
if [..]:
   [..]
elif [..]:
    [..]
    [..]
elif [..]:
    [..]
    [..]
     ..
else:
    [..]
    [..] 


Но никогда не будет, например, такого:
if [..]:
   [..]
elif [..]:
    [..]
    [..]
    elif [..]:
        [..]
        [..]
     ..
else:
    if []:
        [..]
        [..]


А значит вся генерация упрется лишь в одну тривиальную схему, а мне нужна максимальная вариативность. Кроме того, max_elif и max_expr задают здесь конечное число elif и выражений, тогда как генерация должна быть теоретически не ограничена, и значит ее никак нельзя ограничивать с помощью range.
всё равно будут ограничения временем выполнения, ограничением памяти и переполнения стеков и т.д.
И сколь сложно не строй, всё равно пока получается лишь такое:
человек идет есть, если голоден

Человек ест и когда не голоден. И не ест, когда голоден. Процесс часто совсем не случайный. Голоден, а нет еды. Либо еда есть, но нужно поделиться с близкими.
Человеческое поведение сложней, чем модель стимул-реакция.
Вспоминая Докинза, основную идею можно выразить так: если долго держать смерч над помойкой, то может собраться Боинг-747.

Это сколько миллиардов лет нужно ждать? Каких-то 15? Ответ известен — никогда. Помойку раскидает в разные стороны, и в очаге не останется предметов для создания боинга, даже если они там были.
Прежде чем чего-то получится, должно быть нечто осознающее себя, свои желания и потребности. Желание летать было раньше Боинга — 747. Желание алгоритмизировать было раньше программы, выводящую «Hello World!!!», на экран монитора.
Вы какое свое желание хотите реализовать?
Спасибо за ответ, но, к сожалению, по первой части логику вы обрисовали неправильно.

«Либо еда есть, но нужно поделиться с близкими.» — здесь ЕСЛИ нужно поделиться с друзьями и ЕСЛИ еда есть, то — нужно поделиться. 2 условия и одна реакция. Стимул в виде 2 условий и реакция. Ведь «нужно поделиться» говорит о наличии у человека морального принципа: «ЕСЛИ у меня есть, ТО нужно поделиться» — 1 условие и 1 реакция.

«Человек ест и когда не голоден.». Значит он ест по другой причине, но эта причина всегда есть и она всегда является условием.

«И не ест, когда голоден.». Аналогично. Не ест по какой-то причине. Например, IF [нет еды]: не ем — условие и реакция.

«Процесс часто совсем не случайный.». Фишка в том, что он всегда не случайный. Всегда действия обусловлены чем-то. Поэтому не только человеческое поведение можно уложить в модель «стимул-реакция», но и вообще всё, что биологией считается живым.

Что же касается второй части, тут, вероятно, вам просто немного не хватает знаний. Вселенная сложилась примерно за 14млрд. лет из взаимодействия разрозненных частиц в полном хаосе. Неужели вы думаете, что генерация какого-то там кода или сборка какого-то там Боинга займет времени на целый миллиард лет больше? «Помойка» тогда 14 млрд. лет назад была гигантской, но она не просто сложила Боинг, но даже и человека, который его произвел, который сам по себе является куда более сложной конструкцией, чем самолет.

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

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

2. 14 или 15 млрд. лет — это не принципиальная разница по сравнению с жизнью человека. Во вторых вы оперируете гипотезой, о том что было в точке сингулярности. Была ли она никто не знает и доказать не может. Возвращаясь к условиям. Есть стандартная модель, которая построена на наличие симметрии. Есть большой вопрос про возникновение самой такой симметрии и какова ее вероятность. Но даже эта симметрия, если опереться на теорию суперструн. Может быть реализована 10 в 500 степени способов. Тут мы опять возвращаемся к начальным и граничным условиям. Вы можете спокойно посчитать, сколько времени нужно будет, чтоб просто перебрать все возможные начальные конфигурации.
3. По поводу искусственного интеллекта. Для того чтобы появились хищники и животные в поле, должна быть интерпретация что такое хищник, а что такое травоядное.
Начальные условия задает человек из своих желаний и представления, во вторых он же задает возможное поле объектов и операции над ними. Вы не можете сказать, что любое поле над любыми объектами дифференцируется на хищников и травоядных. А тем более доказать, что такие поля эквивалентны живой природе.
Есть такая теорема Больцано-Вейерштрассе, что из любой ограниченной последовательности можно выделить сходящуюся последовательность. Так и в хаусе, при своем желании можно увидеть любые объекты, любые процессы и их интерпретировать по своему желанию.
Это основная проблема, выделяя из поля структуры, человек наделяет их своими смыслами. Кто-то видит хищников и животных, кто-то мужчин и женщин. Но это всегда интерпретация наблюдателя, человека со своим жизненным опытом. Но вы никогда не поймете, почему одни объекты гоняются за другими. Потому что они хотят есть как хищник, или потому что просто считают, что другие не красивые и портят вид на поле, или хотят вам понравиться. Пока эти объекты не осознают себя и не смогут сообщить об этом, вы это никогда не узнаете.
1. Чтобы не уходить в оффтоп, давайте я объясню вам примерно, как я вижу будущую программу. Предположим на вход поступает информация об очередном объекте в виде цифрового массива такого состава: 1 — файл, 2-тип файла(исполняемый, текстовый и т.д.), 3-длинна, 4-количество строк и т.д. Т.е. это будет типа листа в Питоне [1, 3, 431, 67]. Вот этот входящий массив — УЖЕ УСЛОВИЕ. Это — внешний фактор. Потому что в памяти у программы будут зашиты предыдущие массивы со своими данными и действия, которая она предпринимала с ними раньше. С некоторой вероятностью, если входящий массив совпадает с ними, она будет принимать те же решения, которая принимала раньше. Таким образом, если поначалу эти действия будут абсолютно хаотичными, то с течением времени (очень небольшого, т.к. даже сейчас это 250 генераций в секунду) они станут частично повторяющимися, т.е. если код менял в текстовом файле 1-ю и 2-ю строку местами раньше, то он будет тоже самое делать и сейчас — таким образом, будет видна так сказать «осмысленность» действия, потому что оно повторяется. Но не всегда будет применяться память из-за вероятности в принятии решений — возможна и рандомная генерация на знакомый образ. И то, что такая «осмысленность» с нашей, человеческой точки зрения, не будет иметь смысла, будет иметь смысл с точки зрения кода. У него родится собственное поведение пусть даже нам не понятное и кажущееся бредом. Поэтому, когда вы спрашиваете меня: «Вот вы видите еду и человек не ест, вы можете по факту наблюдения вывести условия?», то поймите, что тут нет задачи вывести условия или что-то там предсказать, вмешиваться в какие-то наблюдения и т.д. Я априори знаю, что если он не ест, то на это есть причина, и если он ест, то на это есть причина, и если он поднял руку, на это есть причина, и любое его действие обусловлено причиной, которую мне знать совершенно не важно, мне главное, что модель «внешний фактор-реакция» работает тут на 100%.

2. «14 или 15 млрд. лет — это не принципиальная разница по сравнению с жизнью человека.» — т.е. вы по-прежнему считаете, что генерация кода займет примерно столько времени? Зачем гадать на кофейной гуще? — когда код будет завершен, это время само себя покажет довольно быстро и тут сразу не подсчитаешь все возможные варианты, да это и не нужно, потому что не нужен полный перебор тем более непоследовательный. Это не брутфорс и не тупая генерация в лоб строки перебором символов — посмотрите внимательно на код — там генерируются структуры, а не отдельные символы.

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

Кто определяет что эта задача нужна человеку или нет? Ну наверное только человек. Вы же не предлагаете человеку проверять нужность каждого стационарного кода?
Так вы предлагаете создавать случайное синтаксическое дерево на основе лексем языка python. Можно это делать на лексемах абстрактной машине и потом написать транслятор этого дерева на любой язык программирования. С точки зрения проектирования — это более правильный путь, так как вы не будите мешать синтаксис с лексикой.
Вы поинтересуйтесь профессией QA Engineer и почему она не исчезнет. Почему автоматического тестирования недостаточно, почему нужен code review. Под этим всем есть строгие математические доказательства. ИИ этих проблем не решит.
Спасибо, книжку посмотрю. Но надо понимать, что ИИ не отменяет математики, теоремы Гёделя. Даже если о нем рассказывают талантливые популяризаторы.
1. Для питона есть функции и объекты работы с его грамматикой
docs.python.org/3/library/tokenize.html
docs.python.org/3/library/parser.html
docs.python.org/3/library/ast.html#module-ast
На нем можно спокойно работать на уровне синтетического дерева.
2.
И кстати, если бы вы интересовались таким разделом ИИ, как «Искусственная жизнь», то знали бы, как без всяких осознаний своих желаний и потребностей генерируются на искусственном поле «хищники» и «травоядные»

Просмотрел я раздел 7 рекомендованной книги.
Там хищники, травоядные и трава заданы аксиоматически, по ЖЕЛАНИЮ программиста. Там также заданы операции по ЖЕЛАНИЮ автора. Там даже польза задана руками: для того чтобы размножится, нужно сожрать n других объектов.
Там есть осознание через программиста.
Про АСТ мне уже говорили выше в комментах, я понял, спасибо.

Я надеюсь вы внимательно прочитали раздел в книге. Например, там есть абзац «Интересные стратегии». У травоядных сформировалась стратегия «инстинкт стада», т.е. когда одно травоядное следует за другим, если оно находится в области «фронт», а у хищников была такая, чтобы найти растения и подстерегать возле них травоядных, которая продержалась недолго, т.к. травоядные быстро научились избегать хищников в таких условиях.

И если вы это читали, то должны были задать себе свой собственный вопрос: а созданы ли были эти стратегии по ЖЕЛАНИЮ программиста? И ответ должен был бы также легко найтись: конечно нет. Следовательно, нечто похожее на стратегии биологических животных (например, стадность) проявилось без всякого изначального умысла или желания просто методом генерации и обычного отбора. Понимаете, что в таком случае совершенно неважно, что хищники, травоядные и трава заданы аксиоматически? Важно то, что их поведение само по себе складывается и никем не задается. Также как и в моём случае — генератор я пишу по своему желанию, но я понятия не имею о том, какой код будет сгенерирован, что он будет делать и какие стратегии у него сложатся. Причем если бы вы читали внимательно, то обратили бы также внимание на то, что «аксиоматика» у них задана очень плохенько: хищники и травоядные не знают, что они хищники и травоядные, что они должны есть и могут умирать. У меня же в коде вообще будет неизвестно, что получится: «хищник», «травоядный», «трава», «голосовой хелпер», «шут гороховый», «мучитель принтера» и т.д. — может получиться всё, что угодно. В этом и есть смысл свободного кода: не пихать в него свои хотелки, желания, представления о том, как надо, ML/DL модели и прочее — мы просто даём жизни развиваться и самой себе вырабатывать желания, направления и т.п.

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

Вы игнорируете главный вопрос, как вы поймете, что программа созданная программой полезна?
Программа «Hello world» никому не нужна. Ее каждый школьник напишет за пару минут.
Если вы займетесь моделированием на уровне молекул, то там тоже образуются устойчивые структуры. Но вот к живым системам это не имеет никакого отношения.
Так и с моделью жизни про хищников и травоядных. То чего описываете — это формирование устойчивых структур взаимодействия, которые зависят от начальной аксиоматики. И проблема таких систем не в том, что увидеть их, а в том чтобы появилось принципиально новое на уровне аксиом.
В этой модели трава никогда не станет ядовитой. В природе сплошь и рядом, травы становятся ядовитыми, травоядные охотятся за хищниками. Хищники жрут траву. Хищники убивают хищников, травоядные травоядных. Также наблюдается дружба между хищниками и травоядными. Такие стратегии с заданной аксиоматикой никогда не появятся… А это значит, что такая модель, хоть и содержит какие-то элементы, наблюдаемые в природе, но совершенно не годятся для практического моделирования жизни. Это все пока еще не живое.
Как итог.
Применить мат. методы к конечной аксиоматике и найти какие-то устойчивые структуры в нем. Это не проблема. Это еще греки делали.
Проблема в том, что аксиоматик бесконечно много. Структуры не устойчивы, то есть небольшое изменение в аксиоматике приводит к разным устойчивым структурам, разницу между ними нельзя выразить в качестве непрерывной функции от изменения аксиоматики.
Пробуйте, пока вы еще не понимаете, почему ваша задача не решена. Только туда куда вы идете уже ходили. Собственно на ней и появилась теория алгоритмов. Набьете шишек, пойдете читать учебники.
Как вы поймете, что код с генерированный вашей программы готов?
— вы про этот вопрос? Потому что вопрос про полезность, я, к сожалению, не нашел. Ну ладно отвечу на оба. Готов он будет тогда, когда заработают все 3 модуля и код будет выдавать мне свои рандомные действия, которые я постараюсь зафиксировать. Полезность же можно оценить только в том случае, если была задана изначальная цель и получены конечные результаты. В моем случае, если код просто будет работать, и «жить» так сказать, я сразу же пойму, что он для меня полезен. Если же говорить про другую «полезность», более общую, то её, при желании, можно будет увидеть, изменяя третий модуль, который отвечает за специализацию кода. Полезность будет понятна от постановки конкретной задачи. На данном этапе кроме задачи работоспособности и рандомной генерации с использованием памяти, нет.

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

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

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

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

Такие стратегии с заданной аксиоматикой никогда не появятся…

Вот поэтому когда вы генерите РАНДОМНЫЙ код, то никакой изначальной аксиоматики и не закладывается. Вообще никакой. В такой системе может происходить ВСЁ, что угодно: и ядовитая трава и весь спектр поведения.

Это все пока еще не живое.

Здесь вы правы, и именно это я и пытаюсь изменить.

Только туда куда вы идете уже ходили.
. Я боюсь, вы не до конца понимаете, что именно я пытаюсь написать. Уж точно не то, что делали греки. У меня нет тут никаких аксиоматик, — все кирпичи строятся рандомно (случайно), и структуры на их основе тоже рандомны, где же тут аксиоматика и греки?

Набьете шишек, пойдете читать учебники.

Спасибо за пожелание. Учиться, учиться и еще раз учиться (с)

Наличие структур в живых организмах — это необходимое условие, но оно не является достаточным. Если вы возьмете любое неживое, там тоже будут устойчивые структуры.
Поэтому само наличие структур не может быть основанием, для утверждения о том, что это живое или не живое. Их отличает что-то другое. Но это действительно очень сложный вопрос. Точно не на эту задачу.
Если вам тема интересна. То сейчас развивается такое направление как autoML
ru.wikipedia.org/wiki/%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5
По желанию, вы можете найти реализации его у Google, Microsoft и т.д.
Идея там простая. Вы скармливаете данные, указываете тип задачи. Шайтан машина прогоняет ваши данные через множество моделей, в том числе и современных, основанных на последних работах по ИИ. Выстраивает рейтинг алгоритмов, моделей. Вы выбираете какой хотите или указываете критерии и получаете код. В MS на C#
если входящий массив совпадает с ними, она будет принимать те же решения, которая принимала раньше. Таким образом, если поначалу эти действия будут абсолютно хаотичными, то с течением времени они станут частично повторяющимися, — таким образом, будет видна так сказать «осмысленность» действия, потому что оно повторяется.

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

Вы игнорируете главный вопрос, как вы поймете, что программа созданная программой полезна?

Я тоже хотел задать этот вопрос. У вас нет ГА, нет фитнес-функции, ничто не делает оценку качества сгенерированного кода. У среды нет никаких ограничений. В примере, который приводите всё жёстко зарегулировано, от того и появляются там «виды» и разные типы поведений. Например, сбивание травоядных в табун и скрытие хищника в кустах напрямую вытекают из заданных изначально свойств пространства: отсутствие телепортации и заслонение видимости.

В вашем же случае окажется, что что-то там булькает и крякает. А что она делает? А фиг знает, мы же её ни в чём не ограничивали — свобода кода. А потому хоть 15 миллиардов, хоть триллион — имеем просто случайное бесцельное перемешивание бит, а не цифровую жизнь.
Почему вы это считаете чем-то «осмысленным»?

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

… ничто не делает оценку качества сгенерированного кода.

В этом и есть сложность — не давать критериев оценки, потому что они, с большой долей вероятности будут либо ошибочными, либо неполными — и тут дело не столько субъективном взгляде на критерии, а в том, что они до конца неизвестны даже науке. В природе есть только один наиболее объективный критерий — приспособленность того или иного экземпляра к окружающей среде. Здесь нужно повторить то же самое. Ну совсем без них, наверное, не обойтись, потому что мы работаем в среде программирования и ОС, но я пока вижу только один возможный — выполнение кода без ошибок, тогда except будет утилизировать нерабочий код, а весь рабочий код будет исполняться, все остальное должно утилизироваться ОС, оставляя «жить» только приспособленные экземпляры.

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

Не надо абсолютизировать пример. Авторы хотели показать сам принцип появления поведения изначально не заложенного, а не пытаться реализовать всё целиком. И да, атомы тоже жёстко зарегулированы, что не помешало им, взаимодействуя, образовать молекулы, а тем — химические соединения, которые переросли в организмы — детерминированность кирпичей никак не отменяет возможность построения на их основе сложной синергетической иерархии — большего и не требуется.

А что она делает?

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

а также ознакомиться в общих чертах с генетическими алгоритмами (в особенности с рекомбинацией и мутацией)
Мой вопрос про отсутствие у вас фитнес-функции должен был как бы намекнуть, что мне про ГА рассказывать не надо. )) Не буду настаивать. Начнёте экспериментировать, сами заметите, что без отбора один единственный рандом даст только шум. Главное проверять свои идеи на практике, так как мы все так или иначе до экспериментов плаваем в своих фантазиях.
Да, сорри, невнимательно прочёл. Если говорить про генератор в этой статье, то фитнес-функция здесь, очевидно, не нужна, потому что код еще не самодостаточен: этот генератор только часть организма. В самом же организме очевидно, без отбора не обойтись. Но я не хочу конкретизировать фитнес-функцию и устанавливать критерии сам, мне нужна ее генерация и возможно закрепление через определенное время (возможно через переключатели) — тут пока еще общая концепция в голове разрабатывается.
В начале было слово и это слово Бог. Бог вездесущ, то есть присутствует везде. Применительно к материальному миру это чего либо начало, центр, ось, ноль, рут, точка покоя и т.д. и т.п. В математике Марка Родина это цифра девять. В каждой молекуле, клетке, человеке Бог. Человека, клетку, организм, можно представить как точку куда стекается вся информация и в этом месте принимается решение (важная-неважная). Живые организмы начинаются с одной клетки и смысл её существования заключается в балансе трех вещей: еда(ресурсы), секс(размножение), доминирование (статус, положение среди себе подобных, в пространстве и т.д.). Организм обязан соблюдать баланс этих трех иначе погибнет(примет решение произвести апоптоз). Два типа взаимодействия: Симбиоз (совместное взаимовыгодное развитие друг друга), Паразитизм (захват и присвоение у другого). Организм из рецепторов сохраняет объекты окружающего мира путём его маркировки по трем этим параметрам(уровень еды, уровень избытка, уровень доминирования) и присваивает тройной уникальный код (еда, секс, статус), аналог кодонов в ДНК. Что, когда, как и кому делать хранится в ДНК (база данных). Тут скорее не ELSE IF, а уже CASE )))
Sign up to leave a comment.

Articles