首页 > 编程知识 正文

matlab多目标优化算法案例,matlab求解最优化问题实例

时间:2023-05-06 16:54:37 阅读:147717 作者:2593

一.代码获取方式获取代码方式1:

完整的代码已上载到“我的资源”。 【优化算法】差分进化算法(DE )【134期含Matlab源代码】

获取代码方式2:

订阅紫极神光博客3358www.Sina.com/,可在支付凭证付费专栏上获取此代码。

注释:

订阅紫极神光博客3358www.Sina.com/,即可免费获得私信博主部代码(付费专栏自订阅之日起3天有效)。

二.差分进化算法概述1

在遗传、选择和变异的作用下,自然界生物优胜劣败,不断由低级向高级进化和发展。 人们注意到,适者生存的进化规律可以被建模,可以构成几种优化算法; 近年来发展的进化计算类算法备受关注。

差分进化算法(Differential Evolution,DE )是一种新型的进化计算技术[1]。 1995年由S torn等人提出,最初的构想是为了解决cmdbm多项式问题,但后来发现这也是解决复杂优化问题的有效技术。

差分进化算法是基于群体智能理论的优化算法,是由群体中个体之间的合作与竞争产生的智能优化搜索算法。 但与进化计算相比,保持了基于种群的全局搜索策略,采用了基于实数编码、差分的简单变异操作和“一对一”竞争生存策略,降低了进化计算操作的复杂性。 同时,差分进化算法特有的存储能力使其能够动态跟踪当前搜索情况并调整搜索策略,具有较强的全局收敛能力和鲁棒性,解决复杂的优化问题,无需利用问题的特征信息,难以用常规数学规划方法求解,也无法求解因此差分进化算法作为一种高效的并行搜索算法,进行理论和应用研究具有重要的学术意义和工程价值。

目前,差分进化算法已经应用于很多领域,如人工神经网络、电力、机械设计、机器人、信号处理、生物信息、经济学、现代农业和运筹学等。 然而,尽管差分进化算法得到了广泛的研究,但与其他进化算法相比,其研究成果相当分散,缺乏系统性,尤其是在理论方面没有重大突破。

有效期

1 前言

差分进化算法是一种随机启发式搜索算法,简单易用,具有较强的鲁棒性和全局寻优能力。 这在数学上是一种随机搜索算法,在工程上是一个自适应的迭代搜索过程。 除了收敛性好外,差分进化算法还非常简单易懂,运行良好。 差分进化算法中包含的控制参数数量很少,在迭代期间这些参数的值不会改变。 差分进化算法是一种自组织最小化方法,用户只需少量输入。 其重要思想与传统的进化方法不同。 传统的方法是用预先确定的概率分布函数来确定向量的扰动。 差分进化算法的自组织程序利用种群中两个随机选择的不同向量干扰一个现有向量,种群中的每个向量都必须干扰。 差分进化算法利用一个向量种群,其中种群向量的随机扰动可以独立进行,因此是并行的。 如果新向量对应函数值的成本小于前辈的成本,则替代前辈的向量。

和其他进化算法一样,差分进化算法也操作候选解的种群,但其种群繁殖方案与其他进化算法不同。 通过将种群中两个成员之间的加权差分向量与第三个成员相加生成新的参数向量

称为“变异”。然后,将变异矢量的参数和另一个预先确定的目标矢量的参数按照一定的规则混合生成实验量。 该操作称为“交叉”; 最后,如果尝试向量的成本函数低于目标向量的成本函数,则尝试向量将在下一代代替目标向量,并将此操作称为“选择”。 种群的所有成员都必须进行一次这样的操作作为目标矢量,以便下一代出现相同数量的竞争对手。

在进化过程中评估每一代的最优参数向量,并记录最小化过程。 这样利用随机偏差扰动生成新个体的方式,收敛性得到了非常好的结果,可以使搜索过程接近全局最优解[6-7]。

2 差分进化算法理论

