天天看點

MATLAB 非線性規劃什麼是非線性規劃問題如何使用 MATLAB 解決非線性規劃問題

MATLAB 非線性規劃什麼是非線性規劃問題如何使用 MATLAB 解決非線性規劃問題

✅作者簡介:人工智能專業大學在讀,喜歡計算機與程式設計,寫部落格記錄自己的學習曆程。

🍎個人首頁:小嗷犬的個人首頁

🍊個人網站:小嗷犬的技術小站

🥭個人信條:為天地立心,為生民立命,為往聖繼絕學,為萬世開太平。

本文目錄

  • 什麼是非線性規劃問題
  • 如何使用 MATLAB 解決非線性規劃問題

什麼是非線性規劃問題

非線性規劃問題仍是規劃問題的一種,但是目标函數和限制條件不再是線性的,而是存在非線性的部分,如指數函數、對數函數、三角函數等。

如何使用 MATLAB 解決非線性規劃問題

常見的非線性規劃問題通常類似于以下形式:

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. } \left\{ \begin{array}{c} 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{array} \right. \end{equation}  s.t. ⎩ ⎨ ⎧​x12​−x2​+x32​≥0x1​+x22​+x33​≤20−x1​−x22​+2=0x2​+2x32​=3x1​,x2​,x3​≥0​​​

其中,公式1為目标函數,公式2為限制條件。

對于非線性規劃問題,MATLAB 提供了

fmincon

函數來解決,其基本文法為:

其中,

fun

為目标函數,

x0

為初始值,

A

為線性不等式限制的系數矩陣,

b

為線性不等式限制的右端項,

Aeq

為線性等式限制的系數矩陣,

beq

為線性等式限制的右端項,

lb

為變量的下界,

ub

為變量的上界,

nonlcon

為非線性限制函數。

MATLAB 中的非線性規劃問題的标準形式為:

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 } \left\{ \begin{array}{c} c(x) \leq 0, \\ ceq(x) = 0, \\ A \cdot x \leq b, \\ { Aeq } \cdot x={ beq }, \\ l b \leq x \leq u b \end{array} \right. 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

函數,需要先将非線性規劃問題轉為标準形式:

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. } \left\{ \begin{array}{c} -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{array} \right. \end{equation}  s.t. ⎩ ⎨ ⎧​−x12​+x2​−x32​≤0x1​+x22​+x33​−20≤0x1​+x22​−2=0x2​+2x32​−3=0x1​,x2​,x3​≥0​​​

這裡沒有線性限制條件,是以

A

b

為空矩陣。

接下來,将目标函數和非線性限制條件分别寫成函數形式:

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
           

将函數分别儲存到

objfun.m

nonlcon.m

檔案中。

最後,使用

fmincon

函數求解:

[x,fval] = fmincon(@objfun,[0 0 0],[],[],[],[],[0 0 0],[],@nonlcon)
% 或
[x,fval] = fmincon('objfun',[0 0 0],[],[],[],[],[0 0 0],[],'nonlcon')
           

通過修改

x0

的值,可以改變疊代過程,但是最終的解是相同的。

本題的解為:

x =
    0.5522    1.2033    0.9478

fval =
    10.6511
           

繼續閱讀