主题:蚁群算法的matlab实现
gudanyuzhou
[专家分:0] 发布于 2008-08-28 16:38:00
蚁群算法的matlab实现
回复列表 (共4个回复)
沙发
592514132 [专家分:0] 发布于 2009-05-13 15:49:00
看看
板凳
一枝笔2008 [专家分:0] 发布于 2009-05-20 12:55:00
没东西啊。。。
3 楼
hsjuanzi [专家分:0] 发布于 2009-06-01 15:32:00
function y=isin(x,a)
y=0;
for i=1:length(a)
if a(i)==x;
y=1;
break;
end
end
function y=pchoice(cp)
n=length(cp);
a=cp(1);
for i=1:n
if a<=cp(i)
a=cp(i);
y=i;
end
end
function [f,y]=travel(tao,apha,beta,w,c,v)
m=length(c);
flag=zeros(1,m);
p=fix(m*rand)+1;
flag(p)=1;
weightk=w(p);
val=c(p);
tabuk=[p];
%weightk=0;
%val=0;
%tabuk=zeros(1,10);
%psum=0;
for i=1:m-1
np=tabuk(length(tabuk));
psum=0;
for j=1:m
if isin(j,tabuk)
continue;
else
ada=c(j)/w(j);
psum=psum+tao(j)^apha*ada^beta;
end
end
cp=zeros(1,m);
for j=1:m
if isin(j,tabuk)
continue;
else
ada=c(j)/w(j);
cp(j)=tao(j)^apha*ada^beta/psum;
end
end
nextgoods=pchoice(cp);
tabuk=[tabuk nextgoods];
weightk=weightk+w(nextgoods);
val=val+c(nextgoods);
if weightk<=v
flag(nextgoods)=1;
else
flag(nextgoods)=0;
end
end
y=tabuk;
f=flag;
function [y,val]=qacs
tic
maxit=200;
mant=10;
%mant=4;
Q=1;
nc=20;
%nc=10;
v=878;
apha=1;
beta=2;
%v=269;
%apha=0.7;
%beta=2.3;
tao=ones(1,nc);
rho=0.5;
w=[92 4 43 83 84 68 92 82 6 44 32 18 56 83 25 96 70 48 14 58];
c=[44 46 90 72 91 40 75 35 8 54 78 40 77 15 61 17 75 29 75 63];
%w=[95 4 60 32 23 72 80 62 65 46];
%c=[55 10 47 5 4 50 8 61 85 87];
bestv=0;
veval=0;
flag=zeros(1,nc);
for ite=1:maxit
for ka=1:mant
deltatao=zeros(1,nc);
veval=0;
[f,routek]=travel(tao,apha,beta,w,c,v);
for i=1:nc
veval=veval+f(i)*c(i);
end
if veval>=bestv
bestv=veval;
bestroute=routek;
flag=f;
end
for i=1:nc
if f(i)==1
deltatao(routek(i))=deltatao(routek(i))+c(routek(i))*Q/bestv;
end
end
end
tao=rho.*tao+deltatao;
end
y=flag.*[1:nc];
val=bestv
%val=flag*c'
weight=flag*w'
toc
4 楼
gembb [专家分:0] 发布于 2009-07-21 19:26:00
楼主解释哈啊
我来回复