目前我有一个非常简单的功能,应该根据一些限制最小化。我很奇怪,如何正确调整fmincon
设置以获得退出标志1的最佳最小值。此设置将使我退出标志-2。
这是我的Matlab代码:
%% Main
lb=[-1e5,-1e5,0];
ub=[1e5,1e5,1e5];
x0 = unifrnd (lb,ub,[1,3]);
options=optimset('display','off','algorithm','sqp');
[x,~,exitflag]=fmincon(@myfun,x0,[],[],[],[],lb,ub,@mycons,options);
disp(['Exit Flag: ', num2str(exitflag)])
%---------------------------
function f=myfun(x)
f=x(2)-4*x(3)^2;
end
%---------------------------
function [c,ceq]=mycons(x)
x1=x(1); x2=x(2); x3=x(3);
N= [20 1]; xp=[12 0.4];
c(1)=((x1-20)/20)^8+((x2-1)/1)^8-1;
ceq(1)=([1,-1]*(([x1 x2]-xp)./N)')+x3.^2;
end
答案 0 :(得分:0)
无法知道要使用的最佳初始参数是什么。如果有,则相同的方法可以让您知道最佳参数集是什么,在这种情况下您不需要执行优化。
您可以做的最好的事情是创建一个网格/一组初始值,从每个网格初始值开始多次运行优化,然后从结果集中选择最佳答案。
如果你有全局优化工具箱,那么有MultiStart课程可以帮助你做到这一点。