[Rd] Bug in optim for specific orders of magnitude
Rui Barradas
ru|pb@rr@d@@ @end|ng |rom @@po@pt
Fri Dec 23 19:41:10 CET 2022
Às 17:30 de 23/12/2022, Collin Erickson escreveu:
> Hello,
>
> I've come across what seems to be a bug in optim that has become a nuisance
> for me.
>
> To recreate the bug, run:
>
> optim(c(0,0), function(x) {x[1]*1e-317}, lower=c(-1,-1), upper=c(1,1),
> method='L-BFGS-B')
>
> The error message says:
>
> Error in optim(c(0, 0), function(x) { :
> non-finite value supplied by optim
>
> What makes this particularly treacherous is that this error only occurs for
> specific powers. By running the following code you will find that the error
> only occurs when the power is between -309 and -320; above and below that
> work fine.
>
> p <- 1:1000
> giveserror <- rep(NA, length(p))
> for (i in seq_along(p)) {
> tryout <- try({
> optim(c(0,0), function(x) {x[1]*10^-p[i]}, lower=c(-1,-1),
> upper=c(1,1), method='L-BFGS-B')
> })
> giveserror[i] <- inherits(tryout, "try-error")
> }
> p[giveserror]
>
> Obviously my function is much more complex than this and usually doesn't
> fail, but this reprex demonstrates that this is a problem. To avoid the
> error I may multiply by a factor or take the log, but it seems like a
> legitimate bug that should be fixed.
>
> I tried to look inside of optim to track down the error, but the error lies
> within the external C code:
>
> .External2(C_optim, par, fn1, gr1, method, con, lower,
> upper)
>
> For reference, I am running R 4.2.2, but was also able to recreate this bug
> on another device running R 4.1.2 and another running 4.0.3.
>
> Thanks,
> Collin Erickson
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
Hello,
See if this R-Help thread [1] earlier this year is relevant.
In particular, the post by R Core team member Luke Tierney [2], that
answers much better than what I could.
The very small numbers in your question seem to have hit a limit and
this limit is not R related.
[1] https://stat.ethz.ch/pipermail/r-help/2022-February/473840.html
[2] https://stat.ethz.ch/pipermail/r-help/2022-February/473844.html
Hope this helps,
Rui Barradas
More information about the R-devel
mailing list