matlab的非线性优化问题,我自己编了一下,有问题,我把我的程序发上来,希望大虾帮我看下,谢了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab的非线性优化问题,我自己编了一下,有问题,我把我的程序发上来,希望大虾帮我看下,谢了相关的知识,希望对你有一定的参考价值。

%2jiyouhua.m
vlb=[0.25;18;1.5];%x1,x2,x3的下限值
vub=[1;100;6];%x1,x2,x3的上限值
x0=[0.9;50;2.5];%x1,x2,x3的初始值

[x,fval,exitflag,output,lambda,grad,hessian] = fmincon('funn',x0,[],[],[],[],vlb,vub,'nonlcon')

%目标函数
function y=funn(x)
y=x(2)*x(3)+(x(2)*x(3))/x(1)

%约束条件
function[c,ceq]=nonlcon(x)
c(1)=(863.4*x(1))/x(2)-x(3).^3;
c(2)=x(2)+x(2)/x(1)-120;
ceq=[];

运行时出现了问题,显示是
Warning: Large-scale (trust region) method does not currently solve this type of problem,
switching to medium-scale (line search).
> In fmincon at 274
??? Error using ==> fmincon
FMINCON cannot continue because user supplied objective function failed with the following error:
Error using ==> feval
Undefined command/function 'funn'.

我也不知道为什么,该怎么办

%约束条件
function[c,ceq]=nonlcon(x)
c(1)=(863.4*x(1))/x(2)-x(3).^3;
c(2)=x(2)+x(2)/x(1)-120;
ceq=[];
---------------
>> funn=@(x)x(2)*x(3)+(x(2)*x(3))/x(1);
>> vlb=[0.25;18;1.5];%x1,x2,x3的下限值
vub=[1;100;6];%x1,x2,x3的上限值
x0=[0.9;50;2.5];%x1,x2,x3的初始值
[x,fval,exitflagn] = fmincon(funn,x0,[],[],[],[],vlb,vub,@nonlcon)
Warning: Trust-region-reflective algorithm does not solve this type of problem,
using active-set algorithm. You could also try the interior-point or sqp
algorithms: set the Algorithm option to 'interior-point' or 'sqp' and rerun.
For more help, see Choosing the Algorithm in the documentation.
> In fmincon at 472

Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in
feasible directions, to within the default value of the function tolerance,
and constraints were satisfied to within the default value of the constraint tolerance.

<stopping criteria details>

Active inequalities (to within options.TolCon = 1e-006):
lower upper ineqlin ineqnonlin
2 1 1

x =

1.0000
18.0000
3.6334

fval =

130.8024

exitflagn =

1

>>追问

1.为什么我已经写了funn函数了,会出现Undefined command/function 'funn',而你这样写就能用啊
2.我自己的程序有些问题,就是约束条件里x1是只能小于1的,不能等于1,但我又不知道怎么修改,而你的优化出来的结果刚好又是等于1,这不是我想要的,能否再帮我看下

追答

我这么跟你说吧,整个计算其实和x1关系不大,你只要取一个你在精度范围类接近于1就可以了,x1是做分母的,当然允许时越大越好

参考技术A 换用这个函数进行求解:
[x,fval,attainfactor,exitflag,output]=fgoalattain(@goalfunction,x0,goal,weight,A,b,Aeq,beq,lb,ub,@nonlcon);

非线性优化汇总——Matlab优化工具箱(持续更新中)

非线性优化汇总——Matlab优化工具箱(持续更新中)

原创不易,路过的各位大佬请点个赞

目录


主要汇总非线性优化类型、应用

每个优化问题及求解器都对应的链接,如果没有未来会更新

对应Matlab优化工具包

目录性 博客

尽管题目为非线性优化,实际还包含了:Optimization Toolbox 快速入门、线性规划、最小二乘、二次规划、(二阶)锥规划,可能还专门会会讲解一下 优化问题的构建和设置

Optimization Toolbox™ 提供了多个函数,这些函数可在满足约束的同时求出可最小化或最大化目标的参数。该工具箱包含适用于下列各项的求解器:线性规划 (LP)、混合整数线性规划 (MILP)、二次规划 (QP)、二阶锥规划 (SOCP)、非线性规划 (NLP)、约束线性最小二乘、非线性最小二乘和非线性方程。

