数学建模【模拟退火】

一、模拟退火简介

模拟退火的基本思想,就是走出舒适圈,多去"试一试",万一成了呢?

  • 舒适区:当前处于局部最优解
  • 试一试:随机试探新解,有更好的解就直接选择新解,没更好的则以一定概率选择新解
  • 万一成了:找到了更优甚至最优解
  • 也可能没成:求的新解反而更差了
  • 一次没成,多试几次:继续随机试探

说到模拟退火,就要从贪心算法失效开始。这里以爬山为例子

  • 假如小魏想要在日落前爬.上一座山的最高峰(求最优解)
  • 但山中云雾缭绕、视野受限,只能看到当前位置附近一-定范围内的情况
  • 贪心算法:在视野内选取一个点,如果更高,就过去;否则就不去
  • 直到视野内没有更高的点,则输出当前解作为最终解
  • 显然,当小魏走到某个小山峰时,四周看不到更高的点,就不会走下山去寻找更高的山峰从而陷入了局部最优解

但是以模拟退火的思想

  • 那么在可见范围内,随机选择一点
  • 如果该点比当前位置更高,就直接去该点(优化)
  • 如果该点更低,那么就多掷几次硬币,结合该点与当前点的高度差决定去不去(一定概率)
  • 在刚才的局部最优解的山峰,会有一定概率走下了当前山峰,从而发现另一个山峰的上坡
  • 从而就有可能走上新的更高峰

模拟退火的关键点

  • 时间有限,需设置终止条件("退火"过程中温度不断降低,剩余时间不多时就别乱跑)
  • 且算法需要做到:若当前所处的山峰越高,前往低点的概率越低(概率的表达式)
  • 这样才能使求得最优解的概率更大
  • 关键在于,"概率"怎么求

二、适用赛题

NP-hard问题

  • 旅行推销员问题(Travelling salesman problem,TSP):给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路
  • TSP问题是组合优化中的一个NP-hard问题,该问题的可行解是所有顶点的全排列,随着顶点数的增加,会产生组合爆炸,传统算法难以求解
  • 此时就适合用模拟退火等启发式算法求近似解

适用赛题特点

  • 有些规划类问题的可行解过多,传统算法运算时间过长
  • 能够列出可行解的任一排列(例如题目要求最短回路,起码能先写出个回路作为初始化)

国赛题目:高等教育学费标准

  • 假设高校所需1000万经费,涉及多种筹款路径,理论上的筹款组合方案过多,若暴力求解可能费时几十小时,此时就适合模拟退火求解

三、模型流程

四、流程分析

这里以一个例题贯穿流程分析:遍历全国省会

  • 已知全国34个省会城市(包括直辖市、自治区首府和港澳台)的经纬度坐标(第一个为北京)
  • 现在需要从北京出发,到所有城市视察
  • 要求每个城市只能到达一次,并最终回到北京
  • 求视察路线方案,使得总路径最短

问题分析

  • 若把所有可能的路线方案都列出来再求最小值,则有33! 种方案
  • 这是10的36次方数量级,运算时间会很长
  • 此时可考虑使用模拟退火

所有可行解

  • 本题的解空间就是固定起点和终点的所有可行路线的集合
  • 题目要求以北京作为起点和终点,那么设起点北京为1号城市x1
  • 余下需要遍历的33个城市依次设为2,3,.... 34号城市x34
  • 最后还需回到北京,设终点北京为35号城市x35
  • 因为起点与终点固定,则共有33!个可行解
1.目标函数

这道题的目标是总路程最短

  • 从1号x1出发遍历34个城市最后回到1号x35
  • 第i号城市xi与第i+1号城市xi+1之间的路径长度设为dxixi+1

则目标函数:

2.初始化
  • 设定一个初始温度T0和问题的一个初始解x(0)
  • 有那么多种可行解,可以随便选一个作为初始解
  • 例如本题,可以把原始数据的排列直接作为初始解,解为x1x2 x...... x35
  • 或利用蒙特卡罗法求一个较好的初始解
3.是否结束

这里是否结束有两个方面

同一温度是否结束,指的是在一个相同温度情况下,进行了多次产生新解,是否接受的过程,比如设置的一个温度进行100次,那么在进行100次后,这个温度下的操作就完成了,需要将温度按照一定比例下降,然后重复刚刚的操作。

温度是否足够小

在退火过程中需要选定降温系数α,求得新温度Ti+1 = αTi,一般都是设为0.999。直到温度足够小,设终止温度为e = 10的负30次方,当T < e时终止迭代,输出最终解

在退火过程足够慢,每个温度下寻找新解的次数足够多,则最终解是全局最优解的概率越大

4.产生新解

在当前温度Ti下随机求一个新解,制定产生新解的准则不唯一,能确保随机即可

5.计算差值判断接受

当有了新解,需要判断是新解好还是当前解好,所以需要计算两个解的值,本题就是计算两个解的路程,然后用新解的路程减去当前解的路程得到差值△f

接下来判断是否接受新解

  • 接受准则
  • 表达式中判断准则exp(- △f/Ti)是由热力学得到的灵感,这里不作讲解
  • 题目求总路径最短,如果△f < 0意味新解的总路径更短,则接受新解作为当前解
  • △f > 0意味新解总路径更长不如当前解, 但为防止陷入局部最优解,仍以一定概率接受新解
  • 显然,△f越小, 意味着新解的总路径比当前解的总路径短更多,那么接受新解的概率就更大

五、补充

理论上模拟退火可以找到全局最优,不过此证明需要深厚的数学功底。这里不作讲解。

相关推荐
咨询QQ276998852 小时前
基于模拟退火算法优化随机森林算法的SA-RF时间序列预测及交叉验证抑制过拟合问题的Matlab代码
模拟退火算法
shangjian0076 小时前
AI大模型-评价指标-相关术语
人工智能·算法
Live&&learn7 小时前
算法训练-数据结构
数据结构·算法·leetcode
松岛雾奈.2308 小时前
机器学习--PCA降维算法
人工智能·算法·机器学习
电子_咸鱼8 小时前
【STL string 全解析:接口详解、测试实战与模拟实现】
开发语言·c++·vscode·python·算法·leetcode
sweet丶8 小时前
适合iOS开发的一种缓存策略YYCache库 的原理
算法·架构
是宇写的啊9 小时前
算法—滑动窗口
算法
风筝在晴天搁浅9 小时前
代码随想录 509.斐波那契数
数据结构·算法
落落落sss9 小时前
java实现排序
java·数据结构·算法
limenga10210 小时前
支持向量机(SVM)深度解析:理解最大间隔原理
算法·机器学习·支持向量机