多目标规划学习笔记

author:旭宝ww
DateTime:2020/7/2


一、引言

对于多于一个的目标函数在给定区域上的最优化问题称为多目标规划问题。在多目标规划中,各目标之间是相互冲突的,不一定存在所有目标上都是最优的解。因此多目标问题的解构成一个集合,他们之间不能简单地比较好坏,这样的解称为非支配解(有效解) 或者 Pareto最优解

注意:多目标规划不同于单目标规划,在数学建模的结果中不应当给出一个最优解,Pareto最优解应当是一组解,以供甲方选择。

二、模型实例

1 一般地,多目标规划的数学模型如下:

m i n F ( x ) = ( f 1 ( x ) , f 2 ( x ) , … , f m ( x ) ) s . t . x ∈ Ω \mathbf{min \quad F(x)=\left (f_1(x),f_2(x),…,f_m(x)\right) }\\ \mathbf{s.t.\quad x\in \Omega} minF(x)=(f1(x),f2(x),,fm(x))s.t.xΩ

其中 x = ( x 1 , x 2 , … , x n ) x=(x_1,x_2,…,x_n) x=(x1,x2,,xn)所在的空间 Ω \Omega Ω称为问题的决策空间(可行解空间),m维向量 F ( x ) F(x) F(x)所在的空间称为问题的目标空间

其中 Ω = { x ∈ R n ∣ g i ( x ) ≤ 0 , i = 1 , 2 , … , p } \Omega =\left \{x\in R^{n} |g_i(x)\le 0,i=1,2,…,p \right \} Ω={xRngi(x)0,i=1,2,,p}

2 相关概念

定义1:对最小化问题,一个向量 u = ( u 1 , u 2 , … , u m ) u=(u_1,u_2,…,u_m) u=(u1,u2,,um)支配另一个向量 v = ( v 1 , v 2 , … , v m ) v=(v_1,v_2,…,v_m) v=(v1,v2,,vm),当且仅当

