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

如何使用PyGAD实现遗传算法求解双变量函数最大值

PyGAD双变量目标函数最大值优化实现

PyGAD的种群个体本质是和待优化参数一一对应的向量,你需要优化x、y两个变量,只需要把单个体的基因长度设为2,第一个基因位映射x取值,第二个基因位映射y取值,直接代入目标函数计算的结果就可以作为适应度值——因为PyGAD默认筛选适应度最高的个体,刚好匹配求目标函数最大值的需求,不需要额外做适应度翻转。

核心配置要点

  • 基因范围配置:通过gene_space参数指定每个变量的取值区间,x和y范围都是[-4,4],直接传入两个相同的区间约束即可,PyGAD会自动保证所有个体的基因值不会超出范围,不需要额外写边界惩罚逻辑
  • 适应度函数写法:PyGAD要求适应度函数固定接收3个入参:GA实例对象、当前个体的基因向量、当前个体在种群中的索引,只需要从基因向量里拆出x、y值代入公式计算返回即可
  • 算子选择:连续值优化场景用随机交叉、随机变异算子即可,不需要额外改造适配

完整可运行代码示例

import pygad

# 定义适应度函数
def fitness_func(ga_instance, solution, solution_idx):
    x = solution[0]
    y = solution[1]
    # 代入目标公式计算Z值
    Z = (3 * (x**2 - y)**2 + (100 - x)**2) + (y - x)
    return Z

# 初始化遗传算法实例
ga_instance = pygad.GA(
    num_generations=150,
    num_parents_mating=6,
    fitness_func=fitness_func,
    sol_per_pop=80,
    num_genes=2,  # 对应x、y两个待优化变量
    gene_space=[[-4, 4], [-4, 4]],  # 两个变量的取值范围
    mutation_type="random",
    mutation_percent_genes=30,
    random_seed=42  # 固定随机种子方便复现结果
)

# 启动迭代优化
ga_instance.run()

# 输出最优结果
best_sol, best_fitness, best_idx = ga_instance.best_solution()
print(f"最优x取值:{best_sol[0]:.4f}")
print(f"最优y取值:{best_sol[1]:.4f}")
print(f"目标函数最大值:{best_fitness:.4f}")

结果验证

你给定的目标函数在[-4,4]区间内的极值点出现在边界x=-4、y=-4处,代入公式计算可得理论最大值为12016,上述代码运行后得到的结果会和这个理论值基本一致,误差来自浮点数精度和迭代收敛程度,调高迭代代数、种群规模可以进一步缩小误差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:03:19