-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathproblem3.m
More file actions
191 lines (170 loc) · 3.76 KB
/
Copy pathproblem3.m
File metadata and controls
191 lines (170 loc) · 3.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
clear all;
clc;
load mymap.mat;
w=xlsread('map.xlsx');
%w为有径矩阵
w(isnan(w))=0;
Temp=[D;Z;F;J];
figure(1);
plot(D(:,1),D(:,2),'+');
hold on;
plot(F(:,1),F(:,2),'s');
hold on
plot(Z(:,1),Z(:,2),'d');
hold on
plot(J(:,1),J(:,2),'o');
hold on;
% u=triu(w);
% d=tril(w);
Va=45.*ones(130);
Vb=35.*ones(130);
Vc=30.*ones(130);
%Va,b,c重新赋主干道
for i=69:1:78
Va(i,i+1)=70;
Vb(i,i+1)=60;
Vc(i,i+1)=50;
end
clear i;
for i=80:1:87
Va(i,i+1)=70;
Vb(i,i+1)=60;
Vc(i,i+1)=50;
end
clear i;
dist=inf(130);
for i=1:1:130
for j=1:1:130
if w(i,j)>0;
% 点到点距离矩阵dist
dist(i,j)=sqrt((Temp(i,1)-Temp(j,1))^2+(Temp(i,2)-Temp(j,2))^2);%所有连线点的距离
% x=[Temp(i,1),Temp(j,1)];
% y=[Temp(i,2),Temp(j,2)];
% plot(x,y,'k');
end
if i==j
dist(i,j)=0;
end
% clear x y;
end
end
clear i j;
%ABC分别在点-点距离矩阵行驶时间矩阵
ta=dist./Va;tb=dist./Vb;tc=dist./Vc;
firstshot=[xlsread('firstshot_1.xlsx',1);xlsread('firstshot_1.xlsx',2);xlsread('firstshot_1.xlsx',3)];
%%%%%%%%%%%%%%%%%%%%
%注意firstshot(:,3)是不能用的点continue
clear path2 distance2
%J04,J06 ,J08
for i=72:2:76
for j=9:1:68
flag=0;
for k=1:1:24
if j==firstshot(k,3)
flag=1;
break;
end
end
if flag==0
if i==72&&j==9
[distance3,path3] = mydijkstra(dist,i,j);%使用dijkstra
path3=[path3,zeros(1,130-length(path3))];
else
[d,p]=mydijkstra(dist,i,j);
p=[p,zeros(1,130-length(p))];
distance3=[distance3;d];
path3=[path3;p];
end
end
end
end
clear d p flag;
%J13~J15
for i=81:1:83
for j=9:1:68
flag=0;
for k=1:1:24
if j==firstshot(k,3)
flag=1;
break;
end
end
if flag==0
if i==81&&j==9
[distance4,path4] = mydijkstra(dist,i,j);%使用dijkstra
path4=[path4,zeros(1,130-length(path4))];
else
[d,p]=mydijkstra(dist,i,j);
p=[p,zeros(1,130-length(p))];
distance4=[distance4;d];
path4=[path4;p];
end
end
end
end
clear d p flag;
path34=[path3;path4];
clear path3 path4
path34=path34(:,any(path34));%删除全为0列
%创建深度为228的矩阵wpa2,每一层代表一个最短路径方案,wp2(:,:,:)=1选路
[m,n]=size(path34);
wp34=zeros(130,130,m);
for i=1:1:m
for j=1:1:n-1
if path34(i,j+1)~=0
wp34(path34(i,j),path34(i,j+1),i)=1; %有向路径
end
end
end
clear i j m n;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%注意k的分配还未确定
%A类,fta每段路,fTa是方案k时的全局时间
% for k=1:1:216
% a=ta.*wp34(:,:,k);
% a(isnan(a))=0;
% eta(:,:,k)=a;
% eTa(1,k)=sum(sum(eta(:,:,k)));
% clear a;
% end
%
% %Ta2为A种车使用方案Ia2时的最短时间
% [Ta2,Ia2]=sort(eTa);
% a=[Ta2;Ia2];
% xlswrite('newtime3.xls',a,1);
% clear a;
% %
% %%B车
% %B类,ftb每段路,fTb是方案k时的全局时间
% for k=1:1:216
% a=tb.*wp34(:,:,k);
% a(isnan(a))=0;
% etb(:,:,k)=a;
% eTb(1,k)=sum(sum(etb(:,:,k)));
% clear a;
% end
%
% %Tb1为B种车使用方案Ib1时的最短时间
% [Tb2,Ib2]=sort(eTb);
% a=[Tb2;Ib2];
% xlswrite('newtime3.xls',a,2);
% clear a;
%%%%%%%%%%%%%%
%C类,ftc每段路,fTc是方案k时的全局时间
for k=1:1:216
a=tc.*wp34(:,:,k);
a(isnan(a))=0;
etc(:,:,k)=a;
eTc(1,k)=sum(sum(etc(:,:,k)));
clear a;
end
%T1为B种车使用方案Ib1时的最短时间
[Tc2,Ic2]=sort(eTc);
a=[Tc2;Ic2];
xlswrite('newtime3.xls',a,3);
clear a k;
add3Cshot=xlsread('promble3.xlsx',3);
for i=1:1:12
x(1,i)=Temp(add3Cshot(i,3),1);
y(1,i)=Temp(add3Cshot(i,3),2);
end