Optimization Julia中的Optim尝试使用导致数值错误的极值(NaN)
我有一个目标函数,看起来像Optimization Julia中的Optim尝试使用导致数值错误的极值(NaN),optimization,nan,numerical-integration,Optimization,Nan,Numerical Integration,我有一个目标函数,看起来像 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(
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
如果对数τ<-100
对数τ=-100
结束
这是不可取的,因为它大大降低了优化速度。这个问题有没有更好的解决办法