基因 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
我正在使用 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