数学建模part(3):目标规划

📌目标规划

目标规划(Goal Programming):考虑多个目标

求解思路:

  • 加权系数法:为每一目标赋予一个权系数(体现目标之间的重要程度),将多目标转化为单目标问题
  • 优先等级法:将各目标按其重要程度不同的有先等级,转化为单目标模型

目标规划无最优解的概念,只有满意解

数学概念:

  1. 正负偏差变量( f i     ( i = 1 , … , l ) f_i~~~(i=1,\dots,l) fi   (i=1,,l)为第i个目标函数, d i 0 d_i^0 di0 f i f_i fi的目标值)

    • 正偏差变量: d i + = m a x { f i − d i 0 , 0 } d_i^+=max\{f_i-d_i^0,0\} di+=max{fidi0,0}
      • 表示超过目标值的部分(未超过则 d i + = 0 d_i^+=0 di+=0
    • 负偏差变量: d i − = − m i n { f i − d i 0 , 0 } d_i^-=-min\{f_i-d_i^0,0\} di=min{fidi0,0}
      • 表示未达到目标值的部分(超过则 d i − = 0 d_i^-=0 di=0
    • d i + × d i − = 0 d_i^+\times d_i^-=0 di+×di=0 (不可能已超过又未达到)
  2. 绝对约束和目标约束

    • 绝对约束:必须严格满足的不等式和等式约束(不满足则无可行解(线性规划))硬约束
    • 目标约束:可以在约束中加入正负偏移差,在达到目标时允许偏移软约束
      • 这里的正负偏移就相当于松弛变量:将不等式化为等式
  3. 优先因子(优先等级)权系数

    • 优先因子: P 1 , P 2 … , P k ≫ P k + 1 , k = 1 , 2 … , q − 1 P_1,P_2\dots,P_k\gg P_{k+1},k=1,2\dots,q-1 P1,P2,PkPk+1,k=1,2,q1 表示 P k 比 P k + 1 P_k比P_{k+1} PkPk+1 有更大的优先权
      • 当两个目标有相同的优先因子时:可以用 w j w_j wj 权系数来区别
  4. 目标规划的目标函数:

    • 目标函数(准则函数):按目标约束的正负偏差变量和赋予的优先因子构造,要尽可能缩小偏离目标值,即偏差变量的加权和最小
      • i i i个目标要求恰好达到目标值: m i n    w i − d i − + w i + d i + min~~w_i^-d_i^-+w_i^+d_i^+ min  widi+wi+di+
      • i i i个目标不超过目标值: m i n    w i + d i + min~~w_i^+d_i^+ min  wi+di+ 正偏差变量尽可能小
      • i i i个目标超过目标值: m i n    w i − d i − min~~w_i^-d_i^- min  widi 负偏差变量尽可能小
  5. 目标规划的数学模型:

    x j , j = 1 , 2 , … n x_j,j=1,2,\dots n xj,j=1,2,n 为目标规划的决策变量

    设有 m m m个刚性约束, l l l个柔性约束(目标约束,偏差为 d i + , d i − ( i = 1 , 2 … , l ) d_i^+,d_i^-(i=1,2\dots,l) di+,di(i=1,2,l)

    q q q个优先级别 P 1 , P 2 , … , P q P_1,P_2,\dots,P_q P1,P2,,Pq ,同一优先级 P k P_k Pk有不同的权重 w k i + , w k i − , i = 1 , 2 , … , l w_{ki}^+,w_{ki}^-,i=1,2,\dots,l wki+,wki,i=1,2,,l
    m i n    z = ∑ k = 1 q P k ( ∑ i = 1 l w k i − d i − + w k i + d i + ) s . t . { ∑ j = 1 n a t j x j ≤ ( = , ≥ ) b t , t = 1 , 2 … , m ∑ j = 1 n c i j x j + d i − − d i + = d i 0 , i = 1 , 2 , … , l x j ≥ 0 , j = 1 , 2 , … , n d i − , d i + ≥ 0 , i = 1 , 2 , … , l min~~z=\sum_{k=1}^qP_k\left(\sum_{i=1}^lw_{ki}^-d_i^-+w_{ki}^+d_i^+\right)\\s.t. \left\{ \begin{aligned} & \sum_{j=1}^na_{tj}x_j\le(=,\ge)b_t,t=1,2\dots,m \\ & \sum_{j=1}^nc_{ij}x_j+d_i^--d_i^+=d_i^0,i=1,2,\dots,l\\ &x_j\ge0,j=1,2,\dots,n\\ &d_i^-,d_i^+\ge0,i=1,2,\dots,l \end{aligned} \right. min  z=k=1qPk(i=1lwkidi+wki+di+)s.t. j=1natjxj(=,)bt,t=1,2,mj=1ncijxj+didi+=di0,i=1,2,,lxj0,j=1,2,,ndi,di+0,i=1,2,,l
    建立目标规划模型时,要确定目标值,优先等级,权系数(层次分析法,专家评定法,…)

求解目标规划的序贯算法

m i n    z = ∑ k = 1 l ( w k i − d i − + w k i + d i + ) s . t . { ∑ j = 1 n a t j x j ≤ ( = , ≥ ) b t , t = 1 , 2 … , m ∑ j = 1 n c i j x j + d i − − d i + = d i 0 , i = 1 , 2 , … , l ∑ i = 1 l ( w s i − d i − + w s i + d i + ) ≤ z s ∗ , s = 1 , 2 , … , k − 1 x j ≥ 0 , j = 1 , 2 , … , n d i − , d i + ≥ 0 , i = 1 , 2 , … , l min~~z=\sum_{k=1}^l\left(w_{ki}^-d_i^-+w_{ki}^+d_i^+\right)\\s.t. \left\{ \begin{aligned} & \sum_{j=1}^na_{tj}x_j\le(=,\ge)b_t,t=1,2\dots,m \\ & \sum_{j=1}^nc_{ij}x_j+d_i^--d_i^+=d_i^0,i=1,2,\dots,l\\ &\sum_{i=1}^l(w_{si}^-d_i^-+w_{si}^+d_i^+)\le z_s^*,s=1,2,\dots,k-1\\ &x_j\ge0,j=1,2,\dots,n\\ &d_i^-,d_i^+\ge0,i=1,2,\dots,l \end{aligned} \right. min  z=k=1l(wkidi+wki+di+)s.t. j=1natjxj(=,)bt,t=1,2,mj=1ncijxj+didi+=di0,i=1,2,,li=1l(wsidi+wsi+di+)zs,s=1,2,,k1xj0,j=1,2,,ndi,di+0,i=1,2,,l
∑ i = 1 l ( w s i − d i − + w s i + d i + ) \sum_{i=1}^l(w_{si}^-d_i^-+w_{si}^+d_i^+) i=1l(wsidi+wsi+di+) 代表第s个目标(求和为同一优先因子的不同目标的正负偏差加权系数和) ≤ g o a l ( s ) \le goal(s) goal(s)

依据优先因子 P q P_q Pq,逐步求解将 z i ∗ , i = 1 , 2 … l z_i^*,i=1,2\dots l zii=1,2l 作为约束条件,直到 i = q i=q i=q 时, z q ∗ z_q^* zq 对应的解即为满意解

i=1时,只是空约束(目标函数和约束等价)无需再确定优先因子

LNGO求解时:

  • 每次求解出一个 g o a l goal goal 就将当前目标的正负偏差值作为下一目标求解的等式约束(刚性)
  • 直到最后一个目标求解出来的 x ∗ x^* x 才是满意解
model:
sets:
level/1..q/:p,z,goal;#q为优先因子的个数:即目标的个数
variable/1..j/:x;#决策变量个数j
h_con_num/1..m/b;#m刚性约束 ,b为刚性约束不等式右边向量
s_con_num/1..l/:g,dplus,dminus;#l为柔性约束个数,g为等式右边的向量,d+,d-为相应正负偏移量
h_matrix(h_con_num,variable):A#刚性约束矩阵m*j
s_matrix(s_con_num,variable):C#柔性约束矩阵l*j
obj(level,s_con_num)/k i,..,..,../:wplus,wmins#每一目标下的正负权重向量,...为Pk(..d(i1)-,..d(i2)+)即由k和括号内d的下标配对,相当于构造稀疏矩阵,只在其中的个别元素赋值
endsets
data:
ctr=?;#待键入
goal=??0#问号的个数=目标数-1
b=...;
g=...;
a=...;#a,c只是关于决策变量的系数矩阵
c=...;wplus=..;wminus=...;
enddata    
min=@sum(level:p*z);
@for(level(i)|i#ne#ctr:p(i)=0);
@for(level(i)|z(i)=@sum(obj(i,j):wplus(i,j)*dplus(j)+wminus(i,j)*dminus(j)));#构造目标
@for(h_con_num(i):@sum(variable(j):A(i,j)*x(j))<b(j))#刚性约束
@for(s_con_num(i):@sum(variable(j):C(i,j)*x(j))+dminus(i)-dplus(i))=g(i)); #目标约束   
@for(level(i)|i#lt#@size(level):@bnd(0,z(i),goal(i)));
end     
  • 上述为大致的通用程序:可根据约束条件的不同修改
  • 也可以直接设置P避免序贯算法( P k P_k Pk 可以按数量级递减)

matlab 求解多目标规划

  • 先求解各目标下的最优值
  • 根据最优值求解多目标的满意解

多目标规划模型(matlab):
m i n          x , y   γ 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 \mathop{min}\limits_{~~~~~~~~x,y}~\gamma\\s.t. \left\{ \begin{aligned} &F(x)-weight \cdot \gamma\le goal\\ &A\cdot x\le b\\ &Aeq\cdot x=beq\\ &c(x)\le0\\ &ceq(x)\le0\\ &lb\le x\le ub \end{aligned} \right.         x,ymin γs.t. F(x)weightγgoalAxbAeqx=beqc(x)0ceq(x)0lbxub
x , w e i g h t , g o a l x,weight,goal x,weight,goal 为向量, F ( x ) F(x) F(x)为向量函数,其中 g o a l goal goal为各个目标组成的向量(其余符号与前述的一致)

matlab函数fgoalattain:

[x,fval]=fgoalattain('fun',x0,goal,weight)
[x,fval]=fgoalattain('fun',x0,goal,weight,A,b)
[x,fval]=fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)
[x,fval]=fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
  • ‘fun’ 为目标向量函数 F ( x ) F(x) F(x)
  • nonlcon 为非线性约束函数
  • x0 为初始点
  • weight :权重(可以设置为各个目标值的绝对值)
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值