- MATLAB R2020a智能算法及实例分析
- 张德丰编著
- 836字
- 2025-02-17 16:36:34
3.2 基本差分进化算法
基本差分进化算法的操作程序如下。
(1)初始化。
(2)变异。
(3)交叉。
(4)选择。
(5)边界条件处理。
1.初始化
差分进化算法利用NP个维数为D的实数值参数向量作为每一代的种群,每个个体表示为

式中,i为个体在种群中的序列;G为进化代数;NP为种群规模,在最小化过程中,NP保持不变。
为了建立优化搜索的初始点,种群必须被初始化。通常,寻找初始种群的一个方法是从给定边界约束内的值中随机选择。在差分进化算法研究中,一般假定所有随机初始化种群均符合均匀概率分布。设参数变量的界限为,则

式中,rand[0,1]为在[0,1]区间产生的均匀随机数。
如果预先可以得到问题的初始解,则初始种群也可以通过将初步解加入正态分布随机偏差来产生,这样可以改善重建效果。
2.变异
对于每个目标向量,基本差分进化算法的变异向量按如下方式产生:

式中,随机选择的序号、
和
互不相同,且
、
和
与目标向量序号
也应不同,因此须满足
;变异算子
,为一个实常数因数,用来控制偏差变量的放大。
3.交叉
为了增加干扰参数向量的多样性,引入了交叉操作,则试验向量变为


式中,为产生[0,1]区间随机数发生器的第
个估计值;
,表示一个随机选择的序列,用它来确保
至少从
获得一个参数;CR为交叉算子,其取值为[0,1]。
4.选择
为决定试验向量是否会成为下一代中的成员,差分进化算法按照贪婪准则将试验向量与当前种群中的目标向量
进行比较。如果目标函数要被最小化,那么具有较小目标函数值的向量将在下一代种群中赢得一席之位。下一代中的所有个体都比当前种群的对应个体更佳,或者至少一样好。
注意:在差分进化算法选择程序中,试验向量只与一个个体进行比较,而不是与现有种群中的所有个体进行比较。
5.边界条件处理
在有边界约束的问题中,确保产生新个体的参数值位于问题的可行域中是必要的,一个简单的方法就是将不符合边界约束的新个体用在可行域中随机产生的参数向量代替。也就是说,如果或
,则

另外一个方法是根据上式重新产生试验向量,然后进行交叉操作,直到产生的新个体满足边界约束,此方法的效率较低。