来个老哥救一下
  • 板块P2210 Haywire
  • 楼主ZepX_D
  • 当前回复5
  • 已保存回复5
  • 发布时间2025/1/23 19:57
  • 上次更新2025/1/23 22:41:22
查看原帖
来个老哥救一下
464004
ZepX_D楼主2025/1/23 19:57

根据 Link,感觉老题解大多害人不浅。

写一下我理论分析认为错误的题解,但是懒得造 hack 了,老哥们帮忙看一看,如果没分析错就帮忙 @ 一下管理,有错误请指出。

1

else if((1.0*exp(rc-lsc))/T>(1.0*rand()/RAND_MAX))//以一定的概率接受较差的新解,具体讲解见上面贴的Ciyang大佬的博客 
{
	exc(x,y);//换回去(不换回去(即接受命运的审判(较差的新解))的概率会越来越低,可以自行理解,exp函数用法见Ciyang大佬的博客) 
}

这部分判断条件写错了。T 应放在 exp 里面,且应为 <。 2

else if(exp((best_ans - tmp_ans) / T) > (double)rand() / RAND_MAX) {
//条不接收较差的条件
	swap(pos[x], pos[y]);
    //不接受较差解,将两个牛位置交换回去
}

应为 <。

3

else if(exp(ans-Num)/T<double(rand())/RAND_MAX)swap(pos[x],pos[y]);

这里 T 应放在 exp 里面。

4

else if((exp(dc-linshi)*1.0/t>(rand()*1.0/RAND_MAX))) change(x,y); //用一定的概率接受该解(毕竟有比你优的,但是你肯定要把不优的换回去啊qwq 

T 应放在 exp 里面,应为 <。

5

if(exp(de/t)>rand())//这里是如果按一定概率接受答案没有接受,就把答案改回来
{
    swap(b[ex],b[ey]);
}

这位更是重量级。

6

if(exp(1.0*(now-lcans))/temp<1.0*rand()/RAND_MAX) // 概率接受
{
	swap(pos[x],pos[y]);
}

temp 应放在 exp 里面。

7

else if (exp(abs(now - ans)) * 1.0 / temp < rddb(10000) / 32767){
	ans = now;
}

temp 应放在 exp 里面。

8

else if (exp((ans - mmm) / t) > (double)rand() / (double)RAND_MAX) swap(pos[x], pos[y]);

应为 <。

2025/1/23 19:57
加载中...