%tip.m 主程序
%全局参数定义及赋值
clear all;
global afs;
global af_total;
global afs_value;
global b_value;
global iterate_times;
global passed_times;
global NC;
global d;
afs=[];
af_total=10;
afs_value=0;
b_value=0;
passed_times=0;
iterate_times=50;
NC=14;
%城市位置矩阵
x(1)=16.47;x(2)=16.47;x(3)=20.09;x(4)=22.39;x(5)=25.23;x(6)=22.00;x(7)=20.47;x(8)=17.20;
x(9)=16.30;x(10)=14.05;x(11)=16.53;x(12)=21.52;x(13)=19.41;x(14)=20.09;
y(1)=96.10;y(2)=94.44;y(3)=92.54;y(4)=93.37;y(5)=97.24;y(6)=96.05;y(7)=97.02;y(8)=96.29;
y(9)=97.38;y(10)=98.12;y(11)=97.38;y(12)=95.59;y(13)=97.13;y(14)=94.55;
%城市距离
for i=1:14
for j=1:14
d(i,j)=sqrt((x(i)-x(j))^2+(y(i)-y(j))^2);
end
end
figure(1);
for i=1:NC
scatter(x(i),x(j),50,'r')
hold on
end
plot([x(1),x(2),x(3),x(4),x(5),x(6),x(7),x(8),x(9),x(10),x(11),x(12),x(13),x(14),x(1)],[y(1),y(2),y(3),y(4),y(5),y(6),y(7),y(8),y(9),y(10),y(11),y(12),y(13),y(14),y(1)]);
grid;
title('初始行走路径');
xlabel('坐标X');
ylabel('坐标Y');
for i=1:1:af_total
afs{i}=af();
end
%程序迭代开始
for j=1:1:iterate_times
passed_times=passed_times+1;
%公告牌初始化
if passed_times>1
b_value(passed_times)=b_value(passed_times-1);
else
b_route=1:NC;
b_route(NC+1)=1;
b_value(1)=inf;
end
for i=1:1:af_total
afs{i}=evaluate(afs{i});
%公告牌更新
if foodconsistence(afs{i})<b_value(passed_times)
b_route=get(afs{i},'route');
b_value(passed_times)=foodconsistence(afs{i});
end
end
end
x_axes=1:1:passed_times;
figure(2);
plot(x_axes,b_value,'k');
%axes([0 300 0 100]);
grid;
title('优化曲线');
xlabel('迭代次数');
ylabel('优化函数值');
figure(3);
for i=1:NC
scatter(x(b_route(i)),y(b_route(i)),50,'r')
hold on
end
plot([x(b_route(1)),x(b_route(2)),x(b_route(3)),x(b_route(4)),x(b_route(5)),x(b_route(6)),x(b_route(7)),x(b_route(8)),x(b_route(9)),x(b_route(10)),x(b_route(11)),x(b_route(12)),x(b_route(13)),x(b_route(14)),x(b_route(1))],[y(b_route(1)),y(b_route(2)),y(b_route(3)),y(b_route(4)),y(b_route(5)),y(b_route(6)),y(b_route(7)),y(b_route(8)),y(b_route(9)),y(b_route(10)),y(b_route(11)),y(b_route(12)),y(b_route(13)),y(b_route(14)),y(b_route(1))]);
grid;
title('优化行走路径');
xlabel('坐标X');
ylabel('坐标Y');
评论1