如果行执行需要太多时间,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
中使用 tic
和 toc
] 并根据您的时间限制检查 toc
的值,如果 toc
超出限制,则检查您的代码 break
。
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
中使用 tic
和 toc
] 并根据您的时间限制检查 toc
的值,如果 toc
超出限制,则检查您的代码 break
。