当前位置:   article > 正文

java蚁群算法的物流管理系统eclipse定制开发mysql数据库BS模式java编程百度地图_基于java的物流管理系统的核心算法

基于java的物流管理系统的核心算法

一、源码特点
     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

状态

核心算法设计 

  1. public void init(String path) {
  2. int []x;
  3. int []y;
  4. String buffer;
  5. BufferedReader br;
  6. try {
  7. br = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
  8. this.distance = new int[this.cityNum][this.cityNum];
  9. x = new int[cityNum];
  10. y = new int[cityNum];
  11. //读取城市的坐标
  12. StaticMethod st=new StaticMethod();
  13. for (int i = 0; i < cityNum; i++) {
  14. buffer = br.readLine();
  15. System.out.println("buffer="+buffer);
  16. String[] str = buffer.split(" ");
  17. x[i] = Integer.valueOf(st.strint(str[1]));
  18. y[i] = Integer.valueOf(st.strint(str[2]));
  19. }
  20. /**
  21. * 计算距离矩阵 ,针对具体问题,距离计算方法也不一样,此处用的是att48作为案例,
  22. * 它有48个城市,距离计算方法为伪欧氏距离,最优值为10628
  23. */
  24. for(int i = 0;i < this.cityNum - 1;i++) {
  25. for(int j = i + 1;j < this.cityNum;j++) {
  26. double rij = Math.sqrt(((x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]))/10.0);
  27. int tij = (int)Math.round(rij);
  28. if(tij < rij)
  29. tij++;
  30. this.distance[i][j] = tij;
  31. this.distance[j][i] = tij;
  32. }
  33. }
  34. this.distance[this.cityNum-1][this.cityNum-1] = 0;
  35. //初始化信息素矩阵
  36. this.pheromone=new double[this.cityNum][this.cityNum];
  37. for(int i = 0;i < this.cityNum;i++) {
  38. for(int j = 0;j < this.cityNum;j++) {
  39. this.pheromone[i][j] = 0.1d;
  40. }
  41. }
  42. //初始化最优路径的长度
  43. this.bestLength=Integer.MAX_VALUE;
  44. //初始化最优路径
  45. this.bestTour=new int[this.cityNum+1];
  46. //随机放置蚂蚁
  47. for(int i = 0;i < this.antNum;i++){
  48. this.ants[i]=new Ant(this.cityNum);
  49. this.ants[i].init(this.distance, this.alpha, this.beta);
  50. }
  51. } catch (FileNotFoundException e) {
  52. e.printStackTrace();
  53. } catch (IOException e) {
  54. e.printStackTrace();
  55. }
  56. }
  57. public void init(String a[]) {
  58. int []x;
  59. int []y;
  60. String buffer;
  61. BufferedReader br;
  62. try {
  63. // br = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
  64. this.distance = new int[this.cityNum][this.cityNum];
  65. x = new int[cityNum];
  66. y = new int[cityNum];
  67. //读取城市的坐标
  68. StaticMethod st=new StaticMethod();
  69. for (int i = 0; i < cityNum; i++) {
  70. String[] str = a[i].split(",");
  71. x[i] = Integer.valueOf(st.strint(str[1]));
  72. y[i] = Integer.valueOf(st.strint(str[2]));
  73. }
  74. /*
  75. for (int i = 0; i < cityNum; i++) {
  76. buffer = br.readLine();
  77. System.out.println("buffer="+buffer);
  78. String[] str = buffer.split(" ");
  79. x[i] = Integer.valueOf(str[1]);
  80. y[i] = Integer.valueOf(str[2]);
  81. }
  82. */
  83. /**
  84. * 计算距离矩阵 ,针对具体问题,距离计算方法也不一样,此处用的是att48作为案例,
  85. * 它有48个城市,距离计算方法为伪欧氏距离,最优值为10628
  86. */
  87. for(int i = 0;i < this.cityNum - 1;i++) {
  88. for(int j = i + 1;j < this.cityNum;j++) {
  89. double rij = Math.sqrt(((x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]))/10.0);
  90. int tij = (int)Math.round(rij);
  91. if(tij < rij)
  92. tij++;
  93. this.distance[i][j] = tij;
  94. this.distance[j][i] = tij;
  95. }
  96. }
  97. this.distance[this.cityNum-1][this.cityNum-1] = 0;
  98. //初始化信息素矩阵
  99. this.pheromone=new double[this.cityNum][this.cityNum];
  100. for(int i = 0;i < this.cityNum;i++) {
  101. for(int j = 0;j < this.cityNum;j++) {
  102. this.pheromone[i][j] = 0.1d;
  103. }
  104. }
  105. //初始化最优路径的长度
  106. this.bestLength=Integer.MAX_VALUE;
  107. //初始化最优路径
  108. this.bestTour=new int[this.cityNum+1];
  109. //随机放置蚂蚁
  110. for(int i = 0;i < this.antNum;i++){
  111. this.ants[i]=new Ant(this.cityNum);
  112. this.ants[i].init(this.distance, this.alpha, this.beta);
  113. }
  114. } catch (Exception e) {
  115. e.printStackTrace();
  116. }
  117. }
  118. /**
  119. * 更新信息素
  120. */
  121. private void updatePheromone() {
  122. //信息素挥发
  123. for(int i = 0;i < this.cityNum;i++)
  124. for(int j = 0;j < this.cityNum;j++)
  125. this.pheromone[i][j] = this.pheromone[i][j] * (1 - this.rho);
  126. //信息素更新
  127. for(int i = 0;i < this.cityNum;i++) {
  128. for(int j = 0;j < this.cityNum;j++) {
  129. for(int k = 0;k < this.antNum;k++) {
  130. this.pheromone[i][j] += this.ants[k].getDelta()[i][j];
  131. }
  132. }
  133. }
  134. }
  135. public void solve() {
  136. for (int g = 0; g < this.MAX_GEN; g++) {
  137. //每一只蚂蚁移动的过程
  138. for (int i = 0; i < this.antNum; i++) {
  139. for (int j = 0; j < this.cityNum; j++) {
  140. this.ants[i].selectNextCity(this.pheromone);
  141. }
  142. this.ants[i].getTabu().add(this.ants[i].getFirstCity());
  143. // if(this.ants[i].getTabu().size() < 49) {
  144. // System.out.println(this.ants[i].toString());
  145. // }
  146. //计算蚂蚁获得的路径长度
  147. this.ants[i].setTourLength(this.ants[i].calculateTourLength());
  148. if(this.ants[i].getTourLength() < this.bestLength){
  149. //保留最优路径
  150. this.bestLength = this.ants[i].getTourLength();
  151. System.out.println("第"+g+"代,发现新的解"+this.bestLength);
  152. // System.out.println("size:"+this.ants[i].getTabu().size());
  153. for(int k = 0;k < this.ants[i].getTabu().size();k++)
  154. this.bestTour[k] = this.ants[i].getTabu().get(k).intValue();;
  155. }
  156. //更新信息素变化矩阵
  157. for (int j = 0; j < this.ants[i].getTabu().size()-1; j++) {
  158. 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());
  159. 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());
  160. }
  161. }
  162. //更新信息素
  163. this.updatePheromone();
  164. //重新初始化蚂蚁
  165. for(int i = 0;i < this.antNum;i++){
  166. this.ants[i].init(this.distance, this.alpha, this.beta);
  167. }
  168. }
  169. //打印最佳结果
  170. this.printOptimal();
  171. }

