Rt,OI-Wiki 上说如果当前状态优于当前最优解,则更新的概率是 1,可是上面的代码却似乎不是这样写的。
以下这种写法只有 80pts
while(T>0.001)
{
double xx=x+T*(rnd()*2-1);
double yy=y+T*(rnd()*2-1);
double d=calc(xx,yy)-calc(x,y);
if(d<0)x=xx,y=yy;
else if(exp(-d/T)>rnd())x=xx,y=yy;
T*=0.97;
}
而把 d<0 那行去掉就有 100 了
while(T>0.001)
{
double xx=x+T*(rnd()*2-1);
double yy=y+T*(rnd()*2-1);
double d=calc(xx,yy)-calc(x,y);
if(exp(-d/T)>rnd())x=xx,y=yy;
T*=0.97;
}
所以说正确的写法是什么