Это продолжение, начало здесь.
В папке с проектом есть пара дополнительных скриптов
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) и вписываем имя нашей сохранёнки.
При запуске скрипта, вначале откроется сообщение о количестве геномов в файле, а затем вырастет первое дерево.
В верхнем левом углу идут надписи.
- 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 строке.
В этом скрипте можно пошагово следить за ростом дерева, видеть номера активных генов и сколько энергии приносит каждая клетка. Отростки выделены белой обводкой
В левом верхнем углу видна та же информация, что и в прошлом скрипте.
Справой стороны виден геном.
Сверху идут кнопки
- 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.
В этом случае энергия на Солнце будет равна 10 и выполнится функция DoLife3 , которая возьмет геном из файла "1genSave/0.gn" и разместит 12 растений с этим геномом начиная с x-координате =550, с расстоянием между растениями в 8 клеток.
(всё это указывается в параметрах функции).
Всё это, естественно, можно изменять.
Вот так выглядят функции 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() являются временными, я их постоянно переписывал, в зависимости от того, какой эксперимент хотел провести и здесь они лишь для примера.
На этом вроде всё.