在matlab非線性規劃數學模型可以寫成一下形式:
\[minf(x)\\
s.t.\begin
ax \le b \\
aeq·x = beq\\
c(x) \le 0\\
ceq(x) = 0
\end
\]f(x)為目標函式,a,b,aeq,beq為線性約束對應的矩陣和向量,c(x),ceq(x)為非線性約束。
matlab求解命令為:
x = fmincon(fun, x0, a, b, aeq, beq, lb, ub, nonlcon, options)
fun為目標函式,x0為初值,a,b,aeq,beq為線性約束對應的矩陣和向量,lb,ub分別為x的下限和上限,nonlcon為非線性約束(需要寫自定義函式),options為優化引數。
【例】求下列非線性規劃問題
\[minf(x) = x^2_1+x^2_2+8\\
s.t.\begin
x_1^2-x_2 \ge 0\\
-x_1-x_2^2+2=0\\
x_1,x_2 \ge 0
\end
\]編寫函式檔案:fun1.m,fun2.m
function f = fun1(x)
f = x(1)^2 + x(2)^2 + 8;
end
function [g,h] = fun2(x)
g = -x(1)^2 + x(2);
%g代表不等式約束,即代表約束條件-x(1)^2 + x(2) <= 0。matlab預設g<=0,所以題目中的條件被改成了相反數。
%如果有多個不等式約束,寫成g(1) = 關於x的函式; g(2) = 關於x的函式;······
h = -x(1) - x(2)^2 + 2;
%h代表等式約束,即代表約束條件 -x(1) - x(2)^2 + 2 = 0。
%如果有多個等式約束,寫成h(1) = 關於x的函式; h(2) = 關於x的函式;······
end
注:在寫fun2時,可以把線性和非線性約束的等式和不等式約束都按照這種格式寫到這個函式裡面,這樣的話fun2就包含了所有約束條件,在後面執行fmincon()時不需要再寫a,b,aeq,beq,
直接用略過。
options = optimset;
[x, y] = fmincon('fun1', rand(2,1), , , , , zeros(2,1), , 'fun2', options)
%『fun1』代表目標函式,rand(2,1)隨機給了x初值,zeros(2,1)代表下限為0,即x1,x2>=0, 'fun2'即剛才寫的約束條件。
x為最優解,y為最優值。
轉化為無約束極值問題
利用問題中的約束函式做出適當的罰函式,將非線性規劃問題轉化為無約束非線性規劃問題。
\[minf(x)\\
s.t.\begin
g_i(x) \le 0 & i=1,2,...,r\\
h_i(x) \ge 0 & i=1,2,...,s\\
k_i(x) = 0 & i=1,2,...,t
\end
\]取乙個充分大的m,建構函式
\[p(x,m)=f(x)+m\sum_^max(g_i(x),0)-m\sum_^min(h_i(x),0)+m\sum_^|k_i(x)|\\
其中g代表\le 的不等式約束,h代表\ge 的不等式約束,k代表等式約束。\\
則非線性規劃問題轉化為無約束最小化p(x,m)。
\]【例】將上面的例題轉化為無約束極值問題:
編寫test.m
funtion g = test(x)
m = 50000;
f = x(1)^2 + x(2)^2 +8;
g = f - m*min(x(1),0) - m*min(x(2),0) - m*min(x(1)^2-x(2),0) + m*abs(-x(1)-x(2)^2+2);
命令視窗
[x,y] = fminunc('test', rand(2,1))
Matlab 線性與非線性規劃
matlab的運籌與決策問題 線性規劃問題 函式 linprog f,a,b,aep,bep,lb,ub 引數分析 f 目標函式的係數排列 a 約束條件的係數矩陣 b 約束條件的增廣矩陣的結果 aep 等式的係數矩陣 bep 等式的結果矩陣 lb 所求解的最小值 ub 所求解的最大值 非線性規劃問題...
非線性規劃
1.基本形式和求解模式。2.掌握凸函式和凸規劃的概念及性質。3.掌握0.618法。4.無約束優化的最優性質,熟練運用最速下降法和共軛方法。約束最優化的性質,懲罰函式。minf x s.t gi x 0 i 1,2,ph j x 0,j 1,2 q可行域為 x x r n gi x 0,i 1,2,p...
Matlab線性 非線性規劃優化演算法(5)
值得單獨一說的是fminunc,fminseach,fminbnd的區別 fminunc只能用於求解連續函式,對於變數沒有限制 fminbnd只能用於求解單變數函式,fminsearch只能用於求解多變數函式,clc clear all fun x abs 1 x x0 1 x1 3 x2 3 我們...