如何解决Julia中的Optim尝试导致数值误差NaN的极值
我有一个目标函数,看起来像
function myfun(θ,x)
logτ = θ
s(ϵ) = 1.0/sqrt(exp(logτ)) * ϵ
p(ϵ) = 1/(1 + 0.5 * exp((0.5 - s(ϵ))*exp(logτ)))
integrand(ϵ) = normcdf(0.0,1.0,x + p(ϵ))*(1/sqrt(2.0*π)*exp(-(ϵ^2.0)/2.0))
(expectation,err) = quadgk(ϵ -> integrand(ϵ),-4.0,4.0,rtol = 0.0001)
return expectation
end
我使用logτ
作为参数,以确保优化为τ
提供正值。当我运行优化时,经过几次迭代我通常会得到
ERROR: DomainError with 0.0:
integrand produced NaN in the interval (-4.0,4.0)
这是因为在搜索过程中τ
接近零时,例如logτ= -1000时,exp(logτ)
恰好返回零,而不是很小的正值。在这种情况下,s(ϵ)
变成Inf
,而p(ϵ)
变成NaN。
我试图添加
if logτ < -100
logτ = -100
end
这是不希望的,因为它会大大降低优化速度。有没有更好的解决方案来解决这个问题?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。