matlab 向凸优化非线性约束函数传递参数 fmincon

作者&投稿:藩例 (若有异议请与网页底部的电邮联系)
matlab非线性规划fmincon函数中目标函数参数传递问题,怎么解?~

使用匿名函数句柄就可以了 fmincon 需要的函数fun只有一个输入参数 fun(x) 而你的函数需要多一个能改变的变量。
1、在到达迭代次数阈值或目标函数估值次数阈值时,求解器没有最小化目标到要求的精度,此时求解器停止。接下来,可以尝试以下方法:
(1)设置‘Display’为‘iter’,查看每步的迭代信息,这些信息包括:目标函数(Fval or f(x) or Resnorm)是否是下降的;检查约束越界(Max constraint)是否是递减趋向于0;查看一阶优化是否是递减趋向于0;查看置信域半径(Trust-region radius)是否下降趋向于一个小的值。若其中至少一种情况为是,就表示结果是不断改善的。如果结果是不断改善的,可以采取下边的措施:设置MaxIter、MaxFunEvals比默认值大的值,默认值可以在优化工具箱或求解器的函数参考页的优化表中查看;从最后计算出的点开始重新求解。如果结果没有改善,尝试以下其他的方法。
(2)放松精度
如果TolX或TolFun太小,当求解器达到一个最小值时可能也不会识别到,这就会导致无限次徒劳的迭代。DiffMaxChange和DiffMinChange选项能影响求解器的改善,它们控制求导估计中有限差分的步长。
2、无可行点
在TolCon约束精度内,求解器不能找到一个满足所有约束条件的点,此时,可以尝试以下方法:
(1)检查线性约束
通过求解一个线性规划问题来找到一个满足界约束和线性约束的点。
i)定义一个目标函数是常值0的线性规划问题、
f = zeros(size(x0)); % assumes x0 is the initial point
ii)求解这个线性规划问题看是否有一个可行点。
xnew = linprog(f,A,b,Aeq,beq,lb,ub);
iii)如果有可行点xnew,用xnew作为初始点去求解原始问题。
iv)如果没有可行点,那说明原始模型建的不好,检查界约束和线性约束。

un为目标函数,它可用前面的方法定义;
x0为初始值;
A、b满足线性不等式约束 ,若没有不等式约束,则取A=[ ],b=[ ];
Aeq、beq满足等式约束 ,若没有,则取Aeq=[ ],beq=[ ];
lb、ub满足 ,若没有界,可设lb=[ ],ub=[ ];
nonlcon的作用是通过接受的向量x来计算非线性不等约束 和等式约束 分别在x处的估计C和Ceq,通过指定函数柄来使用,如:>>x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon),先建立非线性约束函数,并保存为mycon.m:function [C,Ceq] = mycon(x)
C = …
% 计算x处的非线性不等约束 的函数值。
Ceq = …
% 计算x处的非线性等式约束 的函数值。
lambda是Lagrange乘子,它体现哪一个约束有效。
output输出优化信息;
grad表示目标函数在x处的梯度;
hessian表示目标函数在x处的Hessiab值。

您好,un为目标函数,它可用前面的方法定义;
x0为初始值;
A、b满足线性不等式约束 ,若没有不等式约束,则取A=[ ],b=[ ];
Aeq、beq满足等式约束 ,若没有,则取Aeq=[ ],beq=[ ];
lb、ub满足 ,若没有界,可设lb=[ ],ub=[ ];
nonlcon的作用是通过接受的向量x来计算非线性不等约束 和等式约束 分别在x处的估计C和Ceq,通过指定函数柄来使用,如:>>x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon),先建立非线性约束函数,并保存为mycon.m:function [C,Ceq] = mycon(x)
C = …
% 计算x处的非线性不等约束 的函数值。
Ceq = …
% 计算x处的非线性等式约束 的函数值。
lambda是Lagrange乘子,它体现哪一个约束有效。
output输出优化信息;
grad表示目标函数在x处的梯度;
hessian表示目标函数在x处的Hessiab值。

注意:
1. fmincon 函数提供了大型优化算法和中型优化算法。默认时,若在 fun 函数中提供了梯度(options 参数的 GeadObj 设置为 'on'),并且只有上下界存在或只有等式约束,fmincon 函数将选择大型算法。 当既有等式约束又有梯度约束时,使用中型算法。
2. fmincon 函数的中型算法一般是使用序列二次规划。在每一步迭代中求解二次规划子问题,并用 BFGS 法更新 Lagrangian 乘子和 Hessian 矩阵。
3. fmincon 函数的大型算法采用了subspace trust region 优化算法。这种算法是把目标函数在点x的邻域泰勒展开(x可以认为是人为提供的初始猜测),这个展开的邻域就是所谓的trust region,泰勒展开进行到二阶项为止。
4. fmincon 函数可能会给出局部最优解,这与初始值的选取有关。


