But in general, the problem involves doing pattern detection between possible designs and their quality metrics. When the whole thing is in software the designs can be verified ahead of time. For instance, you can create a language for designing airplane wings, and then the optimizer can generate potentially good designs, they can be verified to be manufacturable, and then they can be fed into a virtual wind tunnel to figure out if the design performs well. They can also be scored by things like weight and cost to manufacture. Let the optimizer iterate a few thousand times and you're really doing a machine learning problem where the blueprints and the quality metrics are the data set.