百度地图展现设计

  1. <font color="red" size="3">计算最佳路径结果
  2. <%
  3. sql="";
  4. String jgmc="";
  5. String mms="";
  6. String[] mm = null;;
  7. for(int j=0;j<b.length;j++){
  8. db.open();
  9. mms=ids[b[j]];
  10. mm = mms.split(",");
  11. sql="select * from jigou where jgid='"+mm[0]+"'";
  12. System.out.println(sql);
  13. rs=db.query(sql);
  14. if(rs.next()){
  15. jgmc=rs.getString("jgmc");
  16. }
  17. out.println(b[j]+":"+jgmc);
  18. System.out.println("b=="+b[j]);
  19. System.out.println(ids[b[j]]);
  20. }
  21. %>
  22. </font>
  23. <div id="allmap" width="900px" height="800px"></div>
  24. <script type="text/javascript">
  25. // 百度地图API功能
  26. var map = new BMap.Map("allmap");
  27. map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);
  28. map.enableScrollWheelZoom(true);
  29. <%
  30. String jd="";
  31. String wd="";
  32. String jd1="";
  33. String wd1="";
  34. String tt=ids[b[0]];
  35. System.out.println(tt);
  36. String[] kk = tt.split(",");
  37. System.out.println("jd="+kk[1]);
  38. System.out.println("wd="+kk[2]);
  39. jd=kk[1];
  40. wd=kk[2];
  41. %>
  42. var pa1 = new BMap.Point(<%=jd%>,<%=wd%>);
  43. var pa2 = new BMap.Point(<%=jd%>,<%=wd%>);
  44. var p3 = new BMap.Point(116.365942,39.996165);
  45. var p4 = new BMap.Point(116.408757,39.995704);
  46. <%
  47. String str="new BMap.Point(116.365942,39.996165), new BMap.Point(116.408757,39.995704)";
  48. str="";
  49. int i=0;
  50. for(int j=0;j<b.length;j++){
  51. db.open();
  52. mms=ids[b[j]];
  53. mm = mms.split(",");
  54. str+="new BMap.Point("+mm[1]+","+mm[2]+"),";
  55. }
  56. System.out.println("str="+str);
  57. if(i>0){
  58. str=str.substring(0,str.length()-1);
  59. }
  60. %>

三、注意事项
    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

四系统实现


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/663455
推荐阅读
相关标签
  

闽ICP备14008679号