scipy.optimize.minimize_scalar

scipy.optimize.minimize_scalar(fun, bracket=None, bounds=None, args=(), method='brent', tol=None, options=None)[源代码]

一元标量函数的最小化。

参数
fun可调用

目标函数。标量函数,必须返回标量。

bracket序列,可选

对于“布伦特”和“黄金”方法, bracket 定义包含间隔,可以包含三个项目 (a, b, c) 所以 a < b < cfun(b) < fun(a), fun(c) 或两个项目 ac 它们被假定为下坡括号搜索的开始间隔(请参见 bracket );这并不总是意味着所获得的解将满足 a <= x <= c

bounds序列,可选

对于方法“Bound”, bounds 是必需的,并且必须有两项与优化界限相对应。

args元组,可选

传递给目标函数的额外参数。

method字符串或可调用,可选

求解器的类型。应为以下之一:

tol浮动,可选

对终止的容忍度。有关详细控制,请使用解算器特定的选项。

optionsDICT,可选

求解器选项词典。

最大值集成

要执行的最大迭代次数。

显示布尔尔

设置为True可打印收敛消息。

看见 show_options 用于解算器特定的选项。

退货
resOptimizeResult

优化结果表示为 OptimizeResult 对象。重要属性包括: x 解决方案阵列, success 指示优化器是否成功退出的布尔标志 message 它描述了终止的原因。看见 OptimizeResult 有关其他属性的说明,请参见。

参见

minimize

标量多元函数极小化算法的接口

show_options

求解程序接受的其他选项

注意事项

本节介绍可通过‘method’参数选择的可用求解器。默认方法为 布伦特原油

方法 Brent 使用布伦特的算法找到局部最小值。该算法在可能的情况下使用逆抛物线插值,以加快黄金分割法的收敛速度。

方法 Golden 使用黄金分割搜索技术。它采用模拟二分法来减小括号间隔。通常,最好使用 布伦特原油 方法。

方法 Bounded 可以执行有界最小化。它使用Brent方法在区间x1<xopt<x2中找到局部最小值。

自定义最小化程序

传递自定义最小化方法可能很有用,例如,在使用某些库前端来最小化_scalar时。您可以简单地将可调用对象作为 method 参数。

该可调用对象称为 method(fun, args, **kwargs, **options) 哪里 kwargs 对应于传递给 minimize (例如 brackettol 等),但 options dict,它的内容也作为 method 每对参数。该方法应返回一个 OptimizeResult 对象。

提供的 method Callable必须能够接受(并可能忽略)任意参数; minimize 可以在将来的版本中扩展,然后这些参数将传递给该方法。您可以在scipy.Optimize教程中找到一个示例。

0.11.0 新版功能.

示例

考虑最小化以下函数的问题。

>>> def f(x):
...     return (x - 2) * x * (x + 2)**2

使用 布伦特原油 方法,我们找到局部最小值为:

>>> from scipy.optimize import minimize_scalar
>>> res = minimize_scalar(f)
>>> res.x
1.28077640403

使用 有界的 方法时,我们会找到一个具有指定界限的局部最小值,如下所示:

>>> res = minimize_scalar(f, bounds=(-3, -1), method='bounded')
>>> res.x
-2.0000002026