非線性規劃學習筆記
一、非線性規劃的應用
非線性規劃(Nonlinear Programming, NLP)在很多領域都有重要應用,主要包括:
- 工程設計優化:結構優化、電路參數優化、交通線路設計
- 經濟與管理:投資組合優化、生產計劃優化、供需均衡模型
- 能源與環境:電力系統優化調度、環境治理
- 機器學習與數據科學:神經網絡訓練、支持向量機等
二、非線性規劃的一般模型
min??f(x)s.t.?gi(x)≤0,i=1,2,…,mhj(x)=0,j=1,2,…,px∈Rn \begin{aligned} \min \ & f(x) \\ \text{s.t.} \ & g_i(x) \leq 0, \quad i = 1,2,\dots,m \\& h_j(x) = 0, \quad j = 1,2,\dots,p \\& x \in \mathbb{R}^n \end{aligned} min?s.t.??f(x)gi?(x)≤0,i=1,2,…,mhj?(x)=0,j=1,2,…,px∈Rn?
- f(x)f(x)f(x):目標函數(可能是非線性的)
- gi(x),hj(x)g_i(x), h_j(x)gi?(x),hj?(x):約束條件(可能是非線性的)
三、MATLAB 中的非線性規劃工具
MATLAB 的 Optimization Toolbox 提供了多種函數:
1. fmincon
—— 約束非線性規劃
[x, fval] = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon)
fun
:目標函數x0
:初始點A, b
:線性不等式約束 Ax≤bAx \leq bAx≤bAeq, beq
:線性等式約束lb, ub
:變量上下界nonlcon
:非線性約束函數(返回c(x) <= 0, ceq(x) = 0
)
2. fminunc
—— 無約束非線性優化
[x, fval] = fminunc(fun, x0)
3. 全局優化方法
ga
—— 遺傳算法patternsearch
—— 模式搜索simulannealbnd
—— 模擬退火
四、MATLAB 示例
示例 1:約束非線性規劃
min?f(x)=(x1?1)2+(x2?2)2 \min f(x) = (x_1-1)^2 + (x_2-2)^2 minf(x)=(x1??1)2+(x2??2)2
約束條件:
x12+x22≤5,x1≥0,x2≥0 x_1^2 + x_2^2 \leq 5, \quad x_1 \geq 0, \quad x_2 \geq 0 x12?+x22?≤5,x1?≥0,x2?≥0
% 目標函數
fun = @(x) (x(1)-1)^2 + (x(2)-2)^2;% 初始點
x0 = [0,0];% 線性約束
A = []; b = [];
Aeq = []; beq = [];% 邊界
lb = [0,0];
ub = [];% 非線性約束
nonlcon = @(x) deal(x(1)^2 + x(2)^2 - 5, []); % 調用 fmincon
[x, fval] = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon);disp('最優解:'); disp(x);
disp('最優目標值:'); disp(fval);
示例 2:無約束非線性優化
min?f(x)=x4?3x3+2 \min f(x) = x^4 - 3x^3 + 2 minf(x)=x4?3x3+2
fun = @(x) x^4 - 3*x^3 + 2;
x0 = 0; % 初始點
[x, fval] = fminunc(fun, x0);disp('最優解:'); disp(x);
disp('最優目標值:'); disp(fval);