Error using matlab.graphics.chart.primitive.GraphPlot/highlight>checkSubgraph
Afficher commentaires plus anciens
I am trying to solve a modified version of Travelling Salesman Problem based on the example here https://www.mathworks.com/help/optim/examples/travelling-salesman-problem.html . I solved it using MATLAB-Gurobi interface. I got problem in visualizing the results. I keep getting the error messages below:
"Error using matlab.graphics.chart.primitive.GraphPlot/highlight>checkSubgraph
G must have the same nodes and a subset of the edges of the plotted graph.
Error in matlab.graphics.chart.primitive.GraphPlot/highlight
Error in TSPGurobi (line 186)
highlight(hGraph,Gsol,'LineStyle','-')"
I use the same code from the example to visualize the results, why did I get error messages?

Results: Node 1, 2, 5, 6 are visited and connected.
I once plotted the results using the same code, but it no longer works. I don't know why. Here are my codes for the visulization part. I directly put the results of the TSP as data with vector name of edge and node. Any help is appreciated! Thanks!
I use 2020a, 2019b and 2019a, same error.
% Generate random stops inside a crude polygonal representation of the continental U.S.
load('usborder.mat','x','y','xx','yy');
rng(3,'twister') % Makes a plot with stops in Maine & Florida, and is reproducible
nStops =7; % You can use any number, but the problem size scales as N^2
stopsLon = zeros(nStops,1); % Allocate x-coordinates of nStops
stopsLat = stopsLon; % Allocate y-coordinates
n = 1;
while (n <= nStops)
xp = rand*1.5;
yp = rand;
if inpolygon(xp,yp,x,y) % Test if inside the border
stopsLon(n) = xp;
stopsLat(n) = yp;
n = n+1;
end
end
% Generate all the trips, meaning all pairs of stops.
idxs = nchoosek(1:nStops,2);
%Represent the problem as a graph. Create a graph where the stops are nodes and the trips are edges.
G = graph(idxs(:,1),idxs(:,2));
%Display the stops using a graph plot. Plot the nodes without the graph edges.
num=1:nStops;
label=string(num);
figure
hGraph = plot(G,'XData',stopsLon,'YData',stopsLat,'LineStyle','none','NodeLabel',{});
labelnode(hGraph,[1:nStops],label(1:nStops))
hold on
% Draw the outside border
plot(x,y,'r-')
hold off
% I solve the problem and get the results below
edge=[1;0;0; 0;1;0; 0;0;1; 0;0;0; 0;0;0; 0;0;0; 1;0;0 ];
node=[1;1;0;0;1;1;0];
% Create a new graph with the solution trips as edges.
% To do so, round the solution in case some values are not exactly integers, and convert the resulting values to logical.
ledge= logical(round(edge));
Gsol = graph(idxs(ledge,1),idxs(ledge,2));
%Overlay the new graph on the existing plot and highlight its edges.
%hold on
highlight(hGraph,Gsol,'LineStyle','-')
title('Solution with Subtours')
Réponse acceptée
Plus de réponses (0)
Catégories
En savoir plus sur Linear Programming and Mixed-Integer Linear Programming dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
