def fitness_optimo(funcion, x_min, x_max, num_bits, dimen): """ Devuelve el mejor fitness posible que se puede obtener con la amplitud del intervalo (x_max - x_min) dada y el número de bits usados :param funcion: Determina la función que se pretende maximizar :param x_min: Inicio del intervalo de maximización para cada dimensión :param x_max: Final del intervalo de maximización para cada dimensión :param num_bits: número de bits usados para codificar el valor real de la variable xi :param dimen: Número de dimensiones de la función a evaluar :return: devuelve el mejor fitness posible que se puede obtener con la amplitud del intervalo (x_max - x_min) dada y el número de bits usados """ delta = (x_max - x_min) / (2**num_bits - 1) if funcion == "Esfera": optimo = bin(round((-x_min) / delta)) elif funcion == "Schwefel": optimo = bin(round((420.9687 - x_min) / delta)) else: return 1 gen_optimo = bitarray(optimo[2:]) genes_optimos = [] for j in range(dimen): genes_optimos.append(gen_optimo) indiv_optimo = Individuo(genes_optimos) indiv_optimo.set_fitness() mejor_posible = indiv_optimo.get_fitness() return mejor_posible
def genera_poblacion_inicial(_long_gen, _num_genes, _mu): """ Devuelve una lista de instancias de la clase Individuo con el número de genes y la longitud de estos especificados. :param _long_gen: longitud de los genes :param _num_genes: número de genes de cada individuo :param _mu: :return: """ _poblacion = [] for _i in range(_mu): g = genera_genes(_long_gen, _num_genes) # Genera genes de un nuevo individuo indiv = Individuo(g) # Creacción de individuo indiv.set_fitness() # Cálculo del fitness _poblacion.append(indiv) # Annade nuevo individuo a la población _poblacion.sort() asigna_probabilidades(_poblacion) # Asigna las probabilidades a cada individuo return _poblacion