凑个热闹-模拟退火算法
下面是网上找到的一段关于退火算法的讲解.
哪们大虾有兴趣把下面的描述转化为可以运行的C#代码,谢谢
退火过程由冷却进度表(Cooling Schedule)控制,包括控制参数的初值t及其衰减因子Δt、每个t值时的迭代次数L和停止条件S。本试验分别使用Temperature、DiminishedRate、MarkovLength、AIM来表示。其参数值经过多次试验反复测试得到最好的组合,当
Temperature=300、DiminishedRate=0.9
MarkovLength=130000、AIM=100
的时候最好。
--------------------------------------------
1 初始化:初始温度T(充分大),初始解状态So(是算法迭代的起点), 每个T值的迭代次数L
2 while(true)
2.1对k=1,……,L做第2.1.1至第2.1.5步:
2.1.1 先预算新解和当前解的差值distinct
2.1.2 if(distinct<0||random(0..1)<exp(distinct/temperature))则产生新解S′并将新解作为当前解
2.1.3 如果 currentPath < bestPath 则 bestPath=currentPath
2.1.4 如果 连续退火了 AIM 次仍没有新的最好解产生则就假设找到了最好路径,跳出循环,结束程序,返回最优解。
2.1.5 如果连续Diminish_T_num此循环都没有更好的解产生则aim+1表明此次退火没有产生新的最好解,并退出此次循环,进行退火,即跳到第2.2步
2.2 降温
2.3 currentPath = bestPath
3 输出最佳路径