Matlab求解非线性规划问题
1.非线性规划
与线性规划问题类似,但目标函数和约束条件中包含非线性的等式或不等式。
2.matlab函数
fmincon是matlab中一个优化函数,常用于求解非线性约束问题。函数定义如下:
X=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

其中,各参数含义如下:
fun:目标函数,求最小化
x0:初值(可任意选择)
A,b,Aeq,beq定义了线性约束
A:不等式系数矩阵
b:不等式右端值
Aeq:等式系数矩阵
beq:等式右端值
lb:变量下界
ub:变量上界
c.ceq定义非线性约束
nonlcon:定义非线性约束
options:优化选项,包括迭代次数、容差等。

3.例子

①首先观察这个式子,由于是求最小化问题,需要先对约束条件进行处理,转化为标准形式。即不等号都需要变成<=形式,且x必须都大于0.
②定义目标函数
function f=objfun(x)
f=x(1)^2+x(2)^2+x(3)^2+8;
end
③定义非线性约束
function[g,h]=nonlcon(x)
%g表示不等式约束
g(1)=-x(1)^2+x(2)-x(3)^2
g(2)=x(1)+x(2)^2+x(3)^2-20
%h代表等式约束
h(1)=-x(1)-x(2)^2+2
h(2)=x(2)+2*x(3)^2-3
end
④编写主函数,设置初始点、上下界、等式/不等式约束和优化选项
x0=rand(3,1) %生成3×1的随机矩阵,初始值
%本例中不存在线性约束,关于线性约束的等式和不等式对应的系数矩阵和右端值都为空。
A=[];
b=[];
Aeq=[];
beq=[];
lb=zeros(3,1); %3×1的0矩阵 自变量下限为零
ub=[]; %上限无要求
options=optimset;
⑤求解
[x,y]=fmincon(‘objfun’,x0,A,b,Aeq,beq,lb,ub,’nonlcon’,options);
%x为最优解,y为最优值

4.matlab之优化算法globalsearch
流程如下:
函数描述
建立结构体problem= createOptimProblem('fmincon','objective',...);
配置GlobalSearch求解器 gs=GlobalSearch
运行求解器run(GS,problem)
举例:
problem = createOptimProblem('fmincon','objective',objfun,'x0',x0,'lb',lb,'ub',ub, ’nonlcon’, nonlcon,'options',optimset('Algorithm','SQP','Disp','none'));
gs = GlobalSearch;
[p,G] = run(gs,problem);