1. 最优化
最优化要解决的问题是,当我们面对的问题有多种解决方案时(数量级比较大),我们应该通过什么方法来找到最优的方案。
1.1. Cost函数
在考虑最优解时,我们首先需要定一个一个Cost函数,他的作用就是把我们的解决方案量化为一个数值。
1.2. 随机算法
随机选取N个解决方案,计算他们的Cost值,然后选出最小的一个。
1.3. Hill Climbing(爬山)
随机选取一个解决方案,然后列出该方案的所有相邻方案(相邻方案的定义与具体问题相关)。然后找出这当中最优的一个作为新的起点,再遍历该方案的所有相邻方案,找出最优。直到当前方案比所有相邻都优胜为止。
该算法跟起始点的选取有关,但是容易找到局部最优,一个改良的方案是,循环多次,并且每次都重新选取起始随机点。
1.4. Simulated Annealing(模拟退火)
模拟退火跟爬山算法类似。首先随机选取一个解,然后随机获取一个相邻解,计算这两个解的Cost,如果相邻解比当前解好,则使用相邻解作为新的起点。否则,根据一个随机值,确定是否使用相邻解。这里的概率就可以保证在某些时候,我们会选取一个更差的解,从而避免陷入局部最优解。随机函数的公式为
P = pow(e,(-highcost–lowcost)/temperature)
P的值与temperature成正比,与最低值和最高值的和成反比。
每次循环我们都让temperature降低某个值,从而降低P的值,这样能够保证,开始的时候我们会考虑一些比较差的值,但是越往后,我们就会尽量的挑选比较好的值。
1.5. Genetic Algorithm(遗传算法)
遗传算法首先随机的获取N个解决方案,作为第一代。然后根据Cost值对他们进行排序,在保留最优的M(<N)个解的情况下,通过mutation,crossover的方法,从这M个解中生成其他的N-M个解,这成为第二代。对第二代的数据重复上述的方法…。算法的停止条件是,我们到达了固定的代数,或者最优解在经过一定代数K后始终没有改变。
Mutation方法是指变换某个最优解的某一项。
Crossover方法是指从几个最优解中分别选取一部分,组合成一个新的解。
1.6. Network Visualization
这里主要的问题就是,当我们有一个图的时候,如何最大限度的减少相交线段的数量。这里最关键的就是定义Cost函数,我们把Cost函数定义为一个图的相交节点数。相邻解就是把某一个点向某个方向移动某个单位,那么运用之前的模拟退火,或者遗传算法,就能找出相交数最小的图。