标题

  1. 旅行商问题
    在开始介绍优化算法前,需要介绍大名鼎鼎的旅行商问题(Traveling Salesman Problem,TSP),该问题可能是最经典的离散优化问题。
    经典的TSP可以描述为:一个商品推销员要去若干个城市推销商品,该推销员从一个城市出发,需要经过所有城市后,回到出发地。应如何选择行进路线,以使总的行程最短。
    旅行商问题容易理解的定义如下:
    问题输入:一个关于点的集合(例如城市坐标)
    问题目标:寻找最短的旅行路线。
    旅行路线长度 = 旅行路线上的点间距离和。

    如图,给定ABCDE这5个城市的坐标,问题就是寻找一个优化路线,该路线是这5个城市都经过的最短距离。
    对于5个城市,我们可以很直观的看出最优路线。下图是51个城市的分布图,这个就不可能直观的看出最优路线了,更何况针对上千上万的城市。
    针对这样的问题优化算法就有了用武之地。
  2. 什么是优化算法?
    比如寻求几个数值中的最大值是我们常用的算法,这类算法对于同样的输入,输出结果是相同的。
    但是优化算法,对于同样的输入,输出结果可能是不相同的, 无法保证一定能得到最优解。优化算法是按照固定步骤寻求问题最优解,但是在执行算法时根据一定概率调整计算,导致每次的输出可能不同,优化算法通常的计算流程如下。
    优化算法通常都规定迭代停止条件,诸如最大迭代次数、计算结果迭代变化量等。而在我们后续的算法执行中,基本使用最大迭代次数与问题最优解作为迭代停止条件,那么流程就变成了下图所示。
  3. 粒子群算法求解函数最大值
    这里举了一个求解x在[-2,2]范围上y=-x*x函数最大值的问题,使用简单粒子群算法。使用两个粒子,好观察清楚优化计算的效果与粒子的运动情况,先对优化算法有一个直观的了解。
    求解函数图
    求解过程,粒子1与粒子2开始寻找。
    粒子1到达最大值了,粒子2还在苦苦寻找。
    粒子1已经收敛到最大值时,粒子2还在寻找。
    最终两个粒子都收敛在最大值0。
    粒子1在第31次迭代时达到最大值0。
  4. 优化算法适合的情况
    比如银行计算三年存款的利息,假设利率一定,这种计算就要求同样的存款得到利息一致,而且精度要求高.计算量也不太大,这种情况就不适合使用优化算法。
    相反如果预测GDP,这个涉及可变因素太多,计算量大,精度也不要求很高,这种情况就适合使用优化算法。
    优化算法是一种概率算法,无法保证一定能得到最优解,如果要求结果必须是确定、稳定的值,则无法使用优化算法求解。
    现实生产、生活中,也有不少的场景使用的优化算法。例如天气预测可能使用了优化算法,其参数的细微差别对结果的影响不太大,需要较快得出误差范围内的结果即可。导航地图等也使用了优化算法来加速处理路线推荐,不同路况,路线推荐也是动态变化的。
    那是不是说优化算法就无法很快的获得最优解?这个看法也不对,因为对于问题规模不太大的情况,结合有效的算法优化,短时间内优化算法也可以很快地获得最优解。而对于问题规模太大的情况或算法优化不够,短时间内也可能很难获得最优解,时间很长也不一定获得。在后面我会用算法来演示这个结论。