RT
这道题的几篇题解都说自己写的是模拟退火,但是在他们代码的关键部分几乎都是这么写的
if(Delta > 0){
ans_now = now;
ans_best = max(ans_now, ans_best);
x_pla += delta_x;
y_pla += delta_y;
}
else if(exp((double) -Delta / T) * RAND_MAX < rand()){
x_pla += delta_x;
y_pla += delta_y;
ans_now = now;
}
可以发现当Delta<0的时候就到了下一个if那里
也可以轻易得到−Delta/t>0这个显然的结论
这里就有问题了,为什么模拟退火的exp()里面是>0的
首先放上y=ex的函数图像
可以发现当x>0的时候,ex>1
那这样
exp((double) -Delta / T) * RAND_MAX < rand()
肯定是不成立的吧
这样,那些题解写的应该是爬山而不是退火吧