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

使用R语言rmoo包nsga3函数做多目标优化时遇参数错误求助

问题描述

尝试用R语言的rmoo包进行多目标优化,编写了适应度函数shiningFunction,调用nsga3函数时抛出未使用参数reference_dirs的错误。

原适应度函数

library(rmoo) 

shiningFunction <- function(x, nobj=3) { 
    V_c <- x[1]
    f_n <- x[2]
    a_p <- x[3]

    KT <- 0.1655 - 0.002 *V_c + 0.21 *f_n - 1.8 *a_p + 0.02 *V_c * a_p 

    FW <- 0.0025 - 0.064 *f_n - 0.054 *a_p + 0.0004 *V_c * f_n + 
    1.100 *f_n * a_p + 0.0004 * V_c * a_p - 0.005 * V_c * f_n * a_p 

    R_a <- 0.6084 - 0.008 *V_c + 6.522 *f_n + 9.23 *a_p - 
    0.035 * V_c * f_n - 14.871 * f_n * a_p - 0.032 *V_c * f_n + 
    0.136 * V_c *f_n * a_p 

    f <- matrix(c(KT, FW, R_a), nrow = 1)
    return(f)
}

原调用代码

result <- nsga3(type = "real-valued",
                fitness = shiningFunction,
                lower = c(60,0.1,0.05),
                upper = c(140,0.3,0.3),
                popSize = 500,
                nObj = 3, 
                n_partitions = 12,
                monitor = FALSE,
                maxiter = 2000)

错误信息

Error in (function (x, nobj = 3)  : 
  unused argument (reference_dirs = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0833333333333333, 0.0833333333333333, 0.0833333333333333, 0.0833333333333333, 0.0833333333333333, 0.0833333333333333, 0.0833333333333333, 0.0833333333333333, 0.0833333333333333, 0.0833333333333333, 0.0833333333333333, 0.0833333333333333, 0.166666666666667, 0.166666666666667, 0.166666666666667, 0.166666666666667, 0.166666666666667, 0.166666666666667, 0.166666666666667, 0.166666666666667, 0.166666666666667, 0.166666666666667, 0.166666666666667, 
0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.333333333333333, 0.333333333333333, 0.333333333333333, 0.333333333333333, 0.333333333333333, 0.333333333333333, 0.333333333333333, 0.333333333333333, 0.333333333333333, 0.416666666666667, 0.416666666666667, 0.416666666666667, 0.416666666666667, 0.416666666666667, 0.416666666666667, 0.416666666666667, 0.416666666666667, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.583333333333333, 0.583333333333333, 0.58333333
解决方案

错误根源是rmoo的nsga3函数在调用适应度函数时,会自动传递reference_dirs参数,但你的shiningFunction没有定义这个参数,导致R报错“未使用的参数”。

修改适应度函数,添加...来接收所有额外的未使用参数,这样就能兼容nsga3的调用逻辑:

library(rmoo) 

shiningFunction <- function(x, nobj=3, ...) {  # 添加...接收额外参数
    V_c <- x[1]
    f_n <- x[2]
    a_p <- x[3]

    KT <- 0.1655 - 0.002 *V_c + 0.21 *f_n - 1.8 *a_p + 0.02 *V_c * a_p 

    FW <- 0.0025 - 0.064 *f_n - 0.054 *a_p + 0.0004 *V_c * f_n + 
    1.100 *f_n * a_p + 0.0004 * V_c * a_p - 0.005 * V_c * f_n * a_p 

    R_a <- 0.6084 - 0.008 *V_c + 6.522 *f_n + 9.23 *a_p - 
    0.035 * V_c * f_n - 14.871 * f_n * a_p - 0.032 *V_c * f_n + 
    0.136 * V_c *f_n * a_p 

    f <- matrix(c(KT, FW, R_a), nrow = 1)
    return(f)
}

之后再用原来的nsga3调用代码执行,就不会再报错了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:47:03