如何将非优化参数传递给GA包中的适应度函数

时间:2017-08-28 13:58:20

标签: r

我在R中使用GA包(R包用于使用遗传算法进行优化)并且需要优化适应度函数F(x1,x2,A_dataframe,b_const),其中   x1 - 用于优化的变量,min = 0,max = 1。   x2 - 用于优化的变量,min = 2,max = 3。   A_dataframe - 不是优化变量的数据帧,但是适应度函数计算所需的已知数据帧。   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)
}     

你能帮我创建正确的ga功能吗?是否可以通过ga函数将已知数据帧传递到适应度函数?非常感谢。

1 个答案:

答案 0 :(得分:3)

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

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

鉴于上述F的定义,您可以使用预先指定的gaA_dataframe值调用b_const函数,如下所示:

## A <- ... define your data frame
## B <- ... define your constant
result <- 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)

这将使用预定义的参数值FA_dataframe正确使用您的适应度函数b_const。为了使其动态依赖于AB,我们可以将其包装到函数中:

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)
}