
?作者簡介:人工智能專業(yè)本科在讀,喜歡計算機(jī)與編程,寫博客記錄自己的學(xué)習(xí)歷程。
??個人主頁:小嗷犬的個人主頁
??個人網(wǎng)站:小嗷犬的技術(shù)小站
??個人信條:為天地立心,為生民立命,為往圣繼絕學(xué),為萬世開太平。
什么是非線性規(guī)劃問題
非線性規(guī)劃問題仍是規(guī)劃問題的一種,但是目標(biāo)函數(shù)和約束條件不再是線性的,而是存在非線性的部分,如指數(shù)函數(shù)、對數(shù)函數(shù)、三角函數(shù)等。
如何使用 MATLAB 解決非線性規(guī)劃問題
常見的非線性規(guī)劃問題通常類似于以下形式:
min ? f ( x ) = x 1 2 + x 2 2 + x 3 2 + 8 \begin{equation} \min \quad f(x)=x_{1}^2+x_{2}^2+x_{3}^2+8 \end{equation} minf(x)=x12?+x22?+x32?+8??
?s.t.? { x 1 2 ? x 2 + x 3 2 ≥ 0 x 1 + x 2 2 + x 3 3 ≤ 20 ? x 1 ? x 2 2 + 2 = 0 x 2 + 2 x 3 2 = 3 x 1 , x 2 , x 3 ≥ 0 \begin{equation} \text { s.t. } \begin{cases} & x_{1}^2-x_{2}+x_{3}^2 \geq 0 \\ & x_{1}+x_{2}^2+x_{3}^3 \leq 20 \\ & -x_{1}-x_{2}^2+2 = 0 \\ & x_{2}+2x_{3}^2 = 3 \\ & x_{1}, x_{2}, x_{3} \geq 0 \end{cases} \end{equation} ?s.t.?? ? ???x12??x2?+x32?≥0x1?+x22?+x33?≤20?x1??x22?+2=0x2?+2x32?=3x1?,x2?,x3?≥0???
其中,公式1為目標(biāo)函數(shù),公式2為約束條件。
對于非線性規(guī)劃問題,MATLAB 提供了 fmincon
函數(shù)來解決,其基本語法為:
[x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
其中,fun
為目標(biāo)函數(shù),x0
為初始值,A
為線性不等式約束的系數(shù)矩陣,b
為線性不等式約束的右端項,Aeq
為線性等式約束的系數(shù)矩陣,beq
為線性等式約束的右端項,lb
為變量的下界,ub
為變量的上界,nonlcon
為非線性約束函數(shù)。
MATLAB 中的非線性規(guī)劃問題的標(biāo)準(zhǔn)形式為:
min ? x f ( x ) ?such?that? { 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} f(x) \text { such that } \begin{cases} & 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} xmin?f(x)?such?that?? ? ???c(x)≤0,ceq(x)=0,A?x≤b,Aeq?x=beq,lb≤x≤ub?
其中,c(x)
為非線性不等式約束,ceq(x)
為非線性等式約束。
所以要使用 fmincon
函數(shù),需要先將非線性規(guī)劃問題轉(zhuǎn)為標(biāo)準(zhǔn)形式:
min ? f ( x ) = x 1 2 + x 2 2 + x 3 2 + 8 \begin{equation} \min \quad f(x)=x_{1}^2+x_{2}^2+x_{3}^2+8 \end{equation} minf(x)=x12?+x22?+x32?+8??
?s.t.? { ? x 1 2 + x 2 ? x 3 2 ≤ 0 x 1 + x 2 2 + x 3 3 ? 20 ≤ 0 x 1 + x 2 2 ? 2 = 0 x 2 + 2 x 3 2 ? 3 = 0 x 1 , x 2 , x 3 ≥ 0 \begin{equation} \text { s.t. } \begin{cases} & -x_{1}^2+x_{2}-x_{3}^2 \leq 0 \\ & x_{1}+x_{2}^2+x_{3}^3-20 \leq 0 \\ & x_{1}+x_{2}^2-2 = 0 \\ & x_{2}+2x_{3}^2-3 = 0 \\ & x_{1}, x_{2}, x_{3} \geq 0 \end{cases} \end{equation} ?s.t.?? ? ????x12?+x2??x32?≤0x1?+x22?+x33??20≤0x1?+x22??2=0x2?+2x32??3=0x1?,x2?,x3?≥0???
這里沒有線性約束條件,因此 A
和 b
為空矩陣。
接下來,將目標(biāo)函數(shù)和非線性約束條件分別寫成函數(shù)形式:
function f = objfun(x)
f = x(1)^2 + x(2)^2 + x(3)^2 + 8;
end
function [c,ceq] = nonlcon(x)
c = [-x(1)^2 + x(2) - x(3)^2; x(1) + x(2)^2 + x(3)^3 - 20];
ceq = [x(1) + x(2)^2 - 2; x(2) + 2*x(3)^2 - 3];
end
將函數(shù)分別保存到 objfun.m
和 nonlcon.m
文件中。
最后,使用 fmincon
函數(shù)求解:
[x,fval] = fmincon(@objfun,[0 0 0],[],[],[],[],[0 0 0],[],@nonlcon)
% 或
[x,fval] = fmincon('objfun',[0 0 0],[],[],[],[],[0 0 0],[],'nonlcon')
通過修改 x0
的值,可以改變迭代過程,但是最終的解是相同的。文章來源:http://www.zghlxwxcb.cn/news/detail-453045.html
本題的解為:文章來源地址http://www.zghlxwxcb.cn/news/detail-453045.html
x =
0.5522 1.2033 0.9478
fval =
10.6511
到了這里,關(guān)于MATLAB 非線性規(guī)劃的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!