使用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实例和列表相乘,直接触发类型错误。
修正步骤
- 调整适应度函数的参数顺序,将
ga_instance放在第一个位置 - 将
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
相关产品推荐
相关产品推荐

