模拟退火

薛定谔了么
2025-01-23 11:33:58
运筹优化
算法解析


1.前言:启发式算法


模拟退火算法是一个经典的启发式算法,也被称为智能算法。他们不是数学,而是含有更贴合人类解决实际问题思想的方法。因此某类启发式算法,也只能针对解决特定的问题。而想要从数学的角度去解决普适的数学问题,那只能依靠精确求解算法了。


但相比与在解空间中各种操作的精确求解算法,启发式算法更加简单易懂,适合初学者理解数值计算方法。


经典的启发式算法包括:模拟退火、遗传算法,粒子群算法,蚁群算法,禁忌搜索。今天介绍模拟退火算法的原理及python应用


2.退火:锻造的智慧


退火是一种金属热处理工艺,指的是将金属缓慢加热到一定温度,保持足够时间,然后以适宜速度冷却。广义上说,退火是一种对材料的热处理工艺。(From:百度百科)


而退火的目的是为了让金属材料拥有更好的韧性,为后续加工做准备。



在固体升温时,内能增大,分子运动加剧,在高温时,金属原子有更大的“活力”运动到更“优势”的位置,随着温度的降低,这种“活力”将下降,不过温度依旧较高,原子仍然有可能会向其他位置尝试运动,哪怕这个位置的“优势”不比之前,随着温度越来越低,这种“活力”也会下降,最终原子会在他们认为最优的地方停留。相比于锻造之前,金属内部原子的位置进行了优化。


在数学问题中,退火的思想可以避免我们陷入局部最优,从而有一定概率迈向全局最优。







3.模拟退火的效果与目的



















结合以上对金属退火的描以及他与数学的联系,我们可以举例简单说明模拟退火在解决数学问题中的效果。假设某最大化问题,我们给出一个初始解x0,其对应值y0



在基本的对领域搜索的思想上,期望得到值更大的解。


具体操作如下:


(1)在向左或向右的邻域中移动初始解x0,得到x1


(2)计算x1对应函数值y1,比较y1与y0的值


(3)若y1>y0,则更新x1为当前解,否则不更新


重复以上步骤,在若干次迭代后,可以获得较优的解,但是很明显,在基本的邻域搜索思想下,我们很容易会在某个较优的地方停留,而无法达到全局最优。



此时,模拟退火就可以发挥作用:正如金属原子在高温“活力”较大时愿意向其他未必“优势”的位置尝试移动一样,我们也希望数学问题中解在局部最优时仍然会在邻域中搜索其他解。从而有一定概率,找到更优的解,而跳出局部最优。



此时,模拟退火就可以发挥作用:正如金属原子在高温“活力”较大时愿意向其他未必“优势”的位置尝试移动一样,我们也希望数学问题中解在局部最优时仍然会在邻域中搜索其他解。从而有一定概率,找到更优的解(如x7),而跳出局部最优。


