for i=1:N for j=1:n y = randn(1,k); z = y / sqrt(sum(y.^2)); y0=f(x0); new = x0+z*sqrt(T); for d= 1: k ifnew(d)<x_min(d) r = rand(1); new(d) = r*x_min(d)+(1-r)*x0(d); elseif new(d) > x_max(d) r = rand(1); new(d) = (1-r)*x_max(d)+r*x0(d); end x1=new; y1=f(x1);
%第三步,判断是否可以更换 if y1>=y0 x0=x1; x_m=[x_m;x0]; y_m=[y_m;y0]; else p= exp(-abs(y0 - y1)/T); if rand(1)<p x0=x1; end end end %注意上面是温度相同时候的循环,这时候可以画出来一次的结果和改变温度 end h.XData=x0; h.YData=f(x0); T=a*T; pause(0.01) % 暂停一段时间(单位:秒)后再接着画图 end