✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。
🍎个人主页:小嗷犬的个人主页
🍊个人网站:小嗷犬的技术小站
🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。
多目标规划
多目标规划是指在一定的约束条件下,求解多个目标函数的最优解。
数学模型
正负偏差变量
设 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)=0A⋅x≤bAeq⋅x=beqlb≤x≤ub.
例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+(x−3)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+∣∣x−p1∣∣25+∣∣x−p2∣∣2/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+x2≤4 。
从 x0 = [1,1] 开始求解目标达到问题。文章来源:https://www.toymoban.com/news/detail-442715.html
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模板网!