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

使用PyGad实现遗传算法时遇TypeError错误求助

解决PyGad 3.0.0中的TypeError: can't multiply sequence by non-int of type 'GA'

错误原因

PyGad 3.0.0对适应度函数的参数顺序做了调整,你定义的fitness_func参数顺序是(solution, solution_idx, ga_instance),但3.0.0版本要求的正确顺序是(ga_instance, solution, solution_idx)。这就导致函数里的solution变量实际接收的是GA实例对象,而非预期的解序列,执行solution*inputs时相当于把GA实例和列表相乘,直接触发类型错误。

修正步骤

  1. 调整适应度函数的参数顺序,将ga_instance放在第一个位置
  2. 将inputs转为numpy数组,确保和solution(numpy数组)的元素级相乘逻辑稳定

修正后的完整代码

import pygad
import numpy

print(pygad.__version__)

# 转为numpy数组,避免列表与数组相乘的潜在问题
inputs = numpy.array([0.4,1,0,7,8,1,2,3,4,5,6,7,8,9,0,12,23,34,45,5667,67,78,95678,456,23,234,456,9,0,9,54,213,])
desired_output = 32

# 调整参数顺序:ga_instance放在首位
def fitness_func(ga_instance, solution, solution_idx):
    output = numpy.sum(solution * inputs)
    fitness = 1.0 / (numpy.abs(output - desired_output) + 0.000001)

    return fitness

ga_instance = pygad.GA(num_generations=100,
                       sol_per_pop=10,
                       num_genes=len(inputs),
                       num_parents_mating=2,
                       fitness_func=fitness_func,
                       mutation_type="random",
                       mutation_probability=0.6)

ga_instance.run()

ga_instance.plot_fitness()

补充说明

  • 你之前尝试的int(solution)完全错误,因为solution要么是GA实例要么是numpy数组,转int会引发新的错误;直接替换成32则完全违背了遗传算法的优化逻辑,自然无法正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:14:59