2016-08-11 2 views
-1

Ich arbeite an einem sehr einfachen Optimierungsproblem (linear), das ist extrem einfach auf Excel, gibt aber andere Werte, wenn ich es mit R's optim() versuchte oder optimieren(). Die Funktion besteht darin, einen Risikoaversionskoeffizienten zu erhalten. wc ist die Antwort der Befragten, obwohl ich selbst Wert gegeben habe.Optim() in R gibt mir verschiedene Werte mit Excel Solver Plug-in

p <- 0.3 
w1 <- 2.0 
w2 <- 0.0 
mean <- p*w1+(1-p)*w2 
variance <- p*w1^2+(1-p)*w2^2-mean^2 
wc <- 0.4 

f<- function(x){(abs(mean-wc+0.5*x*variance))} 
initial_x <- c(0.1) 
x_optimal <- optim(initial_x, f, method="CG") 
x_min <- x_optimal$par 
x_min 
[1] -0.4761905 

Die Zielfunktion ist nur lineare Gleichung mit einer Variablen und alle anderen Variablen sind abgerechnet. Wenn ich es mit Excel-Solver berechnet habe, ist der optimale Wert von x 0.4761905 (ja, genau die gleiche Zahl nur ohne das Minuszeichen).

Ich habe auch andere Methode wie "Brent", "SANN" versucht, aber sie gaben mir völlig andere Werte. Ich habe gehört, dass die optimize() -Funktion für lineare Optimierung ist, also habe ich es auch versucht, aber gab mir auch wieder einen falschen Wert. Kannst du mir den Grund nennen?

Vielen Dank!

+0

Hallo und willkommen zu stapeln Überlauf. Wenn Sie das nächste Mal einen Beitrag veröffentlichen, versuchen Sie bitte, ein [reproduzierbares Beispiel] zu veröffentlichen (http://www.stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). Wir haben keinen Excel-Code, daher kann ich Ihnen nicht sagen, warum Ihre Antwort ein anderes Zeichen ist. Ihr R-Code gibt die richtige Lösung zurück. Der Grund, warum die Antwort in Excel entgegengesetzt ist, liegt wahrscheinlich am absoluten Wert. Außerdem sollten Sie keine allgemeine gradientenbasierte Optimierungsroutine verwenden, um ein lineares Problem zu lösen. Just 'solve (.5 * Varianz, mean-wc)', die den Wert "0.4761905" zurückgibt. – shayaa

Antwort

0

Sie haben noch keine Details, wie Sie Ihre Berechnungen in Excel durchgeführt wurden gegeben, aber diese scheinen falsch zu sein, nicht R. Zur Veranschaulichung:

x <- (-1000:1000)/1000 
plot(x,f(x)) 

zeigt das Minimum der Nähe von -0,5. Sie können das Problem auch analytisch lösen, indem Sie die Ableitung von f (x)^2 gleich Null setzen, um eine Lösung von (wc-mean)/(0.5*variance) zu erhalten.

Beachten Sie, dass die Unterschiede zwischen den Optimierern minimal sind und durch Reduzierung der Toleranzen oder Erhöhung der Anzahl der Iterationen mit ziemlicher Sicherheit reduziert werden können.

optim(initial_x, f, method="CG")$par 
#[1] -0.4761905 
optim(initial_x, f, method="Brent",lower=-10, upper=10)$par 
#[1] -0.4761905 
optim(initial_x, f, method="SANN")$par 
#[1] -0.475279 
optimize(f,c(-10,10))$minimum 
#[1] -0.4761772 
Verwandte Themen