---
id: growth
title: Модель распространения клеток робофабрики
---
## Режимы отображения (выбираются цифровыми клавишами 0-5)

0. **Terrain** - местность, черным показаны непригодные для строительства участки, светлым - клетки, яркость пропорциональна степени зрелости. (см. файл [terrain.mp4](terrain.mp4))
1. **Incompleteness Signal Concentration** - концентрация сигнала роста. Он вырабатывается в недостроенных клетках, диффундирует в соседние и распадается согласно настройкам. В режиме бомбардировки видно как вокруг исчезнувших клеток вспыхивают облачка сигнала роста и тают по мере зарастания раны.
2. **Incompleteness Signal Direction** - направление наибольшего градиента сигнала роста. Каждый цвет соответствует определенному направлению на плоскости. При бомбардировке зияющие раны искажают вокруг себя карту градиента, призывая строительные блоки. Если это происходит возле участка активного роста, то как только рана залечивается, фронт роста перетягивает градиент на себя. 
3. **Transport Direction** - направление фактического транспорта блоков из данной клетки, каждый цвет соответствует одному из четырех направлений (вправо,влево,вверх,вниз). Черный соответствует пренебрежимо малому уровню транспорта.
4. **Storage** - объем запасов на складе клетки. Близкие к фронт роста клетки не накапливают запасов а все их передают в зону стройки. Поэтому за фронтом роста тянется фронт минимума запасов. Когда фронт роста ушел далеко, уровень запасов в клетках растет. При уничтожении группы клеток, соседи расходуют запасы на их регенерацию.  (см. файл [storage.mp4](storage.mp4))
5. **Transport Activity** - объем транспорта запасов. Тоже следует за фронтом роста.

 ![Growth graphs](graph.png)

## Работа алгоритма 

(см. рабочий python-код в файле growth.ipynb - лучше открывать с помощью Jupyter Notebook)

Территория с препятствиями задается файлом test.png. Белые - доступные для застройки области территории, черные - недоступные.

 ![Test terrain](test.png)

* По картинке из файла генерируется карта местности, на нее можно добавить случайные препятствия. 
* Задаются параметры клеток и параметры распространеняи сигнала об активном строительстве 
* Настраивается момент начала и интенсивность бомбардировки
* Создается первоначальная клетка

Затем в каждом кадре для каждой клетки выполняется следующий цикл:
       
* Если клетка зрелая, то производит некоторое количество объектов на свой склад
* Составляем список соседних участков с учетом границ карты
* Для каждого участка из списка соседей если на нем есть клетка, расчитываем градиент сигнала роста
* Выявляем соседа с наибольшей концентрацией сигнала роста
* Моделируем диффузию сигнала роста между клетками
* Определяем наиболее готовую недостроенную соседнюю клетку
* Если на соседнем участке нет клетки, проверяем можно ли там построить новую.
* Если есть недостроенные участки - помогаем им, если есть только пустые - строим новую (постройка новых клеток имеет меньший приоритет, чем достройка начатых).
* Устанавливаем объем отдаваемого груза в зависимости от концентрации сигнала роста и ограничиваем его минимум и максимум
* Если запасы не меньше, чем планируемый экспорт, то отправим сколько планировали, иначе отправим сколько можем
* Если получатель принял больше чем нужно для строительства, излишки у него складируются (на следующем ходу он может передать их дальше)
* Если задано, проводится бомбарировка - случайные группы клеток выходят из строя с заданной интенсивностью 