【Coel.学习笔记】随机化算法:模拟退火与爬山法

您所在的位置:网站首页 30厘米视力表图清楚 【Coel.学习笔记】随机化算法:模拟退火与爬山法

【Coel.学习笔记】随机化算法:模拟退火与爬山法

2023-04-01 04:14| 来源: 网络整理| 查看: 265

简介

模拟退火 (\(\text{Simulate Anneal}\)) 和爬山法是随机化算法,二者的原理都在于通过随机生成答案并检查,把答案逐步缩小在一个可行的区间,尽可能地靠近正确答案。 在考场中,如果某道题目的正解比较难想(例如性质复杂的贪心)或者对应的函数取值可能数极大且难以二分/三分求解时,模拟退火和爬山法可以一定程度上得到正确答案并获得可观的分数。 顺带一提,现在的人工智能其实也是基于随机化算法的,例如遗传算法就是一种典型的随机化算法。 高情商:利用人工智能算法获取近似解 低情商:随机骗分

原理

下面主要讲模拟退火,爬山法只提一点。

爬山法

爬山法通常用来求解一个函数的最值,当然得是一个凸函数。

可能有人要问了,既然是凸函数,为什么不用三分?

一方面,某些时候看不出是凸函数,爬山法硬上有时能过;另一方面,如果函数有多维,就要写嵌套三分,三维套两个,四维套三个……如果有 \(k\) 维(比如下面这一题),即使耐得住性子写完,时间复杂度也是 \(O(n\log ^k n)\),效率很低。

回到爬山法。爬山法的原理可以总结成“从一个胜利走向另一个胜利”(经典英语造句),即每次寻找一个最优解,按照当前给定的参数控制爬山距离,并根据当前局面选定爬山的方向。当然有可能跳过最优解或者陷在某一个局部最优解的位置,所以爬山法的局限性比较大。

模拟退火

顾名思义,模拟退火就是模拟物理学上的退火过程。类比分子在高温时能量更高、碰撞次数更大的原理(参见《化学反应原理》P28),我们定义几个量:

温度 \(T\):相当于答案区间,控制每次随机区域。一开始的 \(T\) 为较大值,接下来逐步减小。 \(T\) 有初始态 \(T_0\)、终止态 \(T_k\) 和降温系数 \(d\) 三个关联量。一般来说 \(T\) 取值较大,\(T_k\) 接近 \(0\),\(d\) 略小于 \(1\)。这样每次让 \(T\) 乘以 \(d\) 就可以实现“降温”,让答案稳定下来。 能量差 \(\Delta E\),表示新得到答案和原本答案的差值。如果 \(\Delta E> a[n + 1].second; } while (getTime() - start < 0.05) simulateAnneal(); cout m; for (int i = 1; i > a[i]; simulateAnneal(); //数据很水,所以跑一遍就够了 cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3