gpt4 book ai didi

python - scipy.minimize 如何处理 NaN?

转载 作者:太空狗 更新时间:2023-10-29 21:11:44 25 4
gpt4 key购买 nike

我在 scipy.minimize 中使用 SLSQP 求解器来解决约束优化问题。求解器经常会尝试违反约束的参数值。当违反这些约束时,目标函数返回一个 nan。这似乎会带来问题,因为我的近似 Jacobian 几乎每次重新计算时都充满了 nan。通常情况下,优化以 exit mode 8: Positive directional derivative for linesearch 终止。我怀疑近似雅可比行列式中的 nan 是其根源。那么我的问题是 scipy.minimize 如何处理 nan 的?它们是良性的,还是应该将它们转换为一个大的(甚至是无限的)数字?据我所知,此信息未包含在 Scipy 文档的任何地方。

最佳答案

根据您使用的搜索算法,scipy 中有针对 nans 的检查。您必须检查每个搜索算法的来源。它通常不会影响最小化器(除非您使用非歧视性方法)但它确实会扰乱最大化。一般来说,scipy 使用 numpy 数组。了解发生了什么的最好方法是使用以下简单示例:

>>> x = [-np.nan, np.nan, 1, 2, 3, np.nan] # some random sequence of numbers and nans 
>>> np.sort(x)
array([ 1., 2., 3., nan, nan, nan])

np.nan 始终被视为最大的数字,因此,您必须在搜索算法中明确说明这一点,以便这些解决方案在未来的迭代中被拒绝。关于解释 +/- nans 参见 this如果后端实现是在 fortran 中 - 有时就是这种情况。

关于python - scipy.minimize 如何处理 NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49461299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com