数学建模--智能优化算法--模拟退火理论
本文章作者为上帝果冻(e小白网站用户名和b站up主名 )。e小白网址:www.e-xiaobai.com
0 前言
本文重点讨论模拟退火算法的简单应用,对理论仅进行一些简单介绍,本文对算法的实现使用python语言。前面简介偏理论,如果不感兴趣可以直接跳转到代码和流程部分。
1 模拟退火算法简介
模拟退火算法(Simulated Annealing,SA)是一种全局搜索算法。其理论来自于物理退火过程,物理退火分为三个部分“升温过程”,“降温过程”和“等温过程”.
1.1 升温过程
升温过程,在物理过程中是将固体加热到液体状态,打破固体中可能的非均匀状态,使得它降温后可以建立起新的平衡。过渡到数学模型中,也就是打破当前这个非最优解的状态,使得它在降温过程中可以逐步趋向最优解。
1.2 降温过程
降温过程,是使得高温液体逐步趋向低温状态从而达到新的有序状态(目标是希望新状态的固体是均匀的),如果降温过程太快会导致只能冷凝成非均匀状态的亚稳态。过渡到数学中就是降温过程是希望非最优解能够最终降到最优状态,而降温速度过快,会导致得出的解仍然是局部最优解或者就是一个劣解。
1.3 等温状态
该过程保证了在每个温度下都能达到平衡。这个的数学概念和算法设计稍后再谈。
在模拟退火算法中需要引入组合优化方法中的Metropolis准则,这个准则保证了算法具有全局搜索能力,即在一定的概率上接受一个比当前解要差的解,从而提高寻找到更优解的可能性。
1.4 Metropolis准则(物理学描述)
假设热力学系统S有n个离散状态,其中i状态的能量为。假设在温度下达到热平衡,此时状态i的概率为其中C为已知参数;exp()为一自然常数e为底的指数函数。根据公式可以知道在同一个温度下,能量低的概率是大于能量高的概率的。
1.4 Metropolis准则(数学描述)
在同一个参数T下,如果解X1对应的适应度函数值F(X1)<F(X0),X0为初始解,则接受X1作为新的解,否则以概率exp(-(F(X1)-F(X0))/T)来接受X1作为新的解。其中以概率接受的方法可以使用随机数的方式实现。
2 模拟退火算法流程及简单应用
2.1 算法流程(不包含等温过程)
STEP 1 :设置适应度函数,初始温度,终止温度,初始解
STEP 2 :循环,在当前温度下根据初始解在一定的范围内随机产生新的解,并根据Metropolis准则判断是否接受新的解。判断是否终止循环,如果终止输出解,否则进行降温。
2.2 简单应用
求解f(x) = x^2 的最小值点。
import numpy as np
#定义适应度函数
def fun(x):
y = x**2
return y
#设置初始变量
T = 100 # 初始温度
a = 0.99 # 温度变化率
t = 1 # 终止温度
x0 = np.random.uniform(-10,10,1) # 产生初始解
#执行退火流程
while T>t:
# 根据初始解在一定范围内产生新解
x1 = x0 + np.random.uniform(-1,1)
# 计算新解和初始解的差值
df = fun(x1)-fun(x0)
# 执行Metropolis准则
if df<0:
x0 = x1
elif np.random.rand()< np.exp(-df/T):
x0 = x1
# 进行降温
T *= a
print(x0)
试验结果为: [0.15110473],与真实结果0相比已经十分精确了。
注:退火算法每次计算的结果不一定相同,也不一定都可以收敛到最优解处。所以应该多使用几次较好。
由于篇幅问题,文章部分内容省略。详细内容可在e小白网站(www.e-xiaobai.com)进行查看。
【版权声明:本文为e小白网站www.e-xiaobai.com的原创作品,需经e小白网站或作者本人同意许可后,方可转发到其它网站平台上,否则我们有保留追究法律责任的权利】