差分进化算法从提出到现在,在短短的20多年里人们对其进行了广泛的研究并成功地应用。 该算法主要具有以下特点。

)结构简单,使用方便。 差分进化算法主要通过差分变异算子进行遗传操作,由于该算子只涉及向量的加减运算,易于实现的该算法采用了概率转移规则,不需要确定的规则。 此外,差分进化算法的控制参数较少,这些参数对算法性能的影响已有研究,并给出了指导性建议,因此使用者可以根据问题方便地选择较好的参数设置。

)2)性能优异。 差分进化算法具有较好的可靠性、效率和鲁棒性,对于大空间、非线性和不可求导连续问题,其求解效率优于其他进化方法,而且许多学者不断改进差分进化算法以提高性能。

(3)适应性。 差分进化算法的差分变异算子可以是固定常数,也可以具有变异步长和搜索方向自适应的能力,通过目标函数自动调整,提高搜索质量。

)4)差分进化算法具有内在并行性,可以协同搜索,具有利用个体局部信息和群体全局信息进一步搜索算法的能力。 在相似精度要求下,差分进化算法具有更快的收敛速度。

)5)算法通用,可以直接操作结构对象,不依赖问题信息,没有目标函数的限定。 差分

进化算法操作十分简单,易于编程实现,尤其利于求解高维的函数优化问题。

3 差分进化算法种类
3.1基本差分进化算法

基本差分进化算法的操作程序如下[8]:
(1)初始化;
(2)变异;
(3)交叉;
(4)选择;
(5)边界条件处理。
初始化
差分进化算法利用NP个维数为D的实数值参数向量,将它们作为每
一代的种群,每个个体表示为:



另外一个方法是进行边界吸收处理,即将超过边界约束的个体值设置为临近的边界值。

