求助关于模拟退火的写法
查看原帖
求助关于模拟退火的写法
306049
Utilokasteinn楼主2023/10/20 11:16

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;
	}

所以说正确的写法是什么

2023/10/20 11:16
加载中...