temp_law_csa — The classical temperature decrease law
T_out = temp_law_csa(T_in,step_mean,step_var,temp_stage,n,param)
the temperature at the current stage
the mean value of the objective function computed during the current stage
the variance value of the objective function computed during the current stage
the index of the current temperature stage
the dimension of the decision variable (the x in f(x))
not used for this temperature law
the temperature for the temperature stage to come
This function implements the classical annealing temperature schedule (the one for which the convergence of the simulated annealing has been proven).
function y = rastrigin(x) y = x(1)^2+x(2)^2-cos(12*x(1))-cos(18*x(2)); endfunction x0 = [-1, -1]; Proba_start = 0.8; It_intern = 1000; It_extern = 30; It_Pre = 100; printf('SA: the CSA algorithm\n'); T0 = compute_initial_temp(x0, rastrigin, Proba_start, It_Pre, neigh_func_default); printf('Initial temperatore T0 = %f\n', T0); [x_opt, f_opt, sa_mean_list, sa_var_list, temp_list] = optim_sa(x0, rastrigin, It_extern, It_intern, T0, Log = %T, temp_law_csa, neigh_func_csa); printf('optimal solution:\n'); disp(x_opt); printf('value of the objective function = %f\n', f_opt); scf(); subplot(2,1,1); xtitle('Classical simulated annealing','Iteration','Mean / Variance'); t = 1:length(sa_mean_list); plot(t,sa_mean_list,'r',t,sa_var_list,'g'); legend(['Mean','Variance']); subplot(2,1,2); xtitle('Temperature evolution','Iteration','Temperature'); plot(t,temp_list,'k-');