7.3 结果
8 案例2
8.1 案例
8.2 代码
8.3 结果
9 案例3——离散差分算法
9.1 案例
9.2 Python实现
9.3 结果
10 案例4——求解复杂约束问题
10.1 案例
10.2 Python实现
10.3 结果
1 引言
在遗传、选择和变异的作用下,自然界生物体优胜劣汰,不断由低级向高级进化和发展。人们注意到,适者生存的进化规律可以模式化,从而构成一些优化算法;近年来发展的进化计算类算法受到了广泛的关注。
**差分进化算法(Differential Evolution, DE)**是一种新兴的进化计算技术"。
它是由Storn等人于1995年提出的,其最初的设想是用于解决切比雪夫多项式问题,后来发现它也是解决复杂优化问题的有效技术。**差分进化算法是基于群体智能理论的优化算法,是通过群体内个体间的合作与竞争而产生的智能优化搜索算法。**但相比于进化计算,它保留了基于种群的全局搜索策略,采用实数编码、基于差分的简单变异操作和“一对一”的竞争生存策略,降低了进化计算操作的复杂性。同时,差分进化算法特有的记忆能力使其可以动态跟踪当前的搜索情况,以调整其搜索策略,它具有较强的全局收敛能力和稳健性,且不需要借助问题的特征信息,适用于求解一些利用常规的数学规划方法很难求解甚至无法求解的复杂优化问题。因此,差分进化算法作为一种高效的并行搜索算法,对其进行理论和应用研究具有重要的学术意义和工程价值。
目前,差分进化算法已经在许多领域得到了应用,如人工神经元网络、电力、机械设计、机器人、信号处理、生物信息、经济学、现代农业和运筹学等。然而,尽管差分进化算法获得了广泛研究,但相对于其他进化算法而言,其研究成果相当分散,缺乏系统性,尤其在理论方面还没有重大突破。
2 差分进化法原理
差分进化算法是一种随机的启发式搜索算法,简单易用,有较强的鲁棒性和全局寻优能力。它从数学角度看是一种随机搜索算法,从工程角度看是一种自适应的迭代寻优过程。除了具有较好的收敛性外,差分进化算法非常易于理解与执行,它只包含不多的几个控制参数,并且在整个迭代过程中,这些参数的值可以保持不变。
差分进化算法是一种自组织最小化方法,用户只需很少的输入。它的关键思想与传统进化方法不同:传统方法是用预先确定的概率分布函数决定向量扰动;而差分进化算法的自组织程序利用种群中两个随机选择的不同向量来干扰一个现有向量,种群中的每一个向量都要进行干扰。差分进化算法利用一个向量种群,其中种群向量的随机扰动可独立进行,因此是并行的。如果新向量对应函数值的代价比它们的前辈代价小,它们将取代前辈向量。同其他进化算法一样, 差分进化算法也是对候选解的种群进行操作,但其种群繁殖方案与其他进化算法不同:它通过把种群中两个成员之间的加权差向量加到第三个成员上来产生新的参数向量,该操作称为**“变异”;然后将变异向量的参数与另外预先确定的目标向量参数按一定规则混合来产生试验向量,该操作称为“交叉”**;最后,若试验向量的代价函数比目标向量的代价函数低,试验向量
就在下一代中代替目标向量,该操作称为**“选择”**。种群中所有成员必须当作目标向量进行一次这样的操作,以便在下一代中出现相同个数竞争者。在进化过程中对每一代的最佳参数向量都进行评价,以记录最小化过程。这样利用随机偏差扰动产生新个体的方式,可以获得一个收敛性非常好的结果,引导搜索过程向全局最优解逼近。
3 差分进化法特点
差分进化算法从提出到现在,在短短二十几年内人们对其进行了广泛的研究并取得了成功的应用。该算法主要有如下特点:.
(1)结构简单,容易使用。差分进化算法主要通过差分变异算子来进行遗传操作,由于该算子只涉及向量的加减运算,因此很容易实现;该算法采用概率转移规则,不需要确定性的规则。此外,差分进化算法的控制参数少,这些参数对算法性能的影响已经得到- -定的研究,并得出了一些指导性的建议,因而可以方便使用人员根据问题选择较优的参数设置。
(2)性能优越。差分进化算法具有较好的可靠性、高效性和鲁棒性,对于大空间、非线性和不可求导的连续问题,其求解效率比其他进化方法好,而且很多学者还在对差分进化算法继续改良,以不断提高其性能。
(3)自适应性。差分进化算法的差分变异算子可以是固定常数,也可以具有变异步长和搜索方向自适应的能力,根据不同目标函数进行自动调整,从而提高搜索质量。
(4)差分进化算法具有内在的并行性,可协同搜索,具有利用个体局部信息和群体全局信息指导算法进一步搜索的能力。在同样精度要求下,差分进化算法具有更快的收敛速度。
(5)算法通用,可直接对结构对象进行操作,不依赖于问题信息,不存在对目标函数的限定。差分进化算法操作十分简单,易于编程实现,尤其利于求解高维的函数优化问题。
4 操作程序
基本差分进化算法的操作程序如下:
(1)初始化;
(2)变异:
(3)交叉;
(4)选择;
(5)边界条件处理。
4.1 初始化
差分进化算法利用NP个维数为D的实数值参数向量,将它们作为每一代的
种群,每个个体表示为:
)(i=1 ,2.,…NP)
式中: i表示个体在种群中的序列: G表示进化代数: NP表示种群规模,在最小化过程中NP保持不变。
为了建立优化搜索的初始点,种群必须被初始化。通常,寻找初始种群的一个方法是从给定边界约束内的值中随机选择。在差分进化算法研究中,一般假定所有随机初始化种群均符合均匀概率分布。 rand[0, 1]表示在[0,1]之间产生的均匀随机数。如果可以预先得到问题的初步解,则初始种群也可以通过对初步解加入正态分布随机偏差来产生,这样可以提高重建效果。
4.2 变异
对于每个目标向量