左权县15856525120: 如何用matlab求解非线性约束优化问题 -
戢生舒汀: 对于非线性约束的优化问题,matlab有个很好的函数fmincon可以很容易解决.在编辑器窗口中写入我们要求的目标函数,并保存,注意使函数名与文件名相同 然后再新建一个函数文件,用来编写非线性约束条件.步骤及其注意事项同上.额外需要注意的是,需要将两个函数文件放在同一个文件夹中 最后,在命令行窗口处写入fmincon命令.此处需要注意的是,对于没有的线性约束条件的位置药用空矩阵代替,并且初始条件需要满足非线性约束条件

左权县15856525120: matlab优化非线性约束 -
戢生舒汀: 将下面语句在matlab编辑器中保存为mycon.m function [c, ceq]=mycon (x) c=(300/210000*(1-x(1)/300))^3/x(2)^2-(300/210000*(1-x(1)/300))^3/(0.2+x(2))^2-0.000075; ceq=[ ]; %无等式约束 在matlab窗口中输入:fun='-x(1)*(0.02+x(2))/(2*(300-x(1)...

左权县15856525120: matlab非线性约束条件function [c,ce] = nonlcon1(x) -
戢生舒汀: 有以下几种方式:1、用全局变量,不建议; 2、传递附加参数:把非线性约束条件定义成函数 function [c,ce] = nonlcon1(x,a)并且调用fmincon的时候用:fmincon(FUN,X,A,B,Aeq,Beq,LB,UB,@nonlcon1,options,a)其中,附加参数a在options后...

左权县15856525120: 如何用Matlab求有限制条件的目标函数的最小值求解一个优化问题(目标函数非线性,约束函数线性)? -
戢生舒汀: x(1) = -4.0301e+016 x11 x(2) = -5.3913e+016 x12 x(3) = -4.4068e+016 x13 x(4)= -4.5546e+016 x14 x(5) = -4.5676e+016 x21 x(6)= -4.9899e+016 x22 x(7) = -4.7096e+016 x23 x(8) = -5.1703e+016 x24 x(9) = -4.1011e+016 x31 x(10)= -5.6188e+016 ...

左权县15856525120: 用MATLAB编程怎样解决对非线性约束条件的编写最优化算法 -
戢生舒汀: 试下附件中的fminsearchbnd函数,请把fminsearchbnd.m文件放在你的工作路径中.fminsearchbnd(@(x)f(x(1),x(2),x(3)), [0;0;0], [0;0;0], [30;30;2])ans = 15.0848 20.5081 0.5452此文件下载自Fileexchange,作者:JohnD'Errico

左权县15856525120: matlab 非线性有约束的优化问题 -
戢生舒汀: 搞定,以下程序放在一个m文件中,我给你做成子函数了 function [] = myhelp() clear; clc; x0=[4; 5; 6]; lb = zeros(3,1); [x, fval, exitflag. output, lambda]=fmincon(@myfun,x0, [], [], [], [], lb, [], @mycon); function f=myfun(x) f=-x(1)*x(2)*x(3); function [c,ceq]=mycon(x) ceq=x(2)*x(3)+x(3)*x(1)+x(1)*x(2)-75 c=0; 有问题欢迎追问,没问题别忘了采纳

左权县15856525120: matlab解有约束的非线性优化 -
戢生舒汀: 太麻烦了,给你个例子,仔细琢磨吧.function hh a1 = 2; a2 = 1.5; % define parameters first options = optimset('LargeScale','off'); % run medium-scale algorithm [x,fval] = fmincon(@(x)myfun(x,a1),[2e-3 ;0.5e-3;6e-3 ],[],[],[],[],[],[],@(x)mycon(x,a2),...

左权县15856525120: MATLAB做非线性约束优化时,怎么老显示这个啊? -
戢生舒汀: 你用的是fmincon函数吧?FMINCON函数虽然是可以解决非线性约束的问题的,但是它要求目标函数和约束函数都必须是连续的,梯度也是连续的,而且该函数是根据你给的初始值来进行梯度步长收敛的,只能收索到局部最优解.如果你给的初...

左权县15856525120: matlab 非线性约束最优化问题,希望给出代码
戢生舒汀: 先建立M文件fun.m定义目标函数: function f=fun(x) f=((x(1)+1)^2+4*(x(2)-1.5)^2)*((x(1)-1.2)^2+0.4*(x(2)-0.5)^2); 再建立M文件mycon.m定义非线性约束: function [g,ceq]=mycon(x) g=[2*x(1)-x(1)*x(2)+5*x(2)-6;x(1)-x(2)+0.5;x(1)^2-4*x(2)^2+x(2)]; ...

左权县15856525120: 怎么用matlab求解非线性最优化问题 -
戢生舒汀: 在MATLAB的M文件编辑窗口中编入目标函数(obj_fun.m)以及非线性的约束条件(nl_con_fun.m)的M文件.在MATLAB的命令窗口中输入所需参数:A=[…];B=[…];Aeq=[…];Beq=[…];LB;UB以及X0等.最后在命令窗口中输入命令: [x,obj_value,EXITFLAG]=FMINCON('obj_fun',X0,A,B,Aeq,Beq,LB,UB,'nl_con_fun'); 如果 (EXITFLAG<=0),则原问题不可行或无解.如果 (EXITFLAG>0),则x与obj_value分别为最优解和目标函数的最优值.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网