path_value=calculation_path_value(new_population);
[sort1,index]=sort(path_value);
new_population=new_population(index);
path_value=calculation_path_value(new_population);
smooth_value=calculation_smooth_value(new_population);
fit_value=(weight_length./path_value)+(weight_smooth./smooth_value);
mean_path_value=zeros(1,max_generation);
min_path_value=zeros(1,max_generation);
for i=1:max_generation
new_population_1=selection(new_population,fit_value);
new_population_1=crossover(new_population_1,p_crossover);
new_population_1=mutation(new_population_1,p_mutation,G,r);
new_population_1=GenerateSmoothPath(new_population_1,G);
new_population=new_population_1;
path_value=calculation_path_value(new_population);
smooth_value=calculation_smooth_value(new_population);
fit_value=(weight_length./path_value)+(weight_smooth./smooth_value);
mean_path_value(i)=mean(path_value);
[~,ma]=max(fit_value);
min_path_value(i)=path_value(ma);
min_path{i}=new_population(ma);
end
figure(1);
plot(mean_path_value,'r');
hold on;
title(['weight_length=',num2str(weight_length),' , weight_smooth=',num2str(weight_smooth),' 时的优化曲线图']);
xlabel('迭代次数');
ylabel('路径长度');
plot(min_path_value,'b');
min(min_path_value)
legend('平均长度','最优长度');
[~,min_index]=min(min_path_value);
minmin_path=min_path{min_index};
minmin_path=minmin_path{1};
figure(2);
hold on;
title('ACO+GA规划轨迹');
xlabel('X');
ylabel('Y');
for i=1:r
for j=1:r
if G(i,j)==1
x1=j-1;y1=r-i;
x2=j;y2=r-i;
x3=j;y3=r-i+1;
x4=j-1;y4=r-i+1;
fill([x1,x2,x3,x4],[y1,y2,y3,y4],'r');
hold on
else
x1=j-1;y1=r-i;
x2=j;y2=r-i;
x3=j;y3=r-i+1;
x4=j-1;y4=r-i+1;
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]);
hold on
end
end
end
hold on
%%%%%%%%%%%%%%%%%%%%%%%%绘制最短路径路线图%%%%%%%%%%%%%%%%%%%%%%%%%%%
LENGTH_minmin_path=length(minmin_path);
RX=minmin_path;
RY=minmin_path;
for i=1:LENGTH_minmin_path
RX(i)=ceil(minmin_path(i)/r)-0.5;
RY(i)=r-mod(minmin_path(i),r)+0.5;
if RY(i)==r+0.5
RY(i)=0.5;
end
end
hold on
plot(RX,RY,'ms-','LineWidth',1.5,'markersize',4);
plot(0.5,0.5,'ro','MarkerSize',4,'LineWidth',4); % 起点
plot(19.5,19.5,'gs','MarkerSize',5,'LineWidth',5); % 终点
toc