function [Hi,i] = sa2(Hval)
%
% sa2(@(i) H(i,m))
%
epsilon = 20;
m = Hval(0);
a = ones(1,m)/m;
% primo stato random
i = randdisc(a);
Hi = Hval(i);
counterperm = 1;
counterstati = 1; % conta gli stati visitati (NON gli stati diversi visitati)
Q = toeplitz((m:-1:1).^2);
sumQ2 = sum(Q,2);
Q = Q+diag(max(sumQ2)-sumQ2);
Q = Q/max(sumQ2);
while (counterperm < 20)
  j = randdisc(Q(i,:));
  counterstati = counterstati+1;
  Hj = Hval(j);
  if (Hj <= Hi)
% trovato uno stato minore    
    plot(1:m,Hval(1:m),j,Hj,'og')
    title(sprintf('epsilon = %.2e',epsilon))
    axis([0,m,-50,50])
    pause(0.1)
    if (i == j)
% nessun cambiamento di stato
      counterperm = counterperm+1;
    else  
% cambiamento di stato
      counterperm = 0;
      i = j;
      Hi = Hj;
    end
  else
    plot(1:m,Hval(1:m),j,Hj,'*r')
    title(sprintf('epsilon = %.2e',epsilon))
    axis([0,m,-50,50])
    pause(0.1)
    p = exp(-(Hj-Hi)/epsilon);
    va = randdisc([p,1-p]);
    if (va == 1)
% cambiamento di stato
      i = j;
      Hi = Hj;
      counterperm = 0;
    else
% nessun cambiamento
      counterperm = counterperm+1;
    end
  end
  plot(1:m,Hval(1:m),[i,i],[-50,Hi],'k')
  title(sprintf('epsilon = %.2e',epsilon))
  axis([0,m,-50,50])
  pause(0.1)
  epsilon = epsilon/1.01;
end
counterstati

