基因 AI 包 python - 定义自定义适应度函数

Gene AI package python - define a custom fitness function

我正在使用 python 中的 Gene AI 包来测试遗传算法 (https://github.com/diogomatoschaves/geneal/blob/master/geneal/genetic_algorithms/genetic_algorithm_base.py)。

我想要自己的适应度函数所以我写了

def my_fitness(chromosome):   
    fitness = mean_absolute_percentage_error(chromosome, [0.5 0.5 0.5 0.5])
    return fitness

然后按照文档写了下面的代码:

    from geneal.genetic_algorithms import ContinuousGenAlgSolver
    from geneal.applications.fitness_functions.continuous import fitness_functions_continuous
    
    solver = ContinuousGenAlgSolver(
    n_genes=4, 
    fitness_function=my_fitness(chromosome),
    pop_size=10,
    max_gen=200,
    mutation_rate=0.1,
    selection_rate=0.6,
    selection_strategy="roulette_wheel",
    problem_type=float, # Defines the possible values as float numbers
    variables_limits=(-10, 10) # Defines the limits of all variables between -10 and 10. 
                               # Alternatively one can pass an array of tuples defining the limits
                               # for each variable: [(-10, 10), (0, 5), (0, 5), (-20, 20)]
)

solver.solve()

不清楚我如何使用自己的健身功能。得到染色体未定义的错误(很明显!)。 如何在这个包中使用我自己的健身功能。请出示。

适应度函数有两个要求:

  • 它必须传递一个而且只有一个参数——染色体。如果它是二进制遗传算法求解器,则染色体是 1 和 0 的 numpy 数组;如果是连续遗传算法求解器,则染色体是 0 到 9 之间数字的 numpy 数组。这个数组的大小由你初始化求解器的基因数量决定,数组上的每个位置对应一个不同的变量。

  • 必须return一个实数。

此函数的内部工作原理由您决定。然后在初始化期间将其传递给对象,例如:

from geneal.genetic_algorithms import ContinuousGenAlgSolver
from geneal.applications.fitness_functions.continuous import fitness_functions_continuous
    
    solver = ContinuousGenAlgSolver(
    n_genes=4, 
    fitness_function=my_fitness,
    pop_size=10,
    max_gen=200,
    mutation_rate=0.1,
    selection_rate=0.6,
    selection_strategy="roulette_wheel",
    problem_type=float, # Defines the possible values as float numbers
    variables_limits=(-10, 10) # Defines the limits of all variables between -10 and 10. 
                               # Alternatively one can pass an array of tuples defining the limits
                               # for each variable: [(-10, 10), (0, 5), (0, 5), (-20, 20)]
)

我建议您查看包中提供的示例,以更好地了解如何定义自定义适应度函数:examples