how to Plot convergence of Simulated annealing optimization problem?

9 views (last 30 days)
I want to pot convergence of best costs obtained from simulated annealing optimization algorithm. i want a vector of best costs for plotting. would you help me out in this regard?
here is my code for main file.
function [xnew, newcost, ]=simu_my2(l,u,xsol,Maxiter,CostFunction)
%%%%%%%%%%for first test function sphere%%%%%%%%
%nd= 5;
%l=-5.12*ones(1,nd);
%u=5.12*ones(1,nd);
%xsol=[0.01 0.01]; % it can be random(1e-10)*(l+rand(1,nd).*(u-l));
To=1;%0.5
%Maxiter=100;
% CostFunction = @cost1;% Cost Function
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for camel hump
%% Initialization
alpha=0.1;
T=To;
cost11 = CostFunction(xsol);%%%%%%%%%%%%first cost
%% SA Main Loop
for k=1: Maxiter
% Create and Evaluate New Solution
dx=0.01*(l+(rand(size(l)).*(u-l)));% step size * neighbour
xnew=xsol+dx;
newcost = CostFunction(xnew);%%%%%%%%%%%second cost
diff=newcost-cost11;
if diff<0 % If NEWSOL is better than SOL
xnew;
newcost;
elseif rand <exp(-diff/T)%=P %%%%%%%%%%%%% nature inspired optmization algorithm
xnew;
newcost;
end
if newcost<cost11
xnew;
end
T=(1-0.1).^(k);
end
newcost
xnew
end
%% Results
% function f=cost1(x)
% f=sum(x.^2);
% end
% function f= cost2(x)
% f=(4-2.1*x(1).^2+x(1).^4/3).*x(1).^2+x(1).*x(2)+4*(x(2).^2-1).*x(2).^2;
% end
% function f = ackley(xx, a, b, c)
%

Answers (1)

Alan Weiss
Alan Weiss on 8 Apr 2022
Perhaps you want to collect the cost as a vector that you can then plot. Something like this:
% Put this line immediately after %% SA Main Loop
costs = zeros(Maxiter,1);
cost(1) = cost11;
% Just below for k=1: Maxiter put
if k > 1
cost(k) = cost(k-1);
end
end
% Where you have
if diff<0 % If NEWSOL is better than SOL
xnew;
newcost;
% Instead put
if diff<0 % If NEWSOL is better than SOL
xsol = xnew;
costs(k) = newcost;
% Similarly, where you have
elseif rand <exp(-diff/T)%=P %%%%%%%%%%%%% nature inspired optmization algorithm
xnew;
% Instead put
elseif rand <exp(-diff/T)%=P %%%%%%%%%%%%% nature inspired optmization algorithm
xsol = xnew;
costs(k) = newcost;
This should leave you with an array costs that you can then plot.
Alan Weiss
MATLAB mathematical toolbox documentation

Products


Release

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!