[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