在scipy.optimize.minimize中使用“无限界限”?
我需要最大化一个有三个变量的函数,这个函数在以下范围内定义:
]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
来表示无穷大。