#632 multi-level: Construct multi-level synthesis node tree

Albert Hofkamp requested to merge 632-add-multi-level-synthesis-tree into develop

First 2 commits are very small improvements.

Third commit adds application files so the multi-level application can be run from the UI.

Fourth commit add building and printing the multi-level synthesis tree.
The computation happens in ComputeMultiLevelTree.process(). After clustering it kicks off the recursive tree build function with makeTreeNode() at line 100. That function is basically algorithm 1, and it returns a TreeNode. The computeGroupContents() function implements algorithm 2. Not that both functions exist twice, once for a collection of plant nodes and once for a single plant node (the M == 1 case in both algorithms).

Algorithm 2 the general case does a search in the plant group relations, which is encoded at lines 200 to 234. The GroupContent class contains the actual data that is being updated inside the search (done in the update function). The GroupContent also functions as return value for algorithm 2.

I ran it with the simple waterlock case, and the output is the same as in the paper, except that our clustering function returns a different order of the clusters.

Closes #632 (closed) Addresses #318

Merge request reports