《集体智慧编程》笔记之五:优化算法算法
优化算法过程
首先是描述题解,咱们有必要明确潜在的题解将如何表达。一种很是通用的表达方式,就是数字序列。其次是肯定成本函数,成本函数是用优化算法解决问题的关键,它一般是最难肯定的。任何优化算法的目标,就是要寻找一组可以是成本函数的返回结果达到最小化的输入。成本函数须要返回一个值用以表示方案的好坏。对于好坏的程度并无特定的衡量尺度,惟一的要求就是函数返回的值越大,表示该方案越差。对多个影响变量肯定重要性,而后将它们组合在一块儿造成一个值。以后就能够尝试各类优化算法了。典型的例子,如航班安排问题。spring
随机搜索
随机搜索不是一种很是好的优化算法,但它却使咱们很容易领会全部算法的真正意图,而且它是咱们评估其余算法优劣的基线(baseline)。随机产生N次(如1000)次猜想,取成本最低的猜想做为结果。获得的结果显然不是最差的。编程
登山法
随机尝试各类题解很是低效,它没有充分利用已经发现的优解。随机优化是处处跳跃的(jumps around),因此它不会自动去寻找与已经被发现的优解相接近的题解。登山法是一种改进,它以一个随机解开始,而后在其临近的题解中寻找更好的题解(具备更低成本),相似于从斜坡上向下走。对每一次相邻的时间安排都进行成本计算,具备最低成本的做为新的题解。重复这个过程直到没有相邻安排可以改善成本为止。 网络
登山法最大的一个缺陷就在于陷入局部范围的最小值,它比邻近解表现都好,但却不是全局最优的。解决这个缺陷的一种方法就是随机重复登山法(random-restart hill climbing),即让登山法以多个随机生成的初始解为起点运行若干次,借此但愿其中有一个解可以逼近全局最优。 dom
模拟退火算法
退火算法以一个问题的随机解开始,它用一个变量来表示温度,这一温度开始时很是高,然后逐渐变低。每一次迭代期间,算法会随机选中题解中的某个数字,而后朝某个方向变化。算法最为关键的部分在于,若是新的成本值更低,则新的题解就会成为当前题解,这和登山法相似。不过,若是成本值更高的话,则新的题解仍将可能成为当前题解。这是避免局部最优的一种尝试。某些状况下,在咱们可以获得一个更优的解以前转向一个更差的解是颇有必要的。模拟退火算法管用缘由在于它不只老是会接受一个更优的解,并且还由于它在退火过程的开始阶段会接受表现较差的解。随着退火过程的不断进行,算法愈来愈不可能接受较差的解,直到最后,它将只会接受更优解。温度和冷却率是两个可选的参数。对于任何一个给定问题,不妨使用不一样的参数作一作试验。ide
遗传算法
遗传算法先随机生成一组解,称为种群(population),在优化过程当中的每一步,算法会计算整个种群的成本函数,从而获得一个有关题解的有序列表。在对题解进行排序以后,一个新的种群(下一代)被建立出来。首先,将当前种群中位于最顶端的题解加入其所在的新种群中,这一步叫精英选拔法(elitism)。新种群中余下部分是由修改最优解后造成的全新解所组成。修改题解的方法有两种。方法一是变异:对一个既有解进行微小的、简单的、随机的改变。例如题解中选择一个数字,对其进行递增或递减便可。方法二是交叉(crossover)或者配对(breeding),选取最优解中的两个解,而后将它们按某种方式进行结合。例如从一个接种随机取出一个数字做为新题解的某个元素,剩余元素则来自另外一个题解。
新的种群是经过对最优解进行随机的变异和配对处理构造出来的,它的大小一般与旧的种群相同。然后,这个过程一直重复进行--新的种群通过排序,又一个种群被构造出来。达到指定的迭代次数或者连续通过数代后题解都没有获得改善,整个过程就结束了。函数
优化算法的局限
一种优化方法是否管用很大程度上取决于问题自己。模拟退火算法、遗传算法,以及大多数其余优化方法都有赖于这样一个事实:对于大多数问题而言,最优解应该接近于其余的优解。但这个假设不必定成立。以下图:
成本最低点实际上处在一个很是陡峭的区域。接近它的任何解都有可能被排除在外,由于这些解的成本都很高。因此咱们永远都找不到通往全局最小值的途径。大多数算法会陷入图中左边某个局部最小化的区域里。布局
涉及偏好的优化
如何将有限的资源分配给多个表达了偏好的人,并尽量使他们都满意。如学生宿舍安排问题。从个体中提取信息,并将其组合起来产生出优化的结果。理论上,咱们也能够构造一个数字序列,让每一个数字对应于一名学生,表示将其安置在了某一间宿舍。但没法在题解中体现约束条件:每件宿舍仅限两名学生居住。一个全零序列表明将全部人安排在了同一宿舍,这就是一个无效解。解决这种问题,一种办法是将无效解的成本函数返回一个很高的述职,但这使得优化算法很难找到次优的解,由于算法没法肯定返回结果是否接近于其余优解,设或是有效的解。通常而言,咱们最好不要让处理器浪费在无效解的搜索上。更好的办法,则是寻找一种能让每一个解都有效的题解表示法。让每一个述职必须在合理的域值范围内。
这类问题的成本函数构造是有一个法则:尽量让最优解的成本为零。优化
网络可视化
如社交网络中要将人际关系网络可视化输出,其中布局问题就能够是一个优化问题。既要让图片舒展开,又要减小交叉点。前者能够利用质点弹簧算法(mass-and-spring algorithm):各结点彼此向对方施以推力并试图分离,而结点间的链接则试图将关联点彼此拉近。如此一来,网络便会呈现这样布局:未关联的结点被推离,而关联的结点则被彼此拉近,却又不会靠的很拢。减小交叉点的优化方法,其中成本函数能够计算彼此交叉的连线数。网站
其它应用实例 竞赛中组队,但愿组员的技能得以均匀分布;项目组分派任务,考虑人们的技能搭配状况;根据用户提供的关键字寻找一组最佳网站,最佳网站组并不须要具有大量彼此公有的关键字,而是要尽量多地体现由用户提供的关键字。