Is it possible to increase the performance by representing the values of the variables in each iteration of the loop?
2 views (last 30 days)
Show older comments
Izan Segarra
on 28 Feb 2019
Commented: Izan Segarra
on 1 Mar 2019
I'm doing a genetic algorithm to solve the TSP problem and I'm trying to plot the result in each iteration, but I'm obtaining a bad performance. I would like to know how to improve the code to achieve better efficiency.
Is it possible to increase the performance by representing the values of the variables in each iteration of the loop?
while iga<maxit
%.......
iga=iga+1; %
rte = pop(1,:); %Best Route
subplot(1,2,1)
plot(model.x(rte),model.y(rte),'r','Marker','o','MarkerEdgeColor','black', 'MarkerFaceColor','white','MarkerSize',12);
title(sprintf('Total Distance = %1.2f, Iteration = %d',cost(1),iga));
vxlabels = arrayfun(@(n) {sprintf('%d', n)}, (1:length(model.dt.Points))'); %Number of each point
Hpl = text(model.x, model.y, vxlabels, 'FontWeight', 'bold', 'HorizontalAlignment',...
'center', 'BackgroundColor', 'none','FontSize',10)
subplot(1,2,2)
plot((1:iga-1),minc(1:iga-1),(1:iga-1),meanc(1:iga-1));
title('Convergence');
drawnow limitrate;
%.......
end
4 Comments
Accepted Answer
Walter Roberson
on 1 Mar 2019
ax1 = subplot(1,2,1);
ax2 = subplot(1,2,2);
linehandle1 = line(ax1, nan, nan, 'r', 'Marker', 'o', 'MarkerEdgeColor', 'black', 'MarkerFaceColor', 'white', 'MarkerSize', 12);
Hpl = [];
title1 = title('Total Distance and iteration');
linehandle2a = line(ax2, nan, nan);
linehandle2b = line(ax2, nan, nan);
title(ax2, 'Convergence');
while iga<maxit
%.......
iga=iga+1; %
rte = pop(1,:); %Best Route
set(linehandl1, 'XData', model.x(rte), 'YData', model.y(rte));
set(title1, 'string', sprintf('Total Distance = %1.2f, Iteration = %d',cost(1),iga));
vxlabels = arrayfun(@(n) {sprintf('%d', n)}, (1:length(model.dt.Points))'); %Number of each point
if ~isempty(Hpl); delete(Hpl); end
Hpl = text(model.x, model.y, vxlabels, 'FontWeight', 'bold', 'HorizontalAlignment',...
'center', 'BackgroundColor', 'none','FontSize',10)
set(linehandle2a, 'XData', 1:iga-1, 'YData', minc(1:iga-1));
set(linehandle2b, 'XData', 1:iga-1, 'YData', meanc(1:iga-1));
drawnow limitrate;
%.......
end
Although it might in theory be more efficient to update all of the text objects rather than creating new ones, there is one text object per label and so changing them all becomes a bit messier. It is possible even without loop, but it involves some advanced features.
5 Comments
More Answers (0)
See Also
Categories
Find more on Genetic Algorithm in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!