蚂蚁算法的Java设计与实现

上传人:大米 文档编号:561276334 上传时间:2023-11-19 格式:DOCX 页数:14 大小:13.69KB
返回 下载 相关 举报
蚂蚁算法的Java设计与实现_第1页
第1页 / 共14页
蚂蚁算法的Java设计与实现_第2页
第2页 / 共14页
蚂蚁算法的Java设计与实现_第3页
第3页 / 共14页
蚂蚁算法的Java设计与实现_第4页
第4页 / 共14页
蚂蚁算法的Java设计与实现_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《蚂蚁算法的Java设计与实现》由会员分享,可在线阅读,更多相关《蚂蚁算法的Java设计与实现(14页珍藏版)》请在金锄头文库上搜索。

1、蚂蚁算法的Java设计与实现一、算法描述蚂蚁算法(Ant Colony Optimization, ACO),又称蚁群算法,是一种用来 在图中寻找优化路径的机率型技术。它由Marco Dorigo于1992年在 他的博士论文中引入,其灵感来源于蚂蚁在寻找食物过程中发现路径 的行为。昆虫世界中,蚂蚁的组成是一种群居的世袭大家庭,我们称之为蚁群。 蚂蚁分为世袭制的蚁王(后)和工蚁两种,它们具有高度组织的社会 性,彼此沟通不仅可以借助触觉和视觉的联系,在大规模的协调行动 中还可以借助外激素(有些书称信息素)之类的信息介质。蚂蚁平时 在巢穴附近作无规则行走,一旦发现食物并不立即进食而是将之搬回 蚁穴与

2、其他蚂蚁分享,在食物小时则独自搬回蚁穴,否则就回蚁穴搬 兵,一路上会留下外激素,食物越大外激素的浓度就越大,越能吸引 其他的蚂蚁过去一起搬去食物,这样最终就能将食物全部搬回蚁穴。设想,如果我们要为蚂蚁设计一个人工智能的程序,那么这个程序要 多么复杂呢?首先,要让蚂蚁能够避开障碍物,就必须根据适当的地 形给它编进指令让他们能够巧妙地避开障碍物,其次,要让蚂蚁找到 食物,就需要让他们遍历空间上的所有点;再次,如果要让蚂蚁找到 最短的路径,那么需要计算所有可能的路径并且比较它们的大小,而 且更重要的是程序的错误也许会让你前功尽弃。然而,事实并没有想得那么复杂,每个蚂蚁只做了非常简单的工作: 检查某个

3、范围内有无食物,并逐渐向外激素浓的方向运动。每只蚂蚁 只关心很小范围内的眼前信息,而且根据这些局部信息利用几条简单 的规则进行决策,这样,在蚁群这个集体里,复杂性的行为就会凸现 出来。1范围规则蚂蚁观察到的范围是一个方格世界,蚂蚁有一个参数为速度半径(一 般是 3),那么它能观察到的范围就是 3*3 个方格世界,并且能移动 的距离也在这个范围之内。2环境规则蚂蚁所在的环境是一个虚拟的世界,其中有障碍物,有别的蚂蚁,还 有信息素。信息素有两种,一种是找到食物的蚂蚁洒下的食物信息素, 一种是找到窝的蚂蚁洒下的窝的信息素。每个蚂蚁都仅仅能感知它范围内的环境信息。环境以一定的速率让信息素消失。3觅食规

4、则在每只蚂蚁能感知的范围内寻找是否有食物,如果有就直接过去。否 则看是否有信息素,并且比较在能感知的范围内哪一点的信息素最多 这样,它就朝信息素多的地方走,并且每只蚂蚁多会以小概率犯错误, 从而并不是往信息素最多的点移动。蚂蚁找窝的规则和上面一样,只 不过它对窝的信息素做出反应,而对食物信息素没反应。4移动规则每只蚂蚁都朝向信息素最多的方向移动。当周围没有信息素指引的时 候,蚂蚁会按照自己原来运动的方向惯性地运动下去,且在运动的方 向有一个随机的小的扰动。为了防止蚂蚁原地转圈,它会记住最近刚 走过了哪些点,如果发现要走的下一点已经在最近走过了,它就会尽 量避开。5避障规则如果蚂蚁要移动的方向有

