[討論] for迴圈中有點複雜的巢狀結構...(送P幣)

看板MATLAB作者時間8年前 (2016/11/09 22:27), 編輯推噓2(206)
留言8則, 3人參與, 最新討論串1/2 (看更多)
程式目的敘述如下 目前有20個變數 是20個不同的機台要排序 每種排序 會用適應函數算出一個數值(OFV) 越小越好 現在要做區域搜尋 位置1跟位置2的機台交換位子 看看OFV有沒有比較小 如果沒有 換回來 往下輪到位置2跟3交換 看看OFV有沒有比較小 如果為置1跟2的機台交換後 OFV值比較小 則保留交換 從頭開始再做一次 1跟2交換 看有沒有OFV比較小 有比較小就保留交換 從頭開始做 沒有比較小就換回來 換下面兩個位置交換 -- 目前用for 迴圈寫 假設發現機台交換位置後有比較小 則要保留交換 然後從頭開始再做交換 我目前用方法是在迴圈裡面 去改最外面迴圈的計數值 是可以正常跑 但我不太確定這樣的方法是不是符合邏輯 想請板上大大幫忙看一下有沒有錯 或是有更好的寫法 可以提供 (本來想用goto之類的函數 但matlab好像沒有) -- XTEMP(sol,:)=factoradic_to_per(X,sol,Nvar); %把變數轉成排序 for var=1:Nvar-1 temp = XTEMP(sol,var); %用temp來暫存值 作兩兩交換 XTEMP(sol,var)=XTEMP(sol,var+1); XTEMP(sol,var+1)=temp; tempOFV2 = fitness_TEMP(XTEMP,sol); %用函數計OFV值 if tempOFV2 < pF(1,sol) %pF是目前這個排序的OFV值 mm=permutation_to_dec(XTEMP,sol,Nvar); X(sol,:)=dec_to_factoradic(mm,Nvar); %這兩行把交換過後的排序 存起來 if tempOFV2 < pF(1,sol) pF(sol) = tempOFV2; if pF(sol) < pF(gBest) gBest=sol; genBest=gen; end end var=1; %從迴圈內改寫迴圈的計數器 else XTEMP(sol,var+1) = XTEMP(sol,var); XTEMP(sol,var) = temp; %如果沒比較好就換回來 end end 感謝大家幫忙 前十個留言的ID各送200P 以表感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.114.54.67 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1478701652.A.2AE.html

11/10 07:11, , 1F
matlab的for-loop沒辦法「從迴圈內改寫迴圈的計數器」
11/10 07:11, 1F

11/10 10:24, , 2F
推樓上,這很重要,上次也靠實驗確認過了.
11/10 10:24, 2F

11/10 13:09, , 3F
那用while迴圈會比較好嗎?
11/10 13:09, 3F

11/10 14:55, , 4F
可以從while裡面去改寫while的條件嗎?
11/10 14:55, 4F

11/10 14:56, , 5F
might be used incompatibly or redefined
11/10 14:56, 5F

11/10 14:56, , 6F
我用while 出現這樣
11/10 14:56, 6F

11/16 21:20, , 7F
發錢結束 晚點發錢給前兩樓大大
11/16 21:20, 7F

11/21 11:18, , 8F
錢已發畢
11/21 11:18, 8F
文章代碼(AID): #1O8p9KAk (MATLAB)
文章代碼(AID): #1O8p9KAk (MATLAB)