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