赞
踩
一、源码特点
java 基于蚁群算法的物流管理系统是一套完善的web设计系统 ,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为
TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使用java语言开发。
java 蚁群算法物流配送管理系统
二、功能介绍
本课题物流配送管理系统系统主要包括以下内容:
(1)网站首页;
(2)用户登录页面;
(3)信息录入页面:录入运单信息;
(4)分拣中心页面:包含了运单入库——运单信息更新为分拣中心的状态,记录操作入库的分拣中心ID。运单出库——选择运单出库的目的地,可选为配送站或者其他分拣中心等内容;
(5)配送站页面:包含了运单入站——运单信息更新为进入配送站的状态,记录进入的配送站的ID。运单出站——选择配送运单的配送员,并将运单信息更新为正在配送状态,记录配送的配
送员。运单归班——配送员派件完毕后,回到配送站内操作,选择配送结果:妥投、滞留、拒收,在数据库更新状态信息(妥投:运单正常配送,实物送达客户。滞留:暂时无法将实物送达
客户,运单暂时在配送站保管。拒收:客户拒绝签收运单)。
(6)通过蚁群算法结合百度api计算运输路线
数据库设计
(1)管理员信息表如表5.1所示:
表5.1 管理员信息表
序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
1 | glyid | INTEGER | 11 | 是 | 管理员编号 |
2 | yhm | VARCHAR | 40 | 否 | 用户名 |
3 | mm | VARCHAR | 40 | 否 | 密码 |
4 | xm | VARCHAR | 40 | 否 | 姓名 |
(2)机构信息表如表5.2所示:
表5.2 机构信息表
序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
1 | jgid | INTEGER | 11 | 是 | 机构编号 |
2 | jgmc | VARCHAR | 40 | 否 | 机构名称 |
3 | lx | VARCHAR | 40 | 否 | 类型 |
(3)用户信息表如表5.3所示:
表5.3 用户信息表
序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
1 | yhid | INTEGER | 11 | 是 | 用户编号 |
2 | yhm | VARCHAR | 40 | 否 | 用户名 |
3 | mm | VARCHAR | 40 | 否 | 密码 |
4 | xm | VARCHAR | 40 | 否 | 姓名 |
5 | jg | VARCHAR | 40 | 否 | 机构 |
6 | lxdh | VARCHAR | 40 | 否 | 联系电话 |
7 | lxdz | VARCHAR | 40 | 否 | 联系地址 |
(4)运单信息表如表5.4所示:
表5.4 运单信息表
序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
1 | ydid | INTEGER | 11 | 是 | 运单编号 |
2 | dh | VARCHAR | 40 | 否 | 单号 |
3 | fjr | VARCHAR | 40 | 否 | 发件人 |
4 | fjdh | VARCHAR | 40 | 否 | 发件电话 |
5 | fjdz | VARCHAR | 40 | 否 | 发件地址 |
6 | sjr | VARCHAR | 40 | 否 | 收件人 |
7 | sjrdh | VARCHAR | 40 | 否 | 收件人电话 |
8 | sjdz | VARCHAR | 40 | 否 | 收件地址 |
9 | bgnr | VARCHAR | 40 | 否 | 包裹内容 |
10 | zt | VARCHAR | 40 | 否 | 状态 |
(5)入库信息表如表5.4所示:
表5.4 入库信息表
序号 | 字段名称 | 数据类型 | 长度 | 主键 | 描述 |
1 | rkid | INTEGER | 11 | 是 | 入库编号 |
2 | yd | VARCHAR | 40 | 否 | 运单 |
3 | fjzx | VARCHAR | 40 | 否 | 分拣中心 |
4 | yh | VARCHAR | 40 | 否 | 用户 |
5 | czsj | VARCHAR | 40 | 否 | 操作时间 |
6 | ywzd | VARCHAR | 40 | 否 | 运往站点 |
7 | cksj | VARCHAR | 40 | 否 | 出库时间 |
8 | zt | VARCHAR | 40 | 否 | 状态 |
核心算法设计
- public void init(String path) {
- int []x;
- int []y;
- String buffer;
- BufferedReader br;
- try {
- br = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
- this.distance = new int[this.cityNum][this.cityNum];
- x = new int[cityNum];
- y = new int[cityNum];
- //读取城市的坐标
- StaticMethod st=new StaticMethod();
- for (int i = 0; i < cityNum; i++) {
- buffer = br.readLine();
- System.out.println("buffer="+buffer);
- String[] str = buffer.split(" ");
- x[i] = Integer.valueOf(st.strint(str[1]));
- y[i] = Integer.valueOf(st.strint(str[2]));
- }
- /**
- * 计算距离矩阵 ,针对具体问题,距离计算方法也不一样,此处用的是att48作为案例,
- * 它有48个城市,距离计算方法为伪欧氏距离,最优值为10628
- */
- for(int i = 0;i < this.cityNum - 1;i++) {
- for(int j = i + 1;j < this.cityNum;j++) {
- double rij = Math.sqrt(((x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]))/10.0);
- int tij = (int)Math.round(rij);
- if(tij < rij)
- tij++;
- this.distance[i][j] = tij;
- this.distance[j][i] = tij;
- }
- }
- this.distance[this.cityNum-1][this.cityNum-1] = 0;
- //初始化信息素矩阵
- this.pheromone=new double[this.cityNum][this.cityNum];
- for(int i = 0;i < this.cityNum;i++) {
- for(int j = 0;j < this.cityNum;j++) {
- this.pheromone[i][j] = 0.1d;
- }
- }
- //初始化最优路径的长度
- this.bestLength=Integer.MAX_VALUE;
- //初始化最优路径
- this.bestTour=new int[this.cityNum+1];
- //随机放置蚂蚁
- for(int i = 0;i < this.antNum;i++){
- this.ants[i]=new Ant(this.cityNum);
- this.ants[i].init(this.distance, this.alpha, this.beta);
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public void init(String a[]) {
- int []x;
- int []y;
- String buffer;
- BufferedReader br;
- try {
- // br = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
- this.distance = new int[this.cityNum][this.cityNum];
- x = new int[cityNum];
- y = new int[cityNum];
- //读取城市的坐标
- StaticMethod st=new StaticMethod();
- for (int i = 0; i < cityNum; i++) {
-
- String[] str = a[i].split(",");
- x[i] = Integer.valueOf(st.strint(str[1]));
- y[i] = Integer.valueOf(st.strint(str[2]));
-
- }
-
- /*
- for (int i = 0; i < cityNum; i++) {
- buffer = br.readLine();
- System.out.println("buffer="+buffer);
- String[] str = buffer.split(" ");
- x[i] = Integer.valueOf(str[1]);
- y[i] = Integer.valueOf(str[2]);
- }
- */
- /**
- * 计算距离矩阵 ,针对具体问题,距离计算方法也不一样,此处用的是att48作为案例,
- * 它有48个城市,距离计算方法为伪欧氏距离,最优值为10628
- */
- for(int i = 0;i < this.cityNum - 1;i++) {
- for(int j = i + 1;j < this.cityNum;j++) {
- double rij = Math.sqrt(((x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]))/10.0);
- int tij = (int)Math.round(rij);
- if(tij < rij)
- tij++;
- this.distance[i][j] = tij;
- this.distance[j][i] = tij;
- }
- }
- this.distance[this.cityNum-1][this.cityNum-1] = 0;
- //初始化信息素矩阵
- this.pheromone=new double[this.cityNum][this.cityNum];
- for(int i = 0;i < this.cityNum;i++) {
- for(int j = 0;j < this.cityNum;j++) {
- this.pheromone[i][j] = 0.1d;
- }
- }
- //初始化最优路径的长度
- this.bestLength=Integer.MAX_VALUE;
- //初始化最优路径
- this.bestTour=new int[this.cityNum+1];
- //随机放置蚂蚁
- for(int i = 0;i < this.antNum;i++){
- this.ants[i]=new Ant(this.cityNum);
- this.ants[i].init(this.distance, this.alpha, this.beta);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 更新信息素
- */
- private void updatePheromone() {
- //信息素挥发
- for(int i = 0;i < this.cityNum;i++)
- for(int j = 0;j < this.cityNum;j++)
- this.pheromone[i][j] = this.pheromone[i][j] * (1 - this.rho);
- //信息素更新
- for(int i = 0;i < this.cityNum;i++) {
- for(int j = 0;j < this.cityNum;j++) {
- for(int k = 0;k < this.antNum;k++) {
- this.pheromone[i][j] += this.ants[k].getDelta()[i][j];
- }
- }
- }
- }
-
- public void solve() {
- for (int g = 0; g < this.MAX_GEN; g++) {
- //每一只蚂蚁移动的过程
- for (int i = 0; i < this.antNum; i++) {
- for (int j = 0; j < this.cityNum; j++) {
- this.ants[i].selectNextCity(this.pheromone);
- }
- this.ants[i].getTabu().add(this.ants[i].getFirstCity());
- // if(this.ants[i].getTabu().size() < 49) {
- // System.out.println(this.ants[i].toString());
- // }
- //计算蚂蚁获得的路径长度
- this.ants[i].setTourLength(this.ants[i].calculateTourLength());
- if(this.ants[i].getTourLength() < this.bestLength){
- //保留最优路径
- this.bestLength = this.ants[i].getTourLength();
- System.out.println("第"+g+"代,发现新的解"+this.bestLength);
- // System.out.println("size:"+this.ants[i].getTabu().size());
- for(int k = 0;k < this.ants[i].getTabu().size();k++)
- this.bestTour[k] = this.ants[i].getTabu().get(k).intValue();;
- }
- //更新信息素变化矩阵
- for (int j = 0; j < this.ants[i].getTabu().size()-1; j++) {
- this.ants[i].getDelta()[this.ants[i].getTabu().get(j).intValue()][this.ants[i].getTabu().get(j+1).intValue()] = (double) (1.0/this.ants[i].getTourLength());
- this.ants[i].getDelta()[this.ants[i].getTabu().get(j+1).intValue()][this.ants[i].getTabu().get(j).intValue()] = (double) (1.0/this.ants[i].getTourLength());
- }
- }
- //更新信息素
- this.updatePheromone();
- //重新初始化蚂蚁
- for(int i = 0;i < this.antNum;i++){
- this.ants[i].init(this.distance, this.alpha, this.beta);
- }
- }
- //打印最佳结果
- this.printOptimal();
- }
百度地图展现设计
- <font color="red" size="3">计算最佳路径结果
- <%
- sql="";
- String jgmc="";
- String mms="";
- String[] mm = null;;
-
- for(int j=0;j<b.length;j++){
- db.open();
- mms=ids[b[j]];
- mm = mms.split(",");
- sql="select * from jigou where jgid='"+mm[0]+"'";
- System.out.println(sql);
- rs=db.query(sql);
- if(rs.next()){
- jgmc=rs.getString("jgmc");
-
- }
-
- out.println(b[j]+":"+jgmc);
- System.out.println("b=="+b[j]);
-
- System.out.println(ids[b[j]]);
- }
- %>
-
-
- </font>
- <div id="allmap" width="900px" height="800px"></div>
-
-
-
-
- <script type="text/javascript">
-
- // 百度地图API功能
- var map = new BMap.Map("allmap");
- map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);
- map.enableScrollWheelZoom(true);
-
- <%
- String jd="";
- String wd="";
- String jd1="";
- String wd1="";
- String tt=ids[b[0]];
- System.out.println(tt);
- String[] kk = tt.split(",");
- System.out.println("jd="+kk[1]);
- System.out.println("wd="+kk[2]);
-
- jd=kk[1];
- wd=kk[2];
- %>
-
-
- var pa1 = new BMap.Point(<%=jd%>,<%=wd%>);
- var pa2 = new BMap.Point(<%=jd%>,<%=wd%>);
- var p3 = new BMap.Point(116.365942,39.996165);
- var p4 = new BMap.Point(116.408757,39.995704);
-
- <%
- String str="new BMap.Point(116.365942,39.996165), new BMap.Point(116.408757,39.995704)";
- str="";
-
-
-
-
- int i=0;
-
-
- for(int j=0;j<b.length;j++){
- db.open();
- mms=ids[b[j]];
- mm = mms.split(",");
-
-
- str+="new BMap.Point("+mm[1]+","+mm[2]+"),";
- }
-
-
-
- System.out.println("str="+str);
-
- if(i>0){
- str=str.substring(0,str.length()-1);
- }
-
-
-
- %>
三、注意事项
1、管理员账号:admin密码:admin 数据库配置文件DBO.java
2、开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使用java语言开发。
3、数据库文件名是jspshop.sql ,系统名称shop
4、系统首页地址:http://127.0.0.1:8080/shop/qt/index.jsp
四系统实现
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。