编辑
2024-12-02
算法
0
请注意,本文编写于 136 天前,最后修改于 135 天前,其中某些信息可能已经过时。

目录

局部搜索
爬山
模拟退火

感谢秦晓卫老师的指导!!

局部搜索

在大规模问题中没有足够内存去存储整个边界集合,并且很多实际问题只关注最终状态,不关心到达路径,即局部搜索。它可表征为求解最优化问题,根据目标函数找到最优状态

爬山

爬山算法的策略可以概述为

Note

搜索相邻的节点,如果相邻节点优于当前节点,则替换当前节点

因此爬山算法只能找到局部最优而无法找到全局最优,它具有以下几个问题

局部极大值

爬山算法停留在某个局部的“山头”,但是存在更高的山头

平台区

爬山算法进行到平台区时,相邻的节点代价都相等,无法继续前进

若在局部存在多个节点,它们都比相邻的节点更优,但是它们之间不能转移。爬山算法会停留在它们之中的一个

为了解决这个问题,有如下的改进方案

  1. 允许横向移动:可以越过平台区
  2. 随机爬山法: 在上坡行动中按按概率随机选择一个
  3. 首选爬山法: 不断随机生成后继,如果遇到比当前状态好的后继就选择
  4. 随机重启爬山法: 反复随机生成初始状态执行爬山法,直到实现目标

但是不论是何种改进,都无法从根本上解决不完备的问题

模拟退火

模拟退火综合了爬山法和随机游走法

  • 爬山法: 从不下坡, 高效但不完备
  • 随机游走法: 不考虑状态值随机移动, 效率低但完备

模拟退火法模拟了退火的过程。其核心是定义了一个随时间逐渐下降的温度TT,在状态转移的过程中,如果后继的状态比当前的状态差,则以一定概率选择

p=eΔE/Tp=e^{-\Delta E/T}

综合来说,状态转移被接受的概率为

p=min{1,eΔE/T}p=\min\{1,e^{-\Delta E/T}\}

模拟退火法允许了下山的过程,能跨过“势垒”,从而有机会找到全局最优解

tips

可以证明,如果模拟退火的温度下降的足够慢,退火算法可以找到全局最优解

最大化收益的模拟退火算法可以描述如下

  1. 初始化:给定初始状态,初始温度
  2. 以特定方案降低温度,若温度T=0T=0,则返回当前状态作为解
  3. 选择一个后继状态,计算收益差ΔE=Value(当前)Value(后继)\Delta E=Value(当前)-Value(后继)
  4. ΔE<0\Delta E<0,即后继收益更大,则选择后继替换当前;若ΔE>0\Delta E>0,则以概率eΔEe^{-\Delta E}接受
  5. 返回1循环

本文作者:GBwater

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!