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

DEAP注册mutUniformInt突变函数后onemax示例运行报错问题

问题原因

你注册突变函数的方式确实有误,核心问题是你对DEAP的toolbox.register的参数传递逻辑理解有偏差:
toolbox.register本质是基于Python偏函数实现的,你注册时传入的位置参数会优先于调用时传入的参数,按顺序传给目标函数。

两个算子的参数匹配差异

  • mutFlipBit的函数定义为def mutFlipBit(individual, indpb):,你注册时只传了关键字参数indpb=0.05,没有占用位置参数坑位,调用toolbox.mutate(mutant)时,mutant会自动填充到第一个参数individual的位置,参数匹配完全正确,所以可以正常运行。
  • mutUniformInt的函数定义为def mutUniformInt(individual, low, up, indpb):,你注册时传了两个位置参数0、1,调用时传入的mutant就会被排到第三个参数位置,最终实际传入的参数顺序为(0, 1, mutant, indpb=0.05),对应到函数定义就是individual=0, low=1, up=mutant, indpb=0.05,第一个参数变成了int类型的0,调用len(individual)自然会抛出类型错误。

解决方案

把low、up改为关键字参数传入注册逻辑,避免占用位置参数坑位即可:

toolbox.register("mutate", tools.mutUniformInt, low=0, up=1, indpb=0.05)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:27:02