模拟退火算法介绍
1.1 模拟退火算法的原理
模拟退火算法是一种元启发式(Meta-Heuristics)算法,来源于固体退火原理,将固体加热至充分高的温度,再让其徐徐冷却。加热时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。根据Metropolis准则,粒子在温度T时趋于平衡的概率为 ,其中E为温度T时的内能,ΔE为其改变量,k为Boltzmann常数。
1.2 模拟退火算法的模型
① 初始化:初始温度T(充分大),初始解状态S(算法迭代的起点), 每次迭代次数L
② for k=1 to L 做③至⑥
③ 产生新解S’
④ 计算增量Δt′=C(S′)-C(S),其中C(S)为评价函数
⑤ 若Δt′<0则接受S’作为新的当前解,否则以概率 接受S’作为新的当前解
⑥ 如果满足终止条件则输出当前解作为最优解,结束程序
⑦ T逐渐减少,然后转②
又是一种神奇的算法:模拟退火。就是一步步地退火,一步步地逼进。这种算法应该是只能用于一些单调函数性质的几何问题、现实问题吧。模拟退火与以往所学的算法大不相同,在某种程度上来说是一种万能算法。如果有什么图论、几何之类的题如果做不出,应该可以用模拟退火来试试人品。
POJ 2420 照着网上一个小代码轻松敲定。人品不错,一次AC。
Source Code
Problem: 2420
User: liu696639
Memory: 352K
Time: 0MS
Language: C++
Result: Accepted
- Source Code
#include<iostream> #include<cmath> #include<stdio.h> using namespace std
- Source Code