3.2 Local Search
关于Local Search方面的内容,相信大家学习heuristic这么久了,就不用我多说什么了吧:
(Local Search)
简单看一下伪代码即可,主要是邻域算子的设计,然后就是在邻域里面进行搜索,找到一个局部最优解为止。
然后关于邻域搜索,有best-improving or first-improving strategy 两种策略,这个下次有时间出个专题给大家讲明白一些相关概念吧。
04 再论Greedy_Randomized_Construction
前面我们说了,Greedy_Randomized_Construction用于生成初始解,既然是Greedy_Randomized两个结合体,那么肯定就有一个权重分配的问题。
即,是Greedy成分多一点呢?还是Randomized成分多一点好呢?因此,为了控制这两个小老弟的权重,防止某个家伙在该过程中用力过猛导致解不那么好的情况,我们引入一个参数α:
其他部分就不再多说,可以看到,上面的α参数主要是控制RCL(什么是RCL回头去看!)的长度:
当α=0时,纯贪心,只能选取最优的候选元素。
当α=1时,纯随机,所有候选元素都可随机选。
05 代码实现
由于小编精力有限,就不从头写一遍了,从GitHub上找了一个感觉还不错的算法给大家,也是求解TSP问题的。
不过说实在的,python写算法的速度是很慢的,无论是速度还是算法架构等方面都不推荐大家用matlab或者python这种脚本性的语言写大型优化算法。
运行结果如下:
(Berlin52)
代码算例以及相关运行结果请移步留言区。