遗传算法适应度函数源代码produceobjectivevalue

%%%%%%3.计算种群适应度函数值子程序
function[fall]=produceobjectivevalue(chromosomesize,zhongqunscale,chromosome,zeroposition)
for ijk=1:zhongqunscale
%%%获得单个染色体
for i=1:chromosomesize
chromochushi(i)=chromosome(ijk,i);
end
for i=1:2
suijidata(i)=zeroposition(ijk,i);
end
%%定义一个3列的数组表示3条线路的目标函数值
for i=1:3
fr(i)=0;
end
%%%计算每条路径的客户数量
%%%定义3条路径的客户数量
for1=1:3
rusernumber(i)=0;
end
%%%求解
rusernumber(l)=suijidata(1)-2;
rusernumber(2)=suijidata(2)-suijidata(l)-1:
rusernumber(3)=size(chromochushi,2)-suijidata(2)-l;
for i=1:rusernumber(1)+l
frt1(i)=0;
end
for i=1:rusernumber(2)+l
frt2(i)=0;
end
for i=1:rusernumber(3)+l
frt3(i)=0;
end
%%%对3条线路进行计算
%%%计算3条路径,车场到达第一个客户的距离和路段时间
fr(l)=dij(1,chromochushi(2)+1); %%线路1,从车场到第1个用户的距离
fr(2)=dij(1,chromochushi(suijidata(1)+l)+l); %线路2,从车场到第1个用户的距离
fr(3)=dij(1,chromochushi(suijidata(2)+l)+1); %线路3,从车场到第1个用户的距离
%%%3条线路,从车场到第1个用户的路段时间
frtl(1)=fr(1)/50;
frtl(2)=fr(2)/50;
frtl(3)=fr(3)/50;
%%计算每条路径的第一个客户到最后一个客户的距离和路段时间
frt11=0;
if rusernumber(l)>1
fori=2:suijidata(1)-2; %%计算第1条路径各路段距离和时间
fr(l)=fr(1)+dij(chromochushi(i)+l,chromochushi(i+l)+1);
frtl(i)=dij(chromochushi(i)+1,chromochushi(i+l)+l)/50;
frt11=frt11+l;
end
end
%%%计算第2条线路的路段距离与路段时间
frt22=0;
if rusernumber(2)>l
fori=suijidata(1)+1:suijidata(2)-2; %%计算第1条路径各路段距离和时间
fr(2)=fr(2)+dij(chromochushi(i)+l,chromochushi(i+l)+1);
frt2(i-suijidata(1)+1)=dij(chromochushi(i)+1,chromochushi(i+l)+l)/50;
frt22=frt22+l;
end
end
%%%计算第3条线路的路段距离与路段时间
frt33=0;
if rusernumber(3)>1

fori=suijidata(2)+1:10; %%计算第1条路径各路段距离和时间
fr(3)=fr(3)+dij(chromochushi(i)+l,chromochushi(i+l)+1);
frt3(i-suijidata(2)+1)=dij(chromochushi(i)+1,chromochushi(i+l)+l)/50;
frt33=frt33+l;
end
end
%%%计算每条线路的最后一个客户到场站的距离和路段时间
fr(1)=fr(l)+dij(chromochushi(suijidata(1)-l)+l,1);
fr(2)=fr(2)+dij(chromochushi(suijidata(2)-l)+l,l);
fr(3)=fr(3)+dij(chromochushi(11)+l,1);
frt1(frt11+2)=dij(chromochushi(suijidata(1)一1)+1,1)/50;
frt2(frt22+2)=dij(chromochushi(suijidata(2)一l)+1,1)/50;
frt3(frt33+2)=dij(chromochushi(11)+1,1)/50;
%%计算到达各个客户的时间
%%将第1条线路,服务时间加入到到达客户的时间里面去
if rusernumber(l)>1
for i=3:suijidata(1)-1
frtl(i-1)=frtl(i-1)+ti(chromochushi(i-1));
end
end
%%将第2条线路,服务时间加入到到达客户的时间里面去
if rusernumber(2)>l
k

=2;
for i=suijidata(1)+2:suijidata(2)-1
frt2(k)=frt2(k)+ti(chromochushi(i-1));
k=k+1;
end
end
%%将第3条线路,服务时间加入到到达客户的时间里面去
if rusernumber(3)>1
k=2;
for i=suijidata(2)+2:chromosomesize-1
frt3(k)=frt3(k)+ti(chromochushi(i-1));
k=k+l;
end
end
%%计算3条线路中到达各个客户的时间

for i=l:rusernumber(l) %size(frtl,2)
frt1leij(i)=0;
end
for i=l:rusernumber(2) %size(frt2,2)
frt2leij(i)=0;
end

for i=l:rusernumber(3) %size(frt3,2)
frt3leij(i)=0;
end


for i=l:rusernumber(l) %size(frtl,2)
for j=1:i
frt1leij(i)= frt1leij(i)+frt1(j);
end
end

for i=l:rusernumber(2) %size(frt2,2)
for j=1:i
frt2leij(i)= frt2leij(i)+frt2(j);
end
end

for i=l:rusernumber(3) %size(frt3,2)
for j=1:i
frt2leij(i)= frt3leij(i)+frt3(j);
end
end


for i=2:suijidata(1)-1
if frtlleij(i-1)fr(1)=fr(l)+50*(ei(chromoehushi(i))-frtlleij(i-1));
end
if frtlleij(i-1)>li(chromochushi(i))
fr(1)=fr(l)+50*(frtlleij(i-1)-li(chromochushi(i)));
end
end
for i=suijidata(1)+1:suijidata(2)-1
if frt2leij(i-suijidata(1))fr(2)=fr(l)+50*(ei(chromoehushi(i))-frt2leij(i-suijidata(1)));
end
if frt2leij(i-suijidata(1))>li(chromochushi(i))
fr(2)=fr(2)+50*(frt2leij(i-suijidata(1))-li(chromochushi(i)));
end












相关文档
最新文档