Fitness evaluation logic and evolution flow should not only be separated from each other, but also be independent of evolution engine. On the other hand, evolution engine extends both of these behaviors, combining them into the full evolution process. Designing an evolution engine as a subtype of fitness evaluator and evolution flow allows detaching logic from an engine into parent traits, keeping the ability to use provided fitness evaluators and evolution strategies as decorators to produce new evolution engines.
Fitness evaluation logic and evolution flow should not only be separated from each other, but also be independent of evolution engine. On the other hand, evolution engine extends both of these behaviors, combining them into the full evolution process. Designing an evolution engine as a subtype of fitness evaluator and evolution flow allows detaching logic from an engine into parent traits, keeping the ability to use provided fitness evaluators and evolution strategies as decorators to produce new evolution engines.