PyGAD遗传算法solutions与fitness数组长度不匹配问题咨询
问题(a):是否有内置命令可直接对齐合并解与适应度数组
PyGAD 2.18.0及以上版本支持直接批量补全所有解的适应度记录,对齐合并操作可以通过内置方法实现:
- 先调用
cal_population_fitness()方法批量计算所有存储在solutions数组中的解的适应度,补全fitness数组的缺失值 - 计算完成后直接合并两个数组即可,示例代码如下:
# 入参传入所有已生成的解,批量计算适应度补全记录 ga_instance.cal_population_fitness(pop=ga_instance.solutions) # 按位置对齐合并为(解, 适应度)的元组数组 merged_array = list(zip(ga_instance.solutions, ga_instance.fitness))
如果使用的PyGAD版本低于2.18.0,没有一键合并的内置接口,需要先手动遍历solutions数组调用自定义适应度函数,补全缺失的适应度记录后再合并
问题(b):fitness数组长度小于solutions数组的原因
按你的参数设置15代迭代、每代种群规模40,理论有效解总数量为15*40=600,和fitness数组长度吻合,solutions数组多出来的40个属于算法运行过程中生成的无效候选解,默认不会被计入适应度统计,常见触发原因如下:
- 交叉、变异操作生成了不符合你自定义约束规则的解,PyGAD默认会跳过这类解的适应度计算,仅将解存入solutions数组但不追加到fitness数组
- 你设置了
stop_criteria提前终止规则,算法触发终止条件时,最后一代的部分解还没完成适应度计算就终止运行,这部分解只会保留在solutions数组中 - 自定义适应度函数运行报错时,对应解的适应度不会被写入fitness数组,但解本身会被保留在solutions数组中
内容的提问来源于stack exchange,提问作者Javid Babayev
相关产品推荐
相关产品推荐

