算法其实不好分类,因为概念有点宽泛。你不妨百度“十大算法”,其中就有一些不是优化算法,例如密码学算法、随机数生成算法等。但是如果限定只在优化算法中做分类,则会大致有点方向。因为所有的优化算法都是在一个可行域中找到一个解,这个解对应的目标函数值是最优的(最大或者最小)。
可以依据“理论体系”是否完善将算法分为“理论体系内算法”和“理论体系外算法”。根据是否使用目标函数“梯度”信息又可分为“连续优化算法”和“离散优化算法”。具体划分如下:
一、理论体系之内算法
这部分算法有比较完善地理论体系,可以从理论算解释算法收敛到哪里,收敛的速度怎么样。而且不管是离散优化还是连续优化,都可以写成目标+约束的统一数学模型。除此之外,对偶理论是该理论体系中的一大亮点,常常在理论推导和算法设计中扮演去足轻重的角色。
1:连续优化算法
这类算法用到了一个东西,那就是——“梯度”。“梯度”告诉我们往哪个方向走,如果步长足够小的话,则一定是更优的。利
用这个“梯度”信息,我们就可以从当前迭代点迭代至下一个迭代点。
根据二阶信息使用的区别,又可由最基本的最速下降法改进至牛顿法、拟牛顿法、信赖域法、BFGS、Limited-BFGS等。
2:离散优化算法
这类算法基本都归结为一类专门的优化算法——网络优化算法。其最典型最核心的算法设计思路便是动态规划。如果动态规划实
现成本过高,则会放弃部分精度而衍生出近似动态规划。如果最优子结构无法建立成功,则设计相应的贪婪算法。
二、理论体系之外算法
1:基本算法