function xb=recuit(J,sig,Nmax,q,N,a,b,n)
    // T: décroissance géométrique par palliers de longueur N
    // X: uniforme dans [a,b]^n
    // xb: meilleure  approximation (J(xb) minimal)
  x=grand(n,1,'unf',a,b);xb=x;
  for i=1:Nmax
    xtilde=x+sig*grand(n,1,'nor',0,1)
    T=q^(floor(i/N))
    p=exp(-(J(xtilde)-J(x))/T)
    if (rand()<p)
      x=xtilde  // on remplace x par xtilde (sinon on garde x
    end  
    if J(x)<J(xb) then
      xb=x
    end    
  end  
endfunction
function y=rast(x)
   y=sum(x.^2-cos(2*%pi*x))+length(x)
endfunction
sig=0.1;q=0.98;N=1000;Nmax=30000;a=-5;b=5;n=7
x=recuit(rast,sig,Nmax,q,N,a,b,n)
disp('meilleure approximation du minimum');disp(x)
