java蚁群算法的物流管理系统eclipse定制开发mysql数据库BS模式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

状态

核心算法设计 

  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

四系统实现


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/213568.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[linux进程控制]进程替换

文章目录 1.进程替换的概念和原理2.如何完成进程替换2.1exec系列函数加载器的底层系统调用接口基于execve的封装--库函数 2.2 int execl(const char *path, const char *arg, ...);1.在当前进程进行替换2.在子进程进行替换 2.3 int execv(const char *path, char *const argv[]…

基于JNI实现调用C++ SDK

基于JNI实现调用C SDK 背景分析解决实践 背景 上篇文章总结了几种Java项目调用C/C SDK项目方法&#xff0c;在逐一实践、踩坑后&#xff0c;最终还是敲定采用 JNI 方式进行实现。在文章开始的过程&#xff0c;会先大概讲讲笔者遇到的情况&#xff0c;因为封装方式需要根据实际…

Debian12配置ssh服务器

Debian12配置ssh服务器 安装ssh-server sudo apt install openssh-server启动ssh sudo systemctl start ssh启用ssh sudo systemctl enable ssh查看ssh状态 sudo systemctl status ssh可以看到有enabled和running字样 说明ssh启用成功 连接到服务器 # username是你的用…

React立即更新DOM

正常情况下&#xff0c;react会等待set完毕后再进行页面渲染&#xff0c;所以在set时无法拿到更新后的dom import { useRef, useState } from "react"export default () > {const div useRef(null)const [count, setCount] useState(0)const btnClick () >…

备战春招——12.3 算法

哈希表 哈希表主要是使用 map、unordered_map、set、unorerdered_set、multi_&#xff0c;完成映射操作&#xff0c;主要是相应的函数。map和set是有序的&#xff0c;使用的是树的形式&#xff0c;unordered_map和unordered_set使用的是散列比表的&#xff0c;无序。 相应函数…

【PUSDN】java中easyexcel导入导出带有图片的Excel(main方法方式)

简述 java中easyexcel导入导出带有图片的Excel&#xff08;main方法方式&#xff09;&#xff0c;web方式详见另一篇 由于电脑音频问题&#xff0c;视频暂时没有解说声音&#xff0c; 回头重新补上 前情提示 如果有任何疑问、需求、技术支持&#xff0c;欢迎点赞&#xff0…

微机原理——定时器8253(8254)学习2应用与设计

目录 简要说明 用户扩展的定时计数器应用举例 1 8254作测量脉冲宽度 2 8254作定时 3 8254作分频 4 8254同时用作计数与定时 硬件设计 ​编辑软件设计 微机系统中定时计数器应用举例 5 计时器设计 硬件设计 软件设计 6 发生器设计 硬件设计 软件设计 简要说明 定…

springboot数据源配置

springboot数据源配置 数据层解决方案——持久化技术 内置持久化解决方案——jdbcTemplate 内置数据库 H2一般用于测试环境&#xff0c;配置profiels&#xff0c;只在开发阶段使用&#xff0c;让他在上线的时候不走这里就可以了 要使用内嵌的数据库H2,要先导入jar包

C++ day51 买卖股票最佳时期

题目1&#xff1a;309 买卖股票的最佳时机含冷冻期 题目链接&#xff1a;买卖股票的最佳时机含冷冻期 对题目的理解 prices[i]表示第i天股票的价格&#xff0c;尽可能多地完成更多的交易&#xff0c;不能同时进行多笔交易&#xff0c;卖出股票后&#xff0c;第二天无法买入股…

Hisat-Trinity-PASA等组学分析流程

一边学习&#xff0c;一边总结&#xff0c;一边分享&#xff01; 详细教程请访问&#xff1a; 组学分析流程 本期分析流程 Hisat2-SamtoolsTrinity_GG_denovoPASA … 本期教程文章 题目&#xff1a;Genomic insights into local adaptation and future climate-induced vu…

C++ 基础篇

目录 C开发概述 C特点 C跨平台的原因 C编译器 C库 操作系统API C基本概念 注释 变量 常量 两种定义常量方式的区别 表示符命名规则 常见的关键字 数据类型 整型 浮点数 字符型 转义字符 字符串型 布尔类型 运算符 算术运算符 赋值运算符 比较运算符 逻…

三极管在数字电路中的应用

一、认识三极管 三极管拥有3个引脚&#xff0c;分别对应3个级&#xff1a;基极(Base)、发射极&#xff08;Emitter&#xff09;、集电极(Collector)&#xff0c;如下图所示&#xff1b;下图横向左侧的是基极&#xff0c;带箭头的那个引脚就是发射极&#xff0c;另一个就是集电…

从零开始搭建博客网站-----登陆页面

登录按钮以及背景图设置 安装element-plus和css插件 npm install element-plus --save npm install sass --save npm install sass-loader --save在main.js里引用 寻找背景图存入assets文件下&#xff0c;并且在Login.vue里设置背景图和登录按钮 设置的背景图的大小没有起…

基于ResNet18网络完成图像分类任务

目录 1 数据处理 1.1 数据集介绍 1.2 数据读取 1.3 构造Dataset类 2 模型构建 3 模型训练 4 模型评价 5 模型预测 6 什么是预训练模型和迁移学习 7 比较“使用预训练模型”和“不使用预训练模型”的效果。 总结 在本实践中&#xff0c;我们实践一个更通用的图像分类任务…

物联网开发(一)新版Onenet 基础配置

onenet新创建的账号&#xff0c;没有了多协议接入&#xff0c;只有新的物联网开放平台 第一讲&#xff0c;先给大家讲一下&#xff1a;新版Onenet 基础配置 创建产品 产品开发-->创建产品 产品的品类选择个&#xff1a;大致符合你项目的即可&#xff0c;没有影响 选择智…

构建第一个ArkTS应用(纯HarmonyOS应用)

1. 安装开发工具 在华为开发者官方上下载HarmonyOS应用专用的开发工具&#xff0c;链接地址&#xff1a;HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 要想使用开发工具让项目跑起来&#xff0c;需要10G的磁盘空间。开发工具需要的磁盘空间为2.36G&#xff1b;SDK需…

Python笔记1.2(with open() as file和open()、logging、os、shutil、glob、decode和encode)

Python笔记1.1&#xff08;字符串日期转换、argparse、sys、overwrite、eval、json.dumpsloads、os.system(cmd)、zfill、endswith、深浅拷贝&#xff09; Python笔记2&#xff08;函数参数、面向对象、装饰器、高级函数、捕获异常、dir&#xff09; Python笔记1.2 13、with …

Linux(12):磁盘配额(Quota)与进阶文件系统管理

磁盘配额&#xff08;Quota&#xff09;的应用与实作 Quota 的一般用途&#xff1a; 针对 www server &#xff0c;例如:每个人的网页空间的容量限制&#xff1b; 针对 mail server&#xff0c;例如:每个人的邮件空间限制。 针对 file server&#xff0c;例如:每个人最大的可用…

Python 爬虫 之scrapy 框架

文章目录 常用的命令开始爬虫请求与响应让控制台只输出想要的信息创建一个py 文件来帮忙运行爬虫 工作原理图实战 常用的命令 Scrapy是一个用于爬取网站数据的Python框架&#xff0c;以下是一些常用的Scrapy命令&#xff1a; 开始的时候 用 cd 进入你想创建scrapy 的文件夹 &a…

Java中各种数据类型之间的转换

低类型向高类型自动进行转换&#xff0c;高类型向低类型的准换会丢失数据&#xff0c;整数到字符类型的转换将获取对应编码的字符。 进行高精度向低精度的强制类型准换时&#xff0c;需要将想要转换成的数据类型加一个括号()。 如何完成自动转换呢&#xff1f; 转换前的数据类…