예제 #1
0
 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
예제 #2
0
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
예제 #3
0
 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
예제 #4
0
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)
예제 #5
0
 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
예제 #6
0
 def __init__(self, original: Cromosoma):
     self.Original = Cromosoma.Clone(original)
     self.Mutante = Cromosoma.Clone(original)
     self.IndiceBitCambiado = None