在scipy.optimize.minimize中使用“无限界限”?

3 投票
1 回答
5441 浏览
提问于 2025-04-18 07:28

我需要最大化一个有三个变量的函数,这个函数在以下范围内定义:

]0, ∞[ x ]1, ∞[ x [0, ∞[

我打算使用scipy.optimize.minimize里的SLSQP算法,我觉得应该通过为函数定义边界来实现。但我不知道在Python中怎么写“无穷大”或者这些限制条件。也许应该用约束条件来实现,但我找不到定义它的方法。

如果能得到一些帮助,我会非常感激。

提前谢谢大家!

1 个回答

9

scipy.optimize.minimize的文档中提到:

bounds : 序列,选填

这是给变量设置的范围(只适用于L-BFGS-B、TNC和SLSQP)。你需要为每个元素提供一个(min, max)的配对,来定义这个参数的上下限。如果某个方向没有限制,可以用None来表示最小值或最大值。

所以你不需要用无穷大来表示,只需传入None。如果你传入浮点数的无穷大,可能不会按预期工作。


在Python中,表示无穷大的标准方法是使用float('inf')表示正无穷大,使用float('-inf')表示负无穷大。这些都是标准的IEEE 754无穷大值。

numpy也提供了numpy.inf来表示无穷大。

撰写回答