pub fn solve<G>(
    genetic: Box<dyn Genetic<G>>,
    progress: Option<Progress<G>>,
    cost_target: f64,
    cross_over_candidates: usize,
    epoch_limit: usize,
    mutation_rate: f64,
    population_size: usize,
    time_limit: Duration
) -> Result<Success<G>, Failure> where
    G: Clone + Debug + Eq + PartialEq