1. Nelder–Mead算法1
介绍
请不要与Dantzig针对线性优化问题的simplex algorithem(单纯型)方法混淆
用于多维空间寻找目标函数的最大值最小值问题。它是基于比较的直接搜索方法,通常应用于导数不可知的非线性优化问题。局部优化方法,所得解不稳定。
通常用来求解最小化问题,需要求解最大化问题f(x)时,就是最小化-f(x)
n维的Nelder–Mead包括n+1个测试点,组成一个simplex,然后计算的每个点的目标函数值,目的是找到一个新的测试点替代旧的测试点,迭代进程。最简单的方法是用质心(前n个点的均值)的反射点(reflection)替换最差的点、如果反射点比当前点更好,可以继续在反射点的方向上延伸寻找;如果不敌当前点,那就将所有点往一个更好的方向收缩。
算法步骤
目标是求解f(x)的最小值, x ∈ R x\in R x∈R. 目前的测试点有 x 1 x_1 x1, …, x n + 1 x_{n+1} xn+1
- 将各个的测试点的函数值从小到大排序: f ( x 1 ) ≤ f ( x 2 ) ≤ . . . ≤ f ( x n + 1 ) f(x_1) \le f(x_2) \le ... \le f(x_{n+1}) f(x1)≤f(x2)≤...≤f(xn+1) 并检查是否需要终止
- 计算质心 x o x_o xo, 等于前n个x的平均值
- 计算反射点 x r = x o + α ( x o − x n + 1 ) , α > 0 x_r = x_o + \alpha(x_o - x_{n+1}), \alpha \gt 0 xr=x