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

基于R语言Genetic Algorithm的m1/m2/m3最优时间选择技术问询

问题定义

输入数据

年份指标及对应目标值:

年份xyz目标值(x+y-z)
202223546512
20235912368
20242865291

约束与目标

  • 约束:每个选项(m1/m2/m3)必须且仅选择一个年份,即每个选项对应唯一年份(年份可被多个选项重复选择)
  • 目标:最大化所有选项对应年份的目标值之和

R语言GA包解决方案

核心思路

将每个选项的年份选择编码为整数索引(1=2022,2=2023,3=2024),通过遗传算法搜索最优索引组合,直接计算总目标值作为适应度。

完整代码实现

library(GA)

# 初始化年份数据
year_data <- data.frame(
  year = c(2022, 2023, 2024),
  x = c(23, 59, 28),
  y = c(54, 12, 65),
  z = c(65, 3, 2)
)
# 预计算每个年份的目标值
year_data$objective <- year_data$x + year_data$y - year_data$z

# 配置问题参数
n_options <- 3  # 选项数量m1/m2/m3
year_range <- 1:nrow(year_data)  # 年份索引范围

# 定义适应度函数:输入选项的年份索引组合,返回总目标值
fitness <- function(individual) {
  sum(year_data$objective[individual])
}

# 运行遗传算法
ga_result <- ga(
  type = "integer",
  fitness = fitness,
  lower = rep(min(year_range), n_options),
  upper = rep(max(year_range), n_options),
  popSize = 50,
  maxiter = 100,
  run = 10  # 连续10代无改进则提前终止
)

# 输出结果
summary(ga_result)
cat("最优选项-年份对应索引:", ga_result@solution, "\n")
cat("对应年份:", year_data$year[ga_result@solution], "\n")
cat("最大总目标值:", ga_result@fitnessValue, "\n")

扩展场景适配

当后续增加选项数量或年份数据时,只需修改以下部分:

  1. 更新year_data添加新的年份指标
  2. 将n_options调整为新的选项总数
  3. 根据问题规模微调popSize、maxiter等算法参数,保证搜索效率

可选约束扩展

如果需要添加「每个年份最多被k个选项选择」的约束,可在适应度函数中加入惩罚项:

fitness <- function(individual) {
  # 统计每个年份被选择的次数
  selection_counts <- table(individual)
  # 假设每个年份最多被2个选项选择,超过则施加惩罚
  penalty <- sum(pmax(selection_counts - 2, 0)) * 100  # 惩罚系数可按需调整
  total_objective <- sum(year_data$objective[individual])
  # 返回扣除惩罚后的适应度值(GA默认最大化适应度)
  return(total_objective - penalty)
}

最优解验证

手动计算可知,2024年的目标值(91)为所有年份中最高,因此所有选项均选择2024时总目标值为91*3=273,这是理论最大值,GA算法可稳定搜索到该结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:20:18