这道题的题解怎么回事?
查看原帖
这道题的题解怎么回事?
67237
IOI2021楼主2020/5/12 14:48

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<0Delta<0的时候就到了下一个if那里

也可以轻易得到Delta/t>0-Delta/t>0这个显然的结论

这里就有问题了,为什么模拟退火的exp()exp()里面是>0>0

首先放上y=exy=e^x的函数图像

可以发现当x>0x>0的时候,ex>1e^x>1

那这样

exp((double) -Delta / T) * RAND_MAX < rand()

肯定是不成立的吧

这样,那些题解写的应该是爬山而不是退火吧

2020/5/12 14:48
加载中...