scipy数值优化
其实使用scipy进行数值优化,就是黑盒优化, 我们不依赖于我们优化的函数的算术表达式。注意这个表达式通常可以用于高效的、非黑盒优化。
scipy中的optimize子包中提供了常用的最优化算法函数实现。我们可以直接调用这些函数完成我们的优化问题。optimize中函数最典型的特点就是能够从函数名称上看出是使用了什么算法。
下面optimize包中函数的概览:
1.非线性最优化
fmin – 简单Nelder-Mead算法
fmin_powell – 改进型Powell法
fmin_bfgs – 拟Newton法
fmin_cg – 非线性共轭梯度法
fmin_ncg – 线性搜索Newton共轭梯度法
leastsq – 最小二乘
2.有约束的多元函数问题
fmin_l_bfgs_b —使用L-BFGS-B算法
fmin_tnc —梯度信息
fmin_cobyla —线性逼近
fmin_slsqp —序列最小二乘法
nnls —解|| Ax - b ||_2 for x>=0
3.全局优化
anneal —模拟退火算法
brute –强力法
4.标量函数
fminbound
brent
golden
bracket
5.拟合
curve_fit– 使用非线性最小二乘法拟合
6.标量函数求根
brentq —classic Brent (1973)
brenth —A variation on the classic Brent(1980)
ridder —Ridder是提出这个算法的人名
bisect —二分法
newton —牛顿法
fixed_point
7.多维函数求根
fsolve —通用
broyden1 —Broyden’s first Jacobian approximation.
broyden2 —Broyden’s second Jacobian approximation
newton_krylov —Krylov approximation for inverse Jacobian
anderson —extended Anderson mixing
excitingmixing —tuned diagonal Jacobian approximation
linearmixing —scalar Jacobian approximation
diagbroyden —diagonal Broyden Jacobian approximation
8.实用函数
line_search —找到满足强Wolfe的alpha值
check_grad —通过和前向有限差分逼近比较检查梯度函数的正确性
参考网上资料,以及从scipy的文档找到的,还有一些没有放上去,这么多,我也没完全搞明白,这里主要讲leastsq和fmin_l_bfgs_b,但是它们的用法基本是一样的。