每次都留下索引

时间:2012-12-10 17:28:50

标签: matlab

我正在尝试编写一个程序,为一组数字(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

3 个答案:

答案 0 :(得分:1)

两种方法:

  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
    
  2. 使用第二个向量来保持已使用的值:

    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
    
  3. 因此,举例来说,将第二种方法与你想要做的事情一起使用,我认为它会是这样的:

    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