我在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函数将已知数据帧传递到适应度函数?非常感谢。
答案 0 :(得分:3)
我建议您将健身功能移到TotalFunction
之外,以提高可读性并避免名称冲突/混淆。
F <- function( x1, x2, A_dataframe, b_const ) {
#code of fitness function
}
鉴于上述F
的定义,您可以使用预先指定的ga
和A_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)
这将使用预定义的参数值F
和A_dataframe
正确使用您的适应度函数b_const
。为了使其动态依赖于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)
}