Can';t在R上运行LBFGS

Can';t在R上运行LBFGS,r,mathematical-optimization,R,Mathematical Optimization,我试图在R上运行lbfgs算法,但我总是得到这样的结果: L-BFGS optimization terminated with status code = -1001 fx = -0.0119691 我尝试了不同的设置,但一直得到相同的结果 TI <- read.csv("Alphabet01-2000.csv", header = TRUE) TIn <- TI[9:28] relPreisBew <- TI[8] x <- vector(mode = "nume

我试图在
R
上运行
lbfgs算法,但我总是得到这样的结果:

L-BFGS optimization terminated with status code = -1001 fx = -0.0119691 
我尝试了不同的设置,但一直得到相同的结果

TI <- read.csv("Alphabet01-2000.csv", header = TRUE)
TIn <- TI[9:28]
relPreisBew <- TI[8]
x <- vector(mode = "numeric", length = 20L)
i <- integer()
d=0
b=rep.int(0,20)
grad <- function(x, j = 90, n = 100){for(i in j:n)
{b <- b-as.vector(t(TIn[i,]), mode = "numeric")*relPreisBew[i,]/(cosh(sum(x*as.vector(t(TIn[i,]), mode="numeric"))))*cosh(sum(x*as.vector(t(TIn[i,]), mode = "numeric")))}; return(b)}
Profit <- function(x, j = 90, n = 100){for(i in j:n)
{d <- d-tanh(sum(x*as.vector(t(TIn[i,]), mode = "numeric")))*relPreisBew[i,]}; return(d)}
lbfgs.out <- lbfgs(Profit, grad, rep.int(0, 20))

TI我认为您的代码可以重新编写为

set.seed(1)
锡[1]0
对于介于0和1之间的数据,这似乎很有效。不过,如果没有实际数据,要想知道我是否得到了同样的结果,或者问题出在哪里并不容易

我猜问题是梯度函数对于某些值返回
NaN
s

除非与数据有关,否则我看不出这是如何发生的。如果我没记错的话,
cosh
不能返回任何小于1的值,因此梯度中的分子永远不会变为零

我试图通过限制
步长
最大迭代次数
来解决这个问题,但没有成功

虽然更改
步长可能会有所帮助,但我不确定您对更改
最大迭代次数的期望

这是我的实现中的一个问题还是因为函数


我猜是数据集。但是如果没有实际的数据,就很难知道了。

“gradfunction为某些值返回nans”,您希望优化器如何处理这个问题?您可能需要使用约束(请参阅optimx包)。