1 概述
对于规划类问题,若目标函数或约束条件中包含非线性函数,则称这类规划问题为非线性规划问题。对于非线性规划问题,目前没有适用于各种情况的通用方法(类似于求解线性规划的单纯型法),各个方法都有其特定的适用范围,因此求解非线性规划问题要比求解线性规划问题困难的多。非线性优化问题往往没有显式解,需要使用迭代算法逐步优化。常用的求解方法包括牛顿法、梯度下降法、拟牛顿法、遗传算法等。
非线性规划模型的一般形式:
其中x为模型的决策变量,f为目标函数,g和h为约束函数;
为等式约束,
为不等式约束。
对于实际问题,一般要注意以下几点:
(1) 决策变量:首先要收集问题相关的资料和数据,确认问题可供选择的方案。
(2) 目标函数:根据实际需要和可能,提出追求极大化或极小化的目标,将其表示为数学关系式
(3) 约束条件:根据实际问题确定所有限制条件,用变量之间的一些等式或不等式来表示。
2 编程求解
Matlab中非线性规划的数学模型一般表示为以下形式:
式中f(x)为标量函数,A,b,Aeq,beq,lb,ub为相应维数的矩阵和向量,c(x),ceq(x)为非线性向量函数。
Matlab中常用fmincon函数求解非线性规划问题,调用格式:
[x,fval]=fmincon(fun,x(0),A,b,Aeq,beq,lb,ub,nonlcon,options)
x的返回值为决策向量x的取值,fval为目标函数的取值;fun为以M文件形式定义的函数f(x),
x0为x的初始值,A,b,Aeq,beq定义了线性约束
,
.如无线性约束条件,则A=[], b=[], Aeq=[], beq=[].; lb、ub分别为决策变量x的下界、上界。 nonlcon为以M文件形式定义的非线性向量函数
,
; options 定义了优化参数,可使用Matlab默认设置。
示例:求解以下非线性规划问题:
为了便于直接调用fmincon函数求解,将其转换为极小值形式的标准形式:
Matlab代码:
非线性目标函数;
function f=fun1(x)
f=-(2*x(1)+3*x(1)^2+3*x(2)+x(2)^2+x(3));
end
非线性约束条件:
function [g,h]=fun2(x)
g=[x(1)+2*x(1)^2+x(2)+2*x(2)^2+x(3)-10
x(1)+x(1)^2+x(2)+x(2)^2-x(3)-50
2*x(1)+x(1)^2+2*x(2)+x(3)-40];%非线性不等式约束
h=[x(1)^2+x(3)-2];%非线性等式约束
end
主函数:
[x,y]=fmincon('fun1',rand(3,1),[-1,-2,0],[-1],[],[],[0,-inf,-inf],[],'fun2')
y=-y;
计算结果: