本文介绍了多目标规划的基本概念、数学模型和 MATLAB 求解方法。
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
这篇文章距离上次更新已经过去了 855 天,其中的某些内容可能不再适用了,请谨慎阅读。
多目标规划
多目标规划是指在一定的约束条件下,求解多个目标函数的最优解。
数学模型
正负偏差变量
设 d 为决策变量的函数,d0 为目标值。
正负偏差变量 d+ = max{0, d - d0} 表示决策值超过目标值的部分;d- = max{0, d0 - d} 表示决策值低于目标值的部分。
因为决策值不可能既高于目标值,又低于目标值,所以恒有 d+ × d- = 0。
绝对约束和目标约束
- 绝对约束:线性规划直接给出的约束条件,一定要满足的约束
- 目标约束:由决策目标得出的约束条件,尽量满足的约束,允许存在一定的正负偏差
优先因子
为各个目标主观设定一个因子,表示各个目标的重要程度。优先因子越高的目标拥有越高的权重,将会被优先考虑。
多目标规划的目标函数
对于每个目标,有以下三种情况:
- 恰好达到:正负偏差都尽可能小,minz=f(d++d−)
- 不超过:正偏差尽可能小,minz=f(d+)
- 不少于:负偏差尽可能小,minz=f(d−)
最后将各个目标的目标函数根据优先因子进行加权求和,得到最终的目标函数。
如何使用 MATLAB 解决多目标规划问题
MATLAB 为我们提供了 fgoalattain 函数,可以直接求解多目标规划问题。
fgoalattain 函数的语法为:
1
| [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 为非线性约束。
输入的标准形式为:
x,γminγ such that ⎩⎨⎧F(x)−weight⋅γ≤goalc(x)≤0ceq(x)=0A⋅x≤bAeq⋅x=beqlb≤x≤ub. 例1
假设有以下双目标函数:
F(x)=[2+(x−3)25+x2/4] 设置目标 [3,6] 和权重 [1,1],并从 x0 = 1 开始求解目标达到问题。
1 2 3 4 5
| 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)
|
结果为:
1 2 3 4 5 6 7
| x = 2.0000
fval = 3.0000 6.0000
|
可以看到,目标函数达到了目标值。
例2
目标函数为:
F(x)=[2+∣∣x−p1∣∣25+∣∣x−p2∣∣2/4] 此处,p1=[2,3] 且p2=[4,1]。目标是 [3,6],权重是 [1,1],线性约束是x1+x2≤4 。
从 x0 = [1,1] 开始求解目标达到问题。
1 2 3 4 5 6 7 8 9 10 11
| 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)
|
结果为:
1 2 3 4 5 6
| x = 2.0694 1.9306
fval = 3.1484 6.1484
|