优化模型:matlab多目标规划

CSDN 2024-06-19 13:35:03 阅读 100

一、多目标规划

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,⋯,plb⩽x⩽ub​

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⋅γ⩽goalA⋅x⩽bAeq⋅x=beqc(x)⩽0ceq(x)=0lb⩽x⩽ub​

其中: 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​+x2​⩾30x3​+x4​⩾303x1​+2x3​⩽1203x2​+2x4​⩽48xi​⩾0,i=1,⋯,4​

MATLAB代码:

clc,clearA=[-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))

求解结果:

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

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

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



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。