gusucode.com > matlab编程DPSO离散二进制粒子群算法编程以及实现源码程序 > code3/matlab编程DPSO离散二进制粒子群算法编程以及实现源码程序/code/swarmeval.m
%适应度函数 %计算适应值 function q=swarmeval(S) [v,r,a,b,a1,b1,T,i,j]=swarminit; %S=[0 0 0 0 0 0 0 1 0 1 0 0 0]; %v=[0 0 0 0 1 0 1 1 0 1 1 1 0 0 0 1 0 1 0 1]; val=0; val1=0; val2=0; for m=1:i, if ((v(m)==0)|(v(m)==1)) for n=1:j, if(T(m,n)==1&S(n)==1) %规则1 r(m)=0; end end end if v(m)==0 %规则2 sum1=0; sum2=0; for n=1:j, if S(n)==1 sum1=sum1+1; end if ((T(m,n)==0)&(S(n)==1)) sum2=sum2+1; end end if sum1==sum2 r(m)=0; end end if v(m)==1 %规则3 sum1=0; sum2=0; for n=1:j, if S(n)==1 sum1=sum1+1; end if ((T(m,n)==0)&(S(n)==1)) sum2=sum2+1; end end if sum1==sum2 r(m)=1; end end if v(m)==0 %规则4 sum1=0; for n=1:j, if((T(m,n)==1)&(S(n)==1)) sum1=sum1+1; end end for n=1:j, if((T(m,n)==-1)&(S(n)==1)&(sum1==0)) r(m)=1; end end end if v(m)==0 %规则5 sum1=0; for l=1:j, if ((T(m,l)==1)&(S(l)==1)) sum1=sum1+1; end end for n=1:j, if((T(m,n)==-0.5)&(S(n)==1)&(sum1==0)) r(m)=0.5; end end end if v(m)==1 %规则6 sum1=0; for n=1:j, if ((T(m,n)==1)&(S(n)==1)) sum1=sum1+1; end end for n=1:j, if((T(m,n)==0.5)&(S(n)==1)&(sum1==0)) r(m)=0.5; end end end if v(m)==1 %规则7 sum1=0; for n=1:j, if ((T(m,n)==1)&(S(n)==1)) sum1=sum1+1; end if ((T(m,n)==0.5)&(S(n)==1)) sum1=sum1+1; end end for n=1:j, if((T(m,n)==-0.5)&(S(n)==1)&(sum1==0)) r(m)=1; end if((T(m,n)==-1)&(S(n)==1)&(sum1==0)) r(m)=1; end end end end %disp(r); %计算适应值 for m=1:i, val1=val1+0.5*a1(m)*r(m); end for n=1:j, val2=val2+0.5*b1(n)*S(n); end val=val1+val2; q=val; %disp(val);