基本差分进化算法
- 格式:pdf
- 大小:149.88 KB
- 文档页数:5
差分进化算法的有点
1.高效性:差分进化算法(DifferentialEvolution,DE)在解决优化问题时,具有快速、稳定、高效等特点。
相比其他优化算法,DE 算法无需求解导数,也不需要求解约束条件,因此适用范围更广。
2. 算法简单:DE算法的原理简单易懂,易于实现。
它不需要复杂的参数设置,只需设定种群大小、交叉概率、变异因子等几个简单的参数即可。
这也使得它广泛应用于实际问题中。
3. 全局收敛性:DE算法具有全局收敛性,可以找到全局最优解。
它通过随机选择个体和差分变异操作,从而保证了搜索过程的随机性和多样性,从而更容易找到全局最优解。
4. 可并行性:DE算法可以很容易地进行并行处理,因为每个个体的适应度值都是独立计算的。
这使得它可以很容易地应用于分布式计算和并行处理领域。
5. 鲁棒性:DE算法对初始种群的选择不敏感,可以适应不同的问题和不同的初始种群。
它也可以很好地应对问题中存在的噪声和不确定性。
6. 适用性广泛:DE算法在不同的领域中都有广泛的应用,如神经网络优化、图像处理、机器学习等。
同时,它也可以与其他算法结合使用,进一步提高优化效果。
- 1 -。
《差分进化算法的优化及其应用研究》篇一摘要随着优化问题在科学、工程和技术领域的重要性日益增强,差分进化算法(DEA,Differential Evolution Algorithm)以其高效的优化能力和出色的适应性,在众多领域中得到了广泛的应用。
本文旨在探讨差分进化算法的优化方法,以及其在不同领域的应用研究。
首先,我们将对差分进化算法的基本原理进行介绍;其次,分析其优化策略;最后,探讨其在不同领域的应用及其研究进展。
一、差分进化算法的基本原理差分进化算法是一种基于进化计算的优化算法,通过模拟自然选择和遗传学原理进行搜索和优化。
该算法的核心思想是利用个体之间的差异进行选择和演化,从而达到优化目标的目的。
基本原理包括种群初始化、差分操作、变异操作、交叉操作和选择操作等步骤。
在解决复杂问题时,该算法可以自动寻找全局最优解,且具有较好的收敛性能和稳定性。
二、差分进化算法的优化策略为了进一步提高差分进化算法的性能,学者们提出了多种优化策略。
首先,针对算法的参数设置,通过自适应调整参数值,使算法在不同阶段能够更好地适应问题需求。
其次,引入多种变异策略和交叉策略,以增强算法的搜索能力和全局寻优能力。
此外,结合其他优化算法如遗传算法、粒子群算法等,形成混合优化算法,进一步提高优化效果。
三、差分进化算法的应用研究差分进化算法在众多领域得到了广泛的应用研究。
在函数优化领域,该算法可以有效地解决高维、非线性、多峰值的复杂函数优化问题。
在机器学习领域,差分进化算法可以用于神经网络的权值优化、支持向量机的参数选择等问题。
此外,在控制工程、生产调度、图像处理等领域也得到了广泛的应用。
以函数优化为例,差分进化算法可以自动寻找全局最优解,有效避免陷入局部最优解的问题。
在机器学习领域,差分进化算法可以根据问题的特点进行定制化优化,提高模型的性能和泛化能力。
在控制工程中,该算法可以用于系统控制参数的优化和调整,提高系统的稳定性和性能。
差分进化算法和遗传算法
差分进化算法和遗传算法都属于进化算法的一种。
差分进化算法(Differential Evolution,DE)是一种全局优化算法,通过模拟自然界中的进化
过程来寻找最优解。
它基于一种种群的演化策略,通过不断地进行变异和交叉操作来生成新的个体,并根据适应度函数来选择最优个体。
相比其他优化算法,差分进化算法具有较高的收敛速度和全局搜索能力。
遗传算法(Genetic Algorithm,GA)也是一种全局优化算法,通过模拟自然界中的生物进化过
程来寻找最优解。
它基于一种类似于生物遗传的过程,通过选择、交叉和变异来生成新的个体。
遗传算法根据适应度函数来评估每个个体的适应度,并选择适应度较高的个体进行繁殖,从而不断地搜索最优解。
两者的主要区别在于个体的表达形式和操作方式。
差分进化算法通常使用向量或矩阵来表示个体,并通过差分操作来生成新的个体。
而遗传算法通常使用染色体和遗传编码来表示个体,通过遗传操作(如选择、交叉和变异)来生成新的个体。
此外,差分进化算法在全局搜索能力方面相对较强,适用于解决复杂的优化问题。
而遗传算法在具有明显的结构性特征或局部搜索能力较强的问题中表现较好。
总的来说,差分进化算法和遗传算法都是进化算法中常用的求解优化问题的方法,具有各自的特点和适用范围。
具体选择哪种算法要根据具体问题的性质和需求来决定。
1.差分进化算法背景差分进化(Differential Evolution,DE)是启发式优化算法的一种,它是基于群体差异的启发式随机搜索算法,该算法是Raincr Stom和Kenneth Price为求解切比雪夫多项式而提出的。
差分进化算法具有原理简单、受控参数少、鲁棒性强等特点。
近年来,DE在约束优化计算、聚类优化计算、非线性优化控制、神经网络优化、滤波器设计、阵列天线方向图综合及其它方面得到了广泛的应用。
差分算法的研究一直相当活跃,基于优胜劣汰自然选择的思想和简单的差分操作使差分算法在一定程度上具有自组织、自适应、自学习等特征。
它的全局寻优能力和易于实施使其在诸多应用中取得成功。
2.差分进化算法简介差分进化算法采用实数编码方式,其算法原理同遗传算法相似刚,主要包括变异、交叉和选择三个基本进化步骤。
DE算法中的选择策略通常为锦标赛选择,而交叉操作方式与遗传算法也大体相同,但在变异操作方面使用了差分策略,即:利用种群中个体间的差分向量对个体进行扰动,实现个体的变异。
与进化策略(Es)采用Gauss或Cauchy分布作为扰动向量的概率密度函数不同,DE使用的差分策略可根据种群内个体的分布自动调节差分向量(扰动向量)的大小,自适应好;DE 的变异方式,有效地利用了群体分布特性,提高了算法的搜索能力,避免了遗传算法中变异方式的不足。
3.差分进化算法适用情况差分进化算法是一种随机的并行直接搜索算法,最初的设想是用于解决切比雪夫多项式问题,后来发现差分进化算法也是解决复杂优化问题的有效技术。
它可以对非线性不可微连续空间的函数进行最小化。
目前,差分进化算法的应用和研究主要集中于连续、单目标、无约束的确定性优化问题,但是,差分进化算法在多目标、有约束、离散和噪声等复杂环境下的优化也得到了一些进展。
4.基本DE算法差分进化算法把种群中两个成员之间的加权差向量加到第三个成员上以产生新的参数向量,这一操作称为“变异”。
差分进化算法(Differential Evolution,DE)是一种基于群体的优化算法,常用于解决连续型优化问题。下面是一个简单的差分进化算法的C++实现示例:
```cpp #include #include #include #include
using namespace std; // 目标函数,这里以rosenbrock函数为例 double rosenbrock(const vector& x) { double sum = 0.0; for (int i = 0; i < x.size() - 1; ++i) { sum += 100 * pow(x[i+1] - pow(x[i], 2), 2) + pow(1 - x[i], 2); } return sum; }
// 差分进化算法 void differentialEvolution(int popSize, int maxGen, double F, double CR, double minX, double maxX) { // 初始化种群 vector> population(popSize, vector(2)); for (int i = 0; i < popSize; ++i) { for (int j = 0; j < 2; ++j) { population[i][j] = minX + (maxX - minX) * rand() / RAND_MAX; } }
// 迭代优化 for (int gen = 0; gen < maxGen; ++gen) { for (int i = 0; i < popSize; ++i) { // 随机选择三个个体 int r1, r2, r3; do { r1 = rand() % popSize; } while (r1 == i); do { r2 = rand() % popSize; } while (r2 == i || r2 == r1); do { r3 = rand() % popSize; } while (r3 == i || r3 == r1 || r3 == r2); // 变异操作 vector trial(population[i].size()); for (int j = 0; j < trial.size(); ++j) { trial[j] = population[r1][j] + F * (population[r2][j] - population[r3][j]); }
差分进化算法变异策略
差分进化算法是一种用于优化问题的启发式算法,其变异策略是该算法的关键组成部分之一。
差分进化算法通过种群中个体之间的差异来产生新的个体,从而实现算法的搜索和优化。
在差分进化算法中,常见的变异策略包括:
差分策略:这是最基本的变异策略,通过种群中随机选取两个不同的个体,然后根据一定的规则(如DE/rand/1)生成一个新的个体。
边界限制:为了防止变异后的个体的取值范围超出定义域,通常需要对变异后的个体的取值进行边界限制。
常用的边界限制方法包括最大最小值限制和约束函数限制等。
自适应变异:根据种群中个体的适应度差异,自适应地调整变异策略的参数,以更好地适应算法的搜索过程。
例如,可以根据个体的适应度差异来动态调整交叉和变异操作的概率。
多目标优化:在多目标优化问题中,变异策略可以结合多种不同的方法,如基于分解的多目标进化算法、非支配排序遗传算法等,以实现多个目标的优化和平衡。
混合变异:将不同的变异策略进行组合,以实现更高效的搜索和优化。
例如,可以将差分策略与边界限制相结合,或者将差分策略与自适应变异相结合等。
总之,差分进化算法的变异策略需要根据具体问题来选择和设计,以达到更好的优化效果。
在应用差分进化算法时,需要注意种群多样性的保持、参数的调整和选择等问题,以确保算法的有效性和可靠性。
差分进化算法pdf差分进化算法是一种基于群体智能的优化算法,其主要目的是在给定的问题中快速找到最优解。
相对于传统的进化算法,差分进化算法的主要优势在于其对于高维度问题的表现力更加出色。
以下是差分进化算法的具体步骤:1. 初始化种群在差分进化算法中,我们需要首先初始化一个种群,将其放在搜索空间中,以便进行进化。
每个个体都是由一个特定的向量组成,表示搜索空间中的一个点。
我们可以通过随机抽样的方式来初始化种群中每一个个体的向量值。
2. 差分算子差分运算符是差分进化算法的核心组成部分。
其主要功能是根据种群中已有的个体,构造并生成新的解向量。
在差分算子中,我们选取两个可行解x和y,然后通过差分算子构建新的解向量z。
具体地,z的构造方式如下:z = x + F(y-x)其中F是参数范围在[0,2]之间的可调整的参数,其作用是控制差分算子对y-x的影响程度。
3. 交叉运算符在差分进化算法中,交叉运算符主要用来融合一个个体的特征向量与由差分算子生成的新的特征向量。
具体来说,交叉运算符可以通过在两个向量矩阵中分别随机选取一些位置,并将这些位置标记为“父向量”和“子向量”来实现。
然后,我们可以根据随机选取的位置进行特征向量的融合。
4. 选择算子选择算子主要用来筛选种群中的优质解向量,并将其作为下一次进化的种子。
在差分进化算法中,我们可以根据优化的目标函数来度量一个解向量的质量。
具体来说,我们需要对整个种群中的解向量进行评估,并选取其中表现最优秀的个体作为下一次进化的种子。
总之,差分进化算法是一种非常高效的搜索算法,在很多领域中已经得到了广泛的应用。
相信通过学习差分进化算法的操作步骤以及其内在的优化机制,我们可以更好地理解并应用这个优秀的算法。
差分进化算法DE和粒⼦群算法PSO1.差分进化算法(DE)DE与GA的主要区别在变异步骤。
对于每个⽬标向量 X i,G (i=1,2,……,NP),基本DE算法的变异向量如下产⽣其中,随机选择的序号r1,r2和r3互不相同,且r1,r2和r3与⽬标向量序号i也应不同,所以须满⾜NP≥4。
变异算⼦F∈[0,2]是⼀个实常数因数,控制偏差变量的放⼤作⽤。
实现如下。
由于此⽬标过于简单,即便去掉交叉步,也能得到不错的结果。
# coding: utf8import numpy as npN=20 # 编码长度MAX=10.0/(2**(N)) # [0,10), 区间内有两个最⼤值(17)的点NUM=500 # 种群数量def f(x): # 函数return 10*np.sin(5*x) + 7*np.cos(4*x)def new(num=NUM,len=N): # 随机⽣成return np.random.randint(1,2**len,num)def n2b(nums): # 数字编码return [bin(i)[2:].zfill(N) for i in nums]def b2n(bits): # 解码return [int(i,base=2) for i in bits]def fit(nums,s_rate=0.15,r_rate=0.05): # 适应度和选择n=len(nums)sn=int(n*s_rate)on=int(n*r_rate)np.random.shuffle(nums)outs=nums[:on]res=[f(i*MAX) for i in nums] # 适应度选择和随机选择,可能有重复temp=np.argsort(res)others=[nums[i] for i in temp[-sn:]]outs=np.concatenate((outs, others))return outs,nums[temp[-1]]*MAX,res[temp[-1]]def repo(fits,mode='DE'): # 扩增,此处5倍;增加了进化算法n=len(fits)pt=np.random.randint(0,n,4*n)pt=np.reshape(pt,(2*n,2))bits=n2b(fits)new_bits=bitsfor i in pt:b1,b2=exchange([bits[j] for j in i])new_bits.append(b1)new_bits.append(b2)if mode=='DE':return dmut(new_bits)return mut(new_bits)def exchange(bits,change_rate=0.4,mode='cross'): #交换,提供了随机交换和节点互换n=int(change_rate*N)if mode=='rand':rn=range(N)new_bits=[list(i) for i in bits]for i in rn[:n]:new_bits[0][i] = bits[1][i]new_bits[1][i] = bits[0][i]new_bits=[''.join(i) for i in new_bits]else:n = int(change_rate * N)new_bits = [list(i) for i in bits]new_bits[0][:n] = bits[1][:n]new_bits[1][:n] = bits[0][:n]new_bits = [''.join(i) for i in new_bits]return new_bitsdef mut(bits,mut_rate=0.03): # 变异length=len(bits)*Nn = int(mut_rate * length)if n<1: n=1rn = range(length)np.random.shuffle(rn)for i in rn[:n]:j=int(bits[i/N][i%N])bits[i/N]=swap(bits[i/N],i%N,str(1-j)) return bitsdef swap(str,i,char): # 字符串交换str2=list(str)str2[i]=charreturn''.join(str2)def dmut(bits,mut_rate=1.0,F=0.5): # 差分变异 length = len(bits)n = int(mut_rate * length)if n < 1: n = 1rn = np.random.randint(0,length,3*n)rn = np.reshape(rn,(n,3))nums=b2n(bits)for i in rn:nums[i[0]]+=int(F*(nums[i[1]]-nums[i[2]])) if nums[i[0]]<0:nums[i[0]]*=-1return n2b(nums)def train(iter=50): # 训练⼊⼝nums=new()outs,x,fx=fit(nums)for i in range(iter):new_bits = repo(outs)nums=b2n(new_bits)outs,x,fx=fit(nums)print i,x,fxif'__main__==main()':train()"""0 1.57093048096 16.99999674251 1.57070159912 16.99999837582 1.57070159912 16.99999837583 1.57086372375 16.99999917784 1.57078742981 16.99999998575 1.57078742981 16.99999998576 1.57079696655 16.99999999997 1.57079696655 16.99999999998 1.57079696655 16.99999999999 1.57079696655 16.999999999910 1.57079696655 16.999999999911 1.57079696655 16.999999999912 1.57079696655 16.999999999913 1.57079696655 16.999999999914 1.57079696655 16.999999999915 1.57079696655 16.999999999916 1.57079696655 16.999999999917 1.57079696655 16.999999999918 1.57079696655 16.999999999919 1.57079696655 16.999999999920 1.57079696655 16.999999999921 1.57079696655 16.999999999922 1.57079696655 16.999999999923 1.57079696655 16.999999999924 1.57079696655 16.999999999925 1.57079696655 16.999999999926 1.57079696655 16.999999999927 1.57079696655 16.999999999928 1.57079696655 16.999999999929 1.57079696655 16.999999999930 1.57079696655 16.999999999931 1.57079696655 16.999999999932 1.57079696655 16.999999999933 1.57079696655 16.999999999934 1.57079696655 16.999999999935 1.57079696655 16.999999999936 1.57079696655 16.999999999937 1.57079696655 16.999999999938 1.57079696655 16.999999999939 1.57079696655 16.999999999940 1.57079696655 16.999999999941 1.57079696655 16.999999999942 1.57079696655 16.999999999943 1.57079696655 16.999999999944 1.57079696655 16.999999999945 1.57079696655 16.999999999946 1.57079696655 16.999999999947 1.57079696655 16.999999999948 1.57079696655 16.999999999949 1.57079696655 16.9999999999"""2.粒⼦群算法描述⼀群鸟在随机的搜索⾷物。
查找差分进化算法
差分进化算法是一种优化算法,它是一种基于群体智能的算法,用于解决优化问题。
差分进化算法是一种简单而有效的算法,它可以在不需要太多参数的情况下,快速地找到最优解。
差分进化算法的基本思想是通过不断地迭代,来寻找最优解。
在每一次迭代中,算法会生成一组新的解,然后通过比较新解和旧解的适应度值,来决定是否接受新解。
如果新解的适应度值更好,那么就接受新解,否则就保留旧解。
差分进化算法的核心是差分操作。
差分操作是指将群体中的某些个体进行差分,然后将差分后的结果与另外一个个体进行组合,得到一个新的个体。
这个新的个体就是差分进化算法中的新解。
差分进化算法的优点是它可以在不需要太多参数的情况下,快速地找到最优解。
此外,差分进化算法还可以处理高维度的问题,因为它可以通过差分操作来减少维度。
差分进化算法的应用非常广泛,它可以用于解决各种优化问题,例如函数优化、组合优化、机器学习等。
在机器学习中,差分进化算法可以用于训练神经网络、支持向量机等模型。
差分进化算法是一种简单而有效的优化算法,它可以在不需要太多参数的情况下,快速地找到最优解。
差分进化算法的应用非常广泛,
它可以用于解决各种优化问题,是一种非常有价值的算法。
Matlab差分进化算法引言差分进化算法(Differential Evolution,DE)是一种基于种群的全局优化算法。
由于其简单易用和高效性,差分进化算法在许多领域被广泛应用。
本文介绍了Matlab中的差分进化算法的原理、实现方法和应用案例。
原理差分进化算法的基本原理是通过模拟进化的方式,通过逐代迭代来优化问题。
算法中的每个个体可以看作是对问题的某个解的一个候选。
通过个体间的交叉和变异操作,产生新的个体,经过选择筛选会逐渐进化出更好的个体。
Matlab中的差分进化算法Matlab是一种强大的数学计算软件,它为使用差分进化算法提供了丰富的工具和函数。
Matlab中的差分进化算法主要基于deoptim函数进行实现。
下面是使用Matlab进行差分进化算法的步骤:1.定义目标函数:首先需要定义目标函数,即待优化的函数。
这个函数应接受一个向量作为输入,并返回一个标量作为输出。
2.设置参数:设置算法的参数,包括种群大小、终止条件、交叉概率、变异概率等。
这些参数的设置会影响算法的性能和收敛速度。
3.初始化种群:生成初始的种群,种群中的每个个体都代表了一个解的候选。
4.迭代优化:通过交叉和变异操作生成新的个体,并通过选择策略选择出优秀的个体。
重复进行交叉、变异和选择操作,直到满足终止条件。
5.输出结果:最后得到最优的个体,并输出其对应的解和目标函数的值。
差分进化算法的应用案例差分进化算法可以应用于各种类型的优化问题,包括数学优化、工程优化和机器学习等领域。
下面介绍一个简单的应用案例来说明差分进化算法的使用。
问题描述假设有一个球体,我们希望找到球体的最小表面积。
球体的表面积可以通过以下公式计算:S=4πR2其中,S为表面积,R为球体的半径。
解决方案使用差分进化算法来解决这个问题:1.定义目标函数:目标函数为表面积S=4πR2。
该函数接受一个向量X作为输入,其中X的第一个元素为球体的半径R。
2.设置参数:设置种群大小为50,终止条件为达到最大迭代次数100,交叉概率为0.8,变异概率为0.2。
基本差分进化算法基本模拟退火算法概述DE算法是一种基于群体进化的算法,其本质是一种基于实数编码的具有保优
思想的贪婪遗传算法。由于DE算法操作简单,寻优能力强,自提出以来引起了国内外学者的高度关注,目前已在电力系统优化调度、配网重构等领域得到了应用。1、算法原理DE算法首先在N维可行解空间随机生成初始种群,其中P000
1[,,]NXxxL
,为DE种群规模。DE算法的核心思想在于采取变异和交叉操000T1[,,]iiiNxxxLpN
作生成试验种群,然后对试验种群进行适应度评估,再通过贪婪思想的选择机制,将原种群和试验种群进行一对一比较,择优进入下一代。基本DE算法主要包括变异、交叉和选择三个操作。首先,在种群中随机选取三个个体,进行变异操作:1123()ttttirrrF
vxxx
其中表示变异后得到的种群,表示种群代数,为缩放因子,一般取(0,2],1ti
vtF
它的大小可以决定种群分布情况,使种群在全局范围内进行搜索;、、1trx2trx
为从种群中随机抽取的三个不同的个体。3trx
然后,将变异种群和原种群进行交叉操作:
1,R1,,R () or () () and ()tijt
ijt
ij
vrandjCjrandniuxrandjCjrandni
其中表示交叉后得到的种群,为[0,1]之间的随机数,表示个体的第t1,iju()randjj
个分量,为交叉概率,为之间的随机量,用于保证新个体至jRC()randni[1,,]NL
少有一维分量由变异个体贡献。最后,DE算法通过贪婪选择模式,从原种群和试验种群中选择适应度更高的个体进入下一代:11t11 ()() ()()tttiiiittt
iii
ffffuuxxxux
、分别为和的适应度。当试验个体的适应度优于时,1()tifu()tifx1tiutix1tiutix试验个体取代原个体,反之舍弃试验个体,保留原个体。2、算法步骤基本DE算法的基本步骤如下:
设定DE算法的种群大小,最大迭代次数,缩放因子,交叉概率
DE算法变异操作DE算法交叉操作
进行适应度评估
随机生成初始DE种群,置迭代次数k为0
DE算法选择操作是否达到最大迭代次数?
k=k+1
是输出结果,退出程序
否
开始3、算法的matlab实现见程序4、算法举例
采用DE算法求取Sphere Mode函数的最小值。3021()iifxx
1)基本测试在matlab命令窗口输入:>> [xm,fv] = SA(@fitness,3,1e-5,0.99,200,30)得到如下收敛曲线0100200300400500600700051015202530代代代代代代代
2)参数对算法性能的影响在matlab命令窗口输入:>> [xm,fv] = DE(@fitness,40,0.5,0.5,100,30)>> [xm,fv] = DE(@fitness,40,0.5,0.5,200,30)>> [xm,fv] = DE(@fitness,40,0.5,0.5,500,30)将上面求得的结果列表比较如下:M100200500
x10.033087185-1.29E-021.77E-04
x20.202701957-4.05E-02-1.08E-04
x3-0.0810382459.89E-035.80E-05
x40.028932023-2.05E-027.00E-05
x5-0.1517165436.23E-03-1.66E-04
x60.1543522428.34E-039.47E-05
x70.051436736-1.79E-02-3.01E-04
x80.057500363-5.54E-03-2.23E-04
x9-0.0584096349.74E-034.80E-05
x100.0604356343.02E-02-4.12E-05
x110.005562026-1.64E-021.00E-04
x120.1246797578.56E-032.75E-05
x13-0.217063076-6.15E-032.45E-05
x14-0.156305243-3.49E-03-1.35E-04
x150.1426130784.24E-022.66E-05
x16-0.003189876-5.84E-021.35E-04
x17-0.1523396675.51E-02-4.93E-05
x18-0.229525992-1.10E-022.51E-04
x190.0765024931.47E-021.50E-04
x200.0495980381.11E-02-4.13E-05
x210.1232358086.87E-028.12E-05
x220.183832078-1.80E-02-3.78E-05x23-0.1118162291.32E-03-2.59E-04
x240.232072926-2.25E-02-9.06E-05
x250.0435850572.47E-02-6.93E-05
x26-0.235073466-1.73E-032.36E-04
x27-0.0084282012.95E-02-2.37E-04
x28-0.0751637592.49E-02-7.77E-05
x29-0.099728761-1.92E-02-6.94E-05
x300.1434230272.06E-021.28E-04
f(x)0.5098581292.13E-025.98E-07
可见达到一定迭代次数后,DE算法能优化得到很好的结果。在matlab命令窗口输入:>> [xm,fv] = DE(@fitness,40,1,0.5,500,30)>> [xm,fv] = DE(@fitness,40,0.75,0.5,500,30)>> [xm,fv] = DE(@fitness,40,0.5,0.5,500,30)收敛曲线如图1所示
050100150200250300350400450500024681012141618代代代代代代代 F=1F=0.75F=0.5
图1 缩放因子F的变化对DE算法收敛性的影响将上面求得的结果列表比较如下:F10.750.5
x1-0.0482973131.17E-023.34E-05
x20.2903591552.38E-022.83E-04
x30.5217323716.99E-02-1.55E-04
x40.0510185621.64E-014.35E-05
x50.019475097-7.12E-03-9.68E-05
x60.42968677-9.49E-02-5.01E-05
x7-0.321318581-6.41E-02-8.94E-06
x80.498844481-1.31E-01-7.83E-05
x90.227559274-1.08E-012.23E-04x10-0.1918635-2.42E-023.35E-05
x11-0.31447571-3.28E-028.51E-05
x12-0.6063273321.70E-02-3.99E-06
x130.3501588414.43E-031.05E-04
x14-0.8210696915.64E-02-4.23E-05
x15-0.3471671831.71E-021.51E-04
x16-0.317157615-3.32E-024.38E-05
x170.72521956-2.19E-021.83E-04
x180.4816322731.47E-028.01E-05
x19-0.0799399879.42E-02-4.57E-05
x200.760236255-5.11E-02-5.28E-05
x210.0420996679.46E-021.17E-04
x220.072662335-5.08E-037.40E-06
x23-0.8501186612.45E-021.02E-04
x240.466896387-4.43E-02-3.81E-05
x25-0.389142662-9.67E-02-1.17E-05
x260.5435361413.05E-02-2.36E-05
x270.274990037-9.75E-021.58E-04
x280.2587668031.17E-02-1.54E-04
x29-0.8451219745.25E-022.75E-04
x30-0.5153772611.55E-01-6.77E-05
f(x)6.3308503561.52E-014.20E-07
可见缩放因子F对收敛性有较大的影响,应根据实际情况进行F参数的选取。