集体智慧常用算法 算法的大致含义

《集体智慧编程》笔记之五:优化算法

优化算法过程
首先是描述题解,我们有必要明确潜在的题解将如何表达。一种非常通用的表达方式,就是数字序列。其次是确定成本函数,成本函数是用优化算法解决问题的关键,它通常是最难确定的。任何优化算法的目标,就是要寻找一组能够是成本函数的返回结果达到最小化的输入。成本函数需要返回一个值用以表示方案的好坏。对于好坏的程度并没有特定的衡量尺度,唯一的要求就是函数返回的值越大,表示该方案越差。对多个影响变量确定重要性,然后将它们组合在一起形成一个值。之后就可以尝试各种优化算法了。典型的例子,如航班安排问题。


随机搜索
随机搜索不是一种非常好的优化算法,但它却使我们很容易领会所有算法的真正意图,并且它是我们评估其他算法优劣的基线(baseline)。随机产生N次(如1000)次猜测,取成本最低的猜测作为结果。得到的结果显然不是最差的。


爬山法
随机尝试各种题解非常低效,它没有充分利用已经发现的优解。随机优化是到处跳跃的(jumps around),所以它不会自动去寻找与已经被发现的优解相接近的题解。爬山法是一种改进,它以一个随机解开始,然后在其临近的题解中寻找更好的题解(具有更低成本),类似于从斜坡上向下走。对每一次相邻的时间安排都进行成本计算,具有最低成本的作为新的题解。重复这个过程直到没有相邻安排能够改善成本为止。

爬山法最大的一个缺陷就在于陷入局部范围的最小值,它比邻近解表现都好,但却不是全局最优的。解决这个缺陷的一种方法就是随机重复爬山法(random-restart hill climbing),即让爬山法以多个随机生成的初始解为起点运行若干次,借此希望其中有一个解能够逼近全局最优。


模拟退火算法
退火算法以一个问题的随机解开始,它用一个变量来表示温度,这一温度开始时非常高,而后逐渐变低。每一次迭代期间,算法会随机选中题解中的某个数字,然后朝某个方向变化。算法最为关键的部分在于,如果新的成本值更低,则新的题解就会成为当前题解,这和爬山法类似。不过,如果成本值更高的话,则新的题解仍将可能成为当前题解。这是避免局部最优的一种尝试。某些情况下,在我们能够得到一个更优的解之前转向一个更差的解是很有必要的。模拟退火算法管用原因在于它不仅总是会接受一个更优的解,而且还因为它在退火过程的开始阶段会接受表现较差的解。随着退火过程的不断进行,算法越来越不可能接受较差的解,直到最后,它将只会接受更优解。温度和冷却率是两个可选的参数。对于任何一个给定问题,不妨使用不同的参数做一做试验。


遗传算法
遗传算法先随机生成一组解,称为种群(population),在优化过程中的每一步,算法会计算整个种群的成本函数,从而得到一个有关题解的有序列表。在对题解进行排序之后,一个新的种群(下一代)被创建出来。首先,将当前种群中位于最顶端的题解加入其所在的新种群中,这一步叫精英选拔法(elitism)。新种群中余下部分是由修改最优解后形成的全新解所组成。修改题解的方法有两种。方法一是变异:对一个既有解进行微小的、简单的、随机的改变。例如题解中选择一个数字,对其进行递增或递减即可。方法二是交叉(crossover)或者配对(breeding),选取最优解中的两个解,然后将它们按某种方式进行结合。例如从一个接种随机取出一个数字作为新题解的某个元素,剩余元素则来自另一个题解。
新的种群是通过对最优解进行随机的变异和配对处理构造出来的,它的大小通常与旧的种群相同。而后,这个过程一直重复进行--新的种群经过排序,又一个种群被构造出来。达到指定的迭代次数或者连续经过数代后题解都没有得到改善,整个过程就结束了。

 

优化算法的局限
一种优化方法是否管用很大程度上取决于问题本身。模拟退火算法、遗传算法,以及大多数其他优化方法都有赖于这样一个事实:对于大多数问题而言,最优解应该接近于其他的优解。但这个假设不一定成立。如下图:
成本最低点实际上处在一个非常陡峭的区域。接近它的任何解都有可能被排除在外,因为这些解的成本都很高。所以我们永远都找不到通往全局最小值的途径。大多数算法会陷入图中左边某个局部最小化的区域里。

 

涉及偏好的优化
如何将有限的资源分配给多个表达了偏好的人,并尽可能使他们都满意。如学生宿舍安排问题。从个体中提取信息,并将其组合起来产生出优化的结果。理论上,我们也可以构造一个数字序列,让每个数字对应于一名学生,表示将其安置在了某一间宿舍。但无法在题解中体现约束条件:每件宿舍仅限两名学生居住。一个全零序列代表将所有人安排在了同一宿舍,这就是一个无效解。解决这种问题,一种办法是将无效解的成本函数返回一个很高的述职,但这使得优化算法很难找到次优的解,因为算法无法确定返回结果是否接近于其他优解,设或是有效的解。一般而言,我们最好不要让处理器浪费在无效解的搜索上。更好的办法,则是寻找一种能让每个解都有效的题解表示法。让每个述职必须在合理的域值范围内。
这类问题的成本函数构造是有一个法则:尽可能让最优解的成本为零。


网络可视化
如社交网络中要将人际关系网络可视化输出,其中布局问题就可以是一个优化问题。既要让图片舒展开,又要减少交叉点。前者可以利用质点弹簧算法(mass-and-spring algorithm):各结点彼此向对方施以推力并试图分离,而结点间的连接则试图将关联点彼此拉近。如此一来,网络便会呈现这样布局:未关联的结点被推离,而关联的结点则被彼此拉近,却又不会靠的很拢。减少交叉点的优化方法,其中成本函数可以计算彼此交叉的连线数。


其它应用实例
竞赛中组队,希望组员的技能得以均匀分布;项目组分派任务,考虑人们的技能搭配情况;根据用户提供的关键字寻找一组最佳网站,最佳网站组并不需要具备大量彼此公有的关键字,而是要尽可能多地体现由用户提供的关键字。 

本文出自 “Amdahl” 博客,转载请与作者联系!

你可能感兴趣的:(集体智慧常用算法,算法的大致含义)