在matlab中使用Forcestop GlobalSearch函数

时间:2015-07-07 09:37:46

标签: matlab optimization

我遇到了优化问题。我认为代码工作正常,但我想在达到一些最佳值(低于1e-11)时强制停止它。到目前为止我找到的唯一解决方案是将MaxTime设置为120

optionsMS = ptimoptions(@fmincon,'MaxIter',1000000,'MaxFunEvals',1000000,...
     'Algorithm','sqp');
problem = createOptimProblem('fmincon','lb',LB,'ub',UB,'x0',vx,...
     'options',optionsMS,...
     'objective',@(v)opti(v,x0,N,imag(wFs),imag(wPs),epsilon,R,W));
gs=GlobalSearch('Display','iter','StartPointsToRun','bounds','MaxTime',120);

[x3,fval3] = run(gs,problem)

我还能做什么?

编辑: 我已将TolFun设为1e-11

optionsGS = optimoptions(@fmincon,'MaxIter',1000000,'MaxFunEvals',1000000,...
     'Algorithm','interior-point','TolFun',1e-11);

这些是结果

 Num Pts                 Best       Current    Threshold        Local        Local                 
Analyzed  F-count        f(x)       Penalty      Penalty         f(x)     exitflag        Procedure
       0     2961    0.006034                                0.006034            2    Initial Point
     200    16921    0.006034                                 0.01213            2    Stage 1 Local
     300    17023    0.006034         6.352        1.086                              Stage 2 Search
     400    17123    0.006034         6.322        4.191                              Stage 2 Search
     432    26074   4.379e-13         6.228        6.475    4.379e-13            2    Stage 2 Local
     433    35845   4.379e-13         6.205        6.228    4.244e-13            2    Stage 2 Local
     434    44004   4.379e-13         1.995        6.205      0.01337            2    Stage 2 Local
     435    52661   3.944e-13         1.514        1.995    3.944e-13            2    Stage 2 Local
     474    54906   3.944e-13         1.939        2.017      0.01789           -1    Stage 2 Local

GlobalSearch stopped because maximum time is exceeded.

GlobalSearch called the local solver 7 times before exceeding 
the clock time limit (MaxTime = 120 seconds).
6 local solver runs converged with a positive local solver exit flag.

三个结果低于1e-11所以我认为它应该停止但我不知道如何在 optimoptions 上设置它。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以为TolFun设置TolXptimoptions值,具体取决于您的停止条件。

如果要在尺寸步骤上设置下限,请转到TolX。如果您的目标是约束目标函数更改的下限,请设置TolFunThe Matlab documentation有一个很好的图表,显示了它们之间的区别:

tolfuntoilx

我相信您正在寻找TolFun选项。话虽如此,除了更改MaxTime之外,您还可以尝试以下方法:

optionsMS = ptimoptions(@fmincon,'MaxIter',1000000,'MaxFunEvals',1000000,...
     'Algorithm','sqp','TolFun',1e-11);