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);