1、优化算法汇总——优化工具包

1. 非线性优化:查找单变量函数在定区间上的最小值 (求解器:fminbnd

2. 非线性优化:无约束非线性优化(Unconstrained nonlinear minimization)(求解器:fminsearch和fminunc
无约束非线性优化:fminunc(https://blog.csdn.net/weixin_44044161/article/details/116032924?spm=1001.2014.3001.5501)
无约束非线性优化:fminsearch(https://blog.csdn.net/weixin_44044161/article/details/123826153)

3. 非线性优化:有约束非线性优化(Constrained nonlinear minimization)(求解器:fmincon

4. 非线性优化:求解半无限约束多变量非线性函数的最小值(求解器:fseminf

5. 最小二乘: 线性最小二乘(Linear least squares) (==求解器:lsqlinlsqnonneg ==)
6. 最小二乘:非线性最小二乘(Nonlinear least squares)(求解器:lsqnonlin和lsqcurvefit
7. 最小二乘:约束最小二乘(Constrained least squares)(求解器:lsqlin

8. 线性规划 (Linear Programming, LP)(求解器:linprog
9. 半正定规划(semidefinite programming, SDP)(求解器:CVX:sdp
10. 二次规划/二次约束二次规划(Quadraitic Constraint Quadraitic Programming, QCQP)(求解器:quadprog
11. (二阶)锥规划 (Second-Order Cone Programming, SOCP) (求解器:coneprog和secondordercone)

12. 未完待续(可留言推荐)

2、优化问题及对应求解器

2.1、非线性优化

类型优化模型求解器


2.2、最小二乘

类型优化模型求解器


2.3、线性规划

类型优化模型求解器

2.4、(二阶)锥规划 (Second-Order Cone Programming, SOCP)

类型优化模型求解器
锥规划见下面coneprog(锥规划)secondordercone(二阶锥约束)(也可以用CVX工具包求解)

|
second-order cone constraint(所谓二阶是指锥里面用到的是二范数,下面的表达式表示一个二阶锥。):


根据仿射变换的性质,变换后凹凸性不变,因此二阶锥仍然是一个凸锥。
注:对向量 x xx 仿射变换(相当于将一个图形平移,或变大变小,或旋转,或倒影): y = A x + b y = A x + b y=Ax+b,其中 A x A x Ax 表示对 x x x变大或变小或旋转倒影,而 + b + b +b 表示平移。

二阶锥规划(标准形式):

2.5、二次规划/二次约束二次规划(Quadraitic Constraint Quadraitic Programming, QCQP)

类型优化模型求解器


由于二次约束可以转换为二阶锥约束,因此QCQP问题可以转化为二阶锥规划问题,并用 coneprog 或者 CVX 求解

二次约束二次规划:

由于二次约束可以转换为二阶锥约束,因此QCQP问题可以转化为二阶锥规划问题,并用 coneprog 或者 CVX 求解

2.6、半正定规划(semidefinite programming, SDP)

类型优化模型求解器
锥规划见下面CVX工具包(也可以用coneprog),实际上都用的内点法

注意:半正定规划问题可以转化为二阶锥规划问题,并用 coneprog 或者 CVX 求解,同理,SOCP也可以转换为SDP问题

对SDP理解:可以简单理解为:半正定规划是线性规划的矩阵形式

原创不易,路过的各位大佬请点个赞

以上是关于matlab的非线性优化问题,我自己编了一下,有问题,我把我的程序发上来,希望大虾帮我看下,谢了的主要内容,如果未能解决你的问题,请参考以下文章

matlab中多目标线性规划函数如何使用

单目标优化求解基于matlab非线性权重的自适应鲸鱼算法求解单目标优化问题(NWAWOA)含Matlab源码 1665期

单目标优化求解基于matlab遗传算法求解非线性目标函数最小值问题含Matlab源码 1574期

单目标优化求解基于matlab粒子群算法求解非线性目标函数最小值问题含Matlab源码 1573期

怎么用matlab求解非线性最优化问题

非线性优化汇总——Matlab优化工具箱(持续更新中)