2015-07-21 25 views
4

我試圖使用DEoptim中的fnMap參數,如文檔「將在每個人口創建後運行的可選函數」中所述,所以我創建了這個簡單的測試案件。當我使用fnMap參數時,DE中的DEoptim返回一個錯誤

fnm <- function(x) round(x, 2) 
fn <- function (x) x^2 

upper <- 100 
lower <- -100 

DEoptim(fn=fn, lower=lower, upper=upper, fnMap=fnm) 

問題是,當我使用fnMap參數它將返回一個錯誤爲任何種類的映射函數的{映射函數不與暗淡NP×長度(上部)返回對象}。

回答

5

預期回報是暗淡NP x長度(上)。您有upperlength 1.您可以嘗試使用control將dim NP設置爲1。例如...

DEoptim(fn=fn, lower=lower, upper=upper, fnMap=fnm,control=DEoptim.control(NP=1)) 

但你會得到這樣的警告......

Warning in DEoptim(fn = fn, lower = lower, upper = upper, fnMap = fnm, control = DEoptim.control(NP = 1)) : 
    'NP' < 4; set to default value 10*length(lower) 

但是這告訴我們,NP默認爲10 * length(lower)這是有用的。你只需要redine你的函數

fnm <- function(x) matrix(round(x, 2), nrow=10, ncol=1,byrow=TRUE) 

但這種假設你總是有一個length 1參數集。我可能會做這樣的事情

fnm <- function(x, Len) matrix(round(x, 2), nrow=10*Len, ncol=Len,byrow=TRUE) 

,然後調用DEoptim這樣

DEoptim(fn=fn, lower=lower, upper=upper, fnMap=function(x) fnm(x,length(upper))) 
+0

謝謝你的答案。第一個使用控件的解決方案給了我警告和錯誤,但第二個解決方案完美地工作。所以我選擇這個作爲正確的答案。再次感謝。 –

+0

是的,第一個「解決方案」不是一個解決方案,只是爲了說明我是如何得到最終答案的,因爲文檔似乎沒有告訴您NP的默認設置。 –

相關問題