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

R语言GA包遗传算法绘图仅显示直线的原因咨询

问题原因与修复方案

你的遗传算法运行后绘图显示直线属于不合理现象,完全由自定义适应度函数的逻辑错误导致,具体问题和修正方法如下:

核心错误点

  • GA包要求适应度函数的输入参数x为当前待评估的个体向量,函数返回值必须是单个数值,代表该个体对应的适应度得分,得分越高代表个体质量越好。
  • 你编写的setup函数存在两处逻辑错误:
    1. 函数全程未使用输入参数x,适应度计算完全依赖提前计算好的固定向量sum_fu,和种群迭代过程中生成的个体参数完全无关
    2. 函数返回的是长度为350的向量,不符合GA包对适应度函数返回值的要求

导致直线的原理

由于你的适应度和迭代生成的个体没有关联,每一代种群的最大、最小、平均适应度都固定不变,所以最终绘制的迭代曲线就是三条平行直线,没有优化迭代的上升趋势。

修正方案

你需要按照你要优化的适应度公式,把个体参数x代入计算逻辑,让适应度和x的取值挂钩,同时保证函数每次调用返回单个数值。参考修正后的代码结构如下:

library(GA)
frame_uji <-  data.matrix(data_uji)

# 修正后的适应度函数,假设你要优化的目标是用x作为权重计算frame_uji的加权和,再代入公式
setup <- function(x) {
  # 此处加入x参与的计算逻辑,示例为x作为列权重计算行加权和的均值,代入你的公式
  weighted_row_sum <- frame_uji %*% x
  mean_sum <- mean(weighted_row_sum)
  return(1/(1 + mean_sum))
}

gann <- ga(type = "real-valued", fitness = setup, 
           # 注意:lower/upper的长度要和x的长度一致,即你要优化的参数个数
           lower = rep(1, ncol(frame_uji)), upper = rep(5, ncol(frame_uji)), 
           selection = gareal_rwSelection, crossover = gareal_spCrossover, 
           mutation = gareal_rsMutation, popSize = 350, maxiter = 350, 
           pcrossover = 0.6 , pmutation = 0.1, run = 30)
summary(gann)
plot(gann)

额外注意事项

  • 你原代码中ga函数的population参数留空,若没有自定义种群生成需求可以直接删除该参数即可
  • lower和upper的长度必须和你要优化的参数个数(即x的长度)完全一致,否则会报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:06:03