2012-12-10 37 views
2

我試圖編寫一個程序,它計算一組數字(i=1:10)的變量P,除了每次選擇一個數字(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 
+1

我不明白你的循環。你可以編輯它們,以便它們是正確的Matlab語法嗎? – jerad

+0

我不知道該怎麼寫的部分是 i = 1:10 P = mean(Job(i,2)) –

回答

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 
    

因此,例如,使用與你正在試圖做的事這第二個方法,我認爲它會是這樣的:

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 
+0

非常感謝, –

0

我建議一種不同的方法。檢查該值是否已包含在內,如果已經測試過,則不要包含該值。我會留下代碼,並找出newDone給你,但這種方法應該工作。這樣做的

alreadyDone=false(10,1); 
for i=1:10 
    if (alreadyDone(i)) 
     %Do stuff here 
    end 
    alreadyDone(newDone)=true; 
end 
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