3.2差分进化算法的其他形式
上面阐述的是最基本的差分进化算法操作程序,实际应用中还发展了差分进化算法的几个变形形式,用符号DE/x/y/z加以区分,其中:x限定当前被变异的向量是“随机的”或“最佳的”;y是所利用的差向量的个数;z指示交叉程序的操作方法。前面叙述的交叉操作表示为“lmdhn”。利用这个表示方法, 基本差分进化算法策略可描述为DE/rand/1/lmdhn。
还有其他形式[5,如:

3.3改进的差分进化算法
自适应差分进化算法
作为一种高效的并行优化算法,差分进化算法发展很快,出现了很多改进的差分进化算法。下面介绍一种具有自适应算子的差分进化算法[9].

4差分进化算法流程
差分进化算法采用实数编码、基于差分的简单变异操作和“一对一”的竞争生存策略,其具体步骤如下:
(1)确定差分进化算法的控制参数和所要采用的具体策略。差分进化算法的控制参数包括:种群数量、变异算子、交叉算子、最大进化代数、终止条件等。
(2)随机产生初始种群,进化代数k=1。
(3)对初始种群进行评价,即计算初始种群中每个个体的目标函数值。
(4)判断是否达到终止条件或达到最大进化代数:若是,则进化终止,将此时的最佳个体作为解输出;否则,继续下一步操作。
(5)进行变异操作和交叉操作,对边界条件进行处理,得到临时种群。
(6)对临时种群进行评价,计算临时种群中每个个体的目标函数值。
(7)对临时种群中的个体和原种群中对应的个体,进行“一对-”的选择操作,得到新种群。
(8)进化代数k=k+1,转步骤(4)。
差分进化算法运算流程如图3.1所示。

5关键参数的说明
控制参数对一个全局优化算法的影响是很大的,差分进化算法的控制变量选择也有一些经验规则。

种群数量NP
一般情况下,种群的规模AP越大,其中的个体就越多,种群的多样性也就越好,寻优的能力也就越强,但也因此增加了计算的难度。所以,NP不能无限取大。根据经验,种群数量NP的合理选择在5D~
10D之间,必须满足NP≥4,以确保差分进化算法具有足够的不同的变异向量。

变异算子F
变异算子FE[0,2]是一个实常数因数,它决定偏差向量的放大比例。变异算子熨小,则可能造成算法“早熟”。随着/值的增大,防止算法陷入局部最优的能力增强,但当F>1时,想要算法快速收敛到最优值会变得十分不易;这是由于当差分向量的扰动大于两个个体之间的距离时,种群的收敛性会变得很差。目前的研究表明,F小于0.4和大于1的值仅偶尔有效,/=0.5通常是一个较好的初始选择。若种
群过早收敛,那么F或NP应该增大。

交叉算子CR
交叉算子CR是一个范围在[0,1]内的实数,它控制着一个试验向量参数来自于随机选择的变异向量而不是原来向量的概率。交叉算子CK越大,发生交叉的可能性就越大。CR的一个较好的选择是0.1,但
较大的CK通常会加速收敛,为了看看是否可能获得一个快速解,可以先尝试CR=0.9或CF=1.0.

最大进化代数G
最大进化代数6是表示差分进化算法运行结束条件的一个参数,表示差分进化算法运行到指定的进化代数之后就停止运行,并将当前群体中的最佳个体作为所求问题的最优解输出。一般,6取100~500。

终止条件
除最大进化代数可作为差分进化算法的终止条件外,还可以增加其他判定准则。一般当目标函数值小于阈值时程序终止,阈值常选为10-6。上述参数中,F、CR与NP一样,在搜索过程中是常数,一般F和CR影响搜索过程的收敛速度和稳健性,它们的优化值不仅依赖于目标函数的特性,还与NP有关。通常可通过对不同值做一些试验之后,利用试验和结果误差找到F、CR和NP的合适值。

三、部分源代码 function demo1%DEMO1 Demo for usage of DIFFERENTIALEVOLUTION. % Set titleoptimInfo.title = 'Demo 1 (Rosenbrock''s saddle)'; % Specify objective functionobjFctHandle = @rosenbrocksaddle; % Define parameter names, ranges and quantization: % 1. column: parameter names% 2. column: parameter ranges% 3. column: parameter quantizations% 4. column: initial values (optional) paramDefCell = {'parameter1', [-3 3], 0.01'parameter2', [-3 3], 0.01}; % Set initial parameter values in struct objFctParams objFctParams.parameter1 = -2;objFctParams.parameter2 = 2.5; % Set single additional function parameterobjFctSettings = 100; % Get default DE parametersDEParams = getdefaultparams; % Set number of population members (often 10*D is suggested) DEParams.NP = 20; % Do not use slave processes here. If you want to, set feedSlaveProc to 1 and% run startmulticoreslave.m in at least one additional Matlab session.DEParams.feedSlaveProc = 0; % Set timesDEParams.maxiter = 20;DEParams.maxtime = 30; % in secondsDEParams.maxclock = []; % Set display optionsDEParams.infoIterations = 1;DEParams.infoPeriod = 10; % in seconds % Do not send E-mailsemailParams = []; % Set random state in order to always use the same population members heresetrandomseed(1); % Start differential evolution[bestmem, bestval, bestFctParams, nrOfIterations, resultFileName] = differentialevolution(...DEParams, paramDefCell, objFctHandle, objFctSettings, objFctParams, emailParams, optimInfo); %#ok disp(' ');disp('Best parameter set returned by function differentialevolution:');disp(bestFctParams);% Continue optimization by loading result fileif DEParams.saveHistory disp(' '); disp(textwrap2(sprintf(... 'Now continuing optimization by loading result file %s.', resultFileName))); disp(' '); DEParams.maxiter = 100; DEParams.maxtime = 60; % in seconds [bestmem, bestval, bestFctParams] = differentialevolution(... DEParams, paramDefCell, objFctHandle, objFctSettings, objFctParams, emailParams, optimInfo, ... resultFileName); %#ok disp(' '); disp('Best parameter set returned by function differentialevolution:'); disp(bestFctParams);end 四、运行结果



五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,ttdct,还单身的小刺猬.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]rxdst,暴躁的毛衣.MATLAB优化算法源代码[M].清华大学出版社,2017.

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。