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

看板MATLAB作者 (天)時間8年前 (2016/11/11 02:30), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《JACK19920102 ()》之銘言: : 程式目的敘述如下 : 目前有20個變數 是20個不同的機台要排序 : 每種排序 會用適應函數算出一個數值(OFV) 越小越好 : 現在要做區域搜尋 : 位置1跟位置2的機台交換位子 看看OFV有沒有比較小 : 如果沒有 換回來 往下輪到位置2跟3交換 看看OFV有沒有比較小 : 如果為置1跟2的機台交換後 OFV值比較小 : 則保留交換 從頭開始再做一次 : 1跟2交換 看有沒有OFV比較小 : 有比較小就保留交換 從頭開始做 : 沒有比較小就換回來 換下面兩個位置交換 外圍上一個while,如果全部跑過一遍都沒有比較好的就停止這個while 如果有換,就跳出迴圈,從頭來過 XTEMP(sol,:)=factoradic_to_per(X,sol,Nvar); %把變數轉成排序 conUpdate = true; while conUpdate 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 break else XTEMP(sol,var+1) = XTEMP(sol,var); XTEMP(sol,var) = temp; %如果沒比較好就換回來 end if var == Nvar-1 conUpdate = false; end end end -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.165.235.170 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1478802617.A.A3D.html

11/16 21:20, , 1F
感謝大大 晚些發錢
11/16 21:20, 1F
文章代碼(AID): #1O9Bovez (MATLAB)
文章代碼(AID): #1O9Bovez (MATLAB)