You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python geneal包自定义fitness函数传入遗传算法求解器问题咨询

正确实现示例

错误原因

报错核心原因是传入fitness_function参数时,对my_fitness添加了括号触发了即时调用,此时遗传算法框架还未生成chromosome变量,自然触发未定义报错。fitness_function参数要求传入函数本身的引用,不需要额外添加括号与参数,框架会在迭代过程中自动将生成的染色体作为参数传入适应度函数完成计算。

完整可运行代码

# 若使用sklearn的MAPE需先导入,也可替换为自行实现的误差计算逻辑
from sklearn.metrics import mean_absolute_percentage_error
from geneal.genetic_algorithms import ContinuousGenAlgSolver

# 自定义适应度函数
def my_fitness(chromosome):
    # 原代码目标向量缺少逗号分隔,已修正格式
    fitness = mean_absolute_percentage_error(chromosome, [0.5, 0.5, 0.5, 0.5])
    return fitness

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,
    variables_limits=(-10, 10)
)

solver.solve()

补充说明

  • 该传入规则同时适用于geneal包下所有遗传算法求解器的自定义适应度函数场景
  • 如果目标向量需要动态调整,可通过闭包、类方法等方式封装适应度函数,不需要修改求解器的传参逻辑

内容的提问来源于stack exchange,提问作者pranav nerurkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:45:02