www.pudn.com > mtsp-with--pso.zip > fitness.m, change:2013-07-30,size:2234b


% ===================================================================== 
%                 calfit: sub-algorithm of pso (calculate fitness) 
%         Start Date: 200710/11 
%   Last Changed: 2007/11/1 
%    Specification: MATLAB 7.01 Programing 
%                           This is the subprogram of PSO algorithm, it is 
%                           used to calculate the fitness of the particle. 
%                           此函数是用于计算粒子的适应值。 
%                       
% 
% Copyright (c) Zhang Qishan 2007 
% All rights Reserved 
%========================================================================== 
function y=fitness(rgfDistoDemUnitCost,rgfFixCost,rgfDemand,Particle_size,SelDisNum,Particle_dem,nDisNum,rgfDisCenterCapacity,R) 
%rgfDistoDemDisCost为单位运输第i至j点的费用矩阵 
%rgfDemand需求点的需求量矩阵 
%Particle_size为微粒的规模 
%SelDisNum为选择的配送中心点的实际编号 
%Particle_dem为需求点所属配送中心的逻辑编号 
%nDisNum为配送中心的个数 
%rgfDisCenterCapacity为配送中心的容量 
%R为罚函数值 
DisCostSum=zeros(Particle_size,1);%配送中心值每个配送点的总的配送费用 
%计算每个微粒(配送中心)的适应度值 
for i=1:Particle_size %计算每个粒子 
     DisDiffSum=0;   %所有配送中心配送量与容量的差值累计和   
     for j=1:nDisNum %计算每个配送中心的费用 
          Diff=0;%配送中心配送量与其容量的差值 
          DisQSum=0;%配送中心配送量累计和 
          DistoDemN=zeros(1,1);% 配送中心配送的需求点编号 
          DistoDemN=[find(Particle_dem(i,:)==j)]; 
          n=length(DistoDemN); 
          if SelDisNum(i,j)~=0 
           for m=1:n  
               DisCostSum(i)=DisCostSum(i)+rgfDistoDemUnitCost(SelDisNum(i,j),DistoDemN(m))*rgfDemand(DistoDemN(m)); %配送中心到所属需求点的费用累计和 
               DisQSum=DisQSum+rgfDemand(DistoDemN(m)); %配送中心到所属需求点的配送量累计和 
           end %for m     
           Diff=max([DisQSum-rgfDisCenterCapacity(SelDisNum(i,j)),0]); %配送中心配送量与其容量的差值 
           DisDiffSum=DisDiffSum+Diff; %计算所有配送中心配送量与容量的差值累计和 
           DisCostSum(i)=DisCostSum(i)+rgfFixCost(SelDisNum(i,j)); %加上配送中心的固定费用 
          end 
     end %for j 
     DisCostSum(i)=DisCostSum(i)+R* DisDiffSum; 
end %for i 
y=DisCostSum;