如果行执行需要太多时间,Matlab 会中断迭代

Matlab break iteration if line execution requires too much time

I 运行 带有迭代循环的 Matlab 代码,在每次迭代期间它对随机数进行采样并使用函数 intlinprog。我的问题是,由于我提供给 intlinprog 函数的大量数据以及我分配给它的部分变量的随机值,一些迭代需要很长时间。

我的代码大致是这样的:

rounds = 1E3;
Total_PF = zeros(rounds,4893);
for i=1:rounds
   i
   cT = zeros (4894,1);
   cT(4894,1) = 1;
   xint = linspace(1,4893,4893);
   xint = xint';
   AT = rand(4,4894);
   beT = ones(4,1);
   lb = zeros(4894,1);
   ub = ones (4894,1);
   ub(4894,1) = Inf;

   [x] = intlinprog(cT,xint,AT,beT,[],[],lb,ub);
   Total_PF(i,:)= (x(1:length(x)-1)');

结束

现在在我提供的最小工作示例中,所有迭代都非常快,但在我的实际代码中,有时 intlinprog 需要很长时间(我的意思是几个小时)来完成一次迭代。

因此,我想知道:有没有办法在 intlinprog 行正在执行时中断 intlinprog ?我在想可以通过修改matlab函数来实现,但首先我不知道我是否可以这样做,其次我担心这可能很危险。

这很难有效地做到。 您可以尝试使用计时器对象来观察该值。但是,由于您使用的是固有的 Matlab 函数而不是执行外部函数,因此您可以设置时间限制值并在执行 intlinprog 时在 while loop 中使用 tictoc ] 并根据您的时间限制检查 toc 的值,如果 toc 超出限制,则检查您的代码 break