各位大大好
我想請問個小問題,
這是一個ACO,去找w參數解的問題..
我看別人的paper,
跑1000的iteration大概20 CPU Time就跑出F=0.6的w了
但我的花了iteration為1000,大概跑出F=0.001的w.
而且要花600 的CPU Time = =
各位大大,請問問題在哪?
我想了好久. XD
是使用的資料數太多還是?
幫我抓到問題點,小弟我給他五百P幣..Orz
BestRegards
------------------------------------
clear all;
tic;
U=[-24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5
-4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24];
for ci=1:49
U(2,ci)=1;
end
Best_UU(1,1:49)=U(1,1:49);
for d2=1:49
Best_UU_index(1,d2)=d2;
end
Best_F=0;
F_Time=0;
for ci=1:600
yd(ci)=0.1*sin(pi*ci/100);
end
PMAT(1:49,1:49)=1;
for pk2=1:49
PMAT(pk2,pk2)=0;
end
PMAT_0(1,1:49)=1;
for iteration=1:500
y(1)=0;
Best_UU_index(2,1:49)=1;
%依照上一次的最佳路徑亂數跑出十隻ant,此十ant會跟上一次的最佳路徑差一點點
for k=1:10
for m=1:49
if m==1
Tij=PMAT_0(1,Best_UU_index(1,m));
Tsum=sum(PMAT_0(1,1:49));
Tr=Tsum*rand(1);
c=1;Taco=0;
Taco=Tij+Taco;
while Taco<Tr
Taco=Tij+Taco;
c=c+1;
end
Hint=Best_UU_index(1,m)+c-1;
Hint=rem(Hint,50);
if Hint==0
Hint=1;
end
while Best_UU_index(2,Hint)==0 && sum(Best_UU_index(2,1:49))~=0
Hint=rem(Hint+1,50);
if Hint==0
Hint=1;
end
end
UU_index(k,m)=Hint;
UU(k,m)=U(1,Hint);
Best_UU_index(2,Hint)=0;
else
Tij=PMAT(Best_UU_index(1,m-1),Best_UU_index(1,m));
Tsum=sum(PMAT(Best_UU_index(1,m-1),1:49));
Tr=Tsum*rand(1);
c=1;Taco=0;
Taco=Tij+Taco;
while Taco<Tr
Taco=Tij+Taco;
c=c+1;
end
Hint=Best_UU_index(1,m)+c-1;
Hint=rem(Hint,50);
if Hint==0
Hint=1;
end
while Best_UU_index(2,Hint)==0 && sum(Best_UU_index(2,1:49))~=0
Hint=rem(Hint+1,50);
if Hint==0
Hint=1;
end
end
UU_index(k,m)=Hint;
UU(k,m)=U(1,Hint);
Best_UU_index(2,Hint)=0;
end
end
Best_UU_index(2,1:49)=1;
for ci=1:600
e(ci)=(yd(ci)-y(ci));
if ci==1
te(ci)=0;
else
te(ci)=e(ci)-e(ci-1);
end
u(ci)=evalNFN(2*e(ci),5*te(ci),UU(k,1:49));
y(ci+1)=y(ci)/(1+y(ci)*y(ci))+u(ci)*u(ci)*u(ci);
end
F_initi(k)=1/sum(e);
end
[F,F_max_k_index]=max(F_initi);
%Peromon MATR
Best_F=F;
Best_UU=UU(F_max_k_index,1:49);
Best_UU_index(1,1:49)=UU_index(F_max_k_index,1:49);
F_Time=F_Time+1;
%先把所PMAT裡的值蒸發
PMAT_0(1,1:49)=0.9*PMAT_0(1,1:49);
PMAT(1:49,1:49)=0.9*PMAT(1:49,1:49);
%PMAT的最佳路徑更新
PMAT_0(1,Best_UU_index(1,1))=PMAT_0(1,Best_UU_index(1,1))+0.1*Best_F;
for pk3=1:48
PMAT(Best_UU_index(1,pk3),Best_UU_index(1,pk3+1))=PMAT(Best_UU_index(1,pk3),Best_UU_index(1,pk3+1))+0.1*Best_F;
end
end
PMAT_0_save=PMAT_0;
PMAT_save=PMAT;
nainal_trip_index(1,1:49)=0;
nainal_trip_nuber(1,1:49)=0;
%取出最好的trip index
[nainal_trip_nuber(1),nainal_trip_index(1)]=max(PMAT_0(1,1:49));
PMAT_0(1,nainal_trip_index(1))=0;
PMAT(1:49,nainal_trip_index(1))=0;
for pk7=1:49
[nainal_trip_nuber(pk7+1),nainal_trip_index(pk7+1)]=max(PMAT(nainal_trip_index(pk7),1:49));
PMAT(1:49,nainal_trip_index(pk7+1))=0;
end
%轉成nuro FUZZY 的w
for pk8=1:49
w(pk8)=U(1,nainal_trip_index(pk8));
end
comp(1,1:49)=w;
comp(2,1:49)=Best_UU;
toc;
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.216.71
※ 編輯: psw 來自: 140.116.216.71 (06/07 15:00)
→
06/07 15:05, , 1F
06/07 15:05, 1F
是啊..我也是逼不得已的...XD
※ 編輯: psw 來自: 140.116.216.71 (06/07 16:30)
推
06/07 16:38, , 2F
06/07 16:38, 2F
→
06/07 16:38, , 3F
06/07 16:38, 3F
是evalNFN這個function佔用最多次的時間.. 而且高逹5萬次的呼叫..
這個function是去估計每一個ant的fitness,是很重要的部份,裡面也精減到不行了
不太可能對他再修改了..
(淚奔) 〒△〒
※ 編輯: psw 來自: 140.116.216.71 (06/07 17:10)
※ 編輯: psw 來自: 140.116.216.71 (06/07 19:42)