前言
模拟退火算法(SA)是较为常见的现代优化算法之一,常用于旅行商(TSP)问题中。数学建模里学生们常常使用该算法,甚至是为了使用这个算法而使用这个算法,让评委老师们审美疲劳。评委老师明确表明使用所谓"神算法"(神经网络,模拟退火,遗传算法等等)而过于牵强者拿不了高分(见:http://special.univs.cn/service/jianmo/sxjmyw/2018/1128/1187951_15.shtml)。希望大家不要觉得它名词高级就认为它能吸引评委眼睛,评委毕竟是教授,不可能被几个名词唬住。
但是呢,我们是学生,不能因为它不能随便用就不学习它,而在编程的环节中,我们亦有收获,况且爱因斯坦也是从一加一开始学起的,所以模拟退火算法还是有学习的必要的。话说的有点多,下面进入主题。
算法框架
模拟退火算法可以粗分为以下几个步骤:
1,初始温度的设置、初始解的生成、设置每个温度下产生解的个数。
2,产生新解。
3,计算代价函数差。
4,Metropolis判别。(别被名词吓住,形式上是很简单的一个原则)
5,降温。
6,判断温度是否小于一个给定量。是,则结束;否,则跳转到第2步。
以下对每个步骤做详细的解释。
初始温度的设置、初始解的生成、设置每个温度下产生解的个数:
初始温度与降温系数、终止温度息息相关,它们仨决定了迭代的次数,具体公式为:终止温度 ≈ 初始温度*(降温系数)^迭代次数,其中1降温系数是(0,1)的一个常数 。对于小规模的问题,一般初始温度取1