Skip to content

Latest commit

 

History

History
133 lines (98 loc) · 10.7 KB

index.md

File metadata and controls

133 lines (98 loc) · 10.7 KB

Сколько памяти выделять клетке? Ограниченное или нет количество?

Движение клеток по четырем направлениям - вверх, вниз, влево, вправо. Возможность съесть клетку рядом для восполнения энергии. Что если энергию ограничить сверху? Клетка может иметь не более определенного запаса.

Следовательно если есть некоторый запас сил, то нужно не есть, а двигаться в поиске пищи.

Или так - клетка может съесть больше своего максимального энергетического запаса, но уровень сил ограничен. Так появляется фактор отбора - от клеток которые только едят к клеткам, которые едят и двигаются.

Можно попробовать не очень большое количество клеток.

Проверить одну клетку - еденица энергии Сделать движение - еденица энергии.

Необходим отбор клеток.

Как на счет отделения еды от клеток? Отдельные клетки с едой. Также возможность размножения. Отделить популяцию от вбросов еды.

Как размножать клетки? Клетки сразу могут размножаться после создания(рождения) или после истечения времени(какого?). Или после накопления или траты энергии? Как соединять программы клеток? Половину маминой программы и половину папиной? Или перемешивать содержимое обеих программ и из него составлять новую? Вопрос эффективного совмещения программ клеток.

Основная задача - не столько красивая анимация, а формирование более сложных, эффективных программ развития клеток. Наблюдатель должнен видеть приспособление программ клеток в течении времени.

Скорость генерации еды должна соответствовать скорости потребления. Иначе все поле заполняется едой.

Еды полно, а энергия популяции падает. Гипотеза - слишком короткая замкнутая программа клетки - 32 шага. Установка на 320 шагов видимого успеха не дала.

Гипотеза - а едят ли клетки вообще? Отладочная печать показала, что клетки не едят. Произвел отладку, клетки начали питаться, но слишком слабо для поддержания долгой жизнедеятельности. Пробовал оставлять только команду "checkAndEat" в программе - не помогло.

Есть-ли разница между топтанием клетки на месте и хождением по отрезку вперед- назад или хождению по спирали или кругу?

При команде поедания которая проверяет всех соседей выживаемость несколько улучшилась. Стали оставаться несколько кластеров клеток на более чем 2000 итераций.

Если есть следущие команды: [Положить на стек направление.] [Снять со стека направление и съесть клетку.] Уместно-ли будет генерировать код рандомом? Если здесь важен порядок операций. Как обеспечить отбор клеток с нужным геномом?

Геном должен состоять из таких команд, которые можно выполнять в любом порядке. Здесь в качестве команды можно выделить обращение к решетке grid за информацией о соседних клетках.

Непонятен механизм отбора и(или) давления на клетку. Эмоциональный комплекс?

Рассмотрим случаи моделирования большогоо количества клеток и небольшого. Если между клетками нет взаимодействия(хотя учет соседа при движении, отсутствие стека на решетке - уже взаимодействие), но как таковой разницы быть не должно.

Клетке необходимы органы чувств для приема информации и органы действий. Или допустимые команды состоят из пары фактических действий. Тогда даже случайный набор команд будет иметь какой-то смысл.

Как организовать спаривание клеток? Клетка должна отправить запрос другой клетке? И получить ответ? Интересная тема если клетки могут общаться между собой какими-то командами.

Клетка подает сигнал о желании спаривания. Он может быть услышан другой клеткой подавший сигнал в определенном радиусе. Или может быть услышан клеткой рядом. Если две клетки рядом имеют соответствующий сигнал, то их геном объединяется, если есть свободное место рядом, то в нем рождается новая клетка. Для второй клетки в случае удачного размножения следует дать пометку, что она размножилась, что-бы пропустить команду.

Желательно замкнуть поле, что-бы движение за границы поля выводило клетку с другой стороны. Это относится и к функциям обзора клеток. Сделано.

Теперь нужно разделить программу на несколько частей(модулей). Модуль симуляции отдельно от модуля отображения. Симуляция должна быть возможна без отображения.

[X] Есть баг при рисовке графиков если подвигать камеру на первом экране.

Ось симметрии сигмоиды.

Починил процесс питания клеток, ошибка была алгоритмическая, не обновлялась ссылка на таблицу поля. К качестве эксперимента заметил, что если добавлять много еды, то клетки всеравно всю ее не едят, видимо накладывается ограничение передвижения в виде цикличных повторов алгоритма клетки.

Многопоточность. Создается несколько потоков с кодом simulator-thread. Устанавливаются каналы передачи сообщений и на какие стороны передавать данные. Для начала матрицы 2x1 - расчет идет в два потока.

Проблема с передачей информации о клетке из потока. Клетка содержит вложенные поля, а каналы love2d не поддерживают сложных структур. Также не хочется лишний раз копировать большое количество таблиц(код, история движений, память) при переходе из зоны одного потока в другой. Хочется удешевить стоимость перехода, но при независимых потоках вся память также независима. Даже если отбросить копирование, то получение информации о клетке уже проблема. Как создать идентификатор для поиска клетки?

Делая передачу параметров внезапно понял разницу между cdecl, pascal, stdcall и прочими соглашениями вызова при передаче данных через стек. Особенность стека - он инвертирует порядок заполнения при чтении.

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

4.700.000 итераций без расходования энергии на движение - память 77 мб.

Как считать количество итераций при нескольких рабочих потоках без жесткой синхронизации?

При нажатии кнопки "Start" второй раз новая симуляция запускается с тормозами.

Не работает отсечение мыши при передвижении за пределами симуляции.

Сделать тестовый стенд для отладки listNeighbours и findFreePos. Как быстро добавлять такие стенды? Условия - некоторые клетки предустановлены, не двигаются. Значит есть запись состояния всей системы.