[模拟退火的兄弟]模拟上火
让我们又来发一句:
发布于博客园,未经本人允许,不可转载。(你就别把这种睿智文章发到其他地方丢我脸了吧)
目前你能在这几个地方看到:博客园,洛谷
前言
众所周知·,有一种绝妙的算法 —— SA 也就是模拟退火。
它是解决TSP问题的比较优秀方法之一。
它的解决方案是先定一个极大的范围,然后不断缩小范围。
但是范围实在是太大了,我们在这个巨大的范围内浪费了很多时间。
因此,优化的办法——模拟上火,就来了。
举这个例子
当然由于本人太菜,模拟上火只能拿89分,可能是参数调的不完美。
但是时间从926ms→261ms,基本上飞起来。存在毒瘤翻车情况(跑几次模拟上火都A不了的),因此模拟上火适用的范围是:
数据太大,一般的模拟退火T到飞起,因此需要缩小到一个合适的范围。
一般来说,一个峰比较少的函数,或者比较密集的函数,我们可以用到模拟上火
下面我们就来说一下模拟上火的主要函数确定温度的fever函数
1 double fever(int age) //age指的是迭代次数 2 { 3 double nx,ny; 4 nx=ax,ny=ay; 5 double t=max(bt,1.1)+rand()/10.0; 6 double dt=((rand()%1000)/100000.0)+1.1; //dt指的是升温系数 7 while(age) 8 { 9 double tx,ty; 10 age--; 11 tx=nx+(rand()*2-RAND_MAX)*t; 12 ty=ny+(rand()*2-RAND_MAX)*t; 13 double nowe=getengry(tx,ty); 14 if(nowe<lans) lans=nowe,nx=tx,ny=ty,ax=tx,ay=ty,age+=5; //找到比你好了的,多活几年吧 15 else if(exp(-nowe/t)*RAND_MAX>rand()) nx=tx,ny=ty,age-=5; //你就是最好了的,折寿 16 t*=dt; 17 } 18 return t; 19 }
于是经过本人(yy出来的)模拟上火,就弄出来了
对了,如果你真的要好好去学模拟退火,这篇文章你可以关了。
如果这篇文章对你有帮助的话,请马上关闭这个页面,这才是对你的帮助。
由于是yy了一个标题,所以瞎写写了一般,文章内容绝对无学术意义(应该
另外,我是等这篇文章被爬
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?