MATLAB 绘制旅行商问题的解
MATLAB plot the solution for the Traveling Salesman Problem
我有几点space:
A 0 0
B 0 1
C 0 2
D 0 4
E 1 2
F 1 3
G 2 0
H 2 4
I 3 4
J 4 4
K 5 0
L 6 1
M 7 2
N 7 4
O 4 2
P 8 3
Q 8 4 ;
我也有旅行商问题的解决方案,本质上是必须连接的边。
A B 1
A G 1
B C 1
C E 1
D F 1
D H 1
E F 1
G O 1
H I 1
I J 1
J N 1
K L 1
K O 1
L M 1
M P 1
N Q 1
P Q 1
我可以绘制节点,但我不确定如何指定边。
使用 Michael Kay 博士(北卡罗来纳州)的 MATLOG 工具箱。从 link 免费下载。
查看 pplot()
文档 (link here)。具体来说,您可以在给定 Arc List 的情况下绘制,在文档中表示为 IJ
(请参阅下面的代码)。
% Examples:
XY = [2 2; 3 1; 4 3; 1 4]; % Points
pplot(XY,'r.')
pplot(XY,num2cell(1:4))
IJ = [1 2; 1 3; 1 4]; % Arc List
h1 = pplot(IJ,XY,'g-');
IJlab = {'(1,2)','(1,3)','(1,4)'};
h2 = pplot(IJ,IJlab,XY);
delete([h1; h2])
loc = {[1 4 3 2 1]}; % Loc Seq Vector
h3 = pplot(loc,XY,'g-');
loclab = {'(1,4)','(4,3)','(3,2)','(2,1)'};
h4 = pplot(loc,loclab,XY);
set(h3,'color','b')
这能够快速生成您想要的情节。
更新
使用 MATLOG function list & documentation 中的 tspnneighbor()
和 tsp2opt()
的示例。
此方法使用 location 向量,它只是序列中的节点索引,例如loc = [3 5 6 1 2 4 3]
.
% Add MATLOG directory to path
path(path,'C:\Users\username\mypathtoMATLOG')
% DATA
XY_NCcity = uscity('XY',strcmp('NC',uscity('ST'))); % Get NC city [lon, lat] coordinates
C = dists(XY_NCcity,XY_NCcity,'mi'); % Get distance matrix
% ANIMATION
% Closest Unvisited City Algorithm (Nearest Neighbor)
makemap(XY_NCcity)
h = pplot(XY_NCcity,'r.')
[loc,TC,bestvtx] = tspnneighbor(C,527,h) % Start CUCA from node 527 (Raleigh)
以下是使用北卡罗来纳州城市的输出。进一步检查 tspnneighbor
函数表明它使用了 MATLOG 的 pplot
函数。
为了完整性,还有一个二选一改进特征,tsp2opt()
,可以改进解。
% OPTIONAL: ANIMATED TWO-OPT IMPROVEMENT
% Demonstrates what a "more optimal" tour would look like
% Final result is not guaranteed to be optimal
[loc,TC] = tsp2opt(loc,C,[],[],[],h); % Two-opt heuristic improvement
我有几点space:
A 0 0
B 0 1
C 0 2
D 0 4
E 1 2
F 1 3
G 2 0
H 2 4
I 3 4
J 4 4
K 5 0
L 6 1
M 7 2
N 7 4
O 4 2
P 8 3
Q 8 4 ;
我也有旅行商问题的解决方案,本质上是必须连接的边。
A B 1
A G 1
B C 1
C E 1
D F 1
D H 1
E F 1
G O 1
H I 1
I J 1
J N 1
K L 1
K O 1
L M 1
M P 1
N Q 1
P Q 1
我可以绘制节点,但我不确定如何指定边。
使用 Michael Kay 博士(北卡罗来纳州)的 MATLOG 工具箱。从 link 免费下载。
查看 pplot()
文档 (link here)。具体来说,您可以在给定 Arc List 的情况下绘制,在文档中表示为 IJ
(请参阅下面的代码)。
% Examples:
XY = [2 2; 3 1; 4 3; 1 4]; % Points
pplot(XY,'r.')
pplot(XY,num2cell(1:4))
IJ = [1 2; 1 3; 1 4]; % Arc List
h1 = pplot(IJ,XY,'g-');
IJlab = {'(1,2)','(1,3)','(1,4)'};
h2 = pplot(IJ,IJlab,XY);
delete([h1; h2])
loc = {[1 4 3 2 1]}; % Loc Seq Vector
h3 = pplot(loc,XY,'g-');
loclab = {'(1,4)','(4,3)','(3,2)','(2,1)'};
h4 = pplot(loc,loclab,XY);
set(h3,'color','b')
这能够快速生成您想要的情节。
更新
使用 MATLOG function list & documentation 中的 tspnneighbor()
和 tsp2opt()
的示例。
此方法使用 location 向量,它只是序列中的节点索引,例如loc = [3 5 6 1 2 4 3]
.
% Add MATLOG directory to path
path(path,'C:\Users\username\mypathtoMATLOG')
% DATA
XY_NCcity = uscity('XY',strcmp('NC',uscity('ST'))); % Get NC city [lon, lat] coordinates
C = dists(XY_NCcity,XY_NCcity,'mi'); % Get distance matrix
% ANIMATION
% Closest Unvisited City Algorithm (Nearest Neighbor)
makemap(XY_NCcity)
h = pplot(XY_NCcity,'r.')
[loc,TC,bestvtx] = tspnneighbor(C,527,h) % Start CUCA from node 527 (Raleigh)
以下是使用北卡罗来纳州城市的输出。进一步检查 tspnneighbor
函数表明它使用了 MATLOG 的 pplot
函数。
为了完整性,还有一个二选一改进特征,tsp2opt()
,可以改进解。
% OPTIONAL: ANIMATED TWO-OPT IMPROVEMENT
% Demonstrates what a "more optimal" tour would look like
% Final result is not guaranteed to be optimal
[loc,TC] = tsp2opt(loc,C,[],[],[],h); % Two-opt heuristic improvement