OI骗分神器——模拟退火算法
前言&&为什么要学模拟退火
最近一下子学了一大堆省选算法,所以搞一个愉快一点的东西来让娱乐一下
其实是为了骗到更多的分,然后证明自己的RP。
说实话模拟退火是一个集物理与IT多方面知识与一身的高级随机化算法
所以更应该好好学了
PS:本文大部分内容参考rvalue大佬的博客,在本蒟蒻学习的过程过程中起到了极大的帮助。
什么是模拟退火&&模拟退火可以干什么
模拟退火算法(Simulate Anneal,SA)是一种通用概率演算法,用来在一个大的搜寻空间内找寻命题的最优解。模拟退火是由S.Kirkpatrick, C.D.Gelatt和M.P.Vecchi在1983年所发明的。V.Černý在1985年也独立发明此演算法。模拟退火算法是解决TSP问题的有效方法之一。
模拟退火的出发点是基于物理中固体物质的退火过程与一般组合优化问题之间的相似性。模拟退火算法是一种通用的优化算法,其物理退火过程由加温过程、等温过程、冷却过程这三部分组成。
——By 百度百科
看的很蒙蔽?其实我也是
其实模拟退火是一种随机化算法,一般用于求函数的极值。
当然TSP什么的跑起来也不在话下。
一般这个函数都是毫无规律的,废话有规律还不上二/三分
一般的随机化算法——爬山算法
首先对于上面的函数求极值问题我们很容易想到可以乱搞
假设当前的最优解位置为\(x\),设函数值为\(F(x)\),那么我们可以在一定范围内随机一个\(y\),若\(F(y)>F(x)\)(假如求最大值),那么将最优解\(x\)的位置移动至\(y\)。
这样的肯定会越来越接近最优解,不过可能会陷入一个局部最优解而无法出来。
注意爬山算法得出的最优解与初始解的位置以及搜寻的附近解的区域大小有关。
当然如果你寻找新方案的区间很大的话有概率跳出去, 但是太大的话又可能跳来跳去跳乱了从而找不到最优解
所以我们应该怎么办呢,当然是求助于自然规律啦
关于退火的核心理论
爬山法是完完全全的贪心法,每次都鼠目寸光的选择一个当前最优解,因此只能搜索到局部的最优值。模拟退火其实也是一种贪心算法,但是它的搜索过程引入了随机因素。模拟退火算法以一定的概率来接受一个比当前解要差的解,因此有可能会跳出这个局部的最优解,达到全局的最优解。——By dalao's blog
搞事情,那我们具体怎么实现呢?
根据热力学规律并结合计算机对离散数据的处理, 我们定义: 如果当前温度为\(T\), 当前状态与新状态之间的能量差为\(\Delta E\), 则发生状态转移的概率为:
\[P(\Delta E)=e^{\frac{\Delta E}{kT}}\]
显然如果\(\Delta E\)为正的话转移是一定会成功的, 但是对于\(\Delta E<0\)我们则以上式中计算得到的概率接受这个新解。
然后我们只要维护当前温度\(T\)即可。这里有三个比较重要的参数:初始温度\(T_0\)(视题目要求而定),降温系数\(dlt\)(一般取\([0.9,0.998]\)之间的数),终止温度\(EPS\)(视题目精度而定)
退火过程中我们先让\(T=T_0\),然后进行一次转移,之后令\(T=dltT\)
当\(T<EPS\)时结束退火,并将当前解作为最优解。
看一个维基百科上的图理解一下吧:

