Is it possible to increase the performance by representing the values of the variables in each iteration of the loop?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Izan Segarra
am 28 Feb. 2019
Kommentiert: Izan Segarra
am 1 Mär. 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 Kommentare
Walter Roberson
am 28 Feb. 2019
If you are talking about graphics performance, then you could plot less often, or you could improve the code for doing the plotting.
But perhaps you are talking about the performance of your GA algorithm in the sense of it taking a long time per iteration, or in the sense of it taking a long time to make useful improvements in position?
Akzeptierte Antwort
Walter Roberson
am 1 Mär. 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 Kommentare
Walter Roberson
am 1 Mär. 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 = text(model.x, model.y, {}, 'FontWeight', 'bold', 'HorizontalAlignment',...
'center', 'BackgroundColor', 'none','FontSize',10);
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 = num2str(rte(:));
set(Hpl, {'String'}, vxlabels);
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
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Genetic Algorithm finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!