The AlterResult struct is used to represent the result of an
alteration operation. It contains the number of operations
performed and a vector of metrics that were collected
during the alteration process.
The AlterAction enum is used to represent the different
types of alterations that can be performed on a
population - It can be either a mutation or a crossover operation.
This is the main trait that is used to define the different types of alterations that can be
performed on a population. The Alter trait is used to define the alter method that is used
to perform the alteration on the population. The alter method takes a mutable reference to
the population and a generation number as parameters. The alter method returns a vector of
Metric objects that represent the metrics that were collected during the alteration process.