Esempio n. 1
0
def mutate_length(individual: Component, length_upper_bound: int,
                  length_lower_bound: int) -> Component:
    """
    Modify length of both segments of an individual

    :param individual: Individual to be modified
    :param length_upper_bound: Upper bound for segment length
    :param length_lower_bound: Lower bound for segment length
    :return: Individual with modified lengths of two segments
    """
    individual.left_length_coef += random.uniform(-0.1, 0.1)
    individual.right_length_coef += random.uniform(-0.1, 0.1)
    individual.left_length_coef = min(individual.left_length_coef,
                                      length_upper_bound)
    individual.right_length_coef = min(individual.right_length_coef,
                                       length_upper_bound)
    individual.left_length_coef = max(individual.left_length_coef,
                                      length_lower_bound)
    individual.right_length_coef = max(individual.right_length_coef,
                                       length_lower_bound)
    return individual