SACO\AS\ACS蚁群算法+个人理解理解 (概念讲解无Python编程)
文章目录
Simple Ant Colony Optimisation (SACO)
- 简单蚁群优化
- 蚁群优化问题就是可以当成求解两个点之间最短距离的优化问题。有很多的节点,其中一个是出发点一个是目的地,从出发点出发经过那些到达目的地的距离最短的问题。打个比方:从上海到北京,如果经过*,那么这个路线绕的太远了,就不是最短路径。
- SACO中每两个地方(节点)之间,存在两个变量,一个是距离一个是信息素,距离是计算损失的,就是通过计算蚂蚁走过的不同节点之间的总距离,来判断这个蚂蚁选择的路线是否是比较短(优)的,信息素则是蚂蚁在面临选择哪一个节点前进时的唯一指示,信息素浓度高的蚂蚁选择的概率大。
- 类似遗传算法,蚁群算法也是有一个种群的,其中有K只蚂蚁,然后每一只蚂蚁都会从出发点到目的地,只是走的路程会不同。他们都是基于同样的信息素进行概率选择路径
- 蚂蚁如何选择不同的节点:
- 每一代结束之后,信息素如何更新:
- 第一步,之前残留的信息素会挥发一些:
- 蚂蚁走过的路径上,蚂蚁会释放新的信息素:
可以看到,总共有只蚂蚁,某一只蚂蚁假设走过从节点1到节点2的路径,那么就会在这个路径上留下的信息素,可以看到这个留下的信息素是与这个蚂蚁总共走完的路程成反比。可以理解为,一只蚂蚁体内只有100的信息素,假设蚂蚁走的总距离是200,那么蚂蚁就只能给每一条边增加0.5的信息素,假设蚂蚁走的总距离是50,那么每一条边释放的信息素就是2,更加浓郁。这就是一种启发式信息,总路程越短的蚂蚁释放的信息素浓度高,这样他走的路就会更大概率被后一代的蚂蚁重复选择。
- 第一步,之前残留的信息素会挥发一些:
Ant System(AS)
- 蚂蚁系统。
- 蚂蚁在选择走向那个节点的时候,概率计算方法变化了:
AS的转移概率计算(2种)
- 第一种就是下面的,增加了一个新的参数,这个参数是根据距离计算的
- 第二种计算方法是类似的:
AS的信息素更新(4种)
pheromone evaporation(信息素蒸发)
pheromone update(信息素更新)
- 前三种采用的公式与SACO相同,但是细节不同:
三个方法的区别就是更新的数值,但是具体的区别也很小。 - 第四种是采用了精英策略的更新方法:
可以看到,公式多了一项。其实最直观的理解就是,用上面三种中的Ant-Cycle AS的方法计算完了之后,在重复吧种群中最聪明的蚂蚁释放的信息素再计算一遍。(其实严格来说不算是再计算一遍,但是确实是相当于让精英蚂蚁释放的信息素的浓度相比其他普通蚂蚁的高)。
其实可以看的出来,这是一种强化本地搜索,弱化全局搜索的功效。但是可以提高收敛速度。
Ant Colony System(ACS)
- 这个就是现在常说的蚁群算法
transition probability
- 这个就是蚂蚁选择哪一个节点前进的概率:
可以看到两个计算概率的公式,这个是依照概率选择的,如果概率r小于事先设定的,那么就选择上面的方法,上面的方法是贪婪算法,就是一定选择信息素浓度最高的那一个路径;反之选择了下一种方法,那么就是跟AS一样的概率方法,不过仔细观察可以发现,AS的公式中的在ACS中没有了。
pheromone update
locally update rules
- 这个虽然叫做本地更新规则,但是其实可以看成pheromone蒸发的一种改进。
因为信息素会不断的蒸发,假设某一个路径连续几代都没有蚂蚁走过,那么信息素不断蒸发,会趋近于0,那么将来就再也没有蚂蚁可能走这条路了,所以这里设置了一个比较小的常数,这样可以保证信息素趋近于而不是0,从而保证信息素被选择的概率存在
globally update rule
- 虽然叫做全局更新规则,但是其实跟AS中的信息素更新也有些类似,又有不同。有点像是,仅仅让精英蚂蚁释放信息素,其他蚂蚁不能参与信息素的更新当中的感觉。
可以ACS中不管是local还是global,都有一个蒸发系数这样的参数,然后全局搜索只考虑搜索到的最优策略(可能是当前代的最优结果,也可能是所有代中的最优)。