Re: [讨论] for循环中有点复杂的巢状结构...(送P币)

楼主: celestialgod (天)   2016-11-11 02:30:12
※ 引述《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
作者: JACK19920102   2016-11-16 21:20:00
感谢大大 晚些发钱

Links booklink

Contact Us: admin [ a t ] ucptt.com