数模学习日记——多目标规划

1.例题

某工厂生产产品Ⅰ和产品Ⅱ,有关数据如下,若只追求最大化利润,得到模型:

现有三个目标    1.尽量使产品Ⅰ的产量不超过产品Ⅱ的产量;

                          2.尽可能充分利用所有设备;

                          3.尽可能使利润不少于56万

拥有量
原材料/kg2111
设备生产能力/h1210
利润/(万元/件)810

引入三个概念:正负偏差变量,绝对约束和目标约束,优先因子


2.建模步骤

①衡量每个目标的完成情况:正负偏差变量

  • f_{i}(i=1,...,l)为第i个目标函数
  • 正偏差变量d_{i}^{+}=max\begin{Bmatrix} f_{i}-d_{i}^{0} , 0 \end{Bmatrix}表示实际值超过目标值那部分,负偏差变量d_{i}^{-}=-min\begin{Bmatrix} f_{i}-d_{i}^{0} , 0 \end{Bmatrix}表示实际值未达到目标值那部分,这里的d_{i}^{0}表示f_{i}的目标值。
  • 例如本题,目标三:尽可能使利润不少于56万,那么d_{3}^0=56
目标函数实际值f_{3}目标值d_{3}^{0}正偏差变量d_{3}^{+}负偏差变量d_{3}^{-}意义
假设利润50万不少于56万06离目标差6万
假设利润60万40超出目标4万

②绝对约束和目标约束

  • 绝对约束是模型中自带的约束条件,必须满足,否则是不可行解
  • 例如2x_{1}+x_{2}\leqslant 11,使用材料的数量不能超过总共数量

③目标函数是模型中对不等式右端追求的值允许有偏差

  • 目标三:尽可能使利润不少于56万,也就是z=8x_{1}+10x_{2}\geqslant 56,但允许有偏差
  • 这个“偏差”就是加入正负偏差变量,变成:8x_{1}+10x_{2}+d_{i}^{-}-d_{i}^{+}=56

④优先因子(一般需要查阅相关文献确定优先因子)

  • 这三个条件哪个重要?需要从主观上确定优先因子P_{k}
  • 例如:我认为目标三最重要,给他优先因子是10;目标二重要,给他优先因子5;目标1第三重要,给他优先因子1.那么三个目标重要性之比是10:5:1。
目标意义目标函数
1.不超过目标值正偏差变量d_{1}^{+}越小越好minP_{1}d_{1}^+
2.恰好达到目标值正负偏差都尽量小minP_{2}(d_{2}^{-}+d_{2}^{+})
3.不少于目标值负偏差变量d_{3}^{-}越小越好minP_{3}d_{3}^{-}

3.题目解决:

需要衡量每个目标的完成情况,并主观上区分三个目标的重要性,使得整体的完成情况尽量好。

  • 把所有的目标约束都加上d_{i}^--d_{i}^{+}变成等式
  • 根据需要,主观确定优先因子P_{k}

多目标规划方程:

min P_{1}d_{1}^{+}+P_{2}(d_{2}^{+}+d_{2}^{-}+P_{3}d_{3}^{-})

\left\{\begin{matrix} 2x_{1}+x_{2}\leqslant 11\\ x_{1}-x_{2}+d_{1}^{-}-d_{1}^{+}=0\\ x_{1}+2x_{2}+d_{2}^{-}-d_{2}^{+}=10\\8x_{1}+10x_{2}+d_{3}^{-}-d_{3}^{+}=56\\ x_{1},x_{2},d_{i}^{-},d_{i}^{+} \geqslant 0,i=1,2,3\end{matrix}\right.


4.典型赛题

题目中提到:使xxx最少/多/利润最大,同时“尽量”xxxx(2021年Mathorcup的c题)


5.解决方法:

①fgoalattain函数

fgoalattain()函数的用法:
x = fgoalattain(fun,x0,goal,weight)
x = fgoalattain(fun,x0,goal,weight,A,b)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq)
x=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)
x=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
x=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)
x = fgoalattain(problem)
[x,fval] = fgoalattain(......)
[x,fval,attainfactor,exitflag,output] = fgoalattain(......)
[x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(......)
其中fun 是用 M 文件定义的目标向量函数,x0 是初值,weight   是权重。
 A,b 定义不等式约束A*x ≤ b ,Aeq,beq定义等式约束 Aeq*x=Beq ,
nonlcon是用 M 文件定义的非线性约束c(x) ≤0,ceq(x)=0 。返回值 fval是目标向量函数的值。 
要完整掌握其用法,请用 help   fgoalattain 或 type   fgoalattain 查询相关的帮助。

详细用法:matlab可以解多目标非线性整数规划问题吗? - 知乎

②序贯算法

③Lingo求解:lingo规划问题的求解_lingo动态规划求解-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值