Спасибо огромное!! После Вас я очень заинтересовался этой темой, Вы очень многое мне объяснили!! Спасибо!! Очень надеюсь, что Вы не забросите эту тему и будете продолжать этим заниматься))
Очень интересно, пожалуйста продолжите этот ваш эксперимент. Откройте свою страницу на патреон чтобы вас могли поддерживать материально, появится дополнительная мотивация.
Интереснее смотреть именно на поведение ботов в долгосрочной перспективе, как было в прошлых видео, как действует принцип селекции и как от этого менялась длительность жизни ботов, надеюсь по принципу размножения тоже будет такое видео. Хотелось бы чтобы каждое новое видео рассматривался отдельный фактор, если в первом видео была селекция, то в следующем размножение, потом, к примеру распространение вируса, конкуренция видов и т.д. А так - классно!
1:11 «опять двадцать пять» :) Занимательно, продолжайте в том же духе! Рекомендую ещё проследить, чтобы отношение сторон финального видео было строго 16:9. Удачи!
У меня появилась идея многоклеточного организма. Клетка случайно специальной командой прицепляет другую клетку к себе, их коды при этом склеиваются. Клеткам это будет выгодно за счёт расширения длины генома, но большая клетка неуклюжая, по этому в среднем эти организмы, я думаю, не будут больше 2-х, 3-х клеток. Хотя эволюция непредсказуема, может появятся и 200-клеточные монстры.
Я только сейчас допер... В системе команд нет NOP - одноячеечного "ничего не делать не тратя ход". Да и безусловные переходы на короткие дистанции вперед невозможны. Это, имхо, катастрофически замедляет эволюцию, делая гарантированно тупиковыми даже полезные последовательности но расположенные неудачно относительно полезных соседей... (Аргумент что бот мол может зациклиться отметаем, т.к. цепочка только из переходов возможна и в этой модели. Решается присвоением переходу затрат времени скажем в 1/10, а там сам вымрет ) Выход лично мне видится в отказе на ограничение значения в диапазоне 0..63, можно разрешить скажем 0..511 и брать остаток от деления на сколько там получится, как с поворотом. Тогда данное улучшение не потребует нового мира.
Очень круто. Мне особенно понравилась идея с "геномом" на 64 ячейки и механизм смещений по этому геному Я писал подобную программу на первом курсе универа, но использовал просто рандомизацию команд. Некоторые интересные явления наблюдались, но "генетической" составляющей никакой не было. Теперь хочу попробовать раскопать тот проект и попробовать добавить гены. Кстати, очень сильно влияет половое размножение и разные типы ботов. С половой системой все ясно, размножение только с противоположным полом, а по поводу типов - можно построить любую иерархию. У меня было 5 типов ботов, и свои не атаковали своих. Можно ещё разнообразить эту систему - добавить типы, которые "дружат", "нейтральные" типы и "враждебные" - те, кто при виде друг друга пытаются атаковать
беспереспективно, программа пишет свою программу. ее можно легко переобразовать в обычный код, будет работать все быстрее, но это и главный минус, т.к. дальнейшее обучение невозможно. при изменение условий нужно опять переобучать бота (помещать в лабу). все-таки для этого нужны нейронные сети, они будут обучаться все время.
такая идея появилась: добавить учет возраста например если бот продержался определенное количество времени, то например увеличивает запас хранимой энергии и реже дает потомство можно еще сделать мутацию не стабильной (каждый 4-й бот), а случайной так же можно сделать для хищников, чтоб при питании какой-то одной пищей другая пища являлась ядом например если бот ест фотосинтезаторов, то если переключиться на минералофагов или хищьников то они будут давать ему меньше энергии или являться ядом (в зависимости от мутации)
Ого, здорово! Интересно наблюдать эволюцию вживую. Я такие же эксперименты ставлю в Cell Lab, где можно наблюдать за развитием и эволюцией клеток в чашке Петри, меняя там условия. +в вк есть группа по этой игре, там я геномы выкладываю
Забавно. Я сам уже довольно давно вынашивал идею электронной биологии. Оказывается не я один. Впрочем я ни разу не програмист, так что шансов реализовать подобное у меня почти не было. Теперь мои идеи. 1)Реализовать поедание через зависимость от размера. Это кажется очень логичным, чем больше организм, тем проще ему есть более маленьких. Это позволит убрать ситуации где одна клетка вгрызается в огромные колонии. 2)Сделать многоклеточные организмы единым целым в плане управления. Чтобы не для каждой клетки просчитывались все шаги, а лишь для главной, она же первая которая появилась. Например если клеток больше чем одна, то первая получает номер 0, а последующие 1,2,3 итд. Если номер не ноль то их циклы пропускаются. Еда генерируется с множителем равным количеству клеток. ИТД. Двигаться все клетки тоже должны вместе. Реализация деталей может быть разной, главная идея это разгрузить машину от обработки ненужных данных. 3)Сделать мир еще больше. Сделать перемещения зависящими от размера тела. Увеличить дальность обзора в зависимости от количества клеток. 4)Начать работу над дифференциацией клеток. Например создать отельный набор параметров отвечающих за ключевые поведенческие особенности клеток. Генерирование еды, атака других вражеских клеток, повышенный обзор, повышенная подвижность. Эти параметры будут являться модификаторами к уже существующим значениям. Например клетка может получать 10 еды от фотосинтеза. Параметр может изменять это значение от 0 до 200%. Но сумма 4-х параметров должна быть всегда 400%. То есть, допустим у нас есть клетки с фотосинтезом 200%, но защитой от атак 0%. Такие клетки выживут лишь внутри организма. Клетки же с защитой от атак будут нужны на периферии. Клетки дающие обзор будут востребованы спереди, по направлению движения, клетки подвижности сзади. Итд. У меня еще есть много мыслей. Если вам все еще это интересно, буду рад поделиться.
Пишите, возможно какая то мысль заинтересует меня, появятся новые идеи. Новый мир, который я никак не начну, будет больше, но поступающей энергии меньше. Это сделает мир более пустынным, между ботами или колониями будут большие расстояния. Эволюция у колоний будет более изолированна от других. Недостаток ресурсов сделает выгодным перемещение. В качестве ресурса не "свет", а "трава". Чем дольше по клетке на карте не проходил бот, тем больше энергии там накопилось
Я думаю это и так очевидно, что в большей части именно задание начальных условий и генетического алгоритма определяет полученный результат. Начальные условия определяют точку равновесия, а генетический алгоритм степень приспособляемости. Будет ли жизнь такого электронного террариума похожа на нашу или совершенно от него отличаться. Будут ли там доминировать сверхгиганты или одноклеточные организмы. В этой связи следует заранее обозначить желаемый результат. Для меня это похожая на земную, вполне рабочая экосистема. На мой взгляд крайне интересно было бы посмотреть на развитие организмов, от одноклеточных, до многоклеточных. Появление первой дифференциации клеток. Появление возможно каких-то более сложных органов. Подобное развитие так же может быть поощрено генетическим алгоритмом, в котором разные полезные свойства клеток будут меняться. Как мне кажется это вполне реализуемо. И еще пара вопросов. Много ли у вас времени ушло на программирование подобного террариума? Насколько реально научиться этому с нуля?
Неделя на создание рабочего прототипа, потом месяц на эксперименты с разными условиями, командами, коэффициентами и т.д. Реально научиться можно, собственно я сам научился программировать. Сын тоже сам научился, затем успешно выступал на разных олимпиадах по программированию, был призёром регионального этапа всероссийской олимпиады школьников. Никаких репетиторов ему для этого не понадобилось. Другое дело, что программирование требует определённого склада ума и не всем даётся.
Естественно, что от условий мира и набора команд зависит полученный результат. Поэтому я достаточно долго экспериментировал с разными условиями и командами. Хотел, что бы получились многоклеточные организмы с дифференциацией клеток. Для этого ввёл команды делится ресурсами с соседями, узнавание родственников, узнавание, окружен бот со всех сторон, или находится с краю, анабиоз, когда бот становится недоступен для хищников, не тратит и не получает энергии. Это бы помогло пережить тяжелое время, уйдя в спячку, либо стать непробиваемой кожей у организма. К сожалению, до этого не дошло, скорее всего не хватало времени. У меня отсутствует сохранение, поэтому после выключения компа, все результаты пропадают и надо эволюционировать с нуля. Сейчас вернулся к проекту, добавлю сохранение и запущу на длительный срок, посмотрим, что получится. Ну и параллельно, создание нового мира с другими условиями
А что если увеличить коль-во команд с 64 до 96 или добавить резервный код(Ну те же самые прерывания), и сделать чтобы потомок отличался по одному из двух параметров:до 5 отличий и/или особая метка которая остаётся при размножении до 3 поколений с параметром памяти к примеру: ПраД-прадедушка Д-Дедушка О-Отец В-Внук ПраВ-правнук Д _ _ _ _ -МЕТКА+Параметр памяти Д 1 0 0 О 2 1 0 В 3 2 1 ПраВ 1 3 2 . В подобном случае 0-незанятое место 1,2-занятое 3-при появлении заменится индивидуальной. То есть понадобится генеологическое древо с 15 ячейками ПраД-8 Ячеек Д-4 Ячейки О-2 Ячейки +1 Индивидуальная которая и займёт место отца у ребёнка а мети прадедушек пропадут, и кстати могут быть случаи инцеста тогда может быть от 1 до 3 пустых ячеек , ну и тогда получится , чистокровный потомок , ни и ещё одну ячейку под "Чистокровие" будет вообще безумием... P.S.Я вот это читаю и сам Оху**аю , пока это читаю , получился такой-же "Нудный" коммент , как и видеоролик , и я буду очень благодарен если ты это реализуешь , и я подписан на твой канал....И это.... сори за мат.
У меня вопрос: Когда Вы писали код в мозг бота, после команды "съесть" Вы задали 4 ячейки, и во всех команда "49". Первый вопрос - Зачем 4 ячейки? Второй вопрос - Почему во всех 49? Ведь с каждой ячейки нужно разное количество значений прибавить в program_counter.
Какая команда будет выполняться, зависит от того, что съел (пытался съесть) бот. Для этой команды я определил 4 варианта ( пустота, органика, стена, бот), поэтому 4 ячейки, где записано число, которое нужно прибавить к program_counter в каждом из 4 случаев. Так как по алгоритму, в любом случае алгоритм возвращается к началу, поэтому везде стоит 49. Число 49 будет прибавлено к program_counter и управление будет передано самой первой команде (повернуть) .
Ещё интересно. zhurnalko.net/=nauka-i-tehnika/tehnika-molodezhi/1993-05--num6 Статья с Техники Молодёжи 1993 год. Там тоже нечто похожие используется, подробности можно найти в интернете, но это достаточно сложно, у меня сейчас нет времени найти более подробную инфу, интернет сейчас закончится. Может позже, через неделю другую...
Я читал эту статью в 93 году. Собственно, тогда я и представить не мог, что когда-нибудь у меня будет компьютер и я реализую нечто похожее. Тогда я очень заинтересовался и позавидовал учёным, что они могут заниматься такими интересными вещами. :)
Забавно. Было бы неплохо еще иметь возможность просмотреть код конкретного бота, для анализа его кода. Это что касается программной части. Что касается идей для мира то возможно внести элемент радиации. Например чем ближе к солнцу тем больше уровень радиации, в таком случае при размножении количество изменяемых элементов кода может увеличиться на мощность радиации. Например мощность радиации 5, тогда количество случайных мутаций при размножении может быть от 0 до 5. Это можно обыграть как количеством изменяемых элементов кода, так и количеством мутированных потомков. Ну и радиацию может излучать не только солнце, но и сами клетки при превышении определенного уровня энергии, или добавить еще один параметр "радиоактивность"
Подумал тут и с вопросом радиоактивности можно поступить следующим образом: уровень радиоактивности зависит от уровня энергии в боте. При превышении определенного уровня энергии внутри бота он умирает. При этом становится источником радиоактивности. С условием - чем ближе к источнику - тем выше радиоактивность. Но хорошо бы придумать как использовать радиоактивность как источник энергии. В таком случае возможно появятся популяции которые устойчивы к радиации.
guest73 Идеально параллелится. Код каждого бота может выполняться на отдельном ядре. Сейчас процессор прыгает от бота к боту, выполняя по небольшому фрагменту кода.
Это только если 1 бот на поле или отдельная колония на каждом ядре. Если будет много ботов на поле то текущему боту(который ходит) нужно знать позиции всех остальных ботов.И как это распараллелить?
Возможно ты уже говорил в одном из видео, но всё-же спрошу: на каком языке написан сей проект? =) Предполагаю, что Java, но хотелось бы точно знать =) И сколько лет ты уже программируешь?
Вот вопрос такой появился, есть ли команда "0", если такой команды нет то это безусловный переход и счетчик команд увеличивается на ноль, т.е. в этом самом нуле навсегда и останется? К примеру если в в самой первой ячейке программы бота будет записан "0" что произойдет?
Всё верно, в этом случае бот зациклится на этой команде и , собственно, обречен. Но "0" бывает полезен для создания циклов как в 2:50 Проверил, команды "0" нет, под команды заняты числа с 23 по 53, хотя вроде ничего не мешает повесить на "0" какую нибудь команду, что бы нивелировать эту особенность данного числа.
Признаться я довольно слабо все понимаю, что печально, но приобщится хочется. Какая общая цель эксперимента? Симулятор жизни с различными наборами "хромосом"? Но тогда их надо больше чем 64 и играться с вариантами. И я так понимаю, развитие бота не возможно? Боты ведь никак не сохраняют "удачные билды" и при производстве потомков все равно потихоньку меняются. Значит наиболее жизнеспособный набор хромосом в любом случае изменится? Может надо добавить им память? А по размножению, может сравнивать хромосомы двух ботов, оставлять одинаковые позиции и выбирать из двух там, где они различаются? И если ввести память, размножение может стать еще интереснее. пс. не знаю почему я гены назвал хромосомами(может сунуть наборы генов в одну хромосому? типа движение и все варианты перемещения) и вообще если все вышеизложенное бред, не пинайте сильно :)
Alex Varlyk "Удачные билды" сохраняются до тех пор, пока не появится более удачный. При размножении, мутацию имеет только 1 новорожденный бот из 4. Трое других - полная копия родителя. Сначала хотел поэкспериментировать с генетическим алгоритмом, что бы эволюционировал сам код. Когда получилось, захотелось посмотреть, а что будет, если дать им размножение и выпустить на волю. Так что цель - удовлетворить любопытство. Ну и жизнь в этом варианте начинается с одного бота. Потом образуются разные виды. Интересно.
А как определяется "удачный билд", по времени жизни? Совсем упустил из виду, что рождается 4 бота, тогда да, более менее геном сохраняется. Не произвольно ведь сравниваешь симуляцию с реальной жизнью. Слишком интересные вопросы затрагивает тема :) Но сложно моделировать то , о чем человечество имеет слабое представление или вообще не имеет :) Я про разум и все такое. Глядишь такие вот симуляции и натолкнут на ответы, а там тудым-сюдым и привет, восстали машины из пепла ядерной войны :)))
Удачный билд определяется естественным отбором. Почему именно потомки "удачного билда" стали доминировать, можно только предполагать. Я в отборе уже не участвую. Видимо, сформировавшийся код, управляющий ботом, делает все более оптимально в тех условиях и на том уровне, где находится бот.
А можно завести статистику? Какой набор генома существовал дольше всех, где это было, как часто появлялось потомство. Тогда можно пытаться проанализировать.
Можно конечно, но сейчас мне более интересны другие вопросы. Как долго будет развиваться мир или развитие остановится, ведь придуманный мир очень ограничен? Если запустить несколько одинаковых симуляций, все будут развиваться в разных направлениях или, в итоге, все придут к одному результату? Ну и сейчас продумываю новый мир, в котором попытаюсь устранить некоторые ограничения текущего мира.
Можно увеличить рамер генома и сделать больше возможных действий организма, тогда при эволюции появятся очень интересные особи, отдаленно напоминающие интеллект
Я в java версии заметил форму жизни, которая появляется после слишком сильного изменения уровня моря. Организмы отделяются от колоний и начинают хаотично двигаться, являются хищными и через время умирают. Они уж слишком похожи на Beta частицы. Я принял для себя называть это "Радиация"
Привет! Объясни, пожалуйста, зачем нужны безусловные переходы? Мне кажется в этой команде мало смысла и она нужна только для того чтоб заполнить гены без команд. Прерывания намного важнее, ими можно заменить безусловные переходы. А теперь немного идей: 1) Сделать функцию анабиоза (бот на некоторое время переходит в спячку, то есть беззащитное положение). Возможно она будет в основном ненужна, но в период зимы может пригодится. Для этого даже можно сделать новый условный оператор, который получает информацию о поре года. 2) Можно сделать функцию испускания яда, которая будет уничтожать близлежащие неродственные клетки. Возможно на производство яда в клетке, и на производство антидота в соседних родственных клетках будет тратится энергия. 3) Учитывать соотношения размеров клеток при поедании. 4) Добавить симбиоз и паразитизм, хотя возможно это будет самым сложным из вышеперечисленных пунктов. P.S. Я сам на С++ уже второй день пытаюсь создать что-то подобное. Многое я пока даже не представляю как реализовать, по скольку опыт программирования на данном языке всего один год. По этому я и буду стараться набросить идей. И, пожалуй, главный вопрос: "Каковы приблизительные сроки выхода нового видео по данной тематике?" Просто мне кажется, что пересматривать одни и те же видео про генетический алгоритм и небесную механику по 100500 раз немного ненормально :) Заранее огромное спасибо за ответы! Желаю больших успехов ;)
Ну уж точно не скучный канал :) ! Если команда безусловного перехода заполнит все ячейки, то бот лапы склеит (умрёт), и не сможет дать потомство, и не произойдёт такого, что все ячейки попросту заняты безусловными переходами
ИМХО, но пересечение команд плохая идея. 2:15 код 25 уже фотосинтез, но в данном случае это поворот. Т.е. если клетка изначально занималась фотосинтезом, а потом соседний ген мутировал в 26, то вместо фотосинтеза, она начинает ходить. Слишком сильная мутация. И зачем нужны безусловные переходы? Слишком много хаоса из-за изменения одного такого байта, ведь нарушаются последовательности переходов
Alexey Kovalevsky безусловный переход важен, здесь принцип работы программ древних компьютеров, что-то вроде goto с метками, если не будет безусловных переходов, то команды, в программе ботов, будут идти последовательно, и из-за этого "тело" условной команды будет большим и вызывать ошибки, ведь там могут появляться сложные конструкции (условие в условие, которое в другом условие, и т.д) и реализовать такие конструкции будет сложно (для разработчика), а если получиться, то это будет очень ресурсозатратным ( долго будет обрабатывать код).А то что ты сказал в начале- тупо.Ведь если сделать команды перехода с "ексклюзивным" параметром (цифрой которая не занята другой командой),стоящим после команды перехода, то в процессе мутации,команду перехода может заменить другая команда, в этом случае параметр останется, стоящий после заменённой команды перехода, и в процессе выполнения кода,этот параметр вызовет ошибку, ведь нет команды под таким номером, а если убрать команду перехода с её "эксклюзивным" параметром, в процессе мутации, то мы заменим не 1 байт, а два, а это нарушает "правила". Всё и так работает.
Как хранится мир? Это ли 2Д массив с ячейками хранящие параметры о самих себе (вроде их типа), или же одномерный массив, где каждый элемент так же хранит свой тип, и к тому же свои X & Y координаты?
Малоизвестный интерпретатор Pixilang. Он достаточно аскетичен, но позволяет программировать и запускать код прямо на планшете/телефоне. Проект создавался вне дома на планшете.
зато в фантастике да, терминатор т1000 после контакта всю инфу получает, а в фильме Нечто после поедания генетическая инфа копируется. тем интереснее попробовать такой механизм.
Думаю, для "полового размножения" ботов необходимо внести "доминантную" и ""рецессивную" копии/части "генома". И определение родственника производить только по доминантной составляющей.
Вопрос! сколько и какие колонии можно и нужно сформировать чтоб получить что то осмысленное. Ну например надпись из "органики". Где будет хранить колония(и) иноформацию о размере шрифта типа надписи и прочее css. Возможно ли сформировать с помощью ботов что то типа html разметки текста. куда девать органику и прочее.. П.с. пака что у игры нет цели и смысла.. идея интересна.
Очень захватывающе. Немного непонятно, как бот определяет какого цвета ему становиться? То есть в момент, когда он сжирает клетку, он становится красным? И после этого он будет красным, пока, допустим не переработает минералы? В таком случае, как бот может принимать средние цвета, например, фиолетовый?
Для определения цвета используются 3 компонента: красный, зелёный и синий. Когда бот получает энергию от минералов, то значение синего немного увеличивается, а зелёного и красного уменьшается. Через некоторое время синий достигнет максимума, а зеленый и красный опустятся до нуля. Если бот полакомиться мясом, то значение синего немного уменьшиться а красного увеличится. Чем чаще ест мясо тем ближе к красному
Спасибо, теперь понял. Что вы можете сказать о производительности Pixilang? Я собираюсь переписать приложение на lua, есть ли смысл в этом если я хочу прироста в скорости?
У некоторых новорожденных может измениться случайным образом случайный байт. 1. Это может никак не отразиться на способностях бота. 2. Это может ухудшить способности бота, тогда он с большой вероятностью погибнет или не сможет оставить много потомства. 3, Это может улучшить способности бота, тогда он с большей вероятностью сможет оставить много потомства. С большей вероятностью следующие поколения будут лучше приспособлены для данных условий. А если популяция достаточно большая, то вероятность становится почти 100%
а в начале рассматривались коды которые генерировались случайно? а то при разборе кажется что они специально написаны. и если случайно, то на каждую клетку кода любая цифра от 0 до 63 ? а то там только 25 повторялось кажется.
а почему было решено убрать разнообразие команд выбора направления и брать остатки от деления со следующим кодом? так получается же что это и задание направления и какаято ещё команда. это нормально?)
что бы было больше свободных чисел для добавления новых команд. Ген, который был параметром, в следующем проходе может стать командой. Это нормально с точки зрения виртуальной машины, выполняющей код-геном. С точки зрения человека, это может показаться ненормальным, так как усложняет разбор кода. Писал на хабре статью про это. Вроде называется "создание искусственной жизни“. Там подробно разбирал работу кода-генома.
"Опять 25" :-). Классный проект. А зачем боту тратить команду на узнавание, сколько у него энергии? Логичнее не анализировать это командно, а просто проверять извне.
Чувак ты классный. Вопрос: на чем ты пишешь? Какой язык используешь и какую библиотеку используешь для оконной процедуры для Windows? Я видел в коде объявление функции через fn() это питон?
Автор сам их придумал. Можно разные придумывать, я разные команды пробовал, многие убрал, так как не заметил пользы от них. Можно придумывать не только команды, но и разные миры, хоть многомерные, но хотелось, что бы немного был похож на наш, для простоты восприятия.
@@foo52ru Мне вашу модель очень трудно реализовать пока что, поэтому я сделал упрощенную, чтобы потом усложнять? Можете дать совет будет ли она работать на практике для финансовых рынков? Интересует есть ли проблема в самом алгоритме. Будет ли он работать циклично?
@@foo52ru Подскажите пожалуйста, а данное смещение также задается в геноме или оно жестко задано в программе? У вас справа пометка 2 -пусто, 3-стена, 4-органика, 5-бот,6-родня. Откуда вы брали эти значения?
Насколько я понимаю, pixilang - не объектно ориентированный, следовательно каждая "деталь" бота реализована элементом массива, и количество таких массивов равно количеству "деталей" бота? Можете ли вы сделать ролик с разбором кода или дать ссылку на сам код?
Каждый бот занимает в памяти 78 ячейки ( 64 ячейки - днк-код и 14 ячейки дополнительной информации). //================================================================ WORLD_WIDTH =180 // размер мира 180х96 WORLD_HEIGHT=96 MAX_BOTS_COUNT= WORLD_WIDTH * WORLD_HEIGHT // максимальное количество живности MIND_SIZE = 64 BOT_SIZE = MIND_SIZE + 14 // =============== внутренности бота =============================== // 0..63 мозг ADR= MIND_SIZE+0 // адрес текущей команды X_COORD= MIND_SIZE+1 // Х-координата Y_COORD= MIND_SIZE+2 // У-координата HEALTH= MIND_SIZE+3 // здоровье MINERAL= MIND_SIZE+4 // накопленно минералов LIVING= MIND_SIZE+5 // 0-free 1-органика 2-органика_вниз 3-живой 4-многоклеточное C_RED = MIND_SIZE+6 // доля красного цвета C_GREEN= MIND_SIZE+7 // доля зеленого цвета C_BLUE= MIND_SIZE+8 // доля синего цвета DIRECT= MIND_SIZE+9 // направлениe 1-вверх, 3 -право, 5-низ PREV = MIND_SIZE+10// ссылка на предыдущего NEXT = MIND_SIZE+11 // ссылка на следующего MPREV = MIND_SIZE+12 // ссылка на предыдущего у многоклеточного MNEXT = MIND_SIZE+13 // ссылка на следующего у многоклеточного //=============================================================== //.... боты со всеми параметрами и мозгом-геномом .................................... bots=new( MAX_BOTS_COUNT , BOT_SIZE ,INT16) // массив для ботов clean( bots, 0 ) //============================================================== Максимальное количество ботов равно размеру мира 180*96=17280 У меня в памяти сразу создается массив 17280 на 78 для всех возможных ботов. У каждого бота есть ссылка на предыдущего и следующего. За каждый ход, программа по ссылкам пробегает по всем существующим ботам. Прибавление, удаление ботов происходит с помощью редактирования ссылок. Код я выложу в группе ВКонтакте, когда приведу его в порядок. Сейчас пока некогда.
Вообще увлекательно! Закачал себе на телефон, пускай развиваются )) Я тут придумал как расширить их возможности, но так как в программировании не бум бум, как сделать, не знаю.. Сейчас боты просто оптимизируются для выживания, но вот если бы они узнавали что то новое ;) Как то бы сделать, чтобы каждый бот периодически делал записи из спонтанных букв и цифр и каждый раз проверял этот набор символов как какую то новую команду. Если команда не выполняется, (т.е. это просто набор букв) он её пропускает. А вот вдруг там сложится какая то команда, абсолютно новая для всех ботов. В "Теореме о бесконечных обезьянах" обезьяна напечатала "Гамлета" Шекспира. А наши может и мир всё же захватят наконец ) ru.wikipedia.org/wiki/Теорема_о_бесконечных_обезьянах
Вообще я полагаю, что главный минус программы, что условия мира в ней не изменны, но в реальном мире условия довольно часто меняются. В итоге выходит так, что те организмы, которые учатся много поколений прежде, чем подстраиваются под изменения оружающей среды не будут выживать в реальной среде, так как правила игры будут меняться быстрее, чем они чему-либо научатся. Надо придумать метод максимально быстрого приспособления к окружающей среде и правилам нового мира. Интересно думали ли вы об этом? А что если раз в 100 поколений например менять условия среды, например рандомно увеличивать количество яда, еды или стен, отнимать возможность превращать яд в еду и так далее?
А что если добавить типологию ботов? Взять основы из какой нибудь имеющейся типологии людей (векторная психология, соционика, психософия, хуман дизайн, физиогномика и т.д.). Не важно какая просто параметры ботов которые рождаются, чтобы были разные Или даже проще типичные игровые хар-ки сила, ловкость, интеллект. Будет уже более сложное социальное взаимодействие. P.S. Это можно сделать приложением, чтобы самому поиграться?)
Извините, может я чего-то не знаю. Но где ещё видео? Другие варианты миров, как вы говорили? Что получается и т.д. На комментарии вы отвечаете. Я так и не смог чего-либо подобного найти, а тема очень интересная.
Новых видео пока нет. Сейчас на планшете крутится первый вариант мира, но там ничего интересного не пока происходит. Мир нашел некое сбалансированное состояние и нём пребывает, хотя в любой момент может всё поменяться. Даже колонии исчезли и мир стал более однородным, с равномерным распределением энергии, никто почти не умирает, новые почти не рождаются. Своего рода тепловая смерть. Хотя по центру, за последние несколько дней, стали наклевываться небольшие колонии. Посмотрю, как будет развиваться дальше. Пока обдумываю, каким будет новый мир, начну его делать в Новогодние праздники. Там у меня как раз двух недельный отпуск добавляется.
напиши олгаритм роста волос на голове, и расчески. а вообше если не брать кубизм который ненавидел вольт Дисней, то можно попробывать сделать что то более реальное в 3д , но боюсь что закончиться всё гонкой бильярдных шаров по луууу_ ЗаМ. без инерции..офф кос
У вас 1 клетка команды = 1 байту? По моему если в клетке может поместиться максимум 63, то это значит что в клетке 6 бит. А значит в написаных вами 21-ячековом коде 15 байт и 6 бит.
Будем надеяться что проект не заброшен окончательно! очень интересно было-бы следить за развитием проекта)))
Спасибо огромное!! После Вас я очень заинтересовался этой темой, Вы очень многое мне объяснили!! Спасибо!! Очень надеюсь, что Вы не забросите эту тему и будете продолжать этим заниматься))
Очень интересно, пожалуйста продолжите этот ваш эксперимент. Откройте свою страницу на патреон чтобы вас могли поддерживать материально, появится дополнительная мотивация.
Интереснее смотреть именно на поведение ботов в долгосрочной перспективе, как было в прошлых видео, как действует принцип селекции и как от этого менялась длительность жизни ботов, надеюсь по принципу размножения тоже будет такое видео.
Хотелось бы чтобы каждое новое видео рассматривался отдельный фактор, если в первом видео была селекция, то в следующем размножение, потом, к примеру распространение вируса, конкуренция видов и т.д.
А так - классно!
1:11 «опять двадцать пять» :)
Занимательно, продолжайте в том же духе! Рекомендую ещё проследить, чтобы отношение сторон финального видео было строго 16:9. Удачи!
Подписался ради этого проекта
У меня появилась идея многоклеточного организма. Клетка случайно специальной командой прицепляет другую клетку к себе, их коды при этом склеиваются. Клеткам это будет выгодно за счёт расширения длины генома, но большая клетка неуклюжая, по этому в среднем эти организмы, я думаю, не будут больше 2-х, 3-х клеток. Хотя эволюция непредсказуема, может появятся и 200-клеточные монстры.
Я только сейчас допер... В системе команд нет NOP - одноячеечного "ничего не делать не тратя ход". Да и безусловные переходы на короткие дистанции вперед невозможны. Это, имхо, катастрофически замедляет эволюцию, делая гарантированно тупиковыми даже полезные последовательности но расположенные неудачно относительно полезных соседей... (Аргумент что бот мол может зациклиться отметаем, т.к. цепочка только из переходов возможна и в этой модели. Решается присвоением переходу затрат времени скажем в 1/10, а там сам вымрет ) Выход лично мне видится в отказе на ограничение значения в диапазоне 0..63, можно разрешить скажем 0..511 и брать остаток от деления на сколько там получится, как с поворотом. Тогда данное улучшение не потребует нового мира.
Это- удивительно!
Очень круто. Мне особенно понравилась идея с "геномом" на 64 ячейки и механизм смещений по этому геному
Я писал подобную программу на первом курсе универа, но использовал просто рандомизацию команд. Некоторые интересные явления наблюдались, но "генетической" составляющей никакой не было. Теперь хочу попробовать раскопать тот проект и попробовать добавить гены.
Кстати, очень сильно влияет половое размножение и разные типы ботов. С половой системой все ясно, размножение только с противоположным полом, а по поводу типов - можно построить любую иерархию. У меня было 5 типов ботов, и свои не атаковали своих. Можно ещё разнообразить эту систему - добавить типы, которые "дружат", "нейтральные" типы и "враждебные" - те, кто при виде друг друга пытаются атаковать
беспереспективно, программа пишет свою программу. ее можно легко переобразовать в обычный код, будет работать все быстрее, но это и главный минус, т.к. дальнейшее обучение невозможно. при изменение условий нужно опять переобучать бота (помещать в лабу). все-таки для этого нужны нейронные сети, они будут обучаться все время.
1:11 ну опять двадцать пять!
Забавно
такая идея появилась: добавить учет возраста
например если бот продержался определенное количество времени, то например увеличивает запас хранимой энергии и реже дает потомство
можно еще сделать мутацию не стабильной (каждый 4-й бот), а случайной
так же можно сделать для хищников, чтоб при питании какой-то одной пищей другая пища являлась ядом
например если бот ест фотосинтезаторов, то если переключиться на минералофагов или хищьников то они будут давать ему меньше энергии или являться ядом (в зависимости от мутации)
Ого, здорово! Интересно наблюдать эволюцию вживую. Я такие же эксперименты ставлю в Cell Lab, где можно наблюдать за развитием и эволюцией клеток в чашке Петри, меняя там условия. +в вк есть группа по этой игре, там я геномы выкладываю
Пусть они сами придумывают соответствие между таблицей чисел и таблицей команд. Это можно реализовать допуская веса 0/1.
Забавно. Я сам уже довольно давно вынашивал идею электронной биологии. Оказывается не я один. Впрочем я ни разу не програмист, так что шансов реализовать подобное у меня почти не было.
Теперь мои идеи.
1)Реализовать поедание через зависимость от размера. Это кажется очень логичным, чем больше организм, тем проще ему есть более маленьких. Это позволит убрать ситуации где одна клетка вгрызается в огромные колонии.
2)Сделать многоклеточные организмы единым целым в плане управления. Чтобы не для каждой клетки просчитывались все шаги, а лишь для главной, она же первая которая появилась. Например если клеток больше чем одна, то первая получает номер 0, а последующие 1,2,3 итд. Если номер не ноль то их циклы пропускаются. Еда генерируется с множителем равным количеству клеток. ИТД. Двигаться все клетки тоже должны вместе.
Реализация деталей может быть разной, главная идея это разгрузить машину от обработки ненужных данных.
3)Сделать мир еще больше. Сделать перемещения зависящими от размера тела. Увеличить дальность обзора в зависимости от количества клеток.
4)Начать работу над дифференциацией клеток. Например создать отельный набор параметров отвечающих за ключевые поведенческие особенности клеток. Генерирование еды, атака других вражеских клеток, повышенный обзор, повышенная подвижность. Эти параметры будут являться модификаторами к уже существующим значениям. Например клетка может получать 10 еды от фотосинтеза. Параметр может изменять это значение от 0 до 200%. Но сумма 4-х параметров должна быть всегда 400%.
То есть, допустим у нас есть клетки с фотосинтезом 200%, но защитой от атак 0%. Такие клетки выживут лишь внутри организма. Клетки же с защитой от атак будут нужны на периферии. Клетки дающие обзор будут востребованы спереди, по направлению движения, клетки подвижности сзади. Итд.
У меня еще есть много мыслей. Если вам все еще это интересно, буду рад поделиться.
Пишите, возможно какая то мысль заинтересует меня, появятся новые идеи. Новый мир, который я никак не начну, будет больше, но поступающей энергии меньше. Это сделает мир более пустынным, между ботами или колониями будут большие расстояния. Эволюция у колоний будет более изолированна от других. Недостаток ресурсов сделает выгодным перемещение. В качестве ресурса не "свет", а "трава". Чем дольше по клетке на карте не проходил бот, тем больше энергии там накопилось
Я думаю это и так очевидно, что в большей части именно задание начальных условий и генетического алгоритма определяет полученный результат. Начальные условия определяют точку равновесия, а генетический алгоритм степень приспособляемости. Будет ли жизнь такого электронного террариума похожа на нашу или совершенно от него отличаться. Будут ли там доминировать сверхгиганты или одноклеточные организмы. В этой связи следует заранее обозначить желаемый результат. Для меня это похожая на земную, вполне рабочая экосистема.
На мой взгляд крайне интересно было бы посмотреть на развитие организмов, от одноклеточных, до многоклеточных. Появление первой дифференциации клеток. Появление возможно каких-то более сложных органов. Подобное развитие так же может быть поощрено генетическим алгоритмом, в котором разные полезные свойства клеток будут меняться. Как мне кажется это вполне реализуемо.
И еще пара вопросов. Много ли у вас времени ушло на программирование подобного террариума? Насколько реально научиться этому с нуля?
Неделя на создание рабочего прототипа, потом месяц на эксперименты с разными условиями, командами, коэффициентами и т.д.
Реально научиться можно, собственно я сам научился программировать. Сын тоже сам научился, затем успешно выступал на разных олимпиадах по программированию, был призёром регионального этапа всероссийской олимпиады школьников. Никаких репетиторов ему для этого не понадобилось. Другое дело, что программирование требует определённого склада ума и не всем даётся.
Естественно, что от условий мира и набора команд зависит полученный результат. Поэтому я достаточно долго экспериментировал с разными условиями и командами. Хотел, что бы получились многоклеточные организмы с дифференциацией клеток. Для этого ввёл команды делится ресурсами с соседями, узнавание родственников, узнавание, окружен бот со всех сторон, или находится с краю, анабиоз, когда бот становится недоступен для хищников, не тратит и не получает энергии. Это бы помогло пережить тяжелое время, уйдя в спячку, либо стать непробиваемой кожей у организма. К сожалению, до этого не дошло, скорее всего не хватало времени.
У меня отсутствует сохранение, поэтому после выключения компа, все результаты пропадают и надо эволюционировать с нуля. Сейчас вернулся к проекту, добавлю сохранение и запущу на длительный срок, посмотрим, что получится. Ну и параллельно, создание нового мира с другими условиями
Пункты 3 и 4 слишком уменьшать производительность, а вот п. 1 и 2 довольно интересные.
При половом размножнии обязательно надо вводить возраст зрелости. То есть перенимаешь генетический опыт только у успешного индивида.
Генетический опыт?
Если добавить команды "заменить ген другого бота на свой" и "отобрать энергию у другого бота", то возможно появятся некие подобия паразитов и вирусов.
А так-же у инфузорий есть такой обмен
А что если увеличить коль-во команд с 64 до 96 или добавить резервный код(Ну те же самые прерывания), и сделать чтобы потомок отличался по одному из двух параметров:до 5 отличий и/или особая метка которая остаётся при размножении до 3 поколений с параметром памяти к примеру: ПраД-прадедушка Д-Дедушка О-Отец В-Внук ПраВ-правнук Д _ _ _ _ -МЕТКА+Параметр памяти Д 1 0 0 О 2 1 0 В 3 2 1 ПраВ 1 3 2 . В подобном случае 0-незанятое место 1,2-занятое 3-при появлении заменится индивидуальной. То есть понадобится генеологическое древо с 15 ячейками ПраД-8 Ячеек Д-4 Ячейки О-2 Ячейки +1 Индивидуальная которая и займёт место отца у ребёнка а мети прадедушек пропадут, и кстати могут быть случаи инцеста тогда может быть от 1 до 3 пустых ячеек , ну и тогда получится , чистокровный потомок , ни и ещё одну ячейку под "Чистокровие" будет вообще безумием...
P.S.Я вот это читаю и сам Оху**аю , пока это читаю , получился такой-же "Нудный" коммент , как и видеоролик , и я буду очень благодарен если ты это реализуешь , и я подписан на твой канал....И это.... сори за мат.
Как все сложно
96 не получится, минимум 128
У меня вопрос: Когда Вы писали код в мозг бота, после команды "съесть" Вы задали 4 ячейки, и во всех команда "49". Первый вопрос - Зачем 4 ячейки? Второй вопрос - Почему во всех 49? Ведь с каждой ячейки нужно разное количество значений прибавить в program_counter.
Какая команда будет выполняться, зависит от того, что съел (пытался съесть) бот. Для этой команды я определил 4 варианта ( пустота, органика, стена, бот), поэтому 4 ячейки, где записано число, которое нужно прибавить к program_counter в каждом из 4 случаев.
Так как по алгоритму, в любом случае алгоритм возвращается к началу, поэтому везде стоит 49. Число 49 будет прибавлено к program_counter и управление будет передано самой первой команде (повернуть) .
@@foo52ru Спасибо!
Не понял, но интересно
Ещё интересно.
zhurnalko.net/=nauka-i-tehnika/tehnika-molodezhi/1993-05--num6
Статья с Техники Молодёжи 1993 год. Там тоже нечто похожие используется, подробности можно найти в интернете, но это достаточно сложно, у меня сейчас нет времени найти более подробную инфу, интернет сейчас закончится. Может позже, через неделю другую...
Я читал эту статью в 93 году. Собственно, тогда я и представить не мог, что когда-нибудь у меня будет компьютер и я реализую нечто похожее. Тогда я очень заинтересовался и позавидовал учёным, что они могут заниматься такими интересными вещами. :)
автору хочу выразить уважение, скорее всего он уже работает где-то в FAANG, или над научными проектами )
Круто, спасибо. Очень познавательно
Забавно. Было бы неплохо еще иметь возможность просмотреть код конкретного бота, для анализа его кода. Это что касается программной части.
Что касается идей для мира то возможно внести элемент радиации. Например чем ближе к солнцу тем больше уровень радиации, в таком случае при размножении количество изменяемых элементов кода может увеличиться на мощность радиации. Например мощность радиации 5, тогда количество случайных мутаций при размножении может быть от 0 до 5. Это можно обыграть как количеством изменяемых элементов кода, так и количеством мутированных потомков. Ну и радиацию может излучать не только солнце, но и сами клетки при превышении определенного уровня энергии, или добавить еще один параметр "радиоактивность"
Подумал тут и с вопросом радиоактивности можно поступить следующим образом: уровень радиоактивности зависит от уровня энергии в боте. При превышении определенного уровня энергии внутри бота он умирает. При этом становится источником радиоактивности. С условием - чем ближе к источнику - тем выше радиоактивность.
Но хорошо бы придумать как использовать радиоактивность как источник энергии. В таком случае возможно появятся популяции которые устойчивы к радиации.
вот бы такую симуляцию запустить на одном из супер-компьютеров :)
KAJbMAP а толку? всеравно параллельно выполнять нельзя .
guest73 Идеально параллелится. Код каждого бота может выполняться на отдельном ядре. Сейчас процессор прыгает от бота к боту, выполняя по небольшому фрагменту кода.
Это только если 1 бот на поле или отдельная колония на каждом ядре. Если будет много ботов на поле то текущему боту(который ходит) нужно знать позиции всех остальных ботов.И как это распараллелить?
guest73 все это решаемо. Код, конечно, надо писать конкретно под многоядерную систему. Правда, опыта такого у меня нет :(
Возможно ты уже говорил в одном из видео, но всё-же спрошу: на каком языке написан сей проект? =) Предполагаю, что Java, но хотелось бы точно знать =) И сколько лет ты уже программируешь?
Вот вопрос такой появился, есть ли команда "0", если такой команды нет то это безусловный переход и счетчик команд увеличивается на ноль, т.е. в этом самом нуле навсегда и останется? К примеру если в в самой первой ячейке программы бота будет записан "0" что произойдет?
Всё верно, в этом случае бот зациклится на этой команде и , собственно, обречен.
Но "0" бывает полезен для создания циклов как в 2:50
Проверил, команды "0" нет, под команды заняты числа с 23 по 53, хотя вроде ничего не мешает повесить на "0" какую нибудь команду, что бы нивелировать эту особенность данного числа.
foo52ru Спасибо.
Добрый день. Кажется в журнале "Наука и жизнь", скорее всего в конце 80-х описывалась эта тема.
Интересно) получилось)
Продолжай видео про искуственную жизнь, интересная тема
Вот за сурс на джава отдельное огромное спасибо
Признаться я довольно слабо все понимаю, что печально, но приобщится хочется. Какая общая цель эксперимента? Симулятор жизни с различными наборами "хромосом"? Но тогда их надо больше чем 64 и играться с вариантами. И я так понимаю, развитие бота не возможно? Боты ведь никак не сохраняют "удачные билды" и при производстве потомков все равно потихоньку меняются. Значит наиболее жизнеспособный набор хромосом в любом случае изменится? Может надо добавить им память? А по размножению, может сравнивать хромосомы двух ботов, оставлять одинаковые позиции и выбирать из двух там, где они различаются? И если ввести память, размножение может стать еще интереснее.
пс. не знаю почему я гены назвал хромосомами(может сунуть наборы генов в одну хромосому? типа движение и все варианты перемещения) и вообще если все вышеизложенное бред, не пинайте сильно :)
Alex Varlyk "Удачные билды" сохраняются до тех пор, пока не появится более удачный. При размножении, мутацию имеет только 1 новорожденный бот из 4. Трое других - полная копия родителя.
Сначала хотел поэкспериментировать с генетическим алгоритмом, что бы эволюционировал сам код. Когда получилось, захотелось посмотреть, а что будет, если дать им размножение и выпустить на волю. Так что цель - удовлетворить любопытство.
Ну и жизнь в этом варианте начинается с одного бота. Потом образуются разные виды. Интересно.
А как определяется "удачный билд", по времени жизни? Совсем упустил из виду, что рождается 4 бота, тогда да, более менее геном сохраняется. Не произвольно ведь сравниваешь симуляцию с реальной жизнью. Слишком интересные вопросы затрагивает тема :) Но сложно моделировать то , о чем человечество имеет слабое представление или вообще не имеет :) Я про разум и все такое. Глядишь такие вот симуляции и натолкнут на ответы, а там тудым-сюдым и привет, восстали машины из пепла ядерной войны :)))
Удачный билд определяется естественным отбором. Почему именно потомки "удачного билда" стали доминировать, можно только предполагать. Я в отборе уже не участвую. Видимо, сформировавшийся код, управляющий ботом, делает все более оптимально в тех условиях и на том уровне, где находится бот.
А можно завести статистику? Какой набор генома существовал дольше всех, где это было, как часто появлялось потомство. Тогда можно пытаться проанализировать.
Можно конечно, но сейчас мне более интересны другие вопросы.
Как долго будет развиваться мир или развитие остановится, ведь придуманный мир очень ограничен?
Если запустить несколько одинаковых симуляций, все будут развиваться в разных направлениях или, в итоге, все придут к одному результату?
Ну и сейчас продумываю новый мир, в котором попытаюсь устранить некоторые ограничения текущего мира.
как же сложно понимать мозг этого бота из 64 ячеек.. теперь я понимаю ученых, которые изучают наш мозг..
Можно увеличить рамер генома и сделать больше возможных действий организма, тогда при эволюции появятся очень интересные особи, отдаленно напоминающие интеллект
Здравствуйте. Хочу брать у вас уроки
Вот интересное видео про генетические алгоритмы. В описании к видео есть сама программа th-cam.com/video/N-HjfS4P6r4/w-d-xo.html
сделай пж оптимизацию под экраны 2160х1080. ни черта на 800х500 не видно
Я в java версии заметил форму жизни, которая появляется после слишком сильного изменения уровня моря. Организмы отделяются от колоний и начинают хаотично двигаться, являются хищными и через время умирают. Они уж слишком похожи на Beta частицы. Я принял для себя называть это "Радиация"
А так-же они удаляются на достаточное расстояние от родительской колонии
А ещё они всю органику жрут, размножаются и со временем погибают. А вот колонии от них прямого урона не получают, но органики им не достаётся.
Из-за радиации колонии из одиночных организмов сформироваться не могут, ибо радиация их съедает
Радиация склонна к мародёрству, последние наблюдения показывают, что радиация появляется вблизь органики и кроме органики мало что может кушать
Прекрасно!
Не хватает только возможности увеличивать скорость течения времени, на мощной машинке можно было бы сразу далеко заглянуть.
ещё вопрос о типах ботов ! ботов из двух, трёх клеток с разными показателями и уровнями энергии.
Привет! Объясни, пожалуйста, зачем нужны безусловные переходы? Мне кажется в этой команде мало смысла и она нужна только для того чтоб заполнить гены без команд. Прерывания намного важнее, ими можно заменить безусловные переходы.
А теперь немного идей:
1) Сделать функцию анабиоза (бот на некоторое время переходит в спячку, то есть беззащитное положение). Возможно она будет в основном ненужна, но в период зимы может пригодится. Для этого даже можно сделать новый условный оператор, который получает информацию о поре года.
2) Можно сделать функцию испускания яда, которая будет уничтожать близлежащие неродственные клетки. Возможно на производство яда в клетке, и на производство антидота в соседних родственных клетках будет тратится энергия.
3) Учитывать соотношения размеров клеток при поедании.
4) Добавить симбиоз и паразитизм, хотя возможно это будет самым сложным из вышеперечисленных пунктов.
P.S. Я сам на С++ уже второй день пытаюсь создать что-то подобное. Многое я пока даже не представляю как реализовать, по скольку опыт программирования на данном языке всего один год. По этому я и буду стараться набросить идей.
И, пожалуй, главный вопрос: "Каковы приблизительные сроки выхода нового видео по данной тематике?" Просто мне кажется, что пересматривать одни и те же видео про генетический алгоритм и небесную механику по 100500 раз немного ненормально :) Заранее огромное спасибо за ответы! Желаю больших успехов ;)
Ну уж точно не скучный канал :) ! Если команда безусловного перехода заполнит все ячейки, то бот лапы склеит (умрёт), и не сможет дать потомство, и не произойдёт такого, что все ячейки попросту заняты безусловными переходами
@@МишаБоборов Тоже не очень понял для чего безусловный переход, неужели без него не будет работать? И зачем прерывания?
@@ОлегДоходицифровыефинансы чтобы зациклить хода. аля goto в басике.
*[**1:11**] Опять двадцать пять 😂*
ИМХО, но пересечение команд плохая идея. 2:15 код 25 уже фотосинтез, но в данном случае это поворот. Т.е. если клетка изначально занималась фотосинтезом, а потом соседний ген мутировал в 26, то вместо фотосинтеза, она начинает ходить. Слишком сильная мутация. И зачем нужны безусловные переходы? Слишком много хаоса из-за изменения одного такого байта, ведь нарушаются последовательности переходов
Alexey Kovalevsky безусловный переход важен, здесь принцип работы программ древних компьютеров, что-то вроде goto с метками, если не будет безусловных переходов, то команды, в программе ботов, будут идти последовательно, и из-за этого "тело" условной команды будет большим и вызывать ошибки, ведь там могут появляться сложные конструкции (условие в условие, которое в другом условие, и т.д) и реализовать такие конструкции будет сложно (для разработчика), а если получиться, то это будет очень ресурсозатратным ( долго будет обрабатывать код).А то что ты сказал в начале- тупо.Ведь если сделать команды перехода с "ексклюзивным" параметром (цифрой которая не занята другой командой),стоящим после команды перехода, то в процессе мутации,команду перехода может заменить другая команда, в этом случае параметр останется, стоящий после заменённой команды перехода, и в процессе выполнения кода,этот параметр вызовет ошибку, ведь нет команды под таким номером, а если убрать команду перехода с её "эксклюзивным" параметром, в процессе мутации, то мы заменим не 1 байт, а два, а это нарушает "правила". Всё и так работает.
Как хранится мир? Это ли 2Д массив с ячейками хранящие параметры о самих себе (вроде их типа), или же одномерный массив, где каждый элемент так же хранит свой тип, и к тому же свои X & Y координаты?
Всё предопределено
да это минус. т.е. обучаем бота под конкретную задачу, а дальше все( нужны нейронные сети.
Какой язык программирования и инструменты были использованы в создании симуляции?
Малоизвестный интерпретатор Pixilang. Он достаточно аскетичен, но позволяет программировать и запускать код прямо на планшете/телефоне. Проект создавался вне дома на планшете.
Спасибо за ответ. Некоторое время ищу платформу для создания подобной симуляции, думал свою написать, но это довольно времязатратно. Погуглю Pixilang
Может добавить еще типо этого: хищник ест организм и есть вероятность получить часть его генома?
В реале это же так не работает. Хищники просто вещества получают и всё
зато в фантастике да, терминатор т1000 после контакта всю инфу получает, а в фильме Нечто после поедания генетическая инфа копируется. тем интереснее попробовать такой механизм.
А продолжение будет? Понравилась очень интересно =)
продолжения хочу
Думаю, для "полового размножения" ботов необходимо внести "доминантную" и ""рецессивную" копии/части "генома". И определение родственника производить только по доминантной составляющей.
а что если хардкор - определение по рецессивной части?
Вопрос! сколько и какие колонии можно и нужно сформировать чтоб получить что то осмысленное. Ну например надпись из "органики". Где будет хранить колония(и) иноформацию о размере шрифта типа надписи и прочее css.
Возможно ли сформировать с помощью ботов что то типа html разметки текста. куда девать органику и прочее..
П.с. пака что у игры нет цели и смысла..
идея интересна.
как то сложно, наверное, надо предыдущие видео посмотреть, чтобы понять.
0:26 Молодец, сгенерировал бота, который только то и делает что фотосинтез))
ПИПЕЦ, склоняю голову ...
Очень захватывающе. Немного непонятно, как бот определяет какого цвета ему становиться? То есть в момент, когда он сжирает клетку, он становится красным? И после этого он будет красным, пока, допустим не переработает минералы? В таком случае, как бот может принимать средние цвета, например, фиолетовый?
Для определения цвета используются 3 компонента: красный, зелёный и синий.
Когда бот получает энергию от минералов, то значение синего немного увеличивается, а зелёного и красного уменьшается. Через некоторое время синий достигнет максимума, а зеленый и красный опустятся до нуля. Если бот полакомиться мясом, то значение синего немного уменьшиться а красного увеличится. Чем чаще ест мясо тем ближе к красному
Спасибо, теперь понял. Что вы можете сказать о производительности Pixilang? Я собираюсь переписать приложение на lua, есть ли смысл в этом если я хочу прироста в скорости?
Не сильно понял обучение бота, как его обучает эволюция? Чисто случайным кодом? Типа выжил то гуд а нет, так нет...
У некоторых новорожденных может измениться случайным образом случайный байт.
1. Это может никак не отразиться на способностях бота.
2. Это может ухудшить способности бота, тогда он с большой вероятностью погибнет или не сможет оставить много потомства.
3, Это может улучшить способности бота, тогда он с большей вероятностью сможет оставить много потомства.
С большей вероятностью следующие поколения будут лучше приспособлены для данных условий. А если популяция достаточно большая, то вероятность становится почти 100%
@@foo52ru спасибо за ответ, буду дальше разбираться ;)
а в начале рассматривались коды которые генерировались случайно? а то при разборе кажется что они специально написаны.
и если случайно, то на каждую клетку кода любая цифра от 0 до 63 ? а то там только 25 повторялось кажется.
а почему было решено убрать разнообразие команд выбора направления и брать остатки от деления со следующим кодом? так получается же что это и задание направления и какаято ещё команда. это нормально?)
что бы было больше свободных чисел для добавления новых команд. Ген, который был параметром, в следующем проходе может стать командой. Это нормально с точки зрения виртуальной машины, выполняющей код-геном. С точки зрения человека, это может показаться ненормальным, так как усложняет разбор кода.
Писал на хабре статью про это. Вроде называется "создание искусственной жизни“. Там подробно разбирал работу кода-генома.
Я что-то не увидел тут нейросеть в классическом понимании? Какая-то матрица. Почему именно такая? Почему не разносторонняя? Почему не 3D?
Я тоже не смог увидеть здесь нейросеть? Может её тут и не было?
если бы вписать функцию преобладания сильного гена в толпе чтобы управлять толпой
и способность развития мышления
"Опять 25" :-). Классный проект. А зачем боту тратить команду на узнавание, сколько у него энергии? Логичнее не анализировать это командно, а просто проверять извне.
Чувак ты классный.
Вопрос: на чем ты пишешь? Какой язык используешь и какую библиотеку используешь для оконной процедуры для Windows?
Я видел в коде объявление функции через fn() это питон?
Pixilang
А откуда именно такой набор команд? Автор сам их придумал, и почему именно такой?
Автор сам их придумал. Можно разные придумывать, я разные команды пробовал, многие убрал, так как не заметил пользы от них. Можно придумывать не только команды, но и разные миры, хоть многомерные, но хотелось, что бы немного был похож на наш, для простоты восприятия.
А что такое смещение для условного перехода? Суть его в том на сколько ячеек увеличить счетчик при возникновении того или иного препятствия на пути?
Да, поэтому бот будет реагировать по разному, в зависимости от препятствия.
@@foo52ru Мне вашу модель очень трудно реализовать пока что, поэтому я сделал упрощенную, чтобы потом усложнять? Можете дать совет будет ли она работать на практике для финансовых рынков? Интересует есть ли проблема в самом алгоритме. Будет ли он работать циклично?
@@ОлегДоходицифровыефинансы Я далёк от финансовых рынков, ничего посоветовать не могу.
@@foo52ru Подскажите пожалуйста, а данное смещение также задается в геноме или оно жестко задано в программе? У вас справа пометка 2 -пусто, 3-стена, 4-органика, 5-бот,6-родня. Откуда вы брали эти значения?
задано в программе
Насколько я понимаю, pixilang - не объектно ориентированный, следовательно каждая "деталь" бота реализована элементом массива, и количество таких массивов равно количеству "деталей" бота?
Можете ли вы сделать ролик с разбором кода или дать ссылку на сам код?
Каждый бот занимает в памяти 78 ячейки ( 64 ячейки - днк-код и 14 ячейки дополнительной информации).
//================================================================
WORLD_WIDTH =180 // размер мира 180х96
WORLD_HEIGHT=96
MAX_BOTS_COUNT= WORLD_WIDTH * WORLD_HEIGHT // максимальное количество живности
MIND_SIZE = 64
BOT_SIZE = MIND_SIZE + 14
// =============== внутренности бота ===============================
// 0..63 мозг
ADR= MIND_SIZE+0 // адрес текущей команды
X_COORD= MIND_SIZE+1 // Х-координата
Y_COORD= MIND_SIZE+2 // У-координата
HEALTH= MIND_SIZE+3 // здоровье
MINERAL= MIND_SIZE+4 // накопленно минералов
LIVING= MIND_SIZE+5 // 0-free 1-органика 2-органика_вниз 3-живой 4-многоклеточное
C_RED = MIND_SIZE+6 // доля красного цвета
C_GREEN= MIND_SIZE+7 // доля зеленого цвета
C_BLUE= MIND_SIZE+8 // доля синего цвета
DIRECT= MIND_SIZE+9 // направлениe 1-вверх, 3 -право, 5-низ
PREV = MIND_SIZE+10// ссылка на предыдущего
NEXT = MIND_SIZE+11 // ссылка на следующего
MPREV = MIND_SIZE+12 // ссылка на предыдущего у многоклеточного
MNEXT = MIND_SIZE+13 // ссылка на следующего у многоклеточного
//===============================================================
//.... боты со всеми параметрами и мозгом-геномом ....................................
bots=new( MAX_BOTS_COUNT , BOT_SIZE ,INT16) // массив для ботов
clean( bots, 0 )
//==============================================================
Максимальное количество ботов равно размеру мира 180*96=17280
У меня в памяти сразу создается массив 17280 на 78 для всех возможных ботов.
У каждого бота есть ссылка на предыдущего и следующего.
За каждый ход, программа по ссылкам пробегает по всем существующим ботам.
Прибавление, удаление ботов происходит с помощью редактирования ссылок.
Код я выложу в группе ВКонтакте, когда приведу его в порядок. Сейчас пока некогда.
Благодарю! Примерно так себе я это и представлял. Меня даже смущало, что есть неиспользуемая память, но, видимо, этого не избежать.
ПОЧЕМУ ТЫ НЕ ПРОДОЛЖАЕШЬ!
потому что это беспереспективно. видать это дошло до автора. максимум для курсовичка потянет.
Вот и появились первые хромосомы))
Буду дальше просматривать) данный проект, случайно наткнулся
Мудрено то как, а по проще никак в кодировке? Процедуры пожирнее прицепить, нагляднее всё будет, что прям скорость просчета давит?
Ты гений
А program counter обнуляется при каждом цикле? Или сохраняется на протяжении всей жизни и обнуляется только при рождении?
Казбек Дадтеев обнуляется только при рождении. Более понятно, если называть его - указатель текущей команды.
А когда?
Вообще увлекательно! Закачал себе на телефон, пускай развиваются ))
Я тут придумал как расширить их возможности, но так как в программировании не бум бум, как сделать, не знаю..
Сейчас боты просто оптимизируются для выживания, но вот если бы они узнавали что то новое ;)
Как то бы сделать, чтобы каждый бот периодически делал записи из спонтанных букв и цифр и каждый раз проверял этот набор символов как какую то новую команду. Если команда не выполняется, (т.е. это просто набор букв) он её пропускает. А вот вдруг там сложится какая то команда, абсолютно новая для всех ботов.
В "Теореме о бесконечных обезьянах" обезьяна напечатала "Гамлета" Шекспира. А наши может и мир всё же захватят наконец )
ru.wikipedia.org/wiki/Теорема_о_бесконечных_обезьянах
По идее это можно сделать, но для этого нужно много времени :)
Ты это сам придумал?
4:40 ОКАЖУТЬСЯ
Вообще я полагаю, что главный минус программы, что условия мира в ней не изменны, но в реальном мире условия довольно часто меняются. В итоге выходит так, что те организмы, которые учатся много поколений прежде, чем подстраиваются под изменения оружающей среды не будут выживать в реальной среде, так как правила игры будут меняться быстрее, чем они чему-либо научатся. Надо придумать метод максимально быстрого приспособления к окружающей среде и правилам нового мира. Интересно думали ли вы об этом? А что если раз в 100 поколений например менять условия среды, например рандомно увеличивать количество яда, еды или стен, отнимать возможность превращать яд в еду и так далее?
И кстати пришла идея, что если запустить миллион параллельных миров одновременно, то обучение произойдет намного быстрее.
Это просто ппц, да в нас такой же код заложен создателем ! А " время " это счетчик, так что мы живем и размножаемся по заложенной программе !
А на чем написана симуляция, какие библиотеки?
Написано на Pixilang. Это малоизвестный интерпретатор, зато позволяет программировать прямо на смартфоне/планшете. Библиотеки не используются.
Человек пытается сымитировать то, что, якобы возникло случайно. Я бы уже задумался о присутствии в мире идеального программиста - Создателя.
Создатель якобы возник случайно? Я бы уже задумался..
@@foo52ru может это вселенный фрактал, кто-то создал нас, этого кого-то создал кто-то, которого создал кто-то и т.д.?
Хорошая шутка про "идеального программиста", смешная. :D
Если Создатель и есть/был, и он программист, то он тот ещё говнокодер.
Мир с половым размножением ботов так и не сделали?
На чем написан проект?
pixilang
да это же ДНК :D
У меня вопрос...
Графический интерфейс сам писал или готовый где-то есть? Хочу дома "живой" экран сделать, залить код и тупо смотреть за этим хаосом.
Это pixilang
А что если добавить типологию ботов?
Взять основы из какой нибудь имеющейся типологии людей (векторная психология, соционика, психософия, хуман дизайн, физиогномика и т.д.). Не важно какая просто параметры ботов которые рождаются, чтобы были разные
Или даже проще типичные игровые хар-ки сила, ловкость, интеллект.
Будет уже более сложное социальное взаимодействие.
P.S. Это можно сделать приложением, чтобы самому поиграться?)
Извините, может я чего-то не знаю. Но где ещё видео? Другие варианты миров, как вы говорили? Что получается и т.д. На комментарии вы отвечаете. Я так и не смог чего-либо подобного найти, а тема очень интересная.
Новых видео пока нет. Сейчас на планшете крутится первый вариант мира, но там ничего интересного не пока происходит. Мир нашел некое сбалансированное состояние и нём пребывает, хотя в любой момент может всё поменяться. Даже колонии исчезли и мир стал более однородным, с равномерным распределением энергии, никто почти не умирает, новые почти не рождаются. Своего рода тепловая смерть. Хотя по центру, за последние несколько дней, стали наклевываться небольшие колонии. Посмотрю, как будет развиваться дальше.
Пока обдумываю, каким будет новый мир, начну его делать в Новогодние праздники. Там у меня как раз двух недельный отпуск добавляется.
напиши олгаритм роста волос на голове, и расчески. а вообше если не брать кубизм который ненавидел вольт Дисней, то можно попробывать сделать что то более реальное в 3д , но боюсь что закончиться всё гонкой бильярдных шаров по луууу_ ЗаМ. без инерции..офф кос
У вас 1 клетка команды = 1 байту? По моему если в клетке может поместиться максимум 63, то это значит что в клетке 6 бит. А значит в написаных вами 21-ячековом коде 15 байт и 6 бит.
минимальная единица хранения информации - байт. логческий тип тип boolean занимает 1 байт, хотя имееет два значения 0 или 1
@@nighthunter28 Значит можно было увеличить размеры до реального байта, при этом не увеличивая потребление памяти в компьютере?)))
Продолжения не будет?
Продолжение будет?
НЕО посторел... голос уставший.
некоторые физики тоже с нуля начинают считать - th-cam.com/video/-lWGJ6jBNDY/w-d-xo.html
смотрю про програмирование а тут курсы 8 класса биологии
د خل بث
нудный ..... да как это вообщк может быть не интересно??????
Чего ты ждал?
Говнокод
Чтобы*, окажутся*. Что за безграмотность?