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
结束
这是不可取的,因为它大大降低了优化速度。这个问题有没有更好的解决办法