非线性规划学习笔记
一、非线性规划的应用
非线性规划(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:约束非线性规划
minf(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:无约束非线性优化
minf(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);