问题描述
在求解线性规划问题中碰到绝对值的情况:
m
i
n
z
=
∣
x
1
∣
+
2
∣
x
2
∣
+
3
∣
x
3
∣
+
4
∣
x
4
∣
,
min z=|x_1|+2|x_2|+3|x_3|+4|x_4|,
minz=∣x1∣+2∣x2∣+3∣x3∣+4∣x4∣,
s
.
t
.
{
x
1
−
x
2
−
x
3
+
x
4
=
0
,
x
1
−
x
2
+
x
3
−
3
x
4
=
1
,
x
1
−
x
2
−
2
x
3
+
3
x
4
=
−
1
2
,
s.t. \left\{ \begin{aligned} &x_1-x_2-x_3+x_4 & = & 0,\\ &x_1-x_2+x_3-3x_4 & = & 1,\\ &x_1-x_2-2x_3+3x_4 & = & -\frac{1}{2}, \end{aligned} \right.
s.t.⎩
⎨
⎧x1−x2−x3+x4x1−x2+x3−3x4x1−x2−2x3+3x4===0,1,−21,
原因分析:
我们想用matlab的linprog函数进行求解,需要将其转化成为matlab中线性规划的标准形式
但是,对于绝对值的出现,导致我们无法轻易进行转换。
解决方案:
由于绝对值阻碍了我们的转换,因此解决问题的主要思路便是去绝对值,再转换成标准形式后进行求解。
绝对值转换
目标:去除绝对值,且使得相应的变量的范围全部大于0;
要点:
∀
x
i
∈
R
;
u
i
,
v
i
≥
0
\forall x_i \in R \ ;\ u_i,v_i \geq 0
∀xi∈R ; ui,vi≥0 满足以下条件
x i = u i − v i , ∣ x i ∣ = u i + v i x_i=u_i - v_i , \left\lvert {x_i} \right\rvert=u_i + v_i xi=ui−vi,∣xi∣=ui+vi
对于分解的过程,取 u i = x i + ∣ x i ∣ 2 , v i = ∣ x i ∣ − x i 2 u_i=\frac{x_i+\left\lvert {x_i} \right\rvert}{2},v_i=\frac{\left\lvert {x_i} \right\rvert - x_i}{2} ui=2xi+∣xi∣,vi=2∣xi∣−xi
因此,上述目标函数在去除绝对值之后为:
m
i
n
z
=
u
1
+
v
1
+
2
(
u
2
+
v
2
)
+
3
(
u
3
+
v
3
)
+
4
(
u
4
+
v
4
)
,
min z=u_1 + v_1+2(u_2+ v_2)+3(u_3 + v_3)+4(u_4 + v_4),
minz=u1+v1+2(u2+v2)+3(u3+v3)+4(u4+v4),
s
.
t
.
{
(
u
1
−
v
1
)
−
(
u
2
−
v
2
)
−
(
u
3
−
v
3
)
+
(
u
4
−
v
4
)
=
0
,
(
u
1
−
v
1
)
−
(
u
2
−
v
2
)
+
(
u
3
−
v
3
)
−
3
(
u
4
−
v
4
)
=
1
,
(
u
1
−
v
1
)
−
(
u
2
−
v
2
)
−
2
(
u
3
−
v
3
)
+
3
(
u
4
−
v
4
)
=
−
1
2
,
s.t. \left\{ \begin{aligned} &(u_1 - v_1) -(u_2 - v_2)-(u_3 - v_3)+(u_4 - v_4)& = & 0,\\ &(u_1- v_1 )-(u_2 - v_2)+(u_3 - v_3)-3(u_4 - v_4)& = & 1,\\ &(u_1 - v_1) -(u_2 - v_2)-2(u_3 - v_3)+3(u_4 - v_4) & = & -\frac{1}{2}, \end{aligned} \right.
s.t.⎩
⎨
⎧(u1−v1)−(u2−v2)−(u3−v3)+(u4−v4)(u1−v1)−(u2−v2)+(u3−v3)−3(u4−v4)(u1−v1)−(u2−v2)−2(u3−v3)+3(u4−v4)===0,1,−21,
成功去除绝对值,后续根据matlab中线性规划的标准形式 分别求解出
f
T
,
A
,
B
,
A
e
q
,
B
e
q
,
l
b
,
u
b
f^T,A,B,Aeq,Beq,lb,ub
fT,A,B,Aeq,Beq,lb,ub
本题的matlab代码如下:文章来源:https://www.toymoban.com/news/detail-406948.html
clc,clear
c=1:4;
c=[c,c]';
aeq=[1 -1 -1 1; 1 -1 1 -3; 1 -1 -2 3;];
beq=[0 1 -1/2];
aeq=[aeq,-aeq];
[uv,val]=linprog(c,[],[],aeq,beq,zeros(8,1));
x=uv(1:4)-uv(5:end)
最终求得最优结果为:
x
1
=
0.25
;
x
2
=
0
;
x
3
=
0
;
x
4
=
−
0.25
;
v
a
l
=
1.25
x_1 =0.25 ;x_2= 0; x_3 =0 ; x_4 = -0.25; val = 1.25
x1=0.25;x2=0;x3=0;x4=−0.25;val=1.25文章来源地址https://www.toymoban.com/news/detail-406948.html
到了这里,关于【MATLAB】线性规划问题中的绝对值问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!