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

news2025/1/24 14:56:13

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

四系统实现


 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Debian下载安装教程

目录 一.前言二.下载三.安装 一.前言 这篇文章展示如何使用VMware Workstation Player安装Debian12虚拟机。 二.下载 官网地址&#xff1a;官网 进入官网之后可以直接点击下载Debian选项&#xff0c;这样下载的是最新版的网络安装镜像。 三.安装 使用VMware Workstation P…

听GPT 讲Rust源代码--src/tools(5)

File: rust/src/tools/rust-analyzer/crates/hir-ty/src/mir/lower.rs 在Rust源代码中&#xff0c;lower.rs文件位于Rust Analyzer项目的hir-ty子库中&#xff0c;其目的是将高级中间表示&#xff08;HIR&#xff09;降低为中间表示&#xff08;MIR&#xff09;。下面对文件及其…

一、Zookeeper基本知识

目录 1、ZooKeeper概述 2、ZooKeeper特性 3、ZooKeeper集群角色 ​​​​​​​1、ZooKeeper概述 Zookeeper是一个分布式协调服务的开源框架。主要用来解决分布式集群中应用系统的一致性问题。 ZooKeeper本质上是一个分布式的小文件存储系统。提供基于类似于文件系统的目录…

3D模型材质编辑

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 如今&#xff0c;3D 纹理、打印和建模都非常流行。使用可用的高级工具&#xff0c;创建 3D 模型…

vscode插件离线下载

离线下载插件地址&#xff1a;https://marketplace.visualstudio.com/VSCode

SmartSoftHelp8,json格式化,校验工具

json格式化&#xff0c;校验工具 json 校验 json 格式化 本地校验 本地格式化 不需要联网 下载地址&#xff1a; https://pan.baidu.com/s/1zBgeYsqWnSlNgiKPR2lUYg?pwd8888​​​​​​​

前后端数据传输格式(上)

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 作为后端&#xff0c;写…

矩阵代数与MATLAB实现(特征值、广义特征值、酋矩阵、奇异值、托普利兹矩阵、汉克尔矩阵、范德蒙矩阵、)

矩阵代数的相关知识 目录 一、特征值与特征向量 1、特征值与特征向量 2、MATLAB计算 二、广义特征值与广义特征向量 1、广义特征值与广义特征向量 2、MATLAB计算 三、酋矩阵 1、酋矩阵 2、MATLAB计算 四、矩阵的奇异值分解 1、奇异值 2、MATLAB计算 五、托普利兹矩…

Spring事务管理介绍

文章目录 Spring事务管理1 Spring事务简介【重点】问题导入1.1 Spring事务作用1.2 需求和分析1.3 代码实现【前置工作】环境准备【第一步】在业务层接口上添加Spring事务管理【第二步】设置事务管理器(将事务管理器添加到IOC容器中)【第三步】开启注解式事务驱动【第四步】运行…

阿里系列-淘宝接口抓取及相关问题

阿里系-淘宝接口抓取 一、安装charlse抓包工具 官方下载地址 安装证书 二、安装xposed hook框架 Xponsed简介 具体安装步骤 三、安装模块 关闭阿里系ssl验证 开启http模式 支持支付宝、淘宝、淘宝直播各个接口抓取 四、效果如下 接下去一段时间更新阿里系相关接口 文章目录 一、…

WIN10 WIN11 关闭更新的绝佳办法(极简单无副作用)

WIN10 WIN11 关闭更新的绝佳办法&#xff08;极简单无副作用&#xff09; 极其简单用实用可以关闭更新20年 winr&#xff0c;输入regedit 打开注册表打开注册表的这个路径&#xff1a; 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 右键空白的地方…

Redis 入门、基础。(五种基本类型使用场景)

文章目录 1. 概况1.1 认识 NoSQL1.1.1 查询方式1.1.2 事务1.1.3 总结 2. 认识 Redis4. Redis 常见命令4.1 Redis 数据结构介绍4.2 Redis 通用命令4.3 Redis 命令之 String 命令4.4 Redis 命令的层级结构4.5 Redis 命令之 Hash 命令4.6 Redis 命令之 List 命令4.7 set 唯一不排序…

蓝桥杯第1037题子串分值和 C++ 字符串 逆向思维 巧解

题目 思路和解题方法 方案一——遍历哈希表 仅能过60%样例,大多数同学都用的该方法&#xff0c;就不过多赘述 #include <iostream> #include <unordered_map> using namespace std; int main() {string s;cin >> s;int n s.size();int res n;for (int i 0…

字符指针变量数组指针变量

字符指针变量 在指针的类型中&#xff0c;我们知道有一种指针叫做字符指针 一般的使用情况如下&#xff1a; #include<stdio.h> int main() {char ch w;char* pa &ch;*pa h;printf("%c", *pa);return 0; } 还有一种使用方法如下&#xff1a; #incl…

CRM在设备制造行业的应用,优化资源配置

设备制造业竞争激烈&#xff0c;公司要以客户为中心&#xff0c;搞好售后服务。CRM管理软件是设备制造业客户关系管理的重要工具。以下是CRM在设备制造业里的典型应用。 1.营销管理 制订市场策略&#xff1a;设备制造通常涉及较长的决策周期和销售周期。客户可能会在多家供货商…

听GPT 讲Rust源代码--src/tools(6)

File: rust/src/tools/rust-analyzer/crates/ide/src/references.rs 在Rust源代码中&#xff0c;references.rs文件位于rust-analyzer工具的ide模块中&#xff0c;其作用是实现了用于搜索引用的功能。 该文件包含了多个重要的结构体、特质和枚举类型&#xff0c;我将逐一介绍它…

英语助教求职简历模板(通用10篇)

以下10篇简历内容以英语助教招聘需求为背景制作&#xff0c;大家可以借鉴参考&#xff0c;希望能帮助大家在众多候选人中脱颖而出。 英语助教求职简历下载&#xff08;可在线制作)&#xff1a;百度幻主简历 英语助教简历1&#xff1a; 求职意向 求职类型&#xff1a;全职 …

基于Amazon Bedrock的企业级生成式AI平台

基于Amazon Bedrock的企业级生成式AI平台 2023.12.2版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 Amazon Bedrock 是一项新的 AWS 服务&#xff0c;可让企业通过 API 轻松利用和自定义生成式 AI 模型。公司现在可以构建和扩展人工智能应…

springboot教师进修培训管理系统设计与实现java+jsp

2.1研究目标 目前全国各地都陆续开展了中小学教师进修培训工作&#xff0c;以不断丰富中小学教师的专业知识&#xff0c;提高教学水平。针对传统进修培训管理模式效率低下&#xff0c;数据资料存储分散、混乱、易丢失的问题&#xff0c;以Java Web技术为基础&#xff0c;设计并…

Linux常用命令——atrm命令

在线Linux命令查询工具 atrm 删除待执行任务队列中的指定任务 补充说明 atrm命令用于删除待执行任务队列中的指定任务。 语法 atrm(选项)(参数)选项 -V&#xff1a;显示版本号。参数 任务号&#xff1a;指定待执行队列中要删除的任务。 实例 删除已经排队的任务 atq…