
转自 https://blog.csdn.net/weixin_43202635/article/details/82700342
【嵌牛鼻子】 多目标优化, pareto
【嵌牛提问】 多目标优化算法有哪些?
【嵌牛正文】
1)无约束和有约束条件;
2)确定性和随机性最优问题(变量是否确定);
3)线性优化与非线性优化(目标函数和约束条件是否线性);
4)静态规划和动态规划(解是否随时间变化)。
使多个目标在给定区域同时尽可能最佳,多目标优化的解通常是一组均衡解(即一组由众多 Pareto最优解组成的最优解集合 ,集合中的各个元素称为 Pareto最优解或非劣最优解)。
①非劣解——多目标优化问题并不存在一个最优解,所有可能的解都称为非劣解,也称为Pareto解。
②Pareto最优解——无法在改进任何目标函数的同时不削弱至少一个其他目标函数。这种解称作非支配解或Pareto最优解。
多目标优化问题不存在唯一的全局最优解 ,过多的非劣解是无法直接应用的 ,所以在求解时就是要寻找一个最终解。
(1)求最终解主要有三类方法:
一是求非劣解的生成法,即先求出大量的非劣解,构成非劣解的一个子集,然后按照决策者的意图找出最终解;(生成法主要有加权法﹑约束法﹑加权法和约束法结合的混合法以及多目标遗传算法)
二为交互法,不先求出很多的非劣解,而是通过分析者与决策者对话的方式,逐步求出最终解;
三是事先要求决策者提供目标之间的相对重要程度,算法以此为依据,将多目标问题转化为单目标问题进行求解。
(2)多目标优化算法归结起来有传统优化算法和智能优化算法两大类。
传统优化算法包括加权法、约束法和线性规划法等,实质上就是将多目标函数转化为单目标函数,通过采用单目标优化的方法达到对多目标函数的求解。
智能优化算法包括进化算法(Evolutionary Algorithm, 简称EA)、粒子群算法(Particle Swarm Optimization, PSO)等。
两者的区别——传统优化技术一般每次能得到Pareo解集中的一个,而用智能算法来求解,可以得到更多的Pareto解,这些解构成了一个最优解集,称为Pareto最优解(任一个目标函数值的提高都必须以牺牲其他目标函数值为代价的解集)。
①MOEA通过对种群 X ( t)执行选择、交叉和变异等 *** 作产生下一代种群 X ( t + 1) ;
②在每一代进化过程中 ,首先将种群 X ( t)中的所有非劣解个体都复制到外部集 A ( t)中;
③然后运用小生境截断算子剔除A ( t)中的劣解和一些距离较近的非劣解个体 ,以得到个体分布更为均匀的下一代外部集 A ( t + 1) ;
④并且按照概率 pe从 A ( t + 1)中选择一定数量的优秀个体进入下代种群;
⑤在进化结束时 ,将外部集中的非劣解个体作为最优解输出。
NSGA一II算法的基本思想:
(1)首先,随机产生规模为N的初始种群,非支配排序后通过遗传算法的选择、交叉、变异三个基本 *** 作得到第一代子代种群
(2)其次,从第二代开始,将父代种群与子代种群合并,进行快速非支配排序,同时对每个非支配层中的个体进行拥挤度计算,根据非支配关系以及个体的拥挤度选取合适的个体组成新的父代种群
(3)最后,通过遗传算法的基本 *** 作产生新的子代种群:依此类推,直到满足程序结束的条件。
非支配排序算法:
考虑一个目标函数个数为K(K>1)、规模大小为N的种群,通过非支配排序算法可以对该种群进行分层,具体的步骤如下:
通过上述步骤得到的非支配个体集是种群的第一级非支配层
然后,忽略这些标记的非支配个体,再遵循步骤(1)一(4),就会得到第二级非支配层
依此类推,直到整个种群被分类。
拥挤度 ——指种群中给定个体的周围个体的密度,直观上可表示为个体。
拥挤度比较算子:
设想这么一个场景:一群鸟进行觅食,而远处有一片玉米地,所有的鸟都不知道玉米地到底在哪里,但是它们知道自己当前的位置距离玉米地有多远。那么找到玉米地的最佳策略,也是最简单有效的策略就是是搜寻目前距离玉米地最近的鸟群的周围区域。
基本粒子群算法:
粒子群由 n个粒子组成 ,每个粒子的位置 xi 代表优化问题在 D维搜索空间中潜在的解;
粒子在搜索空间中以一定的速度飞行 , 这个速度根据它本身的飞行经验和同伴的飞行经验来动态调整下一步飞行方向和距离;
所有的粒子都有一个被目标函数决定的适应值(可以将其理解为距离“玉米地”的距离) , 并且知道自己到目前为止发现的最好位置 (个体极值 pi )和当前的位置 ( xi ) 。
粒子群算法的数学描述 :
每个粒子 i包含为一个 D维的位置向量 xi = ( xi1, xi2, …, xiD )和速度向量 vi = ( vi1, vi2,…, viD ) ,粒子 i搜索解空间时 ,保存其搜索到的最优经历位置pi = ( pi1, pi2, …, piD ) 。在每次迭代开始时 ,粒子根据自身惯性和经验及群体最优经历位置 pg = ( pg1, pg2, …, pgD )来调整自己的速度向量以调整自身位置。
粒子群算法基本思想:
(1)初始化种群后 ,种群的大小记为 N。基于适应度支配的思想 ,将种群划分成两个子群 ,一个称为非支配子集 A,另一个称为支配子集 B ,两个子集的基数分别为 n1、n2 。
(2)外部精英集用来存放每代产生的非劣解子集 A,每次迭代过程只对 B 中的粒子进行速度和位置的更新 ;
(3)并对更新后的 B 中的粒子基于适应度支配思想与 A中的粒子进行比较 ,若 xi ∈B , ϖ xj ∈A,使得 xi 支配 xj,则删除 xj,使 xi 加入 A 更新外部精英集 且精英集的规模要利用一些技术维持在一个上限范围内 ,如密度评估技术、分散度技术等。
(4)最后 ,算法终止的准则可以是最大迭代次数 Tmax、计算精度ε或最优解的最大凝滞步数 Δt等。
用遗传算法工具箱求解一个多目标优化问题的步骤:
1、根据题意,建立自定义目标函数,ga_fun1(x)
2、在命令窗口中,输入
>>optimtool %调用遗传算法工具箱
3、在遗传算法工具箱界面中,分别对Fitness function框内输入@ga_fun1();A框内输入[1,1,1];b框内输入16;Aeq框内输入[];beq框内输入[];Lower框内输入[0,0,0];Upper框内输入[];
4、单击Start。得到x=4.508 y=2.513 z=1.912值。
用matlab求解题主的多目标优化问题,可以这样来考虑:
1、创建目标函数,其内容
w1 =0.4w2=1-w1
y =w1*0.78539*(x(1)^2-x(2)^2)+w2*x(1)^2
2、创建约束条件函数,其内容
c(1)=(9224400*x(1)/(x(1)^4-x(2)^4))-45
c(2)=(13050819/(x(1)^4-x(2)^4))-1
c(3)=216379-(x(1)^4-x(2)^4)/x(1)
c(4)=-x(1)+x(2)
ceq = []
3、初设x0的初值,即 x0 =[80,20]
4、设定上下限值,即lb=[0,0]ub=[170,100]
5、使用fmincon最小值最优化函数,求出x(1)、x(2)的值。即
[x,fval] = fmincon(@(x) fmincon_fun(x),x0,[],[],[],[],lb,ub,@(x) fmincon_con(x))
6、验证约束条件,即
disp('x2-x1<0')
disp(x(2)-x(1))
运行代码后得到如下结果。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)