模拟退火算法SA参数设置实验记录

模拟退火算法有4个参数

N:每个温度迭代次数

T:重复降温次数

a:降温系数

t0:初始温度

本文用一个50个城市的TSP问题数据集,用交叉对比的方法调参。一组参数运行200次取平均。

首先调初始温度

N=1000,T=1000,a=0.99固定



可以看到在初始温度在1500时平均距离和标准差就几乎没有什么变化了。也就是初始温度在大于1500以后对结果已经没有什么影响。产生这种效果的原因是

模拟退火算法最重要的判断条件

Math.exp(差值/t)>r(0-1的随机数)

因为0-1之间随机平均下来就是0.5

 

Math.exp-0.69=0.5

也就是说-0.69<  差值/t <0 Math.exp(差值/t>0.5

所以大致可以将模拟退火算法理解成只要  差值的绝对值在t的0.7倍以内就会被采用。因为温度t随着迭代逐渐降低,t*0.7显然逐渐变得更小,实现了退火。

所以t0*a^N这个值对退火算法最为重要。

比如 1500*0.99^1000=0.06,0.06*0.7这个冗余度对计算路径太小了已经没什么意义。

第二步,调节降温系数

N=1000,T=1000,t0=1500固定


当降温系数=0.99815时平均距离为69276最优,这时t0*a^N=235,这道题的最短路径可能在66221附近,235*0.7/66221=0.002,这个冗余度相当于最优值的0.2%

第三步调重复降温次数T

 

N=1000,a=0.99815,t0=1500固定

这组结果很明显同一个过程重复次数越多性能越好。但T越大速度也越慢,所以T取2500.因为每个温度迭代次数=1000固定所以t0*a^N也都是固定的。

第四步调节每个温度迭代次数N

T=2500,a=0.99815,t0=1500固定



这个很明显随着N的变化t0*a^N也显著变化,结果变差。

所以综合起来退火算法的四个参数

N:每个温度迭代次数

T:重复降温次数

a:降温系数

t0:初始温度

T越大性能越优,

N,a,t0这个三个变量是相互制约的,t0*a^N的值是退火算法最为关键的因素。一个大致可以参考的标准是t0*a^N*0.7/理论最优值=0.002

这个测试和蚁群算法的测试用的数据集是一样的

虽然退火算法的最好平均值大于蚁群算法,

但是模拟退火算法的最优值是66221,这个最优值好于蚁群算法, 而且这个最优值多次出现,表明退火算法更有利于搜索全局最优值。


模拟退火算法SA参数设置实验记录_第1张图片


模拟退火算法SA参数设置实验记录_第2张图片


模拟退火算法SA参数设置实验记录_第3张图片


模拟退火算法SA参数设置实验记录_第4张图片


模拟退火算法SA参数设置实验记录_第5张图片


模拟退火算法SA参数设置实验记录_第6张图片


模拟退火算法SA参数设置实验记录_第7张图片


模拟退火算法SA参数设置实验记录_第8张图片


模拟退火算法SA参数设置实验记录_第9张图片


模拟退火算法SA参数设置实验记录_第10张图片

你可能感兴趣的:(进化)