SciPy 教程 之 SciPy 优化器 3
SciPy 优化器
SciPy 的 optimize 模块提供了常用的最优化算法函数实现,我们可以直接调用这些函数完成我们的优化问题,比如查找函数的最小值或方程的根等。
NumPy 能够找到多项式和线性方程的根,但它无法找到非线性方程的根,如下所示:
x + cos(x)
因此我们可以使用 SciPy 的 optimze.root 函数,这个函数需要两个参数:
fun - 表示方程的函数。
x0 - 根的初始猜测。
该函数返回一个对象,其中包含有关解决方案的信息。
最小化函数
函数表示一条曲线,曲线有高点和低点。
高点称为最大值。
低点称为最小值。
整条曲线中的最高点称为全局最大值,其余部分称为局部最大值。
整条曲线的最低点称为全局最小值,其余的称为局部最小值。
可以使用 scipy.optimize.minimize() 函数来最小化函数。
minimize() 函接受以下几个参数:
fun - 要优化的函数
x0 - 初始猜测值
method - 要使用的方法名称,值可以是:'CG','BFGS','Newton-CG','L-BFGS-B','TNC','COBYLA',,'SLSQP'。
callback - 每次优化迭代后调用的函数。
options - 定义其他参数的字典:
{
"disp": boolean - print detailed description
"gtol": number - the tolerance of the error
}
实例
x^2 + x + 2 使用 BFGS 的最小化函数:
from scipy.optimize import minimize
def eqn(x):
return x**2 + x + 2
mymin = minimize(eqn, 0, method='BFGS')
print(mymin)
执行以上代码,输出结果如下:
fun: 1.75
hess_inv: array([[0.50000001]])
jac: array([0.])
message: 'Optimization terminated successfully.'
nfev: 8
nit: 2
njev: 4
status: 0
success: True
x: array([-0.50000001])