模拟退火适用于解决一类给定范围求最优解的问题,它是一种随机搜索方法,刚开始学到后面用了几次,越用越觉得它的神奇,所以来总结一下一些通用的条件。
#define P 20 随机撒点的数量
#define L 10 对于每个点,随机往周围走的次数
#define PI acos(-1.0) 随机生成角度时用
#define RAD 10000
做过几道题之后,发现随机撒点时,先把边界点加进去会取得更好的效果!
比如边界(0,0) 到(1000,1000)内
先加入
x[0]=0,y[0]=0
x[1]=1000,y[1]=0
x[2]=0,y[2]=1000
x[3]=1000,y[3]=1000
然后其他点随机生成。
随机生成0-1间随机数
double random(){
return (rand()%RAD+1)/(double)RAD;
}
delta *= 0.85. // 降温函数