作者:禅与计算机程序设计艺术
1.简介
1.1 什么是差分进化法
“差分进化法”(Differential Evolution)是一种模拟退火算法。它与一般的模拟退火算法不同之处在于:
- 每次迭代都选择多个候选解(或称为“粒子”),并对这些粒子按照一定规则进行更新,使其逐渐向目标靠拢;
- 更新的方法是随机选取两个个体,然后通过一个随机扰动来产生一个新的解,这个新解与旧解之间的差别由一定的概率决定,这样可以降低搜索空间,提高搜索效率。
更为复杂的是,“差分进化法”还支持多峰值(multimodal)函数优化。所谓多峰值函数就是指函数具有多个局部最小值或极小值点。“差分进化法”可以在面对多峰值函数时比普通的模拟退火算法更加有效。
“差分进化法”的优点是可以高效、快速地寻找目标函数的全局最小值或极小值点。
“差分进化法”也可以用来求解其他一些优化问题,如求解整数规划问题、约束最优化问题等。
1.2 为什么要用“差分进化法”?
在实际应用过程中,“差分进化法”具有以下几个特点:
- 可扩展性强。“差分进化法”本质上是一个基于群体智能的算法,因此在处理多维目标函数和约束条件时表现尤为优秀;
- 鲁棒性好。“差分进化法”采用多峰值函数优化的策略,能够适应高维、非凸问题;
- 对非线性函数的适应能力强。“差分进化法”的设计使得它能够适应任意非线性函数;
- 收敛速度快。“差分进化法”的每次迭代只需要很少的计算量,并且不需要进行精确的数值积分,所以它能迅速找到全局最