模拟退火
总结
-
接受一个不那么优的值时,不要改变全局答案和答案相关变量,仅仅改变当前相关值。
-
对于温度和下降系数的设置要设置好,一个比较优秀的数字是
5000 0.996
-
最好卡时优化
-
可以尝试在多段区间分别退火,最后取一个最优值
-
每一次退火前答案相关变量的取值就取之前已经得到了的最优值
-
对于这个概率可以这么表示
-
对于每一次当前值的变化可以考虑加入 T 的影响(尤其是在实数中),这样温度越低时,当前值浮动的幅度就会越小。
-
最好设一个接近答案的初始值
-
这一类题目一般题目的范围回比较小(一般控制在几十)
Luogu P1337 [JSOI2004]平衡点 / 吊打XXX
void fire(){
db T=5000,down=0.996;
db dx=ansx,dy=ansy;
while(T>1e-15){
db x=dx+T*(rand()+rand()-RAND_MAX);
db y=dy+T*(rand()+rand()-RAND_MAX);
db d=calc(x,y);
if(d-ans<0) ans=d,dx=x,dy=y,ansx=dx,ansy=dy;
else if(exp((ans-d)/T)*RAND_MAX>rand()) dx=x,dy=y;
T=T*down;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】