java web蚁群算法,利用百度地图动态展示路径,界面漂亮

    在2023年3月份曾经写过一篇博客,介绍图形化蚁群算法的具体实现。博客地址在****可以看到。前端时间应一个朋友的要求,对蚁群算法的实现用java web来进行实现,并且通过百度地图来进行展示最终的最优路径。经过半个月的开发,我完成了java web蚁群算法,并且通过这篇博客与大家分享。目前java web蚁群算法系统功能已经很全面,后续会进一步完善。整个系统界面漂亮,有完整得源码,希望大家可以喜欢。喜欢的帮忙点赞和关注。一起编程、一起进步。

系统主要功能

   系统分两个部分,快递员和系统管理员。快递员设置自己的位置,和查看最近路径,并且在地图上进行展示。系统管理员对整个系统进行日常的维护,包括的功能包括:用户管理、位置管理等。整个系统功能模块图如下所示:

蚁群算法简介

    蚁群算法是受到对真实蚂蚁群觅食行为研究的启发而提出。生物学研究表明:一群相互协作的蚂蚁能够找到食物和巢穴之间的最短路径,而单只蚂蚁则不能。生物学家经过大量细致观察研究发现,蚂蚁个体之间的行为是相互作用相互影响的。蚂蚁在运动过程中,能够在它所经过的路径上留下一种称之为信息素的物质,而此物质恰恰是蚂蚁个体之间信息传递交流的载体。蚂蚁在运动时能够感知这种物质,并且习惯于追踪此物质爬行,当然爬行过程中还会释放信息素。一条路上的信息素踪迹越浓,其它蚂蚁将以越高的概率跟随爬行此路径,从而该路径上的信息素踪迹会被加强,因此,由大量蚂蚁组成的蚁群的集体行为便表现出一种信息正反馈现象。某一路径上走过的蚂蚁越多,则后来者选择该路径的可能性就越大。蚂蚁个体之间就是通过这种间接的通信机制实现协同搜索最短路径的目标的。假设m只蚂蚁在图的相邻节点间移动,从而协作异步地得到问题的解。每只蚂蚁的一步转移概率由图中的每条边上的两类参数决定:1. 信息素值也称信息素痕迹。2.可见度,即先验值。

2.信息素的更新方式有2种,一是挥发,也就是所有路径上的信息素以一定的比率进行减少,模拟自然蚁群的信息素随时间挥发的过程;二是增强,给评价值“好”(有蚂蚁走过)的边增加信息素。

3.蚂蚁向下一个目标的运动是通过一个随机原则来实现的,也就是运用当前所在节点存储的信息,计算出下一步可达节点的概率,并按此概率实现一步移动,逐此往复,越来越接近最优解。

4.蚂蚁在寻找过程中,或者找到一个解后,会评估该解或解的一部分的优化程度,并把评价信息保存在相关连接的信息素中。

系统框架

开发语言为Java,开发环境Eclipse或者IDEA都可以。数据库采用:MySQL。

本项目是基于MVC的JSP技术进行的Web应用程序开发,其中

1 JSP技术为表示层,包括EL表达式、JSP动作、JSTL标准标签技术

2 Servlet为控制层技术

3JavaBean为开发模型层

4 采用MVC设计模式对各个模块进行开发

5数据库采用mysql数据库

6 采用Tomcat作为Web服务器

7火狐浏览器,360浏览器,Chrome浏览器,IE浏览器做为本次程序的运行浏览器

设置参数

运行本蚁群算法,需要设置一些参数,这些参数是在Java 窗体里面根据需要进行动态的设置。

private Ant[] ants; // 蚂蚁

private int cityNum; // 城市数量

private int[] x; // X坐标矩阵

private int[] y; // Y坐标矩阵

private double[][] distance; // 距离矩阵

private double[][] pheromone; // 信息素矩阵

private int bestLength; // 最佳长度

private int[] bestTour; // 最佳路径

private int antNum; // 蚂蚁数量

private int generation; // 迭代次数

private double alpha; // 信息素重要程度系数

private double beta; // 城市间距离重要程度系数

private double rho; // 信息素残留系数

private int Q; // 蚂蚁循环一周在经过的路径上所释放的信息素总量

private int deltaType; // 信息素更新方式模型,0: Ant-quantity; 1: Ant-density; 2: Ant-cycle

数据库设计

描述每一个基本表关系,例如假定用户信息表(ID、学号、学生姓名、性别、专业、密码、用户类型),关键字为单一的学号,所以肯定符合第二范式,也不存在部分函数依赖以及传递函数依赖,满足第三范式。其他表也是类似,不满足的按照无损分解和保持依赖进行分解,使之满足第三范式。使结构更合理,消除存储异常,减少数据冗余,便于插入,删除,更新。节省存储空间,避免数据不一致。 根据前面的概念设计,可以得出,本次课程设计中的逻辑结构设计。

  1. 位置(位置ID,名称,经度,维度)

  2. 用户(用户ID,名称,密码,性别,类型)

  3. 用户和位置对应关系(用户ID、位置ID、创建时间)

运行效果

   1 登陆

   2 位置管理

  3 位置管理

4 我的位置管理

5 最近路径地图展示

项目总结

(1)在写代码之前,在大脑里一定要把思路理清楚,不能模模糊糊,一定要把功能图和流程图画出来,然后根据它去实现每一个功能块,要多分析,培养一种良好的逻辑思维能力。

(2)在写代码的过程中,一定要采取就近原则,同一个功能,或者对同一个组件的设置一般要写在一块,这样写的程序比较清晰,不容易出错,也便于查找。

(3)要养成良好的注释习惯,一是有利于别人阅读你的程序,同时也有利于自己以后再看,就能很快的读懂程序,提高效率。

(4)把功能模块化,即把实现相同功能的代码段封装成一到一个类或者一个方法中,实现的时候调用即可,这样能提高代码的可读性

(5)养成创建包来存放不同功能的类,使系统的结构更加模块化和规范化。

(6)在编写代码的时候,一定要边写边调试,要适时的设置断点,或者把某些变量的值输出到控制台,通过观察和分析变量的值,便于判断问题所在,同时,需要捕获异常的一定要把异常信息打印出来,便于分析问题。

猜你喜欢

转载自blog.csdn.net/bangxiecode/article/details/131906398