模拟退火算法原理与编程

第四篇为《模拟退火算法原理与编程》,在物理学实验中,对固体进行加热,让其在高温状态下熔解。在高温状态下,固体内部的粒子以相同的概率处于任何一种状态,温度缓慢降低退火,物体慢慢冷却,最终稳定在一个最优的状态。

一、模拟退火原理

模拟退火从物理退火中得到启发,从而设计出最优化算法。

如上面所说模拟退火思想来自于物理退火原理。固体温度高时,固体内部的粒子处于无序状态,内能增大,而在固体逐步冷却的过程中,粒子逐渐趋于有序状态,如果这个降温过程足够缓慢,那么在每个温度下,粒子都可以达到一个平衡态,最终在常温状态下达到基态,即内能减为最小。

粒子在某个温度T时,固体所处的状态具有一定的随机性,而这些状态之间的转换能否实现由Metropolis准则决定。

Metropoils准则定义了物体在某一温度T下从状态 i 转移到状态 j 的概率 P,其公式如下:

上式中e为自然对数,E(i)和E(j)分别表示物体在状态i与状态j下的内能,DeltaE = E(j)-E(j)表示内能的增量,K是玻尔兹曼常数。

由该公式可以看出,在某个温度T下,系统处于某种状态,由于粒子的运动,系统的状态会发生变化,并且导致系统能量的变化。如果变化是朝着减少能量的方向前进,那么就接受这个变化,否则就以一定概率接受这个变化。

同时如果能量的增加量越大,接受的概率越小,同时随着温度T的降低,接受系统能量增大的变化的概率将会越小。

原因在于退火是从高内能到低内能的过程,如果变化朝着减少能量的方向进行,那么必然接受这个变化。但是如果增加了能量也要以一定的概率去接受这个变化,比如如下图1所示,在该图中存在局部最优解B,当模拟退火到B点之后,下一步可能是能量增加,那么这个增加的变化也有可能被接受,这样的做法是避免陷入局部最优解无法跳出,其实其他的智能算法也有类似地设定。

                                           模拟退火算法原理与编程_第1张图片

                                                                                   图1 局部最优与最优值

注:图片来自网络,侵删。

二、模拟退火步骤

1、初始温度

初始温度T0的设置是模拟退火的全局搜索性能的重要影响因素之一。研究表明,初始温度设定得越高,得到高质量解的几率就越大,但是花费的时间就越多,所以对于初始温度的设定需要一定的策略。

2、领域函数

领域函数或称为状态产生函数应当尽可能保证产生的候选解遍布全部解空间,通常有两部分组成,即产生候选解的方式和候选解产生的概率分布。

3、接受概率

模拟退火过程中从一个状态到另一个状态的转移发生的概率称为接受概率,一般根据前面的Metropolis准则来进行接受概率的选择。

4、冷却控制

冷却管理是指从一个高温状态Tg向低温状态Tl冷却时的状态管理表,或者降温方式,假设时刻k的温度用tk表示,那么经典的降温方式可以采用如下公式:

或者

5、内层平衡

内层平衡用于决定在各温度下产生候选解的数目。

6、终止条件

算法终止的条件,包括达到终止温度的阈值,达到循环的次数等。

三、模拟退火编程

模拟退火编程解决一个简单的TSP问题,只有四个城市,代码如下:

#include
#include
#include
#include

#define X 4			//城市个数
#define N 15		//外层迭代次数
#define Y 3			//内层迭代次数
#define E 2.718		//自然对数

//距离矩阵
int tsp[X][X] = {{0,3,4,5},{3,0,1,2},{4,1,0,6},{5,2,6,0}};
//初始化温度
int T=10;
//产生随机排列
int *a;
//全局最优
int b;

float randoms()
{
	return (rand()/32767.0);
}

void getrand(int n)
{
	int i=0,m=0,t;
	a=(int*)malloc(sizeof(int)*n);
	a[m++]=rand()%n+1;
	while(mfit)
			{
				b = fit;
				for(j=0;j0)
				{
					p = pow(E,-(b-fit)/T);
					if(randoms()

运行结果如下所示:

参考文献

[1]张军,詹志辉. 计算智能[M]. 清华大学出版社,2009.11

相关博客

1、模拟退火总结(模拟退火)

2、[学习笔记] 模拟退火 (Simulated Annealing)

3、模拟退火的一些个人见解:https://blog.csdn.net/numberer/article/details/79996753

你可能感兴趣的:(智能信息处理,智能信息处理,模拟退火)