Пример #1
0
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
Пример #2
0
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