当然,这种“活力”也不能一直保持,否则有可能解达到最优后仍然会在邻域中搜索,从而错过最优。(如x10


这是一场赌博。而数学模型可以满足这种需求


 


4.模拟退火的数学原理


在用数学描述模拟退火之前,我们先简单梳理一下基本需求:


(1)如果当前解较上次迭代解解更优,则更新解为当前解


(2)在高温时,如果当前解的质量没有上次迭代解更优,也有很大概率会更新解为当前解


(3)在高温时,如果当前解的质量没有上次迭代解更优,则更新概率极低


为了实现以上需求,得到了如下模型,以实现模拟退火。



这里p为更新解的概率,以最大化问题为例,毫无疑问,当当前解的质量更优时,会更新解为当前解。符合需求1。


结合e**x的图像我们可以发现,当温度T较高时,即使f(n+1)<f(n),既当前解质量不如上次迭代解时,仍然有很大概率会更新解为当前解。符合需求2。但是当温度T较低时,这一概率将会趋近于0,而避免错过最优,符合需求3。



5.应用


旅行商问题(Traveling Salesman Problem, TSP)是一个经典的组合优化问题,目标是找到一条访问所有城市并返回起点的最短路径。由于TSP是一个NP-hard问题,通常使用启发式算法或近似算法来解决。



我们给定城市坐标,随机城市访问顺序序列得到初始解,通过交替序列中n个元素实现对初始解邻域的搜索,结合模拟退火的思想进行迭代。具体算法流程如下。



设置最大迭代次数N=100,最低温度T=0.1,初始温度T=1000000,迭代57次得到最优解。




算法核心代码部分如下。


#模拟退火循环
now_iteration=1#初始化迭代次数
max_iteration=100#最大迭代次数
temperature=1000000#初始温度
min_temperature=0.1#最小温度
path_list=[path]
distance_list=[distance]

while now_iteration<=max_iteration and temperature>min_temperature:
    path_update = copy.deepcopy(path)
    # 进行路径解的邻域搜索 每次替换三个解元素
    path_update = Get_test_path(path_update, 3)
    # 计算邻域搜索后的值
    distance_update = path_distance(path_update, distance_matrix)
    # 模拟退火判断是否接受
    change_update=0#初始化概率
    if distance_update<distance:
change_update=1
    else:change_update=math.e**((distance-distance_update)/(1*temperature))#模拟退火核心函数
    #随机生成一个0-1之间的数代表接受的可能性
    update_value = random.random()
    if update_value<=change_update:
        path=path_update
        distance=distance_update
    else:
        path=path
        distance=distance
    #记录结果
    path_list.append(path)
    distance_list.append(distance)
    #更新温度与迭代次数
    print("迭代次数:{}".format(now_iteration))
    print("当前温度:{}".format(temperature))
    print("当前最优路径:{}".format(path))
    print("当前最优值:{}".format(distance))
    now_iteration=now_iteration+1
    temperature=0.75*temperature
    #播报结果






6.总结:尾声














模拟退火是一场概率的游戏,运行前期温度高,接受其他解的概率大,更有机会跳出局部最优解,而在温度降低的过程中接近最优解。


正如人生一样,年轻时不要陷入自己的舒适区,要在尚有活力的年华勇敢闯一闯,多学习多拼搏,运行前期温度高,接受其他解的概率大,更有机会跳出局部最优解,而在温度降低的过程中接近最优解。









本文转载自微信公众号:平潮的奇妙星球 















513
0
0
0
关于作者
相关文章
  • DNA 编码化学 + 图卷积神经网络:机器学习助力小分子药物高通量 ...
    蛋白质是许多生物活动的主要 “执行者”,人类疾病疗法的开发,大多围绕对蛋白质功能 ...
    了解详情 
  • 从七桥问题到 AI 时代——图学习的进化与跨界之路 ...
    从欧拉 “柯尼斯堡七桥问题” 奠定图论基础,到图算法在网络数据和社交媒体中崭露头角 ...
    了解详情 
  • 量子计算+AI:特征选择与神经网络优化创新应用 ——“五岳杯”银 ...
    在由玻色量子协办的第二届APMCM“五岳杯”量子计算挑战赛中,来自北京理工大学的Q-Mas ...
    了解详情 
  • FeNNix-Bio1:面向生物制药等分子模拟场景的量子 AI 基础模型 ...
    当前模拟复杂生物系统的量子分子动力学仍受限于计算资源和方法精度,传统的DFT方法存在精度不足 ...
    了解详情 
在本版发帖返回顶部
快速回复 返回顶部 返回列表
玻色有奖小调研
填写问卷,将免费赠送您5个100bit真机配额
(单选) 您是从哪个渠道得知我们的?*
您是从哪个社交媒体得知我们的?*
您是通过哪个学校的校园宣讲得知我们的呢?
取消

提交成功

真机配额已发放到您的账户,可前往【云平台】查看