function [fitness_value_c]=Copy_of_fitness_delete(old,sudu_feiji,timewindow,base_num1,base_num2,base_num3,demand_shangyuan,demand_wuzi,farm,volume_shangyuan,volume_wuzi,dis,D,zuobiao)
[c,d]=size(farm);
service_time=0.25;%每个点的服务时间是15分钟
l1=1;bn1=1;bn2=1;bn3=1;zong_fitness_value_c=0;cxd1=0;zong_l=0;feiji_num=0;
cxd0 = ['r','g','b','k','m','y','c','r','g','b','k','m','y','c','r','g','b','k','m','y','c']; %%%%% 给出颜色
for l2=l1:d
fitness_value_c=0;
if ((sum(demand_shangyuan(farm(1,l1:l2)))>volume_shangyuan)||(sum(demand_wuzi(farm(1,l1:l2)))>volume_wuzi))
if (sum(demand_shangyuan(farm(1,l1:l2)))>volume_shangyuan)
fitness_value_c(1)=fitness_value_c(1)+sum(demand_shangyuan(farm(1,l1:l2)))-volume_shangyuan;
end
if (sum(demand_wuzi(farm(1,l1:l2)))>volume_wuzi)
fitness_value_c(1)=fitness_value_c(1)+sum(demand_wuzi(farm(1,l1:l2)))-volume_wuzi;
end
cxd1 = cxd1 + 1 ;
cxd2 = cxd0(cxd1); %%%%% 确定颜色
fprintf('--------------------------路线-------------------------\n');
path=farm(1,l1:l2);
l=length(path);
feiji_num=feiji_num+1;
zong_l=zong_l+l;
%1按距离给第一个点分配仓库,求出到第一个点的时间------------------------
if dis(4,path(1))==1
if bn1<=base_num1
time=dis(1,path(1))/sudu_feiji;
bn1=bn1+1;
address=1;
elseif bn2<=base_num2
time=dis(2,path(1))/sudu_feiji;
bn2=bn2+1;
address=2;
elseif bn3<=base_num3
time=dis(3,path(1))/sudu_feiji;
bn3=bn3+1;
address=3;
else
time=10000;
end
end
if dis(4,path(1))==2
if bn2<=base_num2
time=dis(2,path(1))/sudu_feiji;
bn2=bn2+1;
address=2;
elseif bn1<=base_num1
time=dis(1,path(1))/sudu_feiji;
bn1=bn1+1;
address=1;
elseif bn3<=base_num3
time=dis(3,path(1))/sudu_feiji;
bn3=bn3+1;
address=3;
else
time=10000;
end
end
if dis(4,path(1))==3
if bn3<=base_num3
time=dis(3,path(1))/sudu_feiji;
bn3=bn3+1;
address=3;
elseif bn2<=base_num2
time=dis(2,path(1))/sudu_feiji;
bn2=bn2+1;
address=2;
elseif bn1<=base_num1
time=dis(1,path(1))/sudu_feiji;
bn1=bn1+1;
address=1;
else
time=10000;
end
end
%求返回哪个仓库
if dis(4,path(l))==1
address2=1;
elseif dis(4,path(l))==2
address2=2;
else
address2=3;
end
%输出路线
if address==1
if address2==1
feiji_path=[0,old(path),0]
end
if address2==2
feiji_path=[0,old(path),0,0]
end
if address2==3
feiji_path=[0,old(path),0,0,0]
end
elseif address==2
if address2==1
feiji_path=[0,0,old(path),0]
end
if address2==2
feiji_path=[0,0,old(path),0,0]
end
if address2==3
feiji_path=[0,0,old(path),0,0,0]
end
elseif address==3
if address2==1
feiji_path=[0,0,0,old(path),0]
end
if address2==2
feiji_path=[0,0,0,old(path),0,0]
end
if address2==3
feiji_path=[0,0,0,old(path),0,0,0]
end
else
error_feiji_path=[old(path)]
end
%2求到第一个点的时间窗-------
shijianchuang=1000*max(timewindow(1,path(1))-time,0)+1000*max(time-timewindow(2,path(1)),0);
%3求路线中到每一个点的时间和时间窗惩罚
time
for k=1:l-1
time=time+service_time+D(path(k),path(k+1))/sudu_feiji
shijianchuang=shijianchuang+1000*max(timewindow(1,path(k+1))-time,0)+1000*max(time-timewindow(2,path(k+1)),0);
fitness_value_c(1)=fitness_value_c(1)+shijianchuang;
end
fprintf('---不满足的伤员和物资数量--\n');
fitness_value_c
zong_fitness_value_c=zong_fitness_value_c+fitness_value_c;
%画图
subplot(2,1,2)
hold on
plot(22,75,'--gs',...
'LineWidth',2,...
'MarkerSize',10,...
'MarkerEdgeColor','b',...
'MarkerFaceColor',[0.5,0.5,0.5])
plot(75.8,80.1,'--gs',...
'LineWidth',2,...
'MarkerSize',10,...
'MarkerEdgeColor','b',...
'MarkerFaceColor',[0.5,0.5,0.5])
plot(53.4,59.9,'--gs',...
'LineWidth',2,...
'MarkerSize',10,...
'MarkerEdgeColor','b',...
'MarkerFaceColor',[0.5,0.5,0.5])
if address==1
评论1