Найти тему
ТехноШаман

Моделирование эволюции. Цифровые деревья. часть 2. Продолжение.

Оглавление

Это продолжение, начало здесь.

В папке с проектом есть пара дополнительных скриптов
view.pixi и view_one.pixi.
Они нужны для работы с сохранёнными геномами деревьев.

Если код симуляции я постоянно переписывал, добавлял новые возможности, то эти два скрипта использовал редко, только по мере необходимости, поэтому там возможны некоторые несоответствия.

Если во время симуляции нажимали save gns , то геном деревьев, которые видны на увеличенном фрагменте сохраняются в папке 0gensSave.

При первом нажатии, геномы сохраняются в файле по имени 0.gns, при следующим нажатии - в файле 1.gns и так далее.

Если перезапустить симуляцию, то счётчик имени файла обнулится и геномы начнут сохранятся опять начиная с файла 0.gns и так далее.

То же самое происходит, когда работают одновременно несколько симуляций.

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

В папке с проектом EvoTrees_gorizont этих файлов нет и при необходимости нужно переместить сохранёнку из
EvoTrees_gorizont\0gensSave в EvoTrees\0gensSave .
Связано это с тем, что эти скрипты используют код из других файлов, а в варианте с горизонтальными слоями тумана код был сильно изменён.

view.pixi

Скрипт view.pixi позволяет просматривать сохранённые геномы. Для этого в скрипте должно быть прописано имя сохранёнки. На скрине это сделано в 11 строке. Открываем файл в текстовом редакторе (кодировка UTF-8) и вписываем имя нашей сохранёнки.

Будет загружен файл 0.gns из папки 0gensSave
Будет загружен файл 0.gns из папки 0gensSave

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

Дерево погибло из за нехватки энергии
Дерево погибло из за нехватки энергии

В верхнем левом углу идут надписи.

  • current - номер генома, отсчёт идёт с нуля.
  • Height - высота растения
  • Cells count - общее количество клеток
  • Seeds - количество отростков
  • energy of sun - энергия Солнца, при котором развивалось это растение. Этот параметр сохраняется вместе с геномом.
  • Energy - энергия, накопленная деревом.
  • Energy4seed - энергии на каждый отросток
  • treeAge - сколько осталось жить дереву.
  • step - пройдено шагов

На скриншоте, на 45 шаге (step), уровень энергии (Energy) ушёл в глубокий минус, поэтому дерево погибнет. Рост его останавливается и выводится сообщение "no energy" в красном прямоугольнике.

Древесина окрашена зелёным, отростки белым, отвалившиеся отростки (семена) - жёлтым, а древесина новых деревьев синим. Это потомки, которые выросли из упавших семян ещё при жизни дерева.

Кстати, скрипт view_one.pixi не может нормально отрабатывать падение семян и дерево считается погибшим.

Сверху идут кнопки

  • next - переход к следующему растению.
  • < > - две кнопки, сместить растение вправо или влево, что бы убиралось на экране.
  • save gen - сохранение генома текущего дерева в отдельный файл в папке 1genSave для дальнейшего просмотра скриптом view_one.pixi. Имена файлов будут 0.gn, 1.gn, 2.gn ...
    При следующем запуске скрипта, новые сохраняющиеся файлы будут затирать старые, поэтому стоит старые сохранёнки переименовать или переместить в другую папку.
  • save .png - сохранить скриншот окна программы в папке 0image
  • exit - выход из программы.

С правой стороны отображается геном текущего дерева.

view_one.pixi

Скрипт view_one.pixi позволяет просматривать уже отдельные геномы из папки 1genSave. Для этого в скрипте должно быть прописано имя сохранёнки. На скрине это сделано в 14 строке.

view_one.pixi
view_one.pixi

В этом скрипте можно пошагово следить за ростом дерева, видеть номера активных генов и сколько энергии приносит каждая клетка. Отростки выделены белой обводкой

В левом верхнем углу видна та же информация, что и в прошлом скрипте.
Справой стороны виден геном.

Стандартный режим
Стандартный режим

Сверху идут кнопки

  • sun+ sun- - здесь можно убавлять и прибавлять количество солнечной энергии. Изменения скажутся при следующем шаге.
  • step - сделать один ход.
  • < > - переместить дерево в нужном направлении по горизонтали
  • mode - переключение режимов. Стандартный, где виден номер активного гена и режим Энергии, где видно, сколько энергии получает каждая клетка.
  • save .png - сохранить скриншот окна программы в папке 0image.
    Имена файлов будут 100.png , 101.png , 102.png ...
  • exit - выход
режим отображения энергии, которую получает каждая клетка
режим отображения энергии, которую получает каждая клетка

Ну и на последок, как я использовал сохраненный геном.

DoLife() DoLife2() DoLife3()

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

генерируем новую жизнь
генерируем новую жизнь

Она видна на 73 строке ( файл Start_Simulation.pixi ).
Две остальных строки закомментированны, то есть перед ними стоит // и эти строки не выполняются.

Когда мне хочется провести какой то эксперимент, например, запустить в Мир одно растение из сохранёнок, то я убираю // из 74 строки и ставлю их на 73 строку. Теперь будет выполняться строка

day_energy = 14 DoLife2( "1genSave/0.gn", 650 )

запускаем одно растение из сохранёнок
запускаем одно растение из сохранёнок

Энергия на Солнце будет равна 14, а вместо функции DoLife, выполнится DoLife2, которая возьмет геном из файла "1genSave/0.gn" и разместит одно растение с этим геномом по x-координате 650.

Запуск симуляции с одним растением из сохранёнки и с отключенной мутацией
Запуск симуляции с одним растением из сохранёнки и с отключенной мутацией

//======================================================

В другом варианте я оставляю для выполнения строку 75.

будет выполнена код на строке 75
будет выполнена код на строке 75

В этом случае энергия на Солнце будет равна 10 и выполнится функция DoLife3 , которая возьмет геном из файла "1genSave/0.gn" и разместит 12 растений с этим геномом начиная с x-координате =550, с расстоянием между растениями в 8 клеток.
(всё это указывается в параметрах функции).

Запуск симуляции с 12 растениями с одинаковым геномом из сохранёнки
Запуск симуляции с 12 растениями с одинаковым геномом из сохранёнки

Всё это, естественно, можно изменять.

Вот так выглядят функции DoLife3 и DoLife3 в коде

функции DoLife3 и DoLife3
функции DoLife3 и DoLife3

В строке 251 и 267 происходит отключение мутации.
MutationEnable = -1
Естественно, её можно убрать и разрешить мутации.

В строке 256 происходит создание растения по указанной координате ($X), RGB-цветом (0,200,0) и с геномом из указанного файла ($filename).

В строках с 272 по 284 происходит создание 12 растений разного цвета и с геномом, взятым из указанного файла ($filename) .

Если хочется запустит в Мир несколько растений из разных сохранёнок, то имя файла можно прописать в параметрах напрямую, например:

generateGenom2($X+$Xplus*0, 0, 200, 0, "1genSave/0.gn" )
generateGenom2($X+$Xplus*1, 0, 0, 200, "1genSave/
1.gn" )
generateGenom2($X+$Xplus*2, 200, 0, 0, "1genSave/
2.gn")

Функции DoLife2() и DoLife3() являются временными, я их постоянно переписывал, в зависимости от того, какой эксперимент хотел провести и здесь они лишь для примера.

На этом вроде всё.