欢迎光临散文网 会员登陆 & 注册

Matlab求解非线性规划问题

2023-08-05 16:30 作者:Coco香橙味  | 我要投稿

1.非线性规划

与线性规划问题类似,但目标函数和约束条件中包含非线性的等式或不等式。

2.matlab函数

fmincon是matlab中一个优化函数,常用于求解非线性约束问题。函数定义如下:

X=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

一般形式

其中,各参数含义如下:

  1. fun:目标函数,求最小化

  2. x0:初值(可任意选择)

  3. A,b,Aeq,beq定义了线性约束

  4. A:不等式系数矩阵

  5. b:不等式右端值

  6. Aeq:等式系数矩阵

  7. beq:等式右端值

  8. lb:变量下界

  9. ub:变量上界

  10. c.ceq定义非线性约束

  11.  nonlcon:定义非线性约束

  12. 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);


Matlab求解非线性规划问题的评论 (共 条)

分享到微博请遵守国家法律