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

R语言基于正整数排列输入的目标函数优化方案咨询

问题本质与GenSA报错原因

你的需求属于排列优化问题,核心是在1~n的无重复全排列中找到目标函数值最大的解。你之前用GenSA出错是因为GenSA是面向连续域优化的模拟退火工具,本身不支持「每个整数仅出现一次、覆盖全部输入值」的排列约束,输出非整数、重复值是工具适配性问题,不是操作错误。

现有GA方案的合理性

你找到的GA包type='permutation'的实现完全适配你的需求:

  • 该参数专门为排列类优化设计,自动保证输出是1到upper值的无重复全排列,完全符合vec的输入要求
  • 你的示例写法逻辑正确,只是针对更大体量数据需要调整参数提升效率:
    • 把maxiter调整到50~200(根据收敛情况调整)
    • 增加popSize参数,一般设为排列长度的2~3倍
    • 增加elitism=2配置,保留每一代的最优个体,避免最优解丢失

更大体量数据的适配工具推荐

如果你的实际数据排列长度超过100,推荐换用adagio包的permutationSA函数:

  • 它是专门针对排列优化的模拟退火实现,相比遗传算法内存占用更低,大规模排列下收敛速度更快
  • 调用逻辑简单,只需传入初始排列、目标函数、排列长度即可,不需要额外配置约束

目标函数优化建议

你现有function_1里的df3<<-df2全局赋值和print(df2)语句会严重拖慢迭代速度,建议删除,仅保留return(sum(df2$Revenue_Penalized))逻辑,寻优效率能提升30%以上。另外你示例中function_1(df)的调用是错误的,需要传入vec类型的参数才能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:57:04