def __init__(self, projenitor1: Cromosoma, projenitor2: Cromosoma, hijo1: Cromosoma, hijo2: Cromosoma, unidades: int): self.Projenitor1 = projenitor1.Clone() self.Projenitor2 = projenitor2.Clone() self.Hijo1 = hijo1.Clone() self.Hijo2 = hijo2.Clone() self.Unidades = unidades
def AplicarCrosOverDeTipoUnPunto(cromosoma1: Cromosoma, cromosoma2: Cromosoma): unidades = randint(0, len(cromosoma1.Valor) - 1) primeraParteBinario1 = cromosoma1.Valor[:unidades] primeraParteBinario2 = cromosoma2.Valor[:unidades] segundaParteBinario1 = cromosoma1.Valor[unidades:] segundaParteBinario2 = cromosoma2.Valor[unidades:] nuevoBinario1 = primeraParteBinario1 + segundaParteBinario2 nuevoBinario2 = primeraParteBinario2 + segundaParteBinario1 return Cromosoma(nuevoBinario1), Cromosoma(nuevoBinario2), unidades
def GetPoblacionInicial(self) -> Poblacion: poblacion = Poblacion() for i in range(self.Configuracion.CantidadPoblacionInicial): numeroRandom = "" for j in range(self.dominioFinal): numeroRandom += str(randint(0, 1)) poblacion.Cromosomas.append(Cromosoma(numeroRandom)) return poblacion
def AplicarMutacion(poblacion: Poblacion, cromosoma: Cromosoma): mutacion = Mutacion(cromosoma) numeroBit = randint(0, len(cromosoma.Valor) - 1) list1 = list(cromosoma.Valor) if list1[numeroBit] == '0': list1[numeroBit] = '1' else: list1[numeroBit] = '0' mutacion.Mutante.Valor = ''.join(list1) mutacion.IndiceBitCambiado = numeroBit cromosoma.Valor = ''.join(list1) poblacion.Mutaciones.append(mutacion)
def Elite(self, poblacionInicial: Poblacion) -> Poblacion: countTrue = 0 while countTrue < 2: elite = 0 noElite = list( filter(lambda cd: cd.EsElite == False, poblacionInicial.Cromosomas)) for cromosoma in noElite: if FuncionFitness(poblacionInicial, cromosoma) > elite: elite = FuncionFitness(poblacionInicial, cromosoma) for cromosoma in noElite: if FuncionFitness(poblacionInicial, cromosoma) == elite and countTrue < 2: Cromosoma.Elite(cromosoma) countTrue += 1 return poblacionInicial
def __init__(self, original: Cromosoma): self.Original = Cromosoma.Clone(original) self.Mutante = Cromosoma.Clone(original) self.IndiceBitCambiado = None