随机优化算法特别适合用来解决受多个变量影响,存在很多可能的解,且结果因这些变量的组合而产生很大变化的问题。其典型的应用场景是,问题的解空间非常大,以至于我们无法对所有可能的解逐一尝试的情况。对于这类问题最简单低效的求解方法是尝试随机猜测成千上万个解,并从中找出最佳的解。更有效率的方法则是从随机解出发,朝着可能有改进的方向修正来逼近最优解。本文将从最低效的随机搜索算法出发,随后介绍更优的爬山法、模拟退火、遗传算法等随机优化算法。
成本函数(Cost Function)
成本函数是使用优化算法解决问题的关键。任何优化算法的目标,都是要寻找一组能够使得成本函数的结果最小化的解。因此,当我们给定一个解时,成本函数需要评估这个解的好坏,并返回一个值表示评估的结果,通常返回的值越大代表成本越高,即对应的解越差。
随机搜索(Random Searching)
随机搜索是一种简单低效的优化算法,虽然效果不是非常好,但是有助于我们理解其他的优化算法,也是我们评估其他算法的基线。
随机搜索会尝试 n 次的随机猜测,每次尝试的过程如下:
- 首先生成一个随机解;
- 随后使用成本函数评估成本;
- 与目前为止的最优解比较成本,如果成本更低则更新最优解及最优成本。
虽然 n 次的猜测在全部的可能性中只占非常小的一部分,得到最优解的几率很小,但我们仍然有机会得到还算不错的解。
爬山法(Hill Climbing)
随机搜索并没有充分利用已经发现的较优解,其每一次尝试都是跳跃的,下一次尝试找到的解可能比当前的较优解更差。
爬山法是随机搜索的一个替代方法。我们首先从一个随机解开始,然后在其相邻的解空间中寻找更好的解,直到找到一个局部最优解。这类似于我们为了更快的下山,可以选择坡度最大的斜坡向下走。
算法步骤
初始化
随机生成一个初始的解。
迭代过程
不断迭代寻找相邻的更优解:
- 首先创建一系列的相邻解,每一个相邻解是在当前解的基础上,通过对不同的变量值进行小幅的修改生成;
- 随后遍历所有的相邻解,对每一个相邻的解通过成本函数评估成本,找到成本最低的相邻解;
终止条件
如果没有成本更低的相邻解则迭代结束。
缺陷与解决方法
爬山法的运行速度较快,其找到的解一般要比随机搜索找到的更好,但是该算法有一个较大的缺陷:可能陷入局部最优解。即爬山法找到的最好的解虽然比邻近的所有解都好,但并不一定是全局最优解。
解决该缺陷的办法是随机重复爬山法,即以多个随机生成的初始解为起点,多次运行爬山法,以期某一个局部最优解能逼近全局最优解。
模拟退火(Simulated Annealing)
模拟退火算法是受冶金学的退火启发而来的一种优化算法。退火是将合金加热然后慢慢冷却的过程,加热会使能量变大,大量的原子受到激发而向周围随机移动,冷却时速度较慢,使得原子有更多的机会找到一个比原先内能更低的位置。
算法步骤
初始化
模拟退火算法同样也是从一个随机的初始解开始不断的迭代。迭代过程中会有一个温度值,温度的初始值非常高,随着迭代的进行会逐渐变低。
迭代过程
迭代过程是模拟退火算法的核心步骤,可分为新解的产生和接受新解两部分。
新解的产生
每一次迭代算法会随机选择解的某个变量朝某个方向进行变化,相当于从相邻解空间中随机选择某一个解。
新解的接受
算法的关键在于每一步迭代接受新解的策略:
- 如果新的解成本更低,则新的解替换为当前解;
- 如果新的解成本更高,也有一定几率替换为当前解,几率会受温度值的影响。
某些情况下接受一个更差的解是有必要的,这有机会降低陷入局部最优的可能性。模拟退火算法会在开始阶段接受表现较差的解,随着退火过程的进行,温度值不断降低,算法接受较差解的几率越来越低,直到最后将只接受更优的解。具体的概率由下面的公式给出:
由于一开始时温度值非常高,概率接近于 1,随着温度值的降低,成本的差异越来越重要,概率越来越低。
终止条件
当温度值降至某个最低值,继续迭代无法再接受新解时,停止迭代并接受当前寻找的最优解为最终解。
遗传算法(Genetic Algorithms)
遗传算法受自然科学的启发,该算法会先随机生成一组解,这一组解称之为种群。随后会根据现有种群,通过精英选拔、随机的变异和配对等方式构造下一代种群,从而完成一轮迭代。最终通过不断迭代进化来逼近最优解。
算法步骤
初始化
随机生成一组解,从而构建初始的种群。
迭代过程
在每一步迭代过程中,首先会计算种群中每一个解的成本并按成本排序,得到一个成本由低到高的有序列表。
然后我们通过以下三种方法生成下一代种群:
- 精英选拔。将当前种群中成本最低的一部分解直接加入下一代种群。
- 变异。从最优解中选取一个解,进行细微的、简单的、随机的改变,生成新的解并加入下一代种群。
- 交叉(或配对)。选取最优解中的两个解,然后将它们按某种方式进行结合,比如一种简单的结合方式是,从一个解中随机选取一部分变量的值作为新解的元素,其他部分的值则从另一个解中获取。
新的种群的大小通常与旧的种群相同。
终止条件
达到指定的迭代次数,或者连续经过数代解都没有得到改善的时候,停止迭代得到最终解。
参考资料
https://en.wikipedia.org/wiki/Hill_climbing
https://en.wikipedia.org/wiki/Simulated_annealing