2017-08-28 18 views
0

我在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。如何將非優化參數傳遞到GA包中的適應度函數

我嘗試使用下面的代碼。

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

爲了澄清:你想'TotalFunction'返回調用''ga' ga',或函數的結果? –

回答

0

我建議將您的健身功能外TotalFunction來提高可讀性和避免名稱衝突/混淆。

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

鑑於F上述定義,你可以調用ga函數的A_dataframeb_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定義的值。爲了讓這個動態取決於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) 
} 
+0

Artem,非常感謝(spasibo)。我的錯誤是我在定義函數後重復了預定義變量的名稱。我應該使用result <-ga(type =「real-valued」,fitness = function(x)F(x [1],x [2],A_dataframe,b_const),min = c(0,2),max = (1),x [1],x [2],A_dataframe,b_const(3),popSize = 50,maxiter = 100)而不是結果<-ga(type =「real- ),A_dataframe,b_const,最小= C(0,2),最大=(1,3),popSize = 50,MAXITER = 100) – Anatole