線性規(guī)劃
線性規(guī)劃:約束條件和目標(biāo)函數(shù)都是線性的。簡(jiǎn)單點(diǎn)說,所有的決策變量在目標(biāo)函數(shù)和約束條件中都是一次方。
Matlab函數(shù)
Matlab函數(shù):
[x, value] = linprog(func, A, b, Aeq, beq ,lb, ub);
參數(shù)解釋:
- func 表示目標(biāo)函數(shù)。
- A 表示不等式約束條件系數(shù)矩陣,b 表示不等式約束條件常數(shù)矩陣。
- Aeq 表示等式約束條件系數(shù)矩陣,beq 表示等式約束條件常數(shù)矩陣。
- lb 表示決策變量的下限數(shù)組,ub表示決策變量的上限數(shù)組。
- x 表示目標(biāo)函數(shù) func 取得最小值時(shí)的決策變量取值數(shù)組。
- value 表示目標(biāo)函數(shù) func 取得的最小值。
Matlab中線性規(guī)劃的標(biāo)準(zhǔn)形式:
min
?
x
c
T
x
\min_x c^Tx
xmin?cTx
s
.
t
.
{
A
x
?
b
A
e
q
?
x
=
b
e
q
l
b
?
x
?
u
b
s.t. \begin{cases} Ax\leqslant b\\ Aeq\cdot x= beq\\ lb\leqslant x\leqslant ub\\ \end{cases}
s.t.?
?
??Ax?bAeq?x=beqlb?x?ub?
注意:
- 對(duì)于不存在的約束用空矩陣[],意思是例如beq條件不存在,但是lb和ub條件存在,可以寫成linprog(func, A, b, Aeq, [] ,lb, ub)。如果不是中間某個(gè)參數(shù)不存在,而是后面都不存在就可以省略,例如lb和ub不存在,可以寫成linprog(func, A, b, Aeq, beq)。
- 根據(jù)Matlab標(biāo)準(zhǔn),默認(rèn)求解最小值,如果要求解最大值,把目標(biāo)函數(shù)變成相反數(shù)(系數(shù)全部乘以-1);約束條件默認(rèn)求的都是小于等于或者等號(hào),大于號(hào)得轉(zhuǎn)成小于等于。就是說拿到一個(gè)目標(biāo)函數(shù)和約束條件,放進(jìn)Matlab求解前,要先轉(zhuǎn)換為Matlab標(biāo)準(zhǔn)。
Matlab使用例子
步驟:按照數(shù)模題目進(jìn)行建模,得到目標(biāo)函數(shù)和約束條件,然后把目標(biāo)函數(shù)和約束條件化為標(biāo)準(zhǔn)形式,再化成matlab里面矩陣形式,再填入代碼中。
目標(biāo)函數(shù)和約束條件:
m
a
x
z
=
x
1
+
x
2
?
3
x
3
max\quad z=x_1+x_2-3x_3
maxz=x1?+x2??3x3?
s
.
t
.
{
x
1
+
x
2
+
x
3
=
6
x
1
?
x
2
≥
2
x
1
+
x
2
?
2
x
3
≤
5
x
1
,
x
2
,
x
3
≤
15
s.t. \begin{cases} x_1+x_2+x_3=6\\ x_1-x_2\geq2\\ x_1+x_2-2x_3\leq5\\ x_1,x_2,x_3\leq15\\ \end{cases}
s.t.?
?
??x1?+x2?+x3?=6x1??x2?≥2x1?+x2??2x3?≤5x1?,x2?,x3?≤15?
根據(jù)Matlab標(biāo)準(zhǔn)化后的目標(biāo)函數(shù)和約束條件:
m
i
n
w
=
?
x
1
?
x
2
+
3
x
3
min\quad w=-x_1-x_2+3x_3
minw=?x1??x2?+3x3?
s
.
t
.
{
x
1
+
x
2
+
x
3
=
6
?
x
1
+
x
2
+
0
?
x
3
≤
?
2
x
1
+
x
2
?
2
x
3
≤
5
x
1
,
x
2
,
x
3
≤
15
s.t. \begin{cases} x_1+x_2+x_3=6\\ -x_1+x_2+0*x_3\leq-2\\ x_1+x_2-2x_3\leq5\\ x_1,x_2,x_3\leq15\\ \end{cases}
s.t.?
?
??x1?+x2?+x3?=6?x1?+x2?+0?x3?≤?2x1?+x2??2x3?≤5x1?,x2?,x3?≤15?
約束條件矩陣化:
(
1
?
1
0
1
1
?
2
)
(
x
1
x
2
x
3
)
≤
(
?
2
5
)
\left(\begin {array}{c} 1 &-1 &0 \\ 1 &1 &-2 \\ \end{array}\right) \left(\begin {array}{c} x_1\\ x_2\\ x_3\\ \end{array}\right) \leq \left(\begin {array}{c} -2\\ 5\\ \end{array}\right)
(11??11?0?2?)
?x1?x2?x3??
?≤(?25?)
[
1
1
1
]
?
[
x
1
x
2
x
3
]
T
=
6
\left[\begin {array}{c} 1&1&1 \end{array}\right] \cdot {\left[\begin {array}{c} x_1&x_2&x_3 \end{array}\right]}^T=6
[1?1?1?]?[x1??x2??x3??]T=6
[
x
1
x
2
x
3
]
T
≤
[
15
15
15
]
T
{\left[\begin {array}{c} x_1&x_2&x_3 \end{array}\right]}^T\leq{\left[\begin {array}{c} 15&15&15 \end{array}\right]}^T
[x1??x2??x3??]T≤[15?15?15?]T
Matlab代碼:文章來源:http://www.zghlxwxcb.cn/news/detail-731090.html
func=[-1;-1;3];
A=[1,-1,0;1,1,-1];
b=[-2;5];
aeq=[1,1,1]
beq=6;
ub=[15;15;15];
[x,value]=linprog(func,A,b,aeq,beq,[],ub);
結(jié)果:文章來源地址http://www.zghlxwxcb.cn/news/detail-731090.html
>> x
x =
-9.5000
15.0000
0.5000
>> value
value =
-4
到了這里,關(guān)于數(shù)學(xué)建模| 線性規(guī)劃(Matlab)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!