一、多目标规划

1.1 多目标规划的定义

  多目标规划(Multi-Objective Programming,MOP) 是数学优化中的一类问题。与单目标规划不同,多目标规划有多个目标函数需要优化,这些目标函数通常是相互矛盾的。多目标规划的目标是通过找到一组解,使得各个目标函数在约束条件下都能取得最优值。

1.2 多目标规划的数学模型

对于多个目标函数的情况,向量目标函数表示为
F ( x ) = ( f 1 ( x ) , f 2 ( x ) , ⋯   , f m ( x ) ) T F\left( \boldsymbol{x} \right) =\left( f_1\left( \boldsymbol{x} \right) ,f_2\left( \boldsymbol{x} \right) ,\cdots ,f_m\left( \boldsymbol{x} \right) \right) ^T F(x)=(f1(x),f2(x),,fm(x))T
带有多个约束条件和有界约束的多目标规划的一般形式为
min ⁡ F ( x ) \min F\left( \boldsymbol{x} \right) minF(x)
s . t . { g i ( x ) ⩽ 0 , i = 1 , ⋯   , q h j ( x ) = 0 , j = 1 , ⋯   , p l b ⩽ x ⩽ u b s.t.\left\{ \begin{array}{c} g_i\left( x \right) \leqslant 0, i=1,\cdots ,q\\ h_j\left( x \right) =0, j=1,\cdots ,p\\ lb\leqslant x\leqslant ub\\ \end{array} \right. s.t.gi(x)0,i=1,,qhj(x)=0,j=1,,plbxub

1.3 多目标规划的求解

求解多目标规划的方法通常有:化多目标为单目标、序贯法、NSGA—II等,本文主要介绍最普遍常用的一种方法——把多目标加权合成单目标。此时,多目标规划化成单目标规划的数学模型的形式如下:
min ⁡ x , γ    γ \underset{\boldsymbol{x},\gamma}{\min}\,\,\gamma x,γminγ

s . t . { F ( x ) − w e i g h t ⋅ γ ⩽ g o a l A ⋅ x ⩽ b A e q ⋅ x = b e q c ( x ) ⩽ 0 c e q ( x ) = 0 l b ⩽ x ⩽ u b s.t.\left\{ \begin{array}{c} F\left( \boldsymbol{x} \right) -\boldsymbol{weight}\cdot \gamma \leqslant \boldsymbol{goal}\\ A\cdot \boldsymbol{x}\leqslant b\\ Aeq\cdot \boldsymbol{x}=beq\\ c\left( \boldsymbol{x} \right) \leqslant 0\\ ceq\left( \boldsymbol{x} \right) =0\\ lb\leqslant \boldsymbol{x}\leqslant ub\\ \end{array} \right. s.t.F(x)weightγgoalAxbAeqx=beqc(x)0ceq(x)=0lbxub
其中: F ( x ) F(\boldsymbol{x}) F(x)为目标函数向量; w e i g h t \boldsymbol{weight} weight为各目标相对重要程度的权向量; g o a l \boldsymbol{goal} goal为各个单目标函数值构成的向量。
MATLAB中求解该模型的命令为

[x,fval]=fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlicon)

其中:nonlicon为定义的非线性约束函数。

二、案例分析

利用MALTAB求解如下多目标线性规划问题:
max ⁡ Z 1 = 100 x 1 + 90 x 2 + 80 x 3 + 70 x 4 \max Z_1=100x_1+90x_2+80x_3+70x_4 maxZ1=100x1+90x2+80x3+70x4
min ⁡ Z 2 = 3 x 2 + 2 x 4 \min Z_2=3x_2+2x_4 minZ2=3x2+2x4
s . t . { x 1 + x 2 ⩾ 30 x 3 + x 4 ⩾ 30 3 x 1 + 2 x 3 ⩽ 120 3 x 2 + 2 x 4 ⩽ 48 x i ⩾ 0 , i = 1 , ⋯   , 4 s.t.\left\{ \begin{array}{c} x_1+x_2\geqslant 30\\ x_3+x_4\geqslant 30\\ 3x_1+2x_3\leqslant 120\\ 3x_2+2x_4\leqslant 48\\ x_i\geqslant 0,i=1,\cdots ,4\\ \end{array} \right. s.t.x1+x230x3+x4303x1+2x31203x2+2x448xi0,i=1,,4
MATLAB代码:

clc,clear
A=[-1 -1 0 0
    0 0 -1 -1
    3 0 2 0
    0 3 0 2];
b=[-30 -30 120 48];
c1=[-100 -90 -80 -70];
c2=[0 3 0 2];
%求第一个目标函数值
[x1,g1]=linprog(c1,A,b,[],[],zeros(4,1))
disp("第一个目标函数的最优值:"+(-g1))
%求第二个目标函数值
[x2,g2]=linprog(c2,A,b,[],[],zeros(4,1))
disp("第一个目标函数的最优值:"+(g2))
g3=[g1;g2];%目标goal的值
fun=@(x) [c1;c2]*x;
weight=[1,1];%设置两个目标同样重要
[x,fval]=fgoalattain(fun,rand(4,1),g3,weight,A,b,[],[],zeros(4,1))

求解结果:

在约束条件下,只考虑第一个目标函数时,最优解如下:

优化模型:matlab多目标规划-LMLPHP
在约束条件下,只考虑第二个目标函数时,最优解如下:

优化模型:matlab多目标规划-LMLPHP
若考虑两个目标同样重要,则求得多目标规划的最优解和最优值分别为:
优化模型:matlab多目标规划-LMLPHP

01-04 22:52