模拟退火的实践核心——参数
要写得一手好模拟退火,强大的调参能力是必不可少的。以下简述几个常用的技巧:
- 关于\(EPS\),这个主要视题目要求而定,一般比要求的精度多取两位小数就够了,主意取得太大可能会T。
- 关于\(dlt\),一般情况下\(dlt\)的取值一旦减少一个数量级,时间复杂度就会增大\(10\)倍。因此谨慎调节\(dlt\),如果发现总是找不到最优解那么可以考虑更慢的降温,即适当减小\(dlt\)。
- 关于\(T_0\),这个和时间复杂度关系不大,不过一般情况下\(T_0\)越大越容易跳出局部最优解。
大致框架
- 根据当前解以及温度
找到随机出下一个解 - 计算下一个解的能量
- 决定是否要接受这个新的解
- 进行降温
总结&&趣谈随机化算法
模拟退火在OI中是一种在最优化问题中骗分的好方法
对于一些奇奇怪怪的多元函数也可以用这个方法来求解
同时,其它的一些随机化算法也是有着很大的应用的,网上有一个比较有趣且形象的方法来理解它们:
- 兔子朝着比现在高的地方跳去。他们找到了不远处的最高山峰。但是这座山不一定是珠穆朗玛峰。这就是局部搜索,它不能保证局部最优值就是全局最优值。
- 兔子喝醉了。他随机地跳了很长时间。这期间,它可能走向高处,也可能踏入平地。但是,他渐渐清醒了并朝最高方向跳去。这就是模拟退火。
- 兔子们吃了失忆药片,并被发射到太空,然后随机落到了地球上的某些地方。他们不知道自己的使命是什么。但是,如果你过几年就杀死一部分海拔低的兔子,多产的兔子们自己就会找到珠穆朗玛峰。这就是遗传算法。
- 兔子们知道一个兔的力量是渺小的。他们互相转告着,哪里的山已经找过,并且找过的每一座山他们都留下一只兔子做记号。他们制定了下一步去哪里寻找的策略。这就是禁忌搜索。
一道经典的模拟退火题
题目:P1337 [JSOI2004]平衡点 / 吊打XXX&&Sol
OI骗分神器——模拟退火算法的更多相关文章
- 51Nod 算法马拉松15 记一次悲壮而又开心的骗分比赛
OwO 故事的起源大概是zcg前天发现51Nod晚上有场马拉松,然后他就很开心的过去打了 神奇的故事就开始了: 晚上的时候我当时貌似正在写线段树?然后看见zcg一脸激动告诉我第一题有九个点直接输出B就 ...
- STL函数库的应用第四弹——全排列(+浅谈骗分策略)
因为基础算法快学完了,图论又太难(我太蒻了),想慢慢学. 所以暂时不写关于算法的博客了,但又因为更新博客的需要,会多写写关于STL的博客. (毕竟STL函数库还是很香的(手动滑稽)) 请出今天主角:S ...
- BZOJ 3680: 吊打XXX【模拟退火算法裸题学习,爬山算法学习】
3680: 吊打XXX Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 3192 Solved: 1198[Sub ...
- Python自然语言处理系列之模拟退火算法
1.基本概念 模拟退火算法(Simulated Annealing,SA)是一种模拟固体降温过程的最优化算法.其模拟的过程是首先将固体加温至某一温度,固体内部的粒子随温度上升慢慢变为无序的状态,内能增 ...
- 模拟退火算法c++
转载. 为方便理解, 在原博客的基础上加部分注释, 原博客地址:http://www.cnblogs.com/CsOH/p/6049117.html 今天终于用模拟退火过了一道题:CodeVS: P1 ...
- NOIP 骗分技巧
目录 第1章 绪论 第2章 从无解出发 \hookrightarrow↪ 2.1 无解情况 \hookrightarrow↪ 2.2 样例——白送的分数 第3章 “艰苦朴素永不忘” \hookrigh ...
- JVM内存管理------GC算法精解(五分钟教你终极算法---分代搜集算法)
引言 何为终极算法? 其实就是现在的JVM采用的算法,并非真正的终极.说不定若干年以后,还会有新的终极算法,而且几乎是一定会有,因为LZ相信高人们的能力. 那么分代搜集算法是怎么处理GC的呢? 对象分 ...
- 模拟退火算法-[HDU1109]
模拟退火算法的原理模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到 ...
- 【高级算法】模拟退火算法解决3SAT问题(C++实现)
转载请注明出处:http://blog.csdn.net/zhoubin1992/article/details/46453761 ---------------------------------- ...
随机推荐
- Android开发常用的一些功能列表(转)
文章来源:http://www.cnblogs.com/netsql/archive/2013/03/02/2939828.html 1.软件自动更新下载,并提示 2.软件登录注册,以及状态保存 3. ...
- exception is feign.RetryableException: Connection refused (Connection refused) executing GET http://......
2018-03-23 10:00:58.430 ERROR 31889 --- [nio-4321-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Se ...
- 关于《SQLSERVER走起》微信账号自动回复功能的升级
关于SQLSERVER走起微信账号自动回复功能的升级 由于腾讯对微信公众账号的升级,本公众账号也增加了关键词自动回复功能, 只需要输入某些特定关键词,本公众账号就会进行自动回复. 例如: 输入 sql ...
- [20180730]exadata与行链接.txt
[20180730]exadata与行链接.txt --//最近一段时间在看<expert oracle exadata>,智能扫描的三大优化方法是:字段投影,谓词过滤,存储索引.大多数智 ...
- 【第三篇】SAP ABAP7.5x新语法之程序结构&SubScreen
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文地址:SAP ABAP7.5x系列之程序结构& ...
- MySQL参数log_bin_trust_function_creators介绍-存储过程和复制
MySQL的有个参数log_bin_trust_function_creators,官方文档对这个参数的介绍.解释如下所示: log_bin_trust_function_creators Comma ...
- 描述性统计的matlab实现
理论讲的再多不会做也白弄 直接上手 一.针对接近正态分布的(均值,方差,标准差,极差,变异系数,偏度,峰度) 这里我必须提前说明一点就是,你在写好函数后,函数的名是dts,你保存的文件名也必须是dts ...
- 在同一个服务器(同一个IP)为不同域名绑定的免费SSL证书
越来越多的浏览器不在支持http协议了,这就要求你为你的网站必须绑定SSL证书.谷歌浏览器也将要在今年取消对http协议的支持,申请CA证书迫在眉睫.我购买有两个域名,一个虚拟机,没事鼓捣鼓捣,图个乐 ...
- January 17th, 2018 Week 03rd Wednesday
Don't let go too soon, but don't hold on too long. 不要太快放手,也别紧握太久. It is inevitalbe to encounter with ...
- January 03rd, 2018 Week 01st Wednesday
My existence is not without reason. I know that I could be a quite a different person. 我的存在必定有意义,我知道 ...