def cruzamentoUniforme(self, pais, txCruzamento): #declaração dos pais e filhos pai1 = pais[0] pai2 = pais[1] combinacaoPai1 = pai1.getCombinacao() combinacaoPai2 = pai2.getCombinacao() tam1 = len(combinacaoPai1) tam2 = len(combinacaoPai2) filhos = pais i = 0 aux = [] #sorteio dos genes while i < tam1: aux.append(random.randint(0, 1)) i = i + 1 cruz = random.randint(0, 100) if cruz < txCruzamento: i = 0 filho1 = Individuo() filho2 = Individuo() combinacaoFilho1 = [] combinacaoFilho2 = [] while i < tam1: if aux[i] == 0: combinacaoFilho1.append(combinacaoPai1[i]) combinacaoFilho2.append(combinacaoPai2[i]) elif aux[i] == 1: combinacaoFilho1.append(combinacaoPai2[i]) combinacaoFilho2.append(combinacaoPai1[i]) i = i + 1 filho1.setCombinacao(combinacaoFilho1) filho2.setCombinacao(combinacaoFilho2) filhos = [filho1, filho2] return filhos
def cruzamentoUmPonto(self, pais, txCruzamento): pai1 = pais[0] pai2 = pais[1] combinacaoPai1 = pai1.getCombinacao() combinacaoPai2 = pai2.getCombinacao() tam1 = len(combinacaoPai1) tam2 = len(combinacaoPai2) filhos = pais cruz = random.randint(0, 100) if cruz < txCruzamento: filho1 = Individuo() filho2 = Individuo() crossOver = random.randint(1, (tam1 - 2)) combinacaoFilho1 = [ *combinacaoPai1[:crossOver], *combinacaoPai2[crossOver:tam2] ] combinacaoFilho2 = [ *combinacaoPai2[:crossOver], *combinacaoPai1[crossOver:tam1] ] filho1.setCombinacao(combinacaoFilho1) filho2.setCombinacao(combinacaoFilho2) filhos = [filho1, filho2] return filhos