Да, сорри, невнимательно прочёл. Если говорить про генератор в этой статье, то фитнес-функция здесь, очевидно, не нужна, потому что код еще не самодостаточен: этот генератор только часть организма. В самом же организме очевидно, без отбора не обойтись. Но я не хочу конкретизировать фитнес-функцию и устанавливать критерии сам, мне нужна ее генерация и возможно закрепление через определенное время (возможно через переключатели) — тут пока еще общая концепция в голове разрабатывается.
Это терминологический вопрос больше. Наверное, не то, чтобы «осмысленным», а скорее похожим на существующие живые системы, которые проявляют закономерности поведения, т.е. их реакции на одно и то же зачастую повторяются. А похожесть можно условно трактовать как «осмысленность», если, конечно, мы допускаем, что биологические животные, например, действуют осмысленно. Также здесь я хочу увидеть самосинхронизацию из хаотических процессов, о которой читал у одного математика. Про пример с кубиком можно сказать, что его центр тяжести в зависимости от внешних и внутренних условий меняется, позволяя выпадать то одной грани, то другой и остается постоянным, если условия не меняются.
… ничто не делает оценку качества сгенерированного кода.
В этом и есть сложность — не давать критериев оценки, потому что они, с большой долей вероятности будут либо ошибочными, либо неполными — и тут дело не столько субъективном взгляде на критерии, а в том, что они до конца неизвестны даже науке. В природе есть только один наиболее объективный критерий — приспособленность того или иного экземпляра к окружающей среде. Здесь нужно повторить то же самое. Ну совсем без них, наверное, не обойтись, потому что мы работаем в среде программирования и ОС, но я пока вижу только один возможный — выполнение кода без ошибок, тогда except будет утилизировать нерабочий код, а весь рабочий код будет исполняться, все остальное должно утилизироваться ОС, оставляя «жить» только приспособленные экземпляры.
Например, сбивание травоядных в табун и скрытие хищника в кустах напрямую вытекают из заданных изначально свойств пространства: отсутствие телепортации и заслонение видимости.
Не надо абсолютизировать пример. Авторы хотели показать сам принцип появления поведения изначально не заложенного, а не пытаться реализовать всё целиком. И да, атомы тоже жёстко зарегулированы, что не помешало им, взаимодействуя, образовать молекулы, а тем — химические соединения, которые переросли в организмы — детерминированность кирпичей никак не отменяет возможность построения на их основе сложной синергетической иерархии — большего и не требуется.
А что она делает?
Не поверите, но это самый частый вопрос, который я слышу от программистов. К сожалению долгое прибывание в профессиональной среде обязывает задавать такие вопросы, потому что когда ты изо дня в день, из года в год получаешь задачи и пишешь программы, которые их решают, то складывается впечатление, что и любой следующий код должен ЧТО-ТО делать, направленное на решение задачи. Только вот когда задача стоит так: «Напиши мне аналог биологической жизни», то тут без биологической базы невозможно даже подступиться к ее решению: здесь не работают ни ML, ни DL, ни математика, ни какие-либо еще известные алгоритмы (во всяком случае целиком). При этом само решение — это как раз «булькать и что-то там крякать» — весьма непривычный для любого программиста метод. Подобное «бульканье и кряканье» в биологической природе приводит к тому, что, например, бактерии вырабатывают резистентность к антибиотикам, вирусы — к противовирусным, а опухоли сопротивляются химиотерапии — там не заседают штабы, которые планируют как им сопротивляться и что им делать, — они «булькают»(рекомбинируя) и «крякают» (мутируя), и за счет этого появляются поколения, которые живут дальше. Рандомно! И для того, чтобы это спокойно воспринимать как данность, достаточно прочесть хотя бы парочку научно-популярных книжек по эволюционной биологии, чего не делают не то, что подавляющее число программистов (им это просто не нужно для их задач), а вообще подавляющее число людей (им просто неинтересно). Но если вы хотите разбираться в подобных вещах и иметь взгляд, отличающийся от обывательского, я могу порекомендовать вам прочесть, например, «От атомов к древу» Ястребова или, что еще лучше, — «Рождение сложности» Маркова, а также ознакомиться в общих чертах с генетическими алгоритмами (в особенности с рекомбинацией и мутацией).
Потенциально система неограниченно растёт вверх, на каждом уровне решая всё более и более абстрактные задачи, но такое построение ограничено соображениями обозримости.
Насколько я понял из прочитанного, система растёт не вверх, а вниз. Контролер получает задачу сверху, а не составляет ее по информации снизу. Контролёр декомпозирует полученную задачу на подзадачи, делегируя их исполнение вниз, и нижние контролеры делают то же самое — дифференцируют подзадачу на еще более мелкие и передают их на исполнение дальше вниз. Наверх же уходит только отчет о выполнении (состояние), но интегративного процесса тут не видно от слова «совсем». И такое построение вполне обозримо: его предел наступает в точке атомарной операции, ниже которой нечего делегировать.
Если проанализировать задачу, она состоит из нескольких явно выраженных подзадач… Каждая из отдельных задач раскладывается на несколько подзадач.
Ну а вот это уже и есть интеллектуальная деятельность. От сложного к простому. Как контролер будет понимать, что «нужно добраться из пункта А в пункт B» и при этом «не умереть»? Каков механизм такого «понимания»? Если контролёр это должен сам понять каким-то образом, то каким? Перебором? Но тогда придется отбить бока обо все препятствия на пути и несколько раз «умереть». Причем такое шатание и «смерти» не прекратятся, так как в системе нет памяти, а следовательно, и обучения. А если контролёру разбиение на подзадачи прописывать на каждом подуровне человеческими руками, то тогда мы получим банальный жесткий алгоритм, который будет способен действовать плюс-минус нормально в конкретной обстановке, но не будет работать при появлении сторонних неучтенных факторов или смене обстановки — т.е. об универсальности и речи не будет даже в рамках одной стратегической задачи.
Как вы поймете, что код с генерированный вашей программы готов?
— вы про этот вопрос? Потому что вопрос про полезность, я, к сожалению, не нашел. Ну ладно отвечу на оба. Готов он будет тогда, когда заработают все 3 модуля и код будет выдавать мне свои рандомные действия, которые я постараюсь зафиксировать. Полезность же можно оценить только в том случае, если была задана изначальная цель и получены конечные результаты. В моем случае, если код просто будет работать, и «жить» так сказать, я сразу же пойму, что он для меня полезен. Если же говорить про другую «полезность», более общую, то её, при желании, можно будет увидеть, изменяя третий модуль, который отвечает за специализацию кода. Полезность будет понятна от постановки конкретной задачи. На данном этапе кроме задачи работоспособности и рандомной генерации с использованием памяти, нет.
Если вы займетесь моделированием на уровне молекул, то там тоже образуются устойчивые структуры. Но вот к живым системам это не имеет никакого отношения.
Вообще-то имеет, так всё живое состоит из этих структур. Если вы в этом сомневаетесь, можете открыть любой учебник по биохимии или молекулярной биологии и самостоятельно в этом убедиться.
И проблема таких систем не в том, что увидеть их, а в том чтобы появилось принципиально новое на уровне аксиом.
Зачем? Мне как раз достаточно увидеть принципиально новое в структурах взаимодействия, а не «на уровне аксиом». Вы когда держите телефон в руке, то ожидаете услышать что-то новое по телефону, а не какие-то изменения в руке.
В этой модели трава никогда не станет ядовитой.
Если прописать такую возможность, то станет. Но для авторов не было такой задачи.
Такие стратегии с заданной аксиоматикой никогда не появятся…
Вот поэтому когда вы генерите РАНДОМНЫЙ код, то никакой изначальной аксиоматики и не закладывается. Вообще никакой. В такой системе может происходить ВСЁ, что угодно: и ядовитая трава и весь спектр поведения.
Это все пока еще не живое.
Здесь вы правы, и именно это я и пытаюсь изменить.
Только туда куда вы идете уже ходили.
. Я боюсь, вы не до конца понимаете, что именно я пытаюсь написать. Уж точно не то, что делали греки. У меня нет тут никаких аксиоматик, — все кирпичи строятся рандомно (случайно), и структуры на их основе тоже рандомны, где же тут аксиоматика и греки?
Набьете шишек, пойдете читать учебники.
Спасибо за пожелание. Учиться, учиться и еще раз учиться (с)
Про АСТ мне уже говорили выше в комментах, я понял, спасибо.
Я надеюсь вы внимательно прочитали раздел в книге. Например, там есть абзац «Интересные стратегии». У травоядных сформировалась стратегия «инстинкт стада», т.е. когда одно травоядное следует за другим, если оно находится в области «фронт», а у хищников была такая, чтобы найти растения и подстерегать возле них травоядных, которая продержалась недолго, т.к. травоядные быстро научились избегать хищников в таких условиях.
И если вы это читали, то должны были задать себе свой собственный вопрос: а созданы ли были эти стратегии по ЖЕЛАНИЮ программиста? И ответ должен был бы также легко найтись: конечно нет. Следовательно, нечто похожее на стратегии биологических животных (например, стадность) проявилось без всякого изначального умысла или желания просто методом генерации и обычного отбора. Понимаете, что в таком случае совершенно неважно, что хищники, травоядные и трава заданы аксиоматически? Важно то, что их поведение само по себе складывается и никем не задается. Также как и в моём случае — генератор я пишу по своему желанию, но я понятия не имею о том, какой код будет сгенерирован, что он будет делать и какие стратегии у него сложатся. Причем если бы вы читали внимательно, то обратили бы также внимание на то, что «аксиоматика» у них задана очень плохенько: хищники и травоядные не знают, что они хищники и травоядные, что они должны есть и могут умирать. У меня же в коде вообще будет неизвестно, что получится: «хищник», «травоядный», «трава», «голосовой хелпер», «шут гороховый», «мучитель принтера» и т.д. — может получиться всё, что угодно. В этом и есть смысл свободного кода: не пихать в него свои хотелки, желания, представления о том, как надо, ML/DL модели и прочее — мы просто даём жизни развиваться и самой себе вырабатывать желания, направления и т.п.
AutoML я глянул, но это другая область. ML — это чисто математические алгоритмы и сейчас они все подвернуты под datascience с конкретными бизнес-задачами (в основном предиктивная аналитика и рекомендательные системы, а также всякого рода распознавалки). Я их в данный момент изучаю, но они вряд ли применимы для целей проекта в данной статье.
Хм… весьма интересно. А сам язык получил какое-нибудь продолжение в гражданском обороте? Просто в инете кроме этой ссылки ничего не видно на первый взгляд.
1. Чтобы не уходить в оффтоп, давайте я объясню вам примерно, как я вижу будущую программу. Предположим на вход поступает информация об очередном объекте в виде цифрового массива такого состава: 1 — файл, 2-тип файла(исполняемый, текстовый и т.д.), 3-длинна, 4-количество строк и т.д. Т.е. это будет типа листа в Питоне [1, 3, 431, 67]. Вот этот входящий массив — УЖЕ УСЛОВИЕ. Это — внешний фактор. Потому что в памяти у программы будут зашиты предыдущие массивы со своими данными и действия, которая она предпринимала с ними раньше. С некоторой вероятностью, если входящий массив совпадает с ними, она будет принимать те же решения, которая принимала раньше. Таким образом, если поначалу эти действия будут абсолютно хаотичными, то с течением времени (очень небольшого, т.к. даже сейчас это 250 генераций в секунду) они станут частично повторяющимися, т.е. если код менял в текстовом файле 1-ю и 2-ю строку местами раньше, то он будет тоже самое делать и сейчас — таким образом, будет видна так сказать «осмысленность» действия, потому что оно повторяется. Но не всегда будет применяться память из-за вероятности в принятии решений — возможна и рандомная генерация на знакомый образ. И то, что такая «осмысленность» с нашей, человеческой точки зрения, не будет иметь смысла, будет иметь смысл с точки зрения кода. У него родится собственное поведение пусть даже нам не понятное и кажущееся бредом. Поэтому, когда вы спрашиваете меня: «Вот вы видите еду и человек не ест, вы можете по факту наблюдения вывести условия?», то поймите, что тут нет задачи вывести условия или что-то там предсказать, вмешиваться в какие-то наблюдения и т.д. Я априори знаю, что если он не ест, то на это есть причина, и если он ест, то на это есть причина, и если он поднял руку, на это есть причина, и любое его действие обусловлено причиной, которую мне знать совершенно не важно, мне главное, что модель «внешний фактор-реакция» работает тут на 100%.
2. «14 или 15 млрд. лет — это не принципиальная разница по сравнению с жизнью человека.» — т.е. вы по-прежнему считаете, что генерация кода займет примерно столько времени? Зачем гадать на кофейной гуще? — когда код будет завершен, это время само себя покажет довольно быстро и тут сразу не подсчитаешь все возможные варианты, да это и не нужно, потому что не нужен полный перебор тем более непоследовательный. Это не брутфорс и не тупая генерация в лоб строки перебором символов — посмотрите внимательно на код — там генерируются структуры, а не отдельные символы.
3. По поводу темы «Искусственной жизни» я вам рекомендую поизучать внимательнее тему. Прочтите, например, книгу «Программирование искусственного интеллекта в приложениях» (М. Тим Джонс) раздел 7, иначе нормальное обсуждение алгоритмов, которые лично у меня не вызывают сомнений, перетечет в абстрактные размышления об «интерпретации наблюдателя», совершенно здесь неуместные. И когда вы прочтете, каким образом «хищники» становятся вдруг хищниками, а «травоядные» травоядными, то у вас, поверьте, отпадут все вопросы по поводу почему они вдруг гоняются друг за другом и их поведение так напоминает поведение хищников и травоядных в биологической природе.
Спасибо за ответ, но, к сожалению, по первой части логику вы обрисовали неправильно.
«Либо еда есть, но нужно поделиться с близкими.» — здесь ЕСЛИ нужно поделиться с друзьями и ЕСЛИ еда есть, то — нужно поделиться. 2 условия и одна реакция. Стимул в виде 2 условий и реакция. Ведь «нужно поделиться» говорит о наличии у человека морального принципа: «ЕСЛИ у меня есть, ТО нужно поделиться» — 1 условие и 1 реакция.
«Человек ест и когда не голоден.». Значит он ест по другой причине, но эта причина всегда есть и она всегда является условием.
«И не ест, когда голоден.». Аналогично. Не ест по какой-то причине. Например, IF [нет еды]: не ем — условие и реакция.
«Процесс часто совсем не случайный.». Фишка в том, что он всегда не случайный. Всегда действия обусловлены чем-то. Поэтому не только человеческое поведение можно уложить в модель «стимул-реакция», но и вообще всё, что биологией считается живым.
Что же касается второй части, тут, вероятно, вам просто немного не хватает знаний. Вселенная сложилась примерно за 14млрд. лет из взаимодействия разрозненных частиц в полном хаосе. Неужели вы думаете, что генерация какого-то там кода или сборка какого-то там Боинга займет времени на целый миллиард лет больше? «Помойка» тогда 14 млрд. лет назад была гигантской, но она не просто сложила Боинг, но даже и человека, который его произвел, который сам по себе является куда более сложной конструкцией, чем самолет.
«Прежде чем чего-то получится, должно быть нечто осознающее себя, свои желания и потребности. ». А у кого было желание сложить человека? А Вселенную? И кстати, если бы вы интересовались таким разделом ИИ, как «Искусственная жизнь», то знали бы, как без всяких осознаний своих желаний и потребностей генерируются на искусственном поле «хищники» и «травоядные», которые не то что себя не осознают, но даже не знают, что они хищники и травоядные, что они могут умирать и даже, что им нужно есть для существования — и меж делом через несколько миллионов итераций (не лет!) те же «хищники» и «травоядные» каким-то чудодейственным образом охотятся друг за другом, убегают друг от друга, поджидают друг друга у мест кормления и используют обманные маневры — это поведение не закладывалось изначально, оно просто появилось банальной генерацией с отбором. И чтобы увидеть этот процесс никто не ждал не то что 15 млрд. лет, но даже одну неделю.
Спасибо за вариант, но в этой схеме невозможно дальнейшее ветвление elif и else, т.к. и то и другое заканчивается просто выражениями expres. Т.е. на выходе тут в общем случае будет что-то такое:
if [..]:
[..]
elif [..]:
[..]
[..]
elif [..]:
[..]
[..]
..
else:
if []:
[..]
[..]
А значит вся генерация упрется лишь в одну тривиальную схему, а мне нужна максимальная вариативность. Кроме того, max_elif и max_expr задают здесь конечное число elif и выражений, тогда как генерация должна быть теоретически не ограничена, и значит ее никак нельзя ограничивать с помощью range.
Вы верно уловили про «набор доступных действий» — это будет в самом конце, когда можно будет этими наборами делать специфичные программы, заточенные под те или иные объекты. Но насчет десятилетий и триллионов генераций, я не уверен, что потребуется столько времени. Мы же не тупо генерируем исполняемую строку из 256 символов перебором, а пытаемся генерировать конструкции, что должно существенно уменьшать время. Плюс к этому следующим шагом будет разработка модели памяти, которая, как я думаю, должна мне через определенное время выдавать повторяющиеся действия, а не только хаотические — это тоже, вероятно, снизит время, особенно учитывая, что в память будет уходить не всё, а только то, что прошло по критериям.
Смотря ЧТО зачем? Генератор нужен для того, чтобы у цифрового организма была возможность формировать рандомные реакции на входящие данные. А сам организм — это попытка не мучаться со сложными алгоритмами, которые так или иначе являются упрощением, а дать им вырасти самим так сказать в «естественной» среде уже без всякого упрощения. Потом их можно будет изучать и в ряде случаев, возможно, даже использовать для решения практических задач. Но о полном контроле над ними тут, конечно, надо забыть. сразу же.
Это терминологический вопрос больше. Наверное, не то, чтобы «осмысленным», а скорее похожим на существующие живые системы, которые проявляют закономерности поведения, т.е. их реакции на одно и то же зачастую повторяются. А похожесть можно условно трактовать как «осмысленность», если, конечно, мы допускаем, что биологические животные, например, действуют осмысленно. Также здесь я хочу увидеть самосинхронизацию из хаотических процессов, о которой читал у одного математика. Про пример с кубиком можно сказать, что его центр тяжести в зависимости от внешних и внутренних условий меняется, позволяя выпадать то одной грани, то другой и остается постоянным, если условия не меняются.
В этом и есть сложность — не давать критериев оценки, потому что они, с большой долей вероятности будут либо ошибочными, либо неполными — и тут дело не столько субъективном взгляде на критерии, а в том, что они до конца неизвестны даже науке. В природе есть только один наиболее объективный критерий — приспособленность того или иного экземпляра к окружающей среде. Здесь нужно повторить то же самое. Ну совсем без них, наверное, не обойтись, потому что мы работаем в среде программирования и ОС, но я пока вижу только один возможный — выполнение кода без ошибок, тогда except будет утилизировать нерабочий код, а весь рабочий код будет исполняться, все остальное должно утилизироваться ОС, оставляя «жить» только приспособленные экземпляры.
Не надо абсолютизировать пример. Авторы хотели показать сам принцип появления поведения изначально не заложенного, а не пытаться реализовать всё целиком. И да, атомы тоже жёстко зарегулированы, что не помешало им, взаимодействуя, образовать молекулы, а тем — химические соединения, которые переросли в организмы — детерминированность кирпичей никак не отменяет возможность построения на их основе сложной синергетической иерархии — большего и не требуется.
Не поверите, но это самый частый вопрос, который я слышу от программистов. К сожалению долгое прибывание в профессиональной среде обязывает задавать такие вопросы, потому что когда ты изо дня в день, из года в год получаешь задачи и пишешь программы, которые их решают, то складывается впечатление, что и любой следующий код должен ЧТО-ТО делать, направленное на решение задачи. Только вот когда задача стоит так: «Напиши мне аналог биологической жизни», то тут без биологической базы невозможно даже подступиться к ее решению: здесь не работают ни ML, ни DL, ни математика, ни какие-либо еще известные алгоритмы (во всяком случае целиком). При этом само решение — это как раз «булькать и что-то там крякать» — весьма непривычный для любого программиста метод. Подобное «бульканье и кряканье» в биологической природе приводит к тому, что, например, бактерии вырабатывают резистентность к антибиотикам, вирусы — к противовирусным, а опухоли сопротивляются химиотерапии — там не заседают штабы, которые планируют как им сопротивляться и что им делать, — они «булькают»(рекомбинируя) и «крякают» (мутируя), и за счет этого появляются поколения, которые живут дальше. Рандомно! И для того, чтобы это спокойно воспринимать как данность, достаточно прочесть хотя бы парочку научно-популярных книжек по эволюционной биологии, чего не делают не то, что подавляющее число программистов (им это просто не нужно для их задач), а вообще подавляющее число людей (им просто неинтересно). Но если вы хотите разбираться в подобных вещах и иметь взгляд, отличающийся от обывательского, я могу порекомендовать вам прочесть, например, «От атомов к древу» Ястребова или, что еще лучше, — «Рождение сложности» Маркова, а также ознакомиться в общих чертах с генетическими алгоритмами (в особенности с рекомбинацией и мутацией).
Насколько я понял из прочитанного, система растёт не вверх, а вниз. Контролер получает задачу сверху, а не составляет ее по информации снизу. Контролёр декомпозирует полученную задачу на подзадачи, делегируя их исполнение вниз, и нижние контролеры делают то же самое — дифференцируют подзадачу на еще более мелкие и передают их на исполнение дальше вниз. Наверх же уходит только отчет о выполнении (состояние), но интегративного процесса тут не видно от слова «совсем». И такое построение вполне обозримо: его предел наступает в точке атомарной операции, ниже которой нечего делегировать.
Ну а вот это уже и есть интеллектуальная деятельность. От сложного к простому. Как контролер будет понимать, что «нужно добраться из пункта А в пункт B» и при этом «не умереть»? Каков механизм такого «понимания»? Если контролёр это должен сам понять каким-то образом, то каким? Перебором? Но тогда придется отбить бока обо все препятствия на пути и несколько раз «умереть». Причем такое шатание и «смерти» не прекратятся, так как в системе нет памяти, а следовательно, и обучения. А если контролёру разбиение на подзадачи прописывать на каждом подуровне человеческими руками, то тогда мы получим банальный жесткий алгоритм, который будет способен действовать плюс-минус нормально в конкретной обстановке, но не будет работать при появлении сторонних неучтенных факторов или смене обстановки — т.е. об универсальности и речи не будет даже в рамках одной стратегической задачи.
Вообще-то имеет, так всё живое состоит из этих структур. Если вы в этом сомневаетесь, можете открыть любой учебник по биохимии или молекулярной биологии и самостоятельно в этом убедиться.
Зачем? Мне как раз достаточно увидеть принципиально новое в структурах взаимодействия, а не «на уровне аксиом». Вы когда держите телефон в руке, то ожидаете услышать что-то новое по телефону, а не какие-то изменения в руке.
Если прописать такую возможность, то станет. Но для авторов не было такой задачи.
Вот поэтому когда вы генерите РАНДОМНЫЙ код, то никакой изначальной аксиоматики и не закладывается. Вообще никакой. В такой системе может происходить ВСЁ, что угодно: и ядовитая трава и весь спектр поведения.
Здесь вы правы, и именно это я и пытаюсь изменить.
. Я боюсь, вы не до конца понимаете, что именно я пытаюсь написать. Уж точно не то, что делали греки. У меня нет тут никаких аксиоматик, — все кирпичи строятся рандомно (случайно), и структуры на их основе тоже рандомны, где же тут аксиоматика и греки?
Спасибо за пожелание. Учиться, учиться и еще раз учиться (с)
Я надеюсь вы внимательно прочитали раздел в книге. Например, там есть абзац «Интересные стратегии». У травоядных сформировалась стратегия «инстинкт стада», т.е. когда одно травоядное следует за другим, если оно находится в области «фронт», а у хищников была такая, чтобы найти растения и подстерегать возле них травоядных, которая продержалась недолго, т.к. травоядные быстро научились избегать хищников в таких условиях.
И если вы это читали, то должны были задать себе свой собственный вопрос: а созданы ли были эти стратегии по ЖЕЛАНИЮ программиста? И ответ должен был бы также легко найтись: конечно нет. Следовательно, нечто похожее на стратегии биологических животных (например, стадность) проявилось без всякого изначального умысла или желания просто методом генерации и обычного отбора. Понимаете, что в таком случае совершенно неважно, что хищники, травоядные и трава заданы аксиоматически? Важно то, что их поведение само по себе складывается и никем не задается. Также как и в моём случае — генератор я пишу по своему желанию, но я понятия не имею о том, какой код будет сгенерирован, что он будет делать и какие стратегии у него сложатся. Причем если бы вы читали внимательно, то обратили бы также внимание на то, что «аксиоматика» у них задана очень плохенько: хищники и травоядные не знают, что они хищники и травоядные, что они должны есть и могут умирать. У меня же в коде вообще будет неизвестно, что получится: «хищник», «травоядный», «трава», «голосовой хелпер», «шут гороховый», «мучитель принтера» и т.д. — может получиться всё, что угодно. В этом и есть смысл свободного кода: не пихать в него свои хотелки, желания, представления о том, как надо, ML/DL модели и прочее — мы просто даём жизни развиваться и самой себе вырабатывать желания, направления и т.п.
AutoML я глянул, но это другая область. ML — это чисто математические алгоритмы и сейчас они все подвернуты под datascience с конкретными бизнес-задачами (в основном предиктивная аналитика и рекомендательные системы, а также всякого рода распознавалки). Я их в данный момент изучаю, но они вряд ли применимы для целей проекта в данной статье.
2. «14 или 15 млрд. лет — это не принципиальная разница по сравнению с жизнью человека.» — т.е. вы по-прежнему считаете, что генерация кода займет примерно столько времени? Зачем гадать на кофейной гуще? — когда код будет завершен, это время само себя покажет довольно быстро и тут сразу не подсчитаешь все возможные варианты, да это и не нужно, потому что не нужен полный перебор тем более непоследовательный. Это не брутфорс и не тупая генерация в лоб строки перебором символов — посмотрите внимательно на код — там генерируются структуры, а не отдельные символы.
3. По поводу темы «Искусственной жизни» я вам рекомендую поизучать внимательнее тему. Прочтите, например, книгу «Программирование искусственного интеллекта в приложениях» (М. Тим Джонс) раздел 7, иначе нормальное обсуждение алгоритмов, которые лично у меня не вызывают сомнений, перетечет в абстрактные размышления об «интерпретации наблюдателя», совершенно здесь неуместные. И когда вы прочтете, каким образом «хищники» становятся вдруг хищниками, а «травоядные» травоядными, то у вас, поверьте, отпадут все вопросы по поводу почему они вдруг гоняются друг за другом и их поведение так напоминает поведение хищников и травоядных в биологической природе.
«Либо еда есть, но нужно поделиться с близкими.» — здесь ЕСЛИ нужно поделиться с друзьями и ЕСЛИ еда есть, то — нужно поделиться. 2 условия и одна реакция. Стимул в виде 2 условий и реакция. Ведь «нужно поделиться» говорит о наличии у человека морального принципа: «ЕСЛИ у меня есть, ТО нужно поделиться» — 1 условие и 1 реакция.
«Человек ест и когда не голоден.». Значит он ест по другой причине, но эта причина всегда есть и она всегда является условием.
«И не ест, когда голоден.». Аналогично. Не ест по какой-то причине. Например, IF [нет еды]: не ем — условие и реакция.
«Процесс часто совсем не случайный.». Фишка в том, что он всегда не случайный. Всегда действия обусловлены чем-то. Поэтому не только человеческое поведение можно уложить в модель «стимул-реакция», но и вообще всё, что биологией считается живым.
Что же касается второй части, тут, вероятно, вам просто немного не хватает знаний. Вселенная сложилась примерно за 14млрд. лет из взаимодействия разрозненных частиц в полном хаосе. Неужели вы думаете, что генерация какого-то там кода или сборка какого-то там Боинга займет времени на целый миллиард лет больше? «Помойка» тогда 14 млрд. лет назад была гигантской, но она не просто сложила Боинг, но даже и человека, который его произвел, который сам по себе является куда более сложной конструкцией, чем самолет.
«Прежде чем чего-то получится, должно быть нечто осознающее себя, свои желания и потребности. ». А у кого было желание сложить человека? А Вселенную? И кстати, если бы вы интересовались таким разделом ИИ, как «Искусственная жизнь», то знали бы, как без всяких осознаний своих желаний и потребностей генерируются на искусственном поле «хищники» и «травоядные», которые не то что себя не осознают, но даже не знают, что они хищники и травоядные, что они могут умирать и даже, что им нужно есть для существования — и меж делом через несколько миллионов итераций (не лет!) те же «хищники» и «травоядные» каким-то чудодейственным образом охотятся друг за другом, убегают друг от друга, поджидают друг друга у мест кормления и используют обманные маневры — это поведение не закладывалось изначально, оно просто появилось банальной генерацией с отбором. И чтобы увидеть этот процесс никто не ждал не то что 15 млрд. лет, но даже одну неделю.
Но никогда не будет, например, такого:
А значит вся генерация упрется лишь в одну тривиальную схему, а мне нужна максимальная вариативность. Кроме того, max_elif и max_expr задают здесь конечное число elif и выражений, тогда как генерация должна быть теоретически не ограничена, и значит ее никак нельзя ограничивать с помощью range.