【问题标题】:Optim() in R gives me different values with Excel Solver plug-inR 中的 Optim() 使用 Excel Solver 插件为我提供了不同的值
【发布时间】:2016-08-11 18:40:05
【问题描述】:

我正在研究一个非常简单的优化(线性)问题,这在 excel 上非常容易,但是当我使用 R 的 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(是的,完全相同的数字,只是没有减号)。

我还尝试了其他方法,例如“Brent”、“SANN”,但它们给了我完全不同的值。 我听说 optimize() 函数是用于线性优化的,所以我也尝试过,但又给了我错误的值。你能告诉我原因吗?

谢谢!

【问题讨论】:

  • 嗨,欢迎来到堆栈溢出。下次您发布时,请尝试发布reproducible example。我们没有任何excel代码,所以我不能告诉你为什么你的答案是不同的符号。您的 R 代码返回正确的解决方案。 Excel中答案相反的原因可能是由于绝对值。此外,您不应使用基于通用梯度的优化例程来回答线性问题。只是solve(.5*variance, mean-wc),它返回值0.4761905

标签: r excel optimization


【解决方案1】:

您没有提供任何有关如何在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-18
    • 2021-09-24
    • 2022-07-14
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    相关资源
    最近更新 更多