5、障碍物挡住,它会随机地选择另一个方向,并且有信息素指引的话,它会按照觅食的规则行为。6播撒信息素规则每只蚂蚁在刚找到食物或者窝的时候撒发的信息素最多,并随着它走 远的距离,播撒的信息素越来越少。根据这几条规则,蚂蚁之间并没有直接的关系,但是每只蚂蚁都和环 境发生交互,而通过信息素这个纽带,实际上把各个蚂蚁之间关联起 来了。比如,当一只蚂蚁找到了食物,它并没有直接告诉其他蚂蚁这 儿有食物,而是向环境播撒信息素,当其他的蚂蚁经过它附近的时候, 就会感觉到信息素的存在,进而根据信息素的指引找到了食物。二、实现理解蚁群算法的实质之后,就可以利用计算机语言编写出一个蚁群算法程序来,关键是实现以上介绍的几

6、个规则,下面用Java来实现。1.蚂蚁蚂蚁是蚁群中最小的单位,是所有简单规则应用的最小个体。 public class Antpublic Square SQUARE; /蚂蚁所在方格public Food CARRYING = null; /所搬的食物数public int ID; /蚂蚁的编号public boolean HELPING = false; /是否帮忙搬运食物public void move(int turn)/蚂蚁移动到下一个方格2. 范围蚂蚁所在的方格应该包含附近的方格编号、所含食物数量、蚂蚁数量外激素的浓度、以及坐标等信息。public class Square pub

7、lic Square NE; /附近的 8 个方向的方格public Square N;public Square NW;public Square W;public Square SW;public Square S;public Square SE;public Square E;public LinkedList ANTS; /本方格中包含的蚂蚁 public Food FOOD; /本方格中包含的食物数 public Nest NEST; /方格为蚁穴 public Pheromone_1 PHEROMONE_1; /本方格中的外激素含量 public int X; /本方格的坐标 p

8、ublic int Y;private World WORLD; /所属的环境 public boolean WALL; /是否有障碍物 public Square(int x, int y, World world)FOOD = null;NEST = null;PHEROMONE_1 = null;X = x;Y = y;WORLD = world;WALL = false;ANTS = new LinkedList();环境是由多个方格组成的,是一个平面,因此用一个方格的二维数组来表示是最合适不过的。public class Worldprivate Square WORLD; /定义环

9、境二维数组private int WIDTH; /环境的长宽private int HEIGHT;private Pheromone_1List P1LIST; /保存所有外激素的列表 public World(Pheromone_1List p1list) this.WIDTH = Settings.WIDTH;this.HEIGHT = Settings.HEIGHT;this.P1LIST = p1list;WORLD = new SquareWIDTHHEIGHT;4. 觅食规则移动规则和避障规则:这三种规则全都跟蚂蚁的移动方向有关,并在 移动前都要先计算周围方格的外激素浓度,选择外激

10、素浓度最高的方 格方向移动。private Square chooseBestSquare()Square square_list = SQUARE.E, SQUARE.NE, SQUARE.N, SQUARE.NW,SQUARE.W, SQUARE.SW, SQUARE.S, SQUARE.SE;double current_best_value = 0;double value = 0;Square square = SQUARE;/ 选择最好的方格for(int i=0;i<square_list.length;i+)value = calculateSquareValue(squ

11、are_listi);计算方格值if(value > current_best_value)current_best_value = value;square = square_listi; if(square.ANTS.size() >= Settings.MAXIMUM_NUMBER_OF_ANTS) return SQUARE; return square; private double calculateSquareValue(Square s) double thresholds = Settings.THRESHOLDS;if(s=null | s.WALL) / 方格

12、有障碍物return -100000;/ 计算方格中各项参数的值return s.getFood()*thresholds0 / 食物+ s.getPheromone_1() * thresholds1 / 外激素每只蚂蚁找到食物后会根据食物的数量播撒相应量的外激素,以便其他蚂蚁能够更快得找到这堆食物。private void putPheromone_1(double amount)if(SQUARE.getPheromone_1() < Settings.PHEROMONE_LIMIT)SQUARE.addPheromone_1(amount);从以上蚁群算法中各个要素的代码来看,实

13、现蚁群算法并不难。每只 蚂蚁并不是像我们想象的需要知道整个环境的信息。它们只关心很小 范围内的眼前信息,而且根据这些局部信息利用几条简单的规则进行 决策,这样,在蚁群这个集体里,复杂性的行为就会凸现出来。这就 是人工生命、复杂性科学解释的规律。三、结语上面实现的蚂蚁算法只是大致模拟蚁群的觅食过程,真正的蚂蚁觅食 过程远比这个复杂,比如增加蚂蚁搬运食物的距离和数量,蚂蚁在搬 运食物发现更大的食物可能会丢弃原有食物,还可以增加蚂蚁搬运食 物回蚁穴的最短路径的求解。同时需要注意的是,由于蚁群算法觅食 地过程,蚁群算法可能会过早的收敛并陷入局部最优解。当然经过改 进算法将会更优,希望能起着“抛砖引玉”的作用,给大家一点启发 和思路。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号