def cabbage_growing(parent_1, parent_2): """ скрещивание 2х особей :param parent_1: родитель1 :param parent_2: родитель2 :return: 2 потомка особей """ # создание экземляров потомков son = Individual(GENE_LEN, gene_number) daughter = Individual(GENE_LEN, gene_number) if rnd.randint(0, 1): # псевдоравномерное скрещивание daughter.ind_gene = "".join(parent_2) son.ind_gene = "".join([ rnd.choices([parent_1, parent_2], [1, 1])[0][i] for i in range(GENE_LEN) ]) else: # создание 1 - точечного кроссовера border1 = rnd.randint(0, int(GENE_LEN // 2)) # son.ind_gene = "".join(parent_1[:border1] + parent_2[border1:]) daughter.ind_gene = "".join(parent_2[:(GENE_LEN - border1)] + parent_1[(GENE_LEN - border1):]) return son, daughter
def cabbage_growing(parent_1, parent_2): """ скрещивание 2х особей :param parent_1: родитель1 :param parent_2: родитель2 :return: 2 потомка особей """ # создание экземляров потомков son = Individual(GENE_LEN, gene_number) daughter = Individual(GENE_LEN, gene_number) parents = [parent_1, parent_2] # псевдоравномерное скрещивание son.ind_gene = "".join([ rnd.choices(parents, [1, rnd.uniform(1.1, 2.5)])[0][i] for i in range(GENE_LEN) ]) daughter.ind_gene = "".join([ rnd.choices(parents, [1, rnd.uniform(1.1, 2.5)])[0][i] for i in range(GENE_LEN) ]) # создание 1 - точечного кроссовера # recessive_gene = parents[0] # dominant_gene = parents[1] # border1 = rnd.randint(0, int(GENE_LEN//2)) # # son.ind_gene = "".join(recessive_gene[:border1] + # dominant_gene[border1:]) # daughter.ind_gene = "".join(dominant_gene[:(GENE_LEN-border1)] + # recessive_gene[(GENE_LEN-border1):]) return son, daughter