R 遗传算法包中如何将非优化参数传递到适应度函数

R 遗传算法包中如何将非优化参数传递到适应度函数,r,R,我在R中使用GA包(使用遗传算法进行优化的R包),需要优化适应度函数F(x1,x2,A_数据帧,b_常数),其中 x1-优化变量,最小值=0,最大值=1。 x2-优化变量,最小值=2,最大值=3。 A_数据帧-不是优化变量的数据帧,但适应度函数计算所需的已知数据帧。 b_const-一个常数变量,也不是用于优化,而是适应度函数计算所需的已知变量。 所以适应度函数=F 我尝试使用下一个代码 TotalFunction <- function(A_dataframe, b_const) {

我在R中使用GA包(使用遗传算法进行优化的R包),需要优化适应度函数F(x1,x2,A_数据帧,b_常数),其中 x1-优化变量,最小值=0,最大值=1。 x2-优化变量,最小值=2,最大值=3。 A_数据帧-不是优化变量的数据帧,但适应度函数计算所需的已知数据帧。 b_const-一个常数变量,也不是用于优化,而是适应度函数计算所需的已知变量。 所以适应度函数=F

我尝试使用下一个代码

TotalFunction <- function(A_dataframe, b_const) {

    F <- function(x1, x2, A_dataframe, b_const) {
        #code of fitness function
    }

    GA <- ga(type="real-valued", fitness=function(x) F(x[1], x[2], A_dataframe, b_const),
    A_dataframe, b_const, min=c(0, 2), max=(1, 3), popSize=50, maxiter=100)

    return(GA)
}     

TotalFunction我建议将您的健身功能移到
TotalFunction
之外,以提高可读性并避免名称冲突/混淆

F <- function( x1, x2, A_dataframe, b_const ) {
    #code of fitness function
}
这将使用参数的预定义值
A_dataframe
b_const
正确地利用您的适应度函数
F
。为了使其动态地依赖于
A
B
,我们可以将其包装成一个函数:

ga_Ab <- function( A, b )
{
  ga(type="real-valued", fitness=function(x) F(x[1], x[2], A, b),
    min=c(0, 2), max=(1, 3), popSize=50, maxiter=100)
}

ga_Ab澄清:您希望
TotalFunction
返回
ga
的结果,还是调用
ga
的函数?Artem,非常感谢(spasibo)。我的错误是在定义函数后重复了预定义变量的名称。我应该使用结果
ga_Ab <- function( A, b )
{
  ga(type="real-valued", fitness=function(x) F(x[1], x[2], A, b),
    min=c(0, 2), max=(1, 3), popSize=50, maxiter=100)
}