基于Python实现的COVID19 疫情下的低风险旅行模拟系统

一,任务描述 1,用户需求分析 在 COVID19 疫情的影响下,人们乘坐交通工具出行的健康风险大大增加,这些风险来自不同的交通工具和城市环境,并且不同的交通工具和城市都会有不同的风险程度

本文包含相关资料包-----> 点击直达获取<-------

一、任务描述

1.用户需求分析

在 COVID19 疫情的影响下,人们乘坐交通工具出行的健康风险大大增加。这些风险来自不同的交通工具和城市环境,并且不同的交通工具和城市都会有不同的风险程度。对于人们来说,出行时综合考虑时间,城市风险,交通工具风险, 以及交通时刻表是一个很复杂的问题。“COVID19 疫情下的低风险旅行模拟系统”是针对这个问题的解决方案。

2.基础功能描述

城市之间有各种交通工具(汽车、火车和飞机)相连,有些城市之间无法直达,需要途径中转城市。某旅客于某一时刻向系统提出旅行要求。考虑在当前COVID19 疫情环境下,各个城市的风险程度不一样,分为低风险、中风险和高风险三种。系统根据风险评估,为该旅客设计一条符合旅行策略的旅行线路并输出; 系统能查询当前时刻旅客所处的地点和状态(停留城市/所在交通工具)。

二、功能需求说明及分析

城市总数不少于 10 个,为不同城市设置不同的单位时间风险值:低风险城市为 0.2;中风险城市为 0.5;高风险城市为 0.9。各种不同的风险城市分布要比较均匀,个数均不得小于 3 个。旅客在某城市停留风险计算公式为:旅客在某城市停留的风险=该城市单位时间风险值*停留时间。建立汽车、火车和飞机的时刻表(航班表),假设各种交通工具均为起点到终点的直达,中途无经停。

不能太简单,城市之间不能总只是 1 班车次;

整个系统中航班数不得超过 10 个,火车不得超过 30 列次;汽车班次无限制;

旅客的要求包括:起点、终点和选择的低风险旅行策略。其中,低风险旅行策略包括:

最少风险策略:无时间限制,风险最少即可

限时最少风险策略:在规定的时间内风险最少

旅行模拟系统以时间为轴向前推移,每 10 秒左右向前推进 1 个小时(非查询状态的请求不计时,即:有鼠标和键盘输入时系统不计时);

不考虑城市内换乘交通工具所需时间

系统时间精确到小时

建立日志文件,对旅客状态变化和键入等信息进行记录

选做一:用图形绘制地图,并在地图上实时反映出旅客的旅行过程。

选做二:为不同交通工具设置不同单位时间风险值,交通工具单位时间风险值分别为:

汽车=2;火车=5;飞机=9。

将乘坐交通工具的风险考虑进来,实现前述最少风险策略和限时风险最少策略。

三、总体方案设计说明

1.软件开发环境

Qt 版本号 5.12.8 msvc2017 x64 Visual studio 2019 C++ Windows10

2.总体结构

2.1总体结构图

2.2 总体结构说明

程序结构使用面向对象的思想设计,整个程序是一个窗口对象,该对象主要包括 UI 界面,用户对象,交通系统对象,以及时钟四个部分。这四个部分中只有UI 界面是用户可以直接操作的。系统接收两个输入,一个是来自用户的输入, 由 UI 组件接收;一个是程序内部时钟信号的输入。用户对象和交通系统对象为前端 UI 界面组件提供各种信息,UI 组件接收到输入后对用户和交通系统进行修改。

2.3模块划分

2.3.1类设计

2.3.2文件模块与包含关系

四、数据结构说明和数据字典

1 交通相关的数据结构说明和字典

此处的设计考虑多个方面的因素,在保证时刻表的复杂性,合理性的前提下, 根据现实情况进行适当的简化以提高灵活度和减少手工工作量。在此模拟系统中, 每 24 小时的时刻表都相同,该时刻表基于给定的某些参数随机生成(详情见5.2.3.3),实际运行中通过一些巧妙的算法同步时间日期,最终使模拟系统可以以无限的时间日期运行。

1.1航班/车次Transport

是计划表/时刻表中最基本的单位,表示两个城市之间直达的一次航班/车次。时刻表/计划表: 一个元素为 Transport 的数组:vector

城市 City

系统中的城市信息表只有一个,作为 TransSystem 类的私有成员变量m_cityList,在该类的构造函数中初始化,可以使用该类封装的 GetCityList()方法获,不可修改。在系统中,城市都用唯一的编号表示,需要获取信息时才从城市信息表中获取。

城市距离表:二维数组:vector >