{ u i ≤ v i , ∀ i ∈ { 1 , 2 , … , m } ∃ j ∈ { 1 , 2 , … , m } \begin{cases} u_i \le v_i,\forall i \in \left \{ 1,2,…,m \right \} \\ \exists j \in \left \{ 1,2,…,m \right \} \end{cases} {uivi,i{1,2,m}j{1,2,,m}

定义2:对于任意两个自变量向量 x 1 , x 2 ∈ Ω x_1,x_2\in \Omega x1,x2Ω,如果向量 ( f 1 ( x 1 ) , f 2 ( x 1 ) , … , f m ( x 1 ) ) (f_1(x_1),f_2(x_1),…,f_m(x_1)) (f1(x1),f2(x1),,fm(x1))支配向量 ( f 1 ( x 2 ) , f 2 ( x 2 ) , … , f m ( x 2 ) ) (f_1(x_2),f_2(x_2),…,f_m(x_2)) (f1(x2),f2(x2),,fm(x2)),则称 x 1 x_1 x1支配 x 2 x_2 x2

定义3:如果 Ω \Omega Ω中没有支配 x x x的解,则称 x x x是问题的一个Pareto最优解,Pareto最优解的集合称为Pareto最优解集,Pareto最优解集在目标空间的像集称为Pareto前沿(Pareto Front)

在这里插入图片描述
例如,此图的横坐标为 F 1 ( x ) F_1(x) F1(x),纵坐标为 F 2 ( x ) F_2(x) F2(x),红色的连线即为该问题的Pareto前沿,H和G两点的自变量 x x x都是此问题的解。

三、求解方法

多目标优化问题的算法大体分为传统的数学规划方法和智能优化方法。传统方法只能得到非支配解,故需要重点掌握智能优化方法的MATLAB实现。

3.1传统的数学规划方法

1.主要目标法:确定一个目标为主要目标,确定合适的界限值把次要目标作为约束条件。
{ m i n f 1 ( x ) s . t . f i ( x ) ≤ a i , i = 2 , 3 , … , m x ∈ Ω \begin{cases} min \quad f_1(x)\\ s.t. \quad f_i(x) \le a_i,i=2,3,…,m\\ \quad\quad x \in \Omega \end{cases} minf1(x)s.t.fi(x)ai,i=2,3,,mxΩ
其中界限值 a i ≥ min ⁡ x ∈ Ω f i ( x ) , i = 2 , 3 , … , m a_i\ge \min \limits_{x\in \Omega} f_i(x),i=2,3,…,m aixΩminfi(x),i=2,3,,m

2.分层序列法:先对m个目标的重要性排序。先求问题:
P ( 1 ) { m i n f 1 ( x ) s . t . x ∈ Ω P(1)\quad \begin{cases} min \quad f_1(x)\\ s.t.\quad x \in \Omega \end{cases} P(1){minf1(x)s.t.xΩ

的最优解 x ( 1 ) x^{(1)} x(1)和最优值 f 1 ∗ f_1^{*} f1
再求问题:
P ( 2 ) { m i n f 2 ( x ) s . t . x ∈ Ω 1 = Ω ⋂ { x ∣ f 1 ( x ) ≤ f 1 ∗ } P(2)\quad \begin{cases} min \quad f_2(x)\\ s.t.\quad x \in \Omega_1=\Omega \bigcap \left \{ x|f_1(x) \le f_1^* \right \} \end{cases} P(2){minf2(x)s.t.xΩ1=Ω{xf1(x)f1}
的最优解 x ( 2 ) x^{(2)} x(2)和最优值 f 2 ∗ f_2^{*} f2
如此进行下去,直到求出第 m m m个问题:
P ( m ) { m i n f m ( x ) s . t . x ∈ Ω m − 1 = Ω m − 2 ⋂ { x ∣ f m − 1 ( x ) ≤ f m − 1 ∗ } P(m)\quad \begin{cases} min \quad f_m(x)\\ s.t.\quad x \in \Omega_{m-1}=\Omega_{m-2} \bigcap \left \{ x|f_{m-1}(x) \le f_{m-1}^* \right \} \end{cases} P(m){minfm(x)s.t.xΩm1=Ωm2{xfm1(x)fm1}
的最优解 x ( m ) x^{(m)} x(m)和最优值 f m ∗ f_m^{*} fm

于是 x ∗ = x ( m ) x^*=x^{(m)} x=x(m)就是多目标规划问题的一个非支配解

3.加权法:对m个目标加以适当的权重,化作单目标规划
{ m i n ∑ i = 1 m ω i f i ( x ) s . t . x ∈ Ω \begin{cases} min \sum\limits_{i=1}^{m}\omega_if_i(x)\\ s.t.\quad x \in \Omega \end{cases} mini=1mωifi(x)s.t.xΩ

4.MATLAB求解单目标规划问题

[x,fval]=quadprog(H,f,A,b,Aeq,beq,lb,ub) %%求解二次规划 x T A x x^TAx xTAx
[x,fval]=fmincon(f,x0,A,b,Aeq,beq,lb,ub,nonlcon) %%求解约束下的多元函数最小值

3.2 智能优化算法(NSGA-Ⅱ)

能力有限,无法理解算法的原理,贴一位大佬的博客:
https://blog.csdn.net/qq_40434430/article/details/82876572

MATLAB中的内置函数gamultiobj()ga:遗传;multiobj:多目标 )是基于NSGA-Ⅱ改进的一种多目标遗传算法。

sfa

gamultiobj适用于求解以下形式的多目标问题:
{ m i n F ( x ) s . t . A X ≤ b A e q ∗ X = b e q l b ≤ X ≤ u b \begin{cases} min \quad F(x)\\ s.t.\quad AX\le b\\ \qquad Aeq*X=beq\\ \qquad lb\le X\le ub \end{cases} minF(x)s.t.AXbAeqX=beqlbXub

调用格式:

[X,FVAL]=gamultiobj( f, NVARS, A, b, Aeq, beq, lb, ub, nonlcon, options)
%X是Pareto解集
%FVAL是目标函数在Pareto解上的函数值
%f是需要计算的目标函数
%NVARS是变量的个数
%options是绘制Pareto前沿的函数gaoptimset的参数

实例:
{ m i n f 1 ( x ) = x 1 4 − 10 x 1 2 + x 1 x 2 + x 2 4 − x 1 2 x 2 2 m i n f 2 ( x ) = x 1 4 + x 1 x 2 + x 2 4 − x 1 2 x 2 2 s . t . − 5 ≤ x 1 , x 2 ≤ 5 \begin{cases} min\quad f_1(x)=x_1^4-10x_1^2+x_1x_2+x_2^4-x_1^2x_2^2\\ min\quad f_2(x)=x_1^4+x_1x_2+x_2^4-x_1^2x_2^2\\ s.t.\quad -5\le x_1,x_2\le 5 \end{cases} minf1(x)=x1410x12+x1x2+x24x12x22minf2(x)=x14+x1x2+x24x12x22s.t.5x1,x25

function y=Fun(x)
y(1)=x(1)^4-10*x(1)^2+x(1)*x(2)+x(2)^4-x(1)^2*x(2)^2;
y(2)=x(2)^4-x(1)^2*x(2)^2+x(1)^4+x(1)*x(2);
end

clear;clc;
fitnessfcn=@Fun	%%调用函数句柄
nvars=2; %%变量个数
lb=[-5,-5];
ub=[5,5];
A=[];b=[];
Aeq=[];beq=[];
options=gaoptimset('paretoFraction',0.3,'populationsize',100,'generations',200,'stallGenLimit',200,'TolFun',1e-10,'PlotFcns',@gaplotpareto);
%最优个体系数paretoFraction为0.3
%种群大小populationsize为100
%最大进化代数generations为200
%停止代数stallGenLimit为200
%适应度函数偏差TolFun为1e-10
%函数gaplotpareto:绘制Pareto前沿
[x,fval]=gamultiobj(fitnessfcn,nvars,A,b,Aeq,beq,lb,ub,options)

MATLAB运行结果如下:
在这里插入图片描述

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值