GreenLab Course
Development
Explicit Structure construction
Axes of development state lists define the patterns on which the structure is built.
Building a tree structure thus means defining paths in these axes from state to state, withing the same axis (axis development), or jumping to another axis (branching).
The structure matrix mode stores the number of visits of a given state.
While the structure list mode stores the state paths.
List mode
Building the structure in list mode
Building the structure means updating the list structure for consecutive growth cycles.
In our implementations, we chose to define the list structure at the final simulation stage, using a prefix tree transversal construction.
The structure list is therefore never updated on past states; it only adds
states along the tree transversal at the final stage.
Topological information (what is borne by what) is not necessary in our application but helps for geometrical feature integration (mechanics) and visualisation.
Given an empty list lst <- 0, a final age N expressed in growth cycles, and the axis of development Axdφ(), the construction scheme introduces a stack S and can be described as follows:
Step 1:
-
lst <- 0 ; the list is empty
i = 1 ; the current growth cycle, initialized to 1
φ = 1 ; the current physiological age, initialized to 1
-
S <- Axdφ=1(i=1) ; stack the first phytomer
-
if (S is living, awake and i < N) check if the phytomer is awake and if its age has not reached the tree age
- lst <- S ; store the top of the Stack (the current phytomer of axis φ and cycle i)
for (each axillary of S not processed yet)
- S <- axillary(S); Stack the axillary with i=i+1 and φ set to the axillary physio age
goto step 3 ; process the branched substructure
goto Step 3; Process the axis
end for
-
Unstack S; go back to the barrier axis
if (S is empty)
- goto Step 4 ; the stack is empty, all branches are explored
- goto Step 3; the barrier axis must be explored
-
end; all states are written in lst
Optimizing reconstruction
-
The proposed algorithm constructs an exhaustive list of all states.
It can be optimized, if the list item allows instantiation indexes instead of exhaustive contents:
- either lst(n) contains a state with its attributes (a phytomer with its bearing organs)
- or lst(n) contains a reference to another list item and the length of its description
This implements the sub-structure approach: on the first call to Stack S with (φ,i) arguments the axes of development are explored and the list is updated, while on the next call to the Stack with the same arguments the existing position in the list is retrieved, and the exploration is skipped and a simple reference item is added to the list.
Once more, the stochastic case is derived straightforwardly from the deterministic case, using the stochastic axes of developments for each random identifier in Stack S. Each stochastic plant structure realization will be attributed a different list lst.
In more detail, as for the matrix mode, the list state should be filtered by its attributes:
- the appropriate number of organs per phytomer
- filter organ occurrence in respect of a minimal ontogenetic age if required
- filter organ occurrence according to its lifespan
- limit reiteration development if the maximal order is reached.