优化与寻根 (scipy.optimize
)¶
SciPy optimize
提供最小化(或最大化)可能受约束的目标函数的函数。它包括非线性问题的解算器(支持局部和全局优化算法)、线性规划、约束和非线性最小二乘、求根和曲线拟合。
在不同解算器之间共享的常用函数和对象包括:
|
显示优化解算器的其他选项的文档。 |
表示优化结果。 |
|
优化¶
标量函数优化¶
|
一元标量函数的最小化。 |
这个 minimize_scalar
函数支持以下方法:
局部(多变量)优化¶
|
一个或多个变量的标量函数的最小化。 |
这个 minimize
函数支持以下方法:
将约束传递给 minimize
用作单个对象或以下类中的对象列表:
|
变量的非线性约束。 |
|
变量的线性约束。 |
简单绑定约束是单独处理的,并且有一个特殊的类用于它们:
|
变量的边界约束。 |
拟牛顿策略的实现 HessianUpdateStrategy
接口可以用来近似Hessian中的 minimize
函数(仅适用于“Trust-Constr”方法)。实现此接口的可用的拟牛顿方法包括:
|
Broyden-Fletcher-Goldfarb-Shanno(BFGS)Hessian更新策略。 |
|
对称秩1黑森更新策略。 |
全局优化¶
|
使用盆地跳跃算法找出函数的全局最小值。 |
|
通过暴力使函数在给定范围内最小化。 |
|
查找多元函数的全局最小值。 |
|
使用SHG优化查找函数的全局最小值。 |
|
用对偶退火求函数的全局最小值。 |
最小二乘与曲线拟合¶
非线性最小二乘法¶
|
求解变量有界的非线性最小二乘问题。 |
线性最小二乘法¶
|
求解 |
|
求解变量有界的线性最小二乘问题。 |
曲线拟合¶
|
使用非线性最小二乘拟合函数f来拟合数据。 |
寻根¶
标量函数¶
|
查找标量函数的根。 |
|
用布伦特方法在括号区间内求函数的根。 |
|
用双曲外推的布伦特方法求函数在括号区间内的根。 |
|
用Ridder方法在区间内求函数的根。 |
|
使用二分法在区间内查找函数的根。 |
|
使用牛顿-拉夫森(或割线或哈雷法)求实函数或复函数的零点。 |
|
用TOMS算法748方法求零。 |
|
表示根查找结果。 |
这个 root_scalar
函数支持以下方法:
下表列出了各种情况和适当的方法,以及 渐近的 每次迭代(和每个函数评估)的收敛速度,以成功收敛到简单根(*)。二分法是所有方法中速度最慢的,为每个函数计算增加一位精度,但保证收敛。其他的括号方法都(最终)为每个函数求值增加了大约50%的准确位数。基于导数的方法,所有这些方法都构建在 newton
,如果初始值接近于根,则可以相当快地收敛。它们还可以应用于定义在复平面(其子集)上的函数。
f的域 |
托架? |
衍生品? |
解算器 |
收敛 |
||
---|---|---|---|---|---|---|
fprime |
fprime2 |
有保证吗? |
费率(*) |
|||
R |
是 |
不适用 |
不适用 |
|
|
|
R or C |
不是的 |
不是的 |
不是的 |
割线 |
不是的 |
1.62(1.62) |
R or C |
不是的 |
是 |
不是的 |
牛顿 |
不是的 |
2.00(1.41) |
R or C |
不是的 |
是 |
是 |
哈雷 |
不是的 |
3.00(1.44) |
参见
scipy.optimize.cython_optimize
--零函数的Cython类型化版本
定点查找:
|
找出函数的固定点。 |
多维¶
|
求向量函数的根。 |
这个 root
函数支持以下方法:
线性规划¶
|
线性规划:最小化受线性等式和不等式约束的线性目标函数。 |
这个 linprog
函数支持以下方法:
单纯形、内点和修改后的单纯形方法支持回调函数,例如:
|
演示linprog回调接口的示例回调函数。 |
指派问题¶
|
解决线性和分配问题。 |
|
近似求解二次指派问题和图匹配问题。 |
这个 quadratic_assignment
函数支持以下方法:
公用事业¶
有限差分近似¶
|
标量函数梯度的有限差分逼近。 |
|
通过将梯度函数与梯度的(正向)有限差分近似进行比较来检查梯度函数的正确性。 |
行搜索¶
|
将函数的最小值括起来。 |
|
找到满足强Wolfe条件的α。 |
Hessian近似¶
|
线性算子的L-BFGS近似逆Hessian。 |
用于实施黑森更新策略的接口。 |
基准问题¶
|
罗森布罗克函数。 |
|
导数(即 |
|
Rosenbrock函数的黑森矩阵。 |
|
Rosenbrock函数的Hessian矩阵与向量的乘积。 |
遗留函数¶
不建议在新脚本中使用下面的函数;所有这些方法都可以通过上面的接口提供的更新的、更一致的接口访问。
优化¶
通用多变量方法:
|
使用下坡单纯形算法最小化函数。 |
|
使用改进的鲍威尔方法最小化函数。 |
|
使用非线性共轭梯度算法最小化函数。 |
|
使用BFGS算法最小化函数。 |
|
使用牛顿-CG方法的函数的无约束最小化。 |
约束多变量方法:
|
使用L-BFGS-B算法最小化函数函数。 |
|
使用截断牛顿算法中的梯度信息,最小化变量受限的函数。 |
|
使用约束线性近似优化(COBYLA)方法最小化函数。 |
|
用序列最小二乘规划法最小化函数 |
单变量(标量)最小化方法:
|
标量函数的有界最小化。 |
|
给定一个包含一个变量和可能的方括号的函数,将该函数的局部最小值返回到小数精度tol。 |
|
使用黄金分割法返回一个变量的函数的最小值。 |
最小二乘法¶
|
最小化一组方程的平方和。 |
寻根¶
一般非线性解算器:
|
查找函数的根。 |
|
使用Broyden的第一雅可比近似求函数的根。 |
|
使用Broyden的二次雅可比近似求函数的根。 |
大型非线性解算器:
|
求函数的根,对逆雅可比矩阵使用Krylov近似。 |
|
使用(扩展的)安德森混合求函数的根。 |
简单迭代解算器:
|
使用调谐的对角雅可比近似求函数的根。 |
|
使用标量雅可比近似求函数的根。 |
|
使用对角Broyden Jacobian近似求函数的根。 |