系统中的城市距离图只有一个, 作为 TransSystem 类的私有成员变量m_distMap,在该类的构造函数中初始化,没有提供外部接口,在该类中直接使用。使用 m_distMap[srcIndex][destIndex]获取编号为 srcIndex 和 destIndex 的城市之间的距离。

*时刻表:三维数组:vector<vector >

Vehicle::Type 本质上是一个 unsigned char 类型,即 8bit 的空间。每一个交通方式使用一个标志位表示,飞机,火车,汽车的标志位分别为低 1、2、3 位, 其 值 作 为 静 态 常 量 存 储 在 Vehicle 类 中 。 使 用 m_timeTable [srcIndex][destIndex][time]可以获取从编号为 srcIndex 到 destIndex 的城市之间第 time 小时发车的所有直达交通工具。判断是否有某种交通工具的方法是与运算:if (m_timeTable[i][j][t] & Vehicle::plane)。

1.2 交通系统数据说明

1.3 用户数据说明

五、各模块(类)设计说明

1.User.c (User 类)

用户类,包含用户数据以及对用户数据的操作。

1.1 成员变量介绍 (见 4.2)

1.2 成员函数介绍

1.3 用户状态机

2.Transport.c

2.1Vehicle 类

该类只提供静态方法和静态常量,并不用于构造对象。该类的作用是提供关于各种交通工具的类型和信息。车辆的属性包括名字,固定的发车间隔,单位距离需要的时间,每小时风险值。

2.2 City 类: 见 4.1.2

2.3TransSystem 类

交通系统类,包含整个系统的客观环境信息,包括城市列表,距离表,时刻表,时间,日期等信息。内置算法模块提供计算最佳路径的接口,提供同步时间日期的接口。

2.3.1成员变量介绍(见 4.1.5)

2.3.2 成员函数介绍

2.3.3 时刻表生成算法介绍

生成 4.1.4 中所述的时刻表,需要用到的参数有:交通工具及其属性(5.2.1),城市距离表(4.1.3),以及一个增加一个辅助的二维数组 m_transMap, 元素类型为Vehicle::Type,即交通工具类型。m_transMap[srcIndex][destIndex]表示从城市 srcIndex 到 destIndex 是否存在直达航班。

在介绍该算法前,先声明几个假设条件:

每天(24 小时)的时刻表完全相同。

每种交通工具拥有固定的发车间隔。

对于每个城市来说,只有拥有某一种交通工具,那么他们每天的发车间隔、发车次数相同,只有时间不同,该时间由模拟程序随机生成。

算法描述: (伪代码)

2.3.4寻找最低风险算法介绍

该算法使用 DFS 算法,目的是找到一个最小风险的 transport 序列。设停留在城市C 的单位时间的风险为 R[c], 交通工具v 的单位时间风险是R[v], 第i 个transport 为 T[i]

选择第i 个transport 的总风险函数如下:

不考虑交通工具风险。

() = ( 1) + ([]. [ 1]. ) []

考虑交通工具风险。

() = ( 1) + ([]. [ 1]. ) [] + []. []

以上公式构成了 DFS 的基本框架,接下来介绍剪枝策略:

由于每 24 小时的车次相同,所以当 ([]. [ 1]. ) > 23

时不再往下搜索。

累积风险超过当前最优解的风险时,不再往下搜索。

当用户选择限时策略时,累计时间超过用户期望到达时间则不再往下搜索。

当用户选择不允许重复访问策略时,如果当前 transport 的终点已访问过,则不再往下搜索。

算法伪代码和描述如下:以“限时最小风险,允许重复访问”策略为例

详细代码和注释见TransSystem 中 a_开头的成员。

UI 模块。

UI 模块包括用代码写的 MainWindow.h 主窗口模块,MapCanvas.h 地图动画模块,TransportFrame.h 车票模块,用 Qt designer 设计生成的 MainWindow.ui 主窗口模块, SettingWindow.ui 设置窗口模块, TransportFrame.ui 车票模块, MapCanvas 地图模块。由于时间原因,繁琐的 ui 界面难以逐一介绍,用户交互逻辑和界面布局请查阅下文的用户使用说明,成员变量和成员函数请查阅 3.31 的UML 类图。详细代码和注释请查阅源文件。

六、范例执行结果及测试情况说明

当前软件内置的城市列表数组如下:

城市 成都 西安 太原 北京 沈阳 长沙
编号 0 1 2 3 4 5
城市 武汉 合肥 济南 广州 福州 杭州
编号 6 7 8 9 10 11

当前软件内置的城市距离图如下:

