我正在研究一个非常简单的优化(线性)问题,这个问题在excel上非常容易,但是当我用R&#39的optim()或optimize()尝试它时会给出不同的值。该函数是获得风险规避系数。 wc是受访者的答案,尽管我自己给予了价值。
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
目标函数只是一个变量的线性方程,所有其他变量都已确定。 当我用Excel求解器计算它时,x的最佳值是0.4761905(是的,只有没有减号的数字完全相同)。
我也尝试了其他方法,如布伦特&#39; SANN&#39;但他们给了我完全不同的价值观。 我听说optimize()函数用于线性优化,所以我也尝试了它,但也给了我错误的值。你能告诉我原因吗?
谢谢!
答案 0 :(得分:0)
您没有详细说明如何在Excel中执行计算,但这些似乎是错误的,而不是R.为了说明:
x <- (-1000:1000)/1000
plot(x,f(x))
显示最小值接近-0.5。您也可以通过将f(x)^ 2的导数设置为零来解析问题,从而得到(wc-mean)/(0.5*variance)
的解。
请注意,优化器之间的差异很小,几乎可以肯定通过减少容差或增加迭代次数来减少。
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