非线性规划(Nonlinear Programming,NLP) 是一种数学规划方法,用于解决含有非线性目标函数和/或非线性约束条件的优化问题。它是线性规划的一种扩展形式,更加广泛适用于复杂实际问题。
非线性规划的目标是最小化(或最大化)一个非线性目标函数,同时满足一组非线性约束条件。这些非线性函数可以是任意形式的,例如多项式、指数函数、对数函数等。非线性规划的决策变量可以是连续的或离散的,具体取决于问题的性质。
与线性规划相比,非线性规划更具挑战性,因为非线性函数的存在使得问题的求解变得更加困难。非线性优化问题往往没有显式解,需要使用迭代算法逐步优化。常用的求解方法包括牛顿法、梯度下降法、拟牛顿法、遗传算法等。
min f ( x ) \min f\left( \boldsymbol{x} \right) minf(x)
s . t . { A ⋅ x ⩽ b A e q ⋅ x = b e q c ( x ) ⩽ 0 c e q ( x ) = 0 l b ⩽ x ⩽ u b s.t.\left\{ \begin{array}{c} \boldsymbol{A}\cdot \boldsymbol{x}\leqslant \boldsymbol{b}\\ Aeq\cdot \boldsymbol{x}=beq\\ c\left( \boldsymbol{x} \right) \leqslant 0\\ ceq\left( \boldsymbol{x} \right) =0\\ lb\leqslant \boldsymbol{x}\leqslant ub\\ \end{array} \right. s.t.⎩ ⎨ ⎧A⋅x⩽bAeq⋅x=beqc(x)⩽0ceq(x)=0lb⩽x⩽ub
式中: f ( x ) f\left( \boldsymbol{x} \right) f(x)为标量函数; A \boldsymbol{A} A, b \boldsymbol{b} b,Aeq,beq,lb,ub为相应维数的矩阵和向量; c ( x ) c\left( \boldsymbol{x} \right) c(x), c e q ( x ) ceq(x) ceq(x)为非线性向量函数。
MATLAB中求解非线性规划的命令是
[x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
其中, x 0 x0 x0是 x \boldsymbol{x} x的初始值; n o n l c o n nonlcon nonlcon是定义的非线性向量函数; c ( x ) c\left( \boldsymbol{x} \right) c(x), c e q ( x ) ceq(x) ceq(x);options是定义的优化参数。
求下列非线性规划:
min f ( x ) = x 1 2 + x 2 2 + x 3 2 + 8 \min f\left( x \right) =x_{1}^{2}+x_{2}^{2}+x_{3}^{2}+8 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 x 2 + 2 x 3 2 = 3 x 1 , x 2 , x 3 ⩾ 0 s.t.\left\{ \begin{array}{c} x_{1}^{2}-x_2+x_{3}^{2}\geqslant 0\\ x_1+x_{2}^{2}+x_{3}^{3}\leqslant 20\\ -x_1-x_{2}^{2}=-2\\ x_2+2x_{3}^{2}=3\\ x_1,x_2,x_3\geqslant 0\\ \end{array} \right. s.t.⎩ ⎨ ⎧x12−x2+x32⩾0x1+x22+x33⩽20−x1−x22=−2x2+2x32=3x1,x2,x3⩾0
MATLAB代码:
非线性目标函数:
function f=fun1(x)
f=sum(x.^2)+8;
end
非线性约束条件:
function [g,h]=fun2(x)
g=[-x(1)^2+x(2)-x(3)^2
x(1)+x(2)^2+x(3)^3-20];
h=[-x(1)-x(2)^2+2
x(2)+2*x(3)^2-3];
end
主程序代码:
[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2')
求解结果: