本文简要介绍 python 语言中 scipy.optimize.minimize_scalar
的用法。
用法:
scipy.optimize.minimize_scalar(fun, bracket=None, bounds=None, args=(), method=None, tol=None, options=None)#
一个变量的标量函数的局部最小化。
- fun: 可调用的
目标函数。标量函数,必须返回一个标量。
- bracket: 顺序,可选
对于方法‘brent’ 和‘golden’,
bracket
定义包围间隔并且是必需的。满足xa < xb < xc
和func(xb) < func(xa) and func(xb) < func(xc)
的三元组(xa, xb, xc)
或一对(xa, xb)
用作下坡括号搜索的初始点(请参阅scipy.optimize.bracket
)。最小化器res.x
不一定满足xa <= res.x <= xb
。- bounds: 顺序,可选
对于方法‘bounded’,边界是强制性的,并且必须具有与优化边界相对应的两个有限项。
- args: 元组,可选
传递给目标函数的额外参数。
- method: str 或可调用,可选
求解器的类型。应该是以下之一:
如果提供了边界,则默认值为“Bounded”,否则为“Brent”。有关每个求解器的详细信息,请参阅“注释”部分。
- tol: 浮点数,可选
容忍终止。如需详细控制,请使用solver-specific 选项。
- options: 字典,可选
求解器选项字典。
- maxiter int
Maximum number of iterations to perform.
- disp bool
Set to True to print convergence messages.
有关solver-specific 选项,请参见
show_options
。
- res: OptimizeResult
优化结果表示为
OptimizeResult
对象。重要的属性是:x
解决方案数组,success
指示优化器是否成功退出的布尔标志和说明终止原因的message
。有关其他属性的说明,请参见OptimizeResult
。
参数 ::
返回 ::
注意:
本节介绍可通过 ‘method’ 参数选择的可用求解器。默认方法是
"Bounded"
布伦特法如果界限被传递且无界"Brent"
否则。Brent 方法使用 Brent 算法 [1] 来寻找局部最小值。该算法在可能的情况下使用反抛物线插值来加速黄金分割法的收敛。
方法金的使用黄金分割搜索技术[1]。它使用类似二分法来减少括号内的间隔。通常最好使用布伦特方法。
Method Bounded 可以执行有界最小化 [2] [3]。它使用布伦特方法来查找区间 x1 < xopt < x2 中的局部最小值。
请注意,除非提供有效的
bracket
三元组,否则 Brent 和 Golden 方法不能保证成功。如果找不到 three-point 括号,请考虑scipy.optimize.minimize
。此外,所有方法仅用于局部最小化。当感兴趣的函数具有多个局部最小值时,请考虑全局优化。自定义最小化器
传递自定义最小化方法可能很有用,例如在使用某些库前端到 minimize_scalar 时。您可以简单地将可调用对象作为
method
参数传递。可调用的被称为
method(fun, args, **kwargs, **options)
其中kwargs
对应于传递给的任何其他参数scipy.optimize.minimize(如scipy.optimize.bracket,tol等),除了选项dict,其内容也传递为方法成对成对的参数。该方法应返回一个OptimizeResult
对象。提供的方法callable 必须能够接受(并且可能忽略)任意参数;接受的参数集scipy.optimize.minimize可能会在未来的版本中扩展,然后这些参数将传递给该方法。您可以在 scipy.optimize 教程中找到一个示例。
参考:
[1] (1,2)Press, W.、S.A. Teukolsky、W.T. Vetterling 和 B.P.弗兰纳里。 C. 剑桥大学出版社的数字食谱。
[2]福赛斯 (G.E.)、M.A. 马尔科姆 (M.A. Malcolm) 和 C.B.莫勒 (C.B. Moler)。 “数学计算的计算机方法。” Prentice-Hall自动计算系列259(1977)。
[3]布伦特,理查德·P。无导数的最小化算法。快递公司,2013 年。
例子:
考虑最小化以下函数的问题。
>>> def f(x): ... return (x - 2) * x * (x + 2)**2
使用布伦特方法,我们发现局部最小值为:
>>> from scipy.optimize import minimize_scalar >>> res = minimize_scalar(f) >>> res.fun -9.9149495908
最小化为:
>>> res.x 1.28077640403
使用有界方法,我们找到具有指定边界的局部最小值:
>>> res = minimize_scalar(f, bounds=(-3, -1), method='bounded') >>> res.fun # minimum 3.28365179850e-13 >>> res.x # minimizer -2.0000002026
相关用法
- Python SciPy optimize.minimize用法及代码示例
- Python SciPy optimize.milp用法及代码示例
- Python SciPy optimize.rosen_der用法及代码示例
- Python SciPy optimize.line_search用法及代码示例
- Python SciPy optimize.rosen用法及代码示例
- Python SciPy optimize.shgo用法及代码示例
- Python SciPy optimize.root用法及代码示例
- Python SciPy optimize.fmin用法及代码示例
- Python SciPy optimize.NonlinearConstraint用法及代码示例
- Python SciPy optimize.KrylovJacobian用法及代码示例
- Python SciPy optimize.toms748用法及代码示例
- Python SciPy optimize.linprog_verbose_callback用法及代码示例
- Python SciPy optimize.bracket用法及代码示例
- Python SciPy optimize.diagbroyden用法及代码示例
- Python SciPy optimize.bisect用法及代码示例
- Python SciPy optimize.isotonic_regression用法及代码示例
- Python SciPy optimize.golden用法及代码示例
- Python SciPy optimize.brute用法及代码示例
- Python SciPy optimize.newton用法及代码示例
- Python SciPy optimize.fsolve用法及代码示例
- Python SciPy optimize.Bounds用法及代码示例
- Python SciPy optimize.fixed_point用法及代码示例
- Python SciPy optimize.rosen_hess用法及代码示例
- Python SciPy optimize.nnls用法及代码示例
- Python SciPy optimize.broyden1用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.optimize.minimize_scalar。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。