我正在尝试编写一个程序,为一组数字(P
)计算名为i=1:10
的变量,除了一个数字(ind
),每个数字都被选中时间。
第一次为P
计算i=1:10
,例如,数字4被选为ind
并使用,我们不希望它包含在下一次迭代中。因此,必须为P
计算下一次迭代i=[1:3 5:10]
。
我该如何处理?我到目前为止的是:
for i=1:10
i=1:i
t = sum(Job(i,2))
i=1:10
P = mean(Job(i,2))
Index= Job(i,4)/Job(i,2)*exp(-max(Job(i,1)-Job(i,2)-t,0)/2*P)
X=max(Index)
ind=find(Index >= X)
completion_time(Job(ind,3))= machine_free_time + Job(ind,2)
machine_free_time = completion_time(Job(ind,3))
Lateness(Job(ind,3))= completion_time(Job(ind,3)) - Job(ind,1)
Tardiness(Job(ind,3))= max(Lateness(Job(ind,3)),0)
end
答案 0 :(得分:1)
两种方法:
从矢量中删除元素
idcs = 1:10; % initially all values are included from 1 to 10
for ii=1:10
idx = choose one out of idcs
% do your calculation
% remove idx from idcs
idcs(idcs==idx)=[];
end
使用第二个向量来保持已使用的值:
idcs = 1:10;
valused=false(size(idcs));
for ii=1:10
idx = choose one out of idcs(~valused)
% do your calculation
% set the used value to true
valused(idcs=idx)=true;
end
因此,举例来说,将第二种方法与你想要做的事情一起使用,我认为它会是这样的:
vector_i = 1:10
vector_i_used = false(size(vector_i));
for kk=1:10 % main loop
P = calculateP( vector_i(~vector_i_used) );
% ...
ind = calculateInd(P, vector_i(~vector_i_used));
vector_i_used(vector_i==ind) = true;
end
答案 1 :(得分:0)
我建议采用不同的方法。检查该值是否已包含在内,如果已经过测试,则不要包含该值。我会留下代码,并找出newDone
给你,但这种方法应该有效。
alreadyDone=false(10,1);
for i=1:10
if (alreadyDone(i))
%Do stuff here
end
alreadyDone(newDone)=true;
end
答案 2 :(得分:0)
只需使用if / then语句跳过循环中所需的索引:
skipThisIndex = [];
for ii=1:10
if ii~=skipThisIndex
% Do calculations
end
%Determine which index you want to skip next
skipThisIndex = indexToSkipNext;
end