简介
优化问题是工程实践中经常遇到的一种问题。简单讲,就是搜索优化出一组自变量参数,使得目标函数达到极小值(极大值)。
如何搜索出这组参数呢:这就是优化算法做的事情。不同的优化算法适用于不同的优化问题。
本文简要介绍在python种NM算法来解决局部优化问题。
接口
使用总结:
- NM是局域优化,即最终的优化结果会掉到一个局域最小值附近,故对初值敏感
- 有两种方式设置初值,1.设置x0;2.设置options中的initial_simplex。手动设置initial_simplex更好,可灵活控制收敛速度。
- 终止条件有:maxiter, maxfev, xatol, fatol。判断条件是:先判断是否达到maxiter, maxfev,若达到则终止;若未达到,则再判断 xatol, fatol是否同时满足条件,若满足,则终止。其源代码逻辑如下:
while (fcalls[0] < maxfun and iterations < maxiter):
if (numpy.max(numpy.ravel(numpy.abs(sim[1:] - sim[0]))) <= xatol and
numpy.max(numpy.abs(fsim[0] - fsim[1:])) <= fatol):
break
- maxiter, maxfev默认值为N*200。比如自变量个数为2,则默认值为400;xatol, fatol默认值为1e-4,一般根据实际问题手动设置。越小,则收敛越快。
- 若不同参数的取值范围不同,则应对其进行归一化处理
实例1:Himmelblau函数
关于Himmelblau函数
f ( x , y ) = ( x 2 + y − 11 ) 2 + ( x + y 2 − 7 ) 2