模拟退火与爬山法
通过向 chatGPT-4o-mini 提问,我注意到所有爬山法可以解决的问题模拟退火都可以解决,所以爬山法死了我不想学爬山法。
具体的,对于一个多峰函数求解最值的题目都可以用模拟退火来做。
如果现在在较优解
考虑
令
下面的内容很重要!!!!!!
我们令新算出的结果为
对于求解最小值的问题,取
- 如果
,那么就直接接受。 - 否则如果
exp(-del/t)>Rand()
,那么接受。
对于求解最小值的问题,一样取
- 如果
,那么就直接接受。 - 否则如果
exp(del/t)>Rand()
,那么接受。
需要注意的是 exp(x)
发现对于 epx(x)
始终大于
所以上面的公式在 epx
中是取 del
还是 -del
就十分好理解了,所以这并不需要死记硬背。
形象的,放一张从 OI-Wiki 偷的图:
JSOI2004 平衡点 / 吊打XXX
练手题,但是题目太困难了,考虑给一个形式化题意:
找到一个
就是模板,按照上面的思路写就行了。
AHOI2014/JSOI2014 保龄球
考虑每一次随机交换
JSOI2016 炸弹攻击
直接随机放炸弹的位置,因为函数长得奇丑无比所以要求扰动的范围较大,生成的时候需要使用:
double xx=(rand()*2-RAND_MAX)*t+x;
而不是:
double xx=(2.0*rand()/RAND_MAX-1)*t+x;
HAOI2006 均分数据
考虑先随机分组,然后模拟退火随机改变一个元素的分组就行了。
JSOI2008 球形空间产生器
设一个变量
化简得:
移项得:
其中
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署