成都 西安 太原 北京 沈阳 长沙 武汉 合肥 济南 广州 福州 杭州
成都 0 2 4 5 7 3 3 4 5 5 6 6
西安 2 0 2 3 5 3 2 3 4 5 5 5
太原 4 2 0 2 3 4 3 3 2 6 5 4
北京 5 3 2 0 2 5 4 3 2 6 5 4
沈阳 7 5 3 2 0 6 5 4 2 7 6 5
长沙 3 3 4 5 6 0 1 4 4 2 2 3
武汉 3 2 3 4 5 1 0 1 3 2 2 2
合肥 4 3 3 3 4 4 1 0 2 3 2 1
济南 5 4 2 2 2 4 3 2 0 5 4 3
广州 5 5 6 6 7 2 2 3 5 0 2 3
福州 6 5 5 5 6 2 2 2 4 2 0 1
杭州 6 5 4 4 5 3 2 1 3 3 1 0

当前交通工具属性如下:

名字 代码 发车间隔 单位里程的时间 风险值
飞机 0x04 12 1 9
火车 0x02 8 2 5
汽车 0x01 6 4 2

当前 m_transMap(表示两座城市间存在的交通方式的标志位)如下:

成都 西安 太原 北京 沈阳 长沙 武汉 合肥 济南 广州 福州 杭州
成都 0 1 0 4 0 0 2 0 0 4 0 0
西安 1 0 1 0 0 0 1 0 0 0 0 0
太原 0 1 0 1 0 0 2 0 2 0 0 0
北京 0 0 1 0 1 0 0 0 1 4 0 0
沈阳 0 0 0 1 0 0 0 0 0 0 0 0
长沙 0 0 0 0 0 0 1 0 0 1 0 0
武汉 2 1 2 0 0 1 0 1 0 0 2 0
合肥 0 0 0 0 0 0 1 0 0 0 0 1
济南 0 0 2 1 0 0 0 0 0 0 0 2
广州 4 0 0 4 0 1 0 0 0 0 1 0
福州 0 0 0 0 0 0 2 0 0 1 0 1
杭州 0 0 0 0 0 0 0 1 2 0 1 0

该表格可视化草图如下:黄色,绿色,紫色分别表示飞机,火车,汽车。

测试方法和测试结果

由于城市数量有限,且每 24 小时的时刻表相同,所以我们可以规律的方法测试完几乎所有情况。对于任意源和目的地的组合(共 12*11 种), 使用所有可选的策略组合,设置起始时间为 0 到 23 的所有时间,对最优解进行搜索。

测试结果:所有样例通过测试,算法可以立刻响应生成结果。

七、评价和改进意见

个人对这一次的大作业比较满意,代码有着良好的命名,较为良好的面向对象设计,以及很好的扩展性能和易读性。算法设计也兼顾了灵活和效率,拥有良好的鲁棒性,可供用户自由设置。课程设计要求的任务已经全部完成。

所有的不足都来自扩展部分,原本计划完成的一些功能因为时间问题没有完成, 以至于该模拟程序离商用程序还有不小的差距。如:没有完成更随机的时刻表生成 算法,没有完成软件内部的用户操作教程,没有完成可动态缩放、可后台增删城市 的地图。并且,对于设计模式不熟悉导致了对一些类的设计一再改动,这些都是需 要改进的地方。

八、用户使用说明

1. 进入程序:

2. 主界面布局介绍:

3. 状态栏介绍:

4. “地图”页介绍

在地图页会显示系统中存在的城市,不同区域的风险程度使用不同的色块来表示。带箭头的红色虚线为用户当前计划的路线,该路线上的交通工具图标表示用户所处的位置和乘坐的交通工具。

5. “我的旅行”页介绍

查看我正在进行的计划。

6. 搜索新计划并添加计划。

注意:用户点击查询计划且查询成功后,系统时间会暂停并等待用户做出决策。在这个过程中,切换页面的按钮被禁用。用户允许的操作包括:添加计划, 取消(放弃)计划,重新选择起点、终点、时间、重新查询。

7. “时刻表”页介绍

