2016-03-14 41 views
1

我對R仍然比較陌生,並且停留在優化問題上。我在這裏有一個相當普遍的問題。我試圖最小化的功能,像帶有2個未知數的GenSA優化

function(a,b){2*a^2+b},

與使用GenSA功能兩個未知數。每當我嘗試運行它,它告訴我它找不到b。現在我想知道是否有可能使用GenSA和2個未知數,或者如果不同的函數更適合?如果有人有想法,這將是非常棒的!

我使用的GenSa函數的代碼的方式(用矢量嘗試了太多,但也不能工作)看起來是這樣的:

> library(GenSA) 
> 
> minim<-function(a,b){2*a^2+b} 
> 
> dimension <- 30 

> global.min <- 0 
> tol <- 1e-15 
> 
> lower <- rep(0, dimension) 
> 
> upper <- rep(30, dimension) 
> 
> 
> out <- GenSA(lower = lower, upper = upper, fn = minim, 
> control=list(threshold.stop=global.min+tol,verbose=TRUE)) 
> 
> out[c("value","par","counts")] 

回答

1

這是一個2維問題,而不是一個三十一維。顯然,算法很容易找到最佳解決方案並不令人興奮。當然,對於大多數情況並非如此。

> minim<-function(a){2*a[1]^2+a[2]} 
> dimension<-2 
> global.min <- 0 
> tol <- 1e-15 
> lower <- rep(0, dimension) 
> upper <- rep(30, dimension) 
> out <- GenSA(lower = lower, upper = upper, fn = minim, 
+    control=list(threshold.stop=global.min+tol,verbose=TRUE)) 
Initializing par with random data inside bounds 
It: 1, obj value: 0 
> out[c("value","par","counts")] 
$value 
[1] 0 

$par 
[1] 0 0 

$counts 
[1] 32 

> 
+0

謝謝!現在正在工作。我完全忽略了維度... –