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) (==求解器:lsqlin和lsqnonneg ==)
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非线性权重的自适应鲸鱼算法求解单目标优化问题(NWAWOA)含Matlab源码 1665期
单目标优化求解基于matlab遗传算法求解非线性目标函数最小值问题含Matlab源码 1574期