参考文献

  • 城市尺度下COVID-19传播关系分析与可视化平台研发(石河子大学·隆学丰)
  • 基于Java EE的旅游在线预订系统的设计与实现(电子科技大学·韩利娜)
  • 新冠疫情舆情信息分析系统的设计与实现(华中科技大学·胡永辉)
  • 基于.NET的在线旅游产品系统设计与应用(吉林大学·关子南)
  • 新冠疫情舆情信息分析系统的设计与实现(华中科技大学·胡永辉)
  • 人体温度快速筛选及智能监控系统开发(太原理工大学·张紫东)
  • 微博疫情专题文本的情感分析及可视化(厦门大学·吴萍)
  • 基于Java EE的旅游在线预订系统的设计与实现(电子科技大学·韩利娜)
  • 新冠疫情舆情信息分析系统的设计与实现(华中科技大学·胡永辉)
  • 基于SSH框架的旅游管理系统设计与实现(苏州大学·闫利霞)
  • 旅游资源与线路管理系统的设计与实现(山东大学·孙杰)
  • 新冠疫情舆情信息分析系统的设计与实现(华中科技大学·胡永辉)
  • 新型冠状病毒感染循证决策动态推荐系统的研究(兰州大学·栗梦婷)
  • 旅行社散客安排系统的设计与开发(电子科技大学·郭红梅)
  • 基于智能移动终端蓝牙系统的传染源追踪系统研究(北京化工大学·秦宏利)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕业设计工坊 ,原文地址:https://m.bishedaima.com/yuanma/35695.html

相关推荐

  • 基于Python实现CCKS2019医渡云4k电子病历数据集命名实体识别

    CCKS2019医渡云4k电子病历数据集命名实体识别 Dataset Yidu-S4K数据集,对于给定的一组电子病历纯文本文档,任务的目标是识别并抽取出与医学临床相关的实体提及(entity mention)
    2024年05月14日
    2 1 1
  • 基于Python实现成绩统计系统

    1, 课程设计目的 《软件设计基础-Python》课程设计是这门课程的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖Python的知识点,又接近工程实际需要
    2024年05月14日
    1 1 1
  • 基于Android实现的web端作业提交系统

    首先是启动项目,打开cmd,输入node index,cmd返回Server has started, 打开IE,chrome等浏览器,在地址栏输入 http://127
    2024年05月14日
    2 1 1
  • Java+SSH框架实现论坛系统、javaweb+mysql

    这是一个🔥🔥SSH框架实现论坛系统,javaweb+mysql🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 框架实现论坛系统开发技术栈为SSH项目
    2024年05月23日
    2 1 1
  • 基于jsp+servlet+mysql的图书管理系统

    Book-management-jsp 基于jsp+servlet+mysql的图书管理系统 参考文献 基于RBAC的SSH架构下的图书管理应用研究(大连理工大学·姜楠) 高校图书管理系统的设计与实现(东北大学·黄鑫) 复旦大学数字图书馆个人图书管理系统的设计与实现(电子科技大学·陆卫国) 图书综合管理系统(吉林大学·王宇) 宁波职业技术学院图书管理系统分析与设计(云南大学·赵顺勇) 大同实验小学图书馆借还系统的设计与实现(电子科技大学·王洪宇) 山西电大图书管理信息系统的设计与实现(北京工业大学·李莹) 山西电大图书管理信息系统的设计与实现(北京工业大学·李莹) 山西电大图书管理信息系统的设计与实现(北京工业大学·李莹) 医疗卫生图书网的设计与实现(电子科技大学·张占平) 基于Web的书刊进销存系统的设计与实现(大连理工大学·王宁) 基于JSP/Servlet的三层式网上书店的研究与实现(吉林大学·郭小雪) 基于RBAC的SSH架构下的图书管理应用研究(大连理工大学·姜楠) 基于B/S架构的网上书店系统的设计与实现(电子科技大学·陈云英) 基于
    2024年05月14日
    11 1 2
  • 教师工作量管理系统

    这是一个🔥🔥基于SpringBoot框架的教师工作量管理系统设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    2 1 1
  • 基于Python的学生考勤管理系统的设计与实现 #

    基于Python的学生考勤管理系统的设计与实现 一,引言 1,1 项目背景 由于技术的革新,人们的生活相较于上个世纪已经发生了天翻地覆的变化,上个世纪出现的计算机的设计目的是军事需要
    2024年05月14日
    1 1 1
  • 基于SSM框架的物业缴费管理系统设计与实现源码

    使用SSM框架构建物业缴费管理系统已成为当前互联网时代的一项重要趋势,随着城市化进程的加速和物业管理需求的不断增长,传统的人工管理方式已无法满足快速,高效,准确的管理需求
    2024年05月07日
    5 1 1
  • 基于Python实现图像分割算法

    1, 问题描述 结合“Lecture 7 Segmentation”内容及参考文献[1],实现基于 Graph-based image segmentation 方法(可以参考开源代码
    2024年05月14日
    2 1 1
  • 新闻稿件管理系统

    这是一个🔥🔥基于SpringBoot框架的新闻稿件管理系统设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    2 1 1

发表回复

登录后才能评论