基于遗传算法的多目标优化算法

一、概述

1、引言

  优化目标可以理解为目标函数,在多目标优化问题中优化目标个数在2个及以上。因此,多目标优化问题和单目标优化相比,最大的区别在于多目标优化问题是一个向量优化(目标函数向量)的问题。而向量之间仅仅存在偏序关系,难以直接比较向量之间的大小,这就导致该类优化问题的性质非常不好。现实问题中,多个优化目标之间或多或少都会存在矛盾
  如果我们想要选购一款性价比高的手机,自然就要在价格和性能这两个优化目标之间进行权衡。选取手机内存(64g、128g、256g)、尺寸(普通、pro、promax)作为该问题的决策变量,不同的决策变量值就可以构成许多个决策向量=[内存,尺寸],这些决策向量构成决策空间。显而易见的是,内存越大-价格越高-性能越好尺寸越高-性能越好-价格越贵。因此,我们无法找到一个确切的解作为该优化问题的最终解,只能获得可行域范围内的解集供用户挑选(易看出,此处的解就是一个决策向量)。

2、多目标优化数学模型

  决策变量、目标函数、约束条件是多目标优化问题的三要素。标准的多目标优化问题的数学模型描述如下:
min ⁡ [ f 1 ( x ) , f 2 ( x ) , ⋅ ⋅ ⋅ , f n ( x ) ] s . t . { l b ≤ x ≤ u b g i ( x ) ≤ 0 h j ( x ) = 0 (1.1) \min [f_1(x),f_2(x),···,f_n(x)] \\ s.t. \begin{cases} lb \leq x \leq ub \tag{1.1}\\ g_i(x) \leq 0 \\ h_j(x) = 0 \\\end{cases} min[f1(x),f2(x),⋅⋅⋅,fn(x)]s.t. lbxubgi(x)0hj(x)=0(1.1)
符号解释:

  • f i ( x ) f_i(x) fi(x)为待优化的目标函数
  • x x x为待优化的变量
  • l b 和 u b lb 和ub lbub为变量 x x x的上界和下界
  • g i ( x ) g_i(x) gi(x)为变量 x x x的不等式约束
  • h j ( x ) h_j(x) hj(x)为变量 x x x的等式约束

  在下图所示的优化问题中,目标函数 f 1 f_1 f1 f 2 f_2 f2是相互矛盾的。因为因为 A 1 < B 1 A_1 < B_1 A1<B1 A 2 > B 2 A_2 > B_2 A2>B2,也就是说,某一个目标函数的提高需要以另一个目标函数的降低作为代价,称这样的解A和解B是非劣解(noninferiority solutions),或者说是Pareto最优解(Pareto optima)。多目标优化算法的目的就是要寻找这些Pareto最优解。
在这里插入图片描述

二、基本概念

2.1 支配(dominate)与非劣(non- inferior)

  在多目标优化问题中,如果个体 p p p至少有一个目标比个体 q q q的好,而且个体 p p p的所有目标都不比个体 q q q的差,那么称个体 p p p支配个体 q q q( p p p dominates q q q),或者称个体 q q q受个体 p p p支配( p p p is dominated by q q q) ,也可以说,个体 p p p非于个体 q q q( p p p is non- inferior to q q q)。

2.2 序值(rank)和前端(front)

  如果 p p p支配 q q q,那么 p p p的序值比 q q q的低。如果 p p p q q q互不支配,或者说, p p p q q q相互非劣,那么 p p p q q q有相同的序值。序值为1的个体属于第一前端,序值为2的个体属于第二前端,依次类推。显然,在当前种群中,第一前端是完全不受支配的,第二前端受第一前端中个体的支配。这样,通过排序,可以将种群中的个体分到不同的前端。

2.3 拥挤距离(crowding distance)

  拥挤距离用来计算某前端中的某个体与该前端中其他个体之间的距离,用以表征个体间的拥挤程度。显然,拥挤距离的值越大,个体间就越不拥挤,种群的多样性就越好。需要指出的是,只有处于同一前端的个体间才需要计算拥挤距离,不同前端之间的个体计算拥挤距离是没有意义的。

2.4 最优前端个体系数(ParetoFraction)

  最优前端个体系数定义为最优前端中的个体在种群中所占的比例,即最优前端个体数= min ⁡ ( P a r e t o F r a c t i o n × 种群大小,前端中现存的个体数目 ) \min(ParetoFraction \times 种群大小,前端中现存的个体数目) min(ParetoFraction×种群大小,前端中现存的个体数目),其取值范围为0~1。需要指出的是,ParetoFraction的概念是函数gamultiobj所特有的,在NSGA-II中是没有的,这也是为什么称函数gamultiobj(MATLAB自带的基于遗传算法的多目标优化算法,是基于NSGA -II改进的一种多目标优化算法,也是本文下面求解问题所用的算法)是一种多目标优化算法的原因。

三、MATLAB实现

3.1 问题描述

  待优化的多目标问题表述如下:
min ⁡ f 1 ( x 1 , x 2 ) = x 1 4 − 10 x 1 2 + x 1 x 2 + x 2 4 + x 1 2 x 2 2 min ⁡ f 2 ( x 1 , x 2 ) = x 2 4 − x 1 2 x 2 2 + x 1 4 + x 1 x 2 s . t . { − 5 ≤ x 1 ≤ 5 − 5 ≤ x 2 ≤ 5 (3.1) \begin{aligned} \min f_1(x_1,x_2) =& x_1^4 - 10x_1^2 + x_1x_2 +x_2^4 + x_1^2x_2^2 \tag{3.1} \\ \min f_2(x_1,x_2) =& x_2^4 - x_1^2x_2^2 +x_1^4 + x_1x_2 \\ s.t. \begin{cases} -5 \leq x_1 \leq 5 \\ -5 \leq x_2 \leq 5 \\ \end{cases} \end{aligned} minf1(x1,x2)=minf2(x1,x2)=s.t.{5x155x25x1410x12+x1x2+x24+x12x22x24x12x22+x14+x1x2(3.1)

3.2 gamultiobj函数介绍

  gamultiobj函数在:MATLAB安装目录\toolbox\globaloptim中。其使用方法如下:
[ x , f v a l ] = g a m u l t i o b j ( f u n , n v a r s , A , b , A e q , b e q , l b , u b , n o n l c o n , i n t c o n , o p t i o n s ) [x,fval] = gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,intcon,options) [x,fval]=gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,intcon,options)
符号解释:

  • x x x:返回找到一个局部Pareto集合 x x x
  • f v a l fval fval:返回 x x x中所有解定义的所有适应度函数的值。 f v a l fval fval有nf列,其中nf是目标的数量,与 x x x具有相同的行数。
  • f u n fun fun:目标函数
    例如:
function f = my_first_multi(x)
 %目标函数
f(1) = x(1)^4 - 10*x(1)^2+x(1)*x(2) + x(2)^4 - (x(1)^2)*(x(2)^2);
f(2) = x(2)^4 - (x(1)^2)*(x(2)^2) + x(1)^4 + x(1)*x(2);
fitnessfcn = @my_first_multi;   % 适应度函数的函数句柄
  • n v a r s nvars nvars:变量 x x x的个数
  • A , b A,b A,b x x x的线性不等式约束, A ∗ x ≤ b A*x \leq b Axb,没有就用[]
    例如:A = [1,2;3,4;5,6] and b = [10;20;30] 代表
    x 1 + 2 x 2 ≤ 10 x_1+ 2x_2 ≤ 10 x1+2x210
    3 x 1 + 4 x 2 ≤ 20 3x_1 + 4x_2 ≤ 20 3x1+4x220
    5 x 1 + 6 x 2 ≤ 30 5x_1 + 6x_2 ≤ 30 5x1+6x230
  • A e q , b e q Aeq,beq Aeq,beq x x x的线性等式约束, A e q ∗ x = b e q Aeq*x = beq Aeqx=beq,没有就用[]
    例如:
    Aeq = [1,2,3;2,4,1] and beq = [10;20]代表
    x 1 + 2 x 2 + 3 x 3 = 10 x_1 + 2x_2 + 3x_3 = 10 x1+2x2+3x3=10
    2 x 1 + 4 x 2 + x 3 = 20 2x_1 + 4x_2 + x_3 = 20 2x1+4x2+x3=20
  • l b , u b lb,ub lb,ub x x x的上下界, l b ≤ x ≤ u b lb \leq x \leq ub lbxub,没有就用[]
  • n o n l c o n nonlcon nonlcon x x x的非线性约束,函数 n o n l c o n nonlcon nonlcon接受 x x x并返回向量 c c c c e q ceq ceq,分别表示非线性不等式和等式。使c(x)≤0和ceq(x) = 0。
    例如:
    x 1 2 − x 2 ≤ 0 x_1^2-x_2 \leq 0 x12x20
    x 1 2 + 2 x 1 x 2 − 5 ≤ 0 x_1^2+2x_1x_2-5 \leq 0 x12+2x1x250
    x 1 − x 2 2 = 0 x_1 - x_2^2 =0 x1x22=0
    代码如下:
function [c,ceq] = nonlcon(x)
c(1) = x(1)^2-x2;
c(2) = x(1)^2+2*x1*x2-5;
ceq = x(1)-x(2)^2;
end
  • i n t c o n intcon intcon x x x的整数约束,要求 i n t c o n intcon intcon中列出的变量取整数值。当 i n t c o n intcon intcon为非空时,对于 n o n l c o n nonlcon nonlcon,ceq必须返回空值。
  • o p t i o n s options options:设置优化参数

这里只是做简单介绍,详细介绍参考MATLABA官方

3.3 代码实现

  (1)使用函数gamultiobj求解多目标优化问题的第一步是编写目标函数的M文件。对
于以上问题,函数名为my_first_multi,目标函数代码如下:

function f = my_first_multi(x)
 %目标函数
f(1) = x(1)^4 - 10*x(1)^2+x(1)*x(2) + x(2)^4 - (x(1)^2)*(x(2)^2);
f(2) = x(2)^4 - (x(1)^2)*(x(2)^2) + x(1)^4 + x(1)*x(2);

  (2)使用命令行方式调用gamultiobj函数,代码如下:

clear
clc
fitnessfcn = @my_first_multi;   % Function handle to the fitness function
nvars = 2;                      % Number of decision variables
lb = [-5,-5];                   % Lower bound
ub = [5,5];                     % Upper bound
A = []; b = [];                 % No linear inequality constraints
Aeq = []; beq = [];             % No linear equality constraints
options = gaoptimset('ParetoFraction',0.3,'PopulationSize',100,'Generations',200,'StallGenLimit',200,'TolFun',1e-100,'PlotFcns',@gaplotpareto);

[x,fval] = gamultiobj(fitnessfcn,nvars, A,b,Aeq,beq,lb,ub,options);

  其中,fitnessfcn即(1)中定义的目标函数M文件,设置的最优前端个体系数ParetoFrac-tion为0.3,种群大小PopulationSize为100,最大进化代数Generations为200,停止代数StallGenLimit 也为200,适应度函数值偏差TolFun为 e − 100 e^{-100} e100,绘制Pareto前端。

3.4 结果分析

  可以看到,在基于遗传算法的多目标优化算法的运行过程中,自动绘制了第一前端中个体的分布情况,且分布随着算法进化一代而更新一次。当选代停止后,得到如下图所示的第一前端个体分布图。同时,Worksapce中返回了函数gamultiobj得到的Pareto解集x及与x对应的目标函数值,如下表所列。需要说明的是,由于算法的初始种群是随机产生的,因此每次运行的结果不一样。
在这里插入图片描述

序号 x 1 x_1 x1 x 2 x_2 x2 f 1 f_1 f1 f 2 f_2 f2
1-0.7071063310.707073-5.24999-0.25
20.832482315-0.83055-7.14362-0.21335
3-0.7071063310.707073-5.24999-0.25
42.671846723-1.97666-38.333433.05425
51.796546904-1.46041-26.81725.458635
62.409171646-1.8517-36.958921.08214
72.368949823-1.72953-36.561819.55743
81.702078369-1.53457-24.46644.504309
90.989973221-0.73077-9.80161-0.00114
102.220327613-1.5795-34.577114.72148
112.340450713-1.83376-36.175818.6013
121.643693127-1.48438-23.25593.76141
132.096188757-1.6257-32.668511.27152
141.078856237-0.8303-11.50750.131821
152.173833905-1.67333-33.953713.30179
162.638950538-1.96228-38.309631.33104
172.012820536-1.63771-31.06949.44507
181.609579116-1.07152-22.57653.330951
192.053805095-1.35124-31.531810.64938
201.319236996-1.3451-16.02481.37911
212.259777888-1.46052-34.631916.4341
221.889380772-1.56903-28.64647.051187
231.813599357-1.40256-27.21725.674235
241.744700635-1.37822-25.75254.687286
252.539551817-1.95918-37.896726.59656
261.961798584-1.5357-30.20188.284762
271.42453827-1.09142-18.72811.564972
282.460348783-1.78242-37.41423.11921
292.601732392-1.95616-38.219529.47064
301.200014386-1.02306-13.96610.434279

  从上图可以看到,第一前端的Pareto最优解分布均匀。从上表可以看到,返回的Pareto最优解个数为30个,而种群大小为100,可见,ParetoFraction为0.3的设置发挥了作用。另外,个体被限制在了[-5,5]的上下限范围内。

  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
ADS信号完整性仿真与实战是一本关于信号完整性仿真与实战应用方面的参考指南。信号完整性是电子系统设计中的重要问题,它关注的是信号在传输过程中的稳定性、失真、干扰等问题。本书主要介绍了利用ADS软件进行信号完整性仿真的方法和实战案例。 该书首先介绍了信号完整性仿真的基本概念和背景知识,包括信号完整性的定义、分类和重要性。接着详细介绍了ADS软件的基本操作和仿真功能,包括创建信号完整性仿真模型、输入输出端口设置、仿真参数调整等。 然后,本书通过多个实战案例,展示了如何利用ADS软件进行信号完整性仿真。这些实战案例涵盖了常见的信号完整性问题,例如信号损耗、串扰、反射等,在仿真过程中通过改变电路参数、改变电路拓扑结构等手段,进行信号完整性优化,并对仿真结果进行分析和评估。 除了基本的仿真技术和实战案例,本书还介绍了一些高级的信号完整性仿真技术,例如布线仿真、电磁仿真等,以及针对高速信号传输系统的仿真方法和工具。 总的来说,《ADS信号完整性仿真与实战》是一本系统介绍了利用ADS软件进行信号完整性仿真的参考书。它既涵盖了基础知识和基本操作,又包含了实战案例和高级技术。对于电子系统工程师和研究人员来说,它是一本非常实用的学习和工作指南。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱听雨的犬猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值