本文为用蚁群算法做AUV导航中全局任务序列规划所做的笔记,仅供参考。全局任务序列规划就是,将很大的环境用离散的任务点填充,在全局规划出的任务序列点之间进行实时的局部规划。本文使用蚁群算法对任务序列进行优化。
——————————————首先学习一下蚁群算法——————————————-
1 ACO算法简介
按照百度百科的说法。蚁群算法,英文名为Ant Colony Optimization,是一种用来在图中寻找优化路径的机率型算法。蚁群算法是一种模拟进化算法。各个蚂蚁在没有事先告诉它们食物在什么地方的前提下开始寻找食物,当一只找到食物之后,它会向环境中释放一种挥发性分泌物(Pheromore,信息素),该物质随着时间的推移会逐渐挥发消失,信息素浓度的大小表征路径的远近,信息素会吸引其他更多的蚂蚁过来,这样越来越多的蚂蚁会找到食物。另外,蚂蚁的运动也会加入一定的随机因子,这样如果找到更近的路径的话,就会有更多的蚂蚁被吸引过来。最后,经过一段时间的运行之后,就会出现一条最短的路径被大多数蚂蚁重复着。
蚁群优化算法长用来求复杂离散优化问题的较好解。协作是该算法的一个关键设计组件,即将计算资源合理地分配到蚁群上,蚁群中蚂蚁之间间接通信。
1.1 假设
1)人造蚂蚁在离散的世界,总是从一个离散状态到另一个离散状态;
2)人造蚂蚁有一个内在(internal)的状态,这种状态包括对自身之前运动的记忆;
3)人造蚂蚁沉积的信息素总量和过去该位置通过的蚂蚁总数量有关,成正比;
4)人造蚂蚁释放信息素的时间依赖于问题,并不反映真实的蚂蚁行为;比如,大多数情况下,人工蚁群仅在生成一个解之后更新信息素沉积;
1.2 ACO算法路径规划
ACO算法在寻找最优路径方面(在图中)。首先初始化一张图(图有节点和边),在matlab里面可以用一个方阵来表示边,信息素是分布在边上的,所以信息素矩阵也可以用一个方阵表示;在一次进化(迭代)中,每只蚂蚁从起点开始按照ACO算法策略运动,这种策略是首先确定候选节点的概率,概率用下式计算
式中,第一项
——————————————使用蚁群算法进行任务序列规划——————————————-
2 AUV任务序列规划
海洋环境是建模成路径点组成的任务点网络图,需执行的任务稀疏地安排在网络图中的边上,任务优先级也在AUV开始执行任务之前以权重值的形式指定。有任务的边优先级权重值设置为大于1的数,没有任务的边优先级权重值设置为1。AUV要在有限的时间内,从任务起点开始,完成最大数量的高优先级任务,并在结束时到达任务终止点。因为AUV能量和任务总时间的限制,一个AUV在一次任务中显然不能到达所有的子任务点,尤其是在很大的环境内运行时(子任务点数量会很多)。因此,需要在完成任务数量和花费时间之间做一个折中。
本次matlab实现中,在二维场景首先进行尝试。路径点(子任务点)人为实现指定,网络图中的边根据相互距离确定。路径评价使用路径长度。先尝试选择出起点和终点之间的最短路径,对算法进行测试。后面再考虑加入子任务点,并加入新的路径评价标准。
3 matlab代码
task_planning.m
clear
map = imread('map2.jpg'); % 读入图片
map = rgb2gray(map); % 转换为灰度图
map = im2bw(map,0.2); % 转换为二值图
figure(1)
imshow(map); % 显示并设置坐标系
axis xy
axis on
hold on
% 任务点(路径点)集合
taskPoint = [23 40 20 42 30 131 137 125 220 268 224 274 244 299 331