I’m becoming interesting in a form of guided evolution, specific to given real-world relatively large-scale engineering problems.
The rough way I see this working is to exploit hierarchy using TDD. The hierarchy itself is an object hierarchy, designed top-down, but using TDED to evolve the actual program code bottom up.
At each level of the hierarchy (starting at root L0) level Ln will use the evolved programs at Ln+1 as its terminals (meaning they cannot be further evolved by Ln). This should not only reduce bloat, but will produce re-usable code, and good starting populations.
A really interesting adaptation would, however, be to feed in the Fitness measure of Ln into Ln+1. This may allow sub-levels to shake themselves into even better fit with the system in which they are being encapsulated.