算法|6.18 狂欢背后,站着算法和程序员们( 三 )


TSP 问题在交通运输、电路板线路设计以及物流配送等领域内有着广泛的应用 , 国内外学者对其进行了大量的研究 。 由于这类问题数据规模太大 , 想要用精确算法求解往往显得无能为力 。 因此 , 在后来的研究中 , 国内外学者重点使用启发式算法来寻找近似最优解 , 这类算法主要有模拟退火算法、遗传算法、蚁群算法等 。
# 模拟退火算法模拟退火算法由 N. Metropolis 等人于 1953 年提出 , 简称 SA(Simulated Annealing) 。 它是对局部搜索算法的一种扩展 , 模拟了金属从高温降到低温的过程中 , 分子状态逐渐趋于稳定的过程 。
退火是一种物理过程 , 当金属物体在加热至一定温度后 , 它的所有分子在其状态空间中自由运动 , 处于高能量状态 。 随着温度的下降 , 这些分子逐渐停留在低能量状态 , 此时结构趋于稳定 。
在退火过程中 , 所有的分子状态并不是完全相同的 , 而是有一定的概率处于高能量状态或低能量状态 。 温度越高 , 分子处于高能量状态的概率就越大;温度越低 , 分子处于低能量状态的概率就越大 。
模拟退火算法便是基于这一点 , 它在寻找最优解的过程中 , 有概率的接受比当前最优解差一点的次等解 , 这个概率值随着搜索深度的增加逐渐减少 。 如果每一步都选择当前最优解 , 它就变成了贪心算法 , 而贪心算法极有可能陷入局部最优 。 模拟退火算法接受次等解的过程中 , 随着搜索深度的增加 , 次等解有概率超过局部最优解 , 从而跳出局部最优 , 获得全局最优解 。
美中不足的是 , 模拟退火算法为了获得全局最优解 , 要求较高的初始温度 , 要求退火的速度足够慢 , 要求较低的终止温度和各种温度下足够多次的抽样 , 这就使得优化过程长 , 特别是对于规模大的实际问题 。 因此 , 优化效率不高是标准模拟退火算法的主要缺点 。 其次 , 由于模拟退火算法对初始温度很敏感 , 参数的选择也是应用该算法的难题之一 。
# 遗传算法1975 年 , John holland 受生物进化论的启示提出了遗传算法 , 简称 GA(Genetic Algorithms) 。 GA 借鉴于“适者生存”的理论 , 在求解优化问题时 , 通过可行解的一代代交叉、变异 , 不断进化 , 最终得到最适应环境的个体 , 从而模拟出问题的近似最优解 。
遗传算法的基本运算过程如下:

  • 初始化:设置最大进化次数 , 随机生成 M 个个体作为初始群体 P(0);
  • 交叉、变异:交叉是指把两个父代个体的部分结构加以替换重组而生成新个体 , 交叉运算使得遗传算法具备搜索能力 。 变异是指随机替换个体的部分结构 , 每个个体是否变异是根据提前设置的个体变异概率决定的 , 变异可以保证个体的多样性 , 防止出现“早熟”收敛的情况;
  • 个体评价、选择:通过计算群体 P(t) 中各个个体的适应度 , 选择出适应环境的新一代个体 P(t+1);
  • 终止条件判断:当进化次数达到初始时设定的最大进化次数时 , 以进化过程中所得到的具有最大适应度个体作为最优解输出 , 终止计算 。
遗传算法是一种高度并行、随机和自适应的通用的优化算法 。 遗传算法的一系列优点使它越来越受到重视 , 在解决众多领域的机器学习、模式识别、优化控制、组合优化等优化问题中得到了广泛的应用 。
但遗传算法的参数选择比较困难 , 在避免“早熟”收敛和提高收敛速度方面没有通用的好方法 , 只能针对具体问题进行具体设计 。
# 蚁群算法蚁群算法由意大利学者 Dorigo、Maniezzo 等人于 20 世纪 90 年代提出 , 简称 AG(Ant Algorithms) 。 他们在研究蚂蚁觅食的过程中 , 发现单个蚂蚁的行为比较简单 , 但是蚁群整体却可以完成一些智能的行为 。 例如蚁群可以在不同的环境下 , 寻找最短到达食物源的路径 。
这是因为蚂蚁会在其经过的路径上释放一种可以称之为“信息素”的物质 , 蚁群内的蚂蚁对“信息素”具有感知能力 , 它们会沿着“信息素”浓度较高路径行走 , 而每只路过的蚂蚁都会在路上留下“信息素” , 形成了一种正反馈的机制 。


推荐阅读