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

如何使用PyGAD计算种群适应度求解作业分配问题

1 初始种群生成操作是否正确

是正确的。
PyGAD的initial_population参数要求传入形状为(种群个体数, 基因数)的二维数组,你通过numpy生成的new_population完全符合该格式要求,每一行对应种群中的一条染色体,适配你2个员工、4个工位的作业分配场景。

2 cal_pop_fitness()调用是否正确

是错误的,存在两个核心问题:

  • cal_pop_fitness()是PyGAD内部自动调用的方法,作用是遍历种群所有染色体、逐个调用自定义的fitness_func计算适应度。你在fitness_func中反过来调用它会触发无限递归,直接导致程序运行异常。
  • fitness_func的作用是计算单条染色体的适应度,入参中solution就是当前待计算的单条染色体,你只需要针对这条染色体计算适应度返回即可,不需要处理整个种群。

修正后代码示例

import pygad
import numpy

sol_per_pop = 2 
num_genes = 4 
pop_size = (sol_per_pop,num_genes) 

new_population = numpy.random.randint(low=0,high=2,size=pop_size) 

num_generations = 100
num_parents_mating = 2

def fitness_func(ga_instance, solution, solution_idx):
    # 此处替换为你自己的作业分配适应度计算逻辑,示例为统计当前染色体中1的数量
    fitness = numpy.sum(solution)
    # 可补充作业分配约束:比如工位不可重复分配、员工工位数量限制等逻辑
    return fitness

ga_instance = pygad.GA(initial_population = new_population,
                       num_generations=num_generations,
                       num_parents_mating=num_parents_mating,
                       sol_per_pop=sol_per_pop,
                       num_genes=num_genes,
                       mutation_type=None,
                       fitness_func=fitness_func)
                       
ga_instance.run()

# 如需获取完整最终种群,直接读取populations属性的最后一个元素即可
final_population = ga_instance.populations[-1]
print("最终种群:\n", final_population)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:27:02