MATLAB 多目标规划

这篇具有很好参考价值的文章主要介绍了MATLAB 多目标规划。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MATLAB 多目标规划

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。
🍎个人主页:小嗷犬的个人主页
🍊个人网站:小嗷犬的技术小站
🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。



多目标规划

多目标规划是指在一定的约束条件下,求解多个目标函数的最优解。


数学模型

正负偏差变量

设 d 为决策变量的函数,d0 为目标值。

正负偏差变量 d+ = max{0, d - d0} 表示决策值超过目标值的部分;d- = max{0, d0 - d} 表示决策值低于目标值的部分。

因为决策值不可能既高于目标值,又低于目标值,所以恒有 d+ × d- = 0。

绝对约束和目标约束

  • 绝对约束:线性规划直接给出的约束条件,一定要满足的约束
  • 目标约束:由决策目标得出的约束条件,尽量满足的约束,允许存在一定的正负偏差

优先因子

为各个目标主观设定一个因子,表示各个目标的重要程度。优先因子越高的目标拥有越高的权重,将会被优先考虑。

多目标规划的目标函数

对于每个目标,有以下三种情况:

  • 恰好达到:正负偏差都尽可能小, m i n z = f ( d + + d − ) min \quad z=f(d^+ + d^-) minz=f(d++d)
  • 不超过:正偏差尽可能小, m i n z = f ( d + ) min \quad z=f(d^+) minz=f(d+)
  • 不少于:负偏差尽可能小, m i n z = f ( d − ) min \quad z=f(d^-) minz=f(d)

最后将各个目标的目标函数根据优先因子进行加权求和,得到最终的目标函数。


如何使用 MATLAB 解决多目标规划问题

MATLAB 为我们提供了 fgoalattain 函数,可以直接求解多目标规划问题。

fgoalattain 函数的语法为:

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

其中,fun 为目标函数,x0 为初始值,goal 为目标值,weight 为优先因子,A 为线性不等式约束系数,b 为线性不等式约束的右端项,Aeq 为线性等式约束系数,beq 为线性等式约束的右端项,lb 为变量的下界,ub 为变量的上界,nonlcon 为非线性约束。

输入的标准形式为:

min ⁡ x , γ γ  such that  { F ( x ) − w e i g h t ⋅ γ ≤ g o a l c ( x ) ≤ 0 c e q ( x ) = 0 A ⋅ x ≤ b A e q ⋅ x = b e q l b ≤ x ≤ u b . \min _{x,\gamma} \gamma \text { such that } \begin{cases} & F(x) - weight \cdot \gamma \leq goal \\ & c(x) \leq 0 \\ & ceq(x)=0 \\ & A \cdot x \leq b \\ & { Aeq } \cdot x={ beq } \\ & l b \leq x \leq u b. \end{cases} x,γminγ such that  F(x)weightγgoalc(x)0ceq(x)=0AxbAeqx=beqlbxub.

例1

假设有以下双目标函数:

F ( x ) = [ 2 + ( x − 3 ) 2 5 + x 2 / 4 ] \begin{aligned} F(x) = \begin{bmatrix} 2 + (x-3)^2 \\ 5 + x^2/4 \end{bmatrix} \end{aligned} F(x)=[2+(x3)25+x2/4]

设置目标 [3,6] 和权重 [1,1],并从 x0 = 1 开始求解目标达到问题。

fun = @(x)[2+(x-3)^2;5+x^2/4];
goal = [3,6];
weight = [1,1];
x0 = 1;
[x,fval] = fgoalattain(fun,x0,goal,weight)

结果为:

x =
    2.0000


fval =
    3.0000
    6.0000

可以看到,目标函数达到了目标值。

例2

目标函数为:

F ( x ) = [ 2 + ∣ ∣ x − p 1 ∣ ∣ 2 5 + ∣ ∣ x − p 2 ∣ ∣ 2 / 4 ] \begin{aligned} F(x) = \begin{bmatrix} 2 + ||x-p_1||^2 \\ 5 + ||x-p_2||^2/4 \end{bmatrix} \end{aligned} F(x)=[2+∣∣xp125+∣∣xp22/4]

此处, p 1 = [ 2 , 3 ] p_1 = [2,3] p1=[2,3] p 2 = [ 4 , 1 ] p_2 = [4,1] p2=[4,1]。目标是 [3,6],权重是 [1,1],线性约束是 x 1 + x 2 ≤ 4 x_1+x_2 \leq 4 x1+x24

从 x0 = [1,1] 开始求解目标达到问题。

p_1 = [2,3];
p_2 = [4,1];
fun = @(x)[2 + norm(x-p_1)^2;5 + norm(x-p_2)^2/4];
goal = [3,6];
weight = [1,1];

A = [1,1];
b = 4;

x0 = [1,1];
[x,fval] = fgoalattain(fun,x0,goal,weight,A,b)

结果为:文章来源地址https://www.toymoban.com/news/detail-442715.html

x =
    2.0694    1.9306

fval =
    3.1484
    6.1484

到了这里,关于MATLAB 多目标规划的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包