def mutate_gene(self, index, xy_prob=0.5) -> Tuple[(int, int)]:
    gene = list(self.road.control_nodes[index])
    candidate_mut_values = [i for i in range(self.lower_bound, self.upper_bound) if (i != 0)]
    mut_value = random.choice(candidate_mut_values)
    if (random.random() < xy_prob):
        c = 1
    else:
        c = 0
    gene[c] += mut_value
    self.road.control_nodes[index] = tuple(gene)
    self.road.sample_nodes = catmull_rom(self.road.control_nodes, self.road.num_spline_nodes)
    return (c, mut_value)
def mutate_gene(self, index, xy_prob=0.5) -> Tuple[(int, int)]:
    gene = list(self.road.control_nodes[index])
    candidate_mut_values = [i for i in range(self.lower_bound, self.upper_bound) if (i != 0)]
    mut_value = random.choice(candidate_mut_values)
    if (random.random() < xy_prob):
        c = 1
    else:
        c = 0
    gene[c] += mut_value
    self.road.control_nodes[index] = tuple(gene)
    self.road.sample_nodes = catmull_rom(self.road.control_nodes, self.road.num_spline_nodes)
    return (c, mut_value)