数学建模【模拟退火】

一、模拟退火简介

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

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

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

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

但是以模拟退火的思想

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

模拟退火的关键点

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

二、适用赛题

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越小, 意味着新解的总路径比当前解的总路径短更多,那么接受新解的概率就更大

五、补充

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

相关推荐
哭泣的眼泪4081 小时前
解析粗糙度仪在工业制造及材料科学和建筑工程领域的重要性
python·算法·django·virtualenv·pygame
Microsoft Word2 小时前
c++基础语法
开发语言·c++·算法
天才在此2 小时前
汽车加油行驶问题-动态规划算法(已在洛谷AC)
算法·动态规划
莫叫石榴姐3 小时前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘
茶猫_4 小时前
力扣面试题 - 25 二进制数转字符串
c语言·算法·leetcode·职场和发展
肥猪猪爸6 小时前
使用卡尔曼滤波器估计pybullet中的机器人位置
数据结构·人工智能·python·算法·机器人·卡尔曼滤波·pybullet
readmancynn6 小时前
二分基本实现
数据结构·算法
萝卜兽编程7 小时前
优先级队列
c++·算法
盼海7 小时前
排序算法(四)--快速排序
数据结构·算法·排序算法
一直学习永不止步7 小时前
LeetCode题练习与总结:最长回文串--409
java·数据结构·算法·leetcode·字符串·贪心·哈希表