我目前正在尝试使用MultiStart例程和fmincon以及有界参数空间运行动态搜索模型的最小距离估计。我现在的问题是例程卡在估计的随机点,即在某个时刻,其中一个迭代卡在无限循环中,或者没有任何东西向前移动。
我的问题结构如下:
problem = createOptimProblem('fmincon',...
'objective',@(x)objective(x,fixedInput),...
'x0',x_0,...
'lb',[0 0 0 0 0.001 0], 'ub',[50 1500 30 79 1 1],...
optimoptions(@fmincon,'Algorithm','interior-point','Display','off','UseParallel',true,));
ms = MultiStart('UseParallel',true,'Display','iter','StartPointsToRun','bounds');
目标函数将所提供的经验矩与动态模型的参数对应物之间的加权距离作为输出,我希望将其拟合到数据中。
无论我为fmincon问题选择哪种算法,我都会遇到同样的问题(尽管当我使用active-set而不是inner-point或sqp时,进程会被卡住很久)。我知道MultiStart有MaxTime选项,但在我的情况下这不方便,因为我想在一大组起始值(~2000)上运行估计,并且整个估计过早地停止。
有没有人知道绕过这个问题的方法?
提前多多感谢!
最佳, 巴南
编辑:
中断例程时我得到以下输出:
Operation terminated by user during search(line 110)
In objective(line 42)
s_par = search(x, fixed);
In parallel_function>@(x)objective(x,fixedInput)
In finDiffEvalAndChkErr
In parfinitedifferences
In parallel_function (line 478)
consume(base, limit, F(base, limit, supply(base, limit)));
In parfinitedifferences
In nlconst (line 347)
parfinitedifferences(XOUT,lb,ub,f, ...
In fmincon (line 750)
nlconst(funfcn,X,l,u,full(A),B,full(Aeq),Beq,confcn,options,defaultopt, ...
In fmultistart
In fmultistart
In parallel_function>make_general_channel/channel_general (line 914)
O = F(C{:});
In remoteParallelFunction (line 38)
out = parallel.internal.pool.serialize(feval(channel, channelArgs{:}));
Operation terminated by user during distcomp.remoteparfor/getCompleteIntervals (line 127)
In parallel_function>distributed_execution (line 820)
[tags, out] = P.getCompleteIntervals(chunkSize);
In parallel_function (line 587)
R = distributed_execution(...
In fmultistart
In MultiStart/run (line 268)
fmultistart(problem,startPointSets,msoptions);
In MinDist_HM (line 42)
[theta_est,fval,exitflag,outp,manymins] = run(ms,problem,2000)