2015年亚太杯APMCM数学建模大赛B题城市公共交通服务水平动态评价模型求解全过程文档及程序

news2024/10/5 13:44:11

2015年亚太杯APMCM数学建模大赛

B题 城市公共交通服务水平动态评价模型

原题再现

  城市公共交通服务评价是城市公共交通系统建设和提高公共交通运营效率的重要组成部分。对于公交企业,管理和规划部门,传统公交车站、线路和换乘枢纽的规划数据只是基于主管部门收集的统计数据和人工盘点。

  在自动采集技术日益发展的今天,如果我们能够使用公交车GPS数据、公交卡消费数据、地铁卡消费数据和出租车GPS数据自动分析居民出行需求,并动态评估现有的交通规划设施服务(包括常规公交站和地铁站),这样就可以大大提高传统公交规划、设计和管理的工作效率和质量。

  附件中包括城市公交、公交卡消费、地铁卡消费和出租车GPS的数据。请仔细分析这些数据,并回答以下问题。
  1.至少使用三种方法对数据进行预处理,并比较数据的处理效果。
  2.分析基于GPS和公交卡消费的居民出行数据OD矩阵。
  3.请建立数学模型,对公交车站、地铁站的服务进行动态评估,并对最不合理的三个公交车站进行重新排序。

整体求解过程概述(摘要)

  本文采用大数据处理、聚类集成、计算机模拟分析、综合能效评价等方法,解决了城市公共交通服务水平的动态评价问题。

  对于第一个问题,我们使用三种方法对数据进行初步预处理,以便有助于分析和解决下一个问题。第一种方法是通过分仓和聚类等方法去除干扰噪声,去除不相关的属性值以达到初始清理的效果,利用Apriori算法得到一维布尔关联规则频繁项集,综合统计庞大的GPS数据量,采用快速生成大项集的方法对数据进行处理。第二种方法是在聚类方法中考虑对原始数据的破坏,去除一些无效项和缺陷项,在初步清理数据后,使用灰色关联度聚类分析。通过比较各种关联度,判断识别对象对研究对象的影响,并对处理数据的灰色关联度进行具体分析。第三种方法是去除一些相同的、有缺陷的和无效的项目,其数据清理过程和方法与前两种方法相似,考虑到k均值对数据类型的限制,它使用k中心值算法,在数据处理后,它使用相关性报告来获得数据预处理对原始数据的影响,以处理数据。
  对于问题二,我们使用问题一中预处理的数据,通过适当的数据集成原理,对公交GPS数据和公交IC卡信息进行补充集成,通过综合分析得到市民公交的基本信息。基于市民公交两点分析模型和Erlung-K分布曲线,得到了单线公交OD矩阵。根据公交站点群整合的相应原则和标准,将全市划分为647个公交社区,对市民基本交通信息表中的相应内容进行调整和计算,得到公交OD矩阵。基于公交OD矩阵,分析了公交时间分布特征、公交空间分布特征和矩阵内容特征。通过分析,可以明显看出公交高峰,早晚城市交通的潮汐现象相对明显;同时,我们还发现交通空间分布与城市土地利用布局、人口密度和公交系统分布密切相关。城市中心区聚集了大量的就业机会、各种公共服务和娱乐设备,成为市民出行的主要目的地。
  关于问题三,我们使用系统效率能量值来衡量公共交通系统服务质量的抽象概念。系统效率能量值由两部分组成,一是公共交通服务质量评价体系,分为安全、便捷、经济、快捷、准确、舒适六个不同方面,通过这六个维度的评价得到系统的服务质量;二是系统可靠性,分为服务时间可靠性、运输时间可靠性、准确点时间可靠性和运输量时间可靠性四个方面。最后,通过综合评价,发现东门汽车站、梅陇天桥汽车站和十堰金北村汽车站最不合适。东门汽车站道路狭窄,客流量大,造成交通堵塞,影响其系统效率能量值。梅陇高架汽车站客流量大,公交运行距离长,影响了系统的效率能量值。公交点距过大,距居民点距离较长,公交次数较少,会影响十堰金北村公交站的系统效率能量值。
  总之,我们通过属性和噪声处理对数据进行了初步清理,结合MATLAB、SQL Server、ArcGis等软件,使用聚类、K-中心点、Apriori和ADC算法来解决城市公共交通服务水平的动态评估问题。最后,我们有了一些期望和探索,这些期望和探索在我们的实际生活中具有很大的应用价值。

模型假设:

  1、 假设提供完整的数据可以代表深圳交通的实际情况
  2、 假设数据属性值缺陷记录为无效信息
  3、 假设城市公共交通系统处于完全备用状态;
  4、 假设正点率、行程时间、营业时间符合正态分布,乘客人数符合泊松分布。

问题分析:

  问题一分析
  问题一要求我们至少采用三种方法对数据进行初步处理,并分析对数据的影响。经过分析,我们得到了处理大数据的过程。首先,对重要数据进行清理和整合,然后进行转换和还原。最后,使用ServerSQL工具生成处理结果,以分析处理结果对数据的影响。
  第一种方法:为了消除海量数据中的大量“脏数据”“,我们首先介绍了装箱原理和聚类方法,然后对时间变量进行加权。最后,获得了城市公共交通系统服务质量的关键有效信息。同时,去除了一些无效的属性值,精简了数据大小。然后,使用Apriori算法获得了一维布尔关联规则由于影响公共交通系统服务质量因素的多样性,我们使用多次迭代生成多个候选项目集,然后绘制依赖图并选择不同的节点来评估结果的准确性。
  第二种方法:考虑到聚类方法对原始数据的破坏,我们只去除一些无效条目和缺陷,然后对数据进行回归分析。由于数据被赋予了许多不同的指标,因此采用多元线性回归方法对数据进行聚类、分类和处理。
  第三种方法:数据清理的过程与上述方法类似,但去除了一些重复、缺陷和无效项,然后考虑到k-平均算法对数据类型的限制,所以我们使用k-中点算法。数据处理后,调用报表的相异性,得到数据预处理对原始数据的影响。

  问题二分析
  问题二要求我们分析基于GPS和公交卡消费的居民出行数据OD矩阵。经过分析,我们发现GPS信息的有用属性值和IC卡数据的集成是有限的。因此,我们选择删除相关的无效基础信息,从而形成更全面、更实用的基础数据。通过下站,乘客从数据库中获取这三种信息的上下车时间,完成对公交出行起点和终点的研究。我们可以直接从数据库中提取乘客的乘车时间和车站信息。为了获得下车站和下车时间,我们引入了“公交出行分析双站点模型”,结合GIS公交电子地图,获得了终点站和起点站的完整信息。两个站点模型都没有考虑到大部分公共交通网络是在站点位置上存在变换的,因此引入el-Aron-K曲线进行了修正。经过以上分析,融合“单线公交乘客OD”信息和辅助参数,得到城市公交OD矩阵,然后我们按照“站点对应原则”将站点合并,并按照此标准划分为若干公共交通区域。然后根据表格调整公共交通出行信息,得到城市公交OD矩阵。基于公交OD矩阵,分析了矩阵的内容和特点,得出了相应的结论。

  问题三分析
  问题三要求我们建立数学模型,对公交车站、地铁站的服务进行动态评估,并对最不合理的三个公交车站进行重新排序。经过分析,我们认为应该将抽象的服务质量概念转化为系统能效价值来衡量。系统能效分为两部分:一是公共交通服务质量评价体系,分为安全、便捷、经济、快速、准确、舒适六个不同方面。安全是对操作安全和操作安全状况的评价。便利性是对其服务间隔、服务时间和易用性的评估。经济性是对旅客运输成本的评价。快速评估交付速度和乘客出行时间。分析是准确的到达时间偏移和准时率。舒适性是对运输系统的满载率和座椅的评估。二是系统的可靠性,分为营业时间可靠性、时间可靠性和良好可靠性、旅客人数可靠性四个方面。针对以上十个方面的数据库评价指标以及以往研究的结果和深圳的实际情况,设定了评价标准,并最终建立了基于ADC模型的系统能效公式,计算出各站的能效。然后综合所有的能效值对整个系统进行评价。车站效率最低的是最不合理的车站,我们可以根据评分过程得到最合理的安排。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:

部分程序如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
const int MAXM = 1E7;
const int MAXN = 60000;
struct Side{
 int u,v;
}side[MAXM];
vector<int>vv[MAXN];
int siz,totEdge;//the number of nodes,the number of edges
int hh[MAXM];
bool vis[MAXN];
void ppGraph(){//print graph
 for(int i = 1;i <= siz;i ++){
 cout<<i<<':';
 for(int j = 0;j < vv[i].size();j ++)
 cout<<vv[i][j]<<' ';
 cout<<endl;
 }
 cout<<endl;
}
void ppDiscretization(){//print the result of discretization
 for(int i = 0;i < totEdge;i ++){
 cout<<side[i].u<<' '<<side[i].v<<endl;
 }
}
void buildGraph(bool flag){//if flag is 0,graph is undirected
 for(int i = 0;i < totEdge;i ++){
 vv[side[i].u].push_back(side[i].v);
 if(flag == 0)vv[side[i].v].push_back(side[i].u);//wu xiang tu
 }
}
void getNC(){//undirected graph connected componet
 memset(vis,0,sizeof(vis));
 int totT = 0,maxNum = 0;
 queue<int>q;
 for(int i = 1;i <= siz;i ++){
 if(vis[i] == 0){
 vis[i] = 1;
 q.push(i);
 totT ++;
 int Tnum = 1;
 while(!q.empty()){
 int now = q.front();q.pop();
 int nn = vv[now].size();
 for(int j = 0;j < nn;j ++){
 if(vis[vv[now][j]])continue;
 Tnum ++;
 q.push(vv[now][j]);
 vis[vv[now][j]] = 1;
 }
 }
 maxNum = max(maxNum,Tnum);
 }
 }
 cout<<"the number of node of the max Connected 
component :"<<maxNum<<"the number of Connected 
component :"<<totT<<endl;
}
void getE(){//global efficiency
 double totDis = 0.0;
 for(int i = 1;i <= siz;i ++){
 memset(vis,0,sizeof(vis));
 queue<pair<int,int> >q;
 q.push(make_pair(i,0));
 vis[i] = 1;
 while(!q.empty()){
 pair<int,int> tmp = q.front();q.pop();
 if(tmp.second)totDis += 1.0/tmp.second;
 int now = tmp.first,nn = vv[now].size();
 for(int j = 0;j < nn;j ++){
 int xx = vv[now][j];
 if(vis[xx])continue;
 q.push(make_pair(xx,tmp.second+1));
 vis[xx] = 1;
 }
 }
 }
 cout<<"the average length of Shortest path of all nodes "<<totDis/siz/(siz1)<<endl;
}
bool have(int b,int a){//judge whether have edge b->a or not
 int nn = vv[b].size();
 for(int i = 0;i < nn;i ++){
 if(vv[b][i] == a)return 1;
 }
 return false;
 }
void getC(){//two kind of clustering coefficient
 //ppGraph();
 double C1 = 0,C2 = 0;
 long long totLian = 0;
 long long totTri = 0;
 for(int i = 1;i <= siz;i ++){
 int nn = vv[i].size();
 if(nn <= 1)continue;
 int tmpTri = 0;
 for(int one = 0;one < nn;one ++){
 for(int two = one + 1;two < nn;two ++){
 tmpTri += have(vv[i][two],vv[i][one]);
 }
 }
 double tmpC1 = (double)tmpTri*2/nn/(nn-1);
 C1 += tmpC1;
 totTri += tmpTri;
 totLian += nn*(nn-1)/2;
 }
 C1 /= siz;
 C2 = (double)totTri/totLian;
 cout<<"average Clustering coefficient of all nodes :"<<C1<<' '<<C2<<endl;
}
void getZ(){//average degree of nodes
 cout<<"average degree of nodes"<<(double)totEdge/siz<<endl;
}
//strongly connected component in directed graph
int t,dfn[MAXN],low[MAXN],sum;
int gNum[MAXN];
stack<int>s;
void dfs(int u){
 dfn[u] = low[u] = ++t;
 s.push(u);
 int nn = vv[u].size();
 for(int i = 0;i < nn;i ++){
 int v = vv[u][i];
 if(!dfn[v])dfs(v);
 if(dfn[v] != -1)low[u] = min(low[u],low[v]);
 }
if(low[u] == dfn[u]){
 int v;
 do {
 v = s.top();s.pop();
 dfn[v] = -1;
 low[v] = sum;
 gNum[sum] ++;
 }while(v != u);
 sum ++;
 }
}
void getG(){
 t = sum = 0;
 for(int i = 1;i <= siz;i ++){
 if(!dfn[i])dfs(i);
 }
 int maxNum = 0;
 for(int i = 0;i < sum;i ++){
 maxNum = max(maxNum,gNum[i]);
 }
 cout<<"the number of nodes of the max Strongly connected 
component :"<<maxNum<<"the number of Strongly connected 
component"<<sum<<endl;
}
//strongly connected component in directed graph
void getR1(){//reciprocity
 int totm_d = 0;
 for(int i = 1;i <= siz;i ++){
 int nn = vv[i].size();
 for(int j = 0;j < nn;j ++){
 totm_d += have(vv[i][j],i);
 }
 }
 cout<<"the reciprocity is : "<<(double)totm_d/totEdge<<endl;
}
void Undir(){//get undirected graph parameters
 buildGraph(0);
 cout<<"Total Nodes is :"<<siz<<endl;
 getNC();
 getE();
 getC();
}
void Dir(){//get directed graph parameters
 buildGraph(1);
 cout<<"Total Nodes is :"<<siz<<endl;
 getZ();
 getG();
 getE();
 getR1();
 for(int i = 0;i <= siz;i ++)vv[i].clear();
 buildGraph(0);
 getC();
}
int main(){
 freopen("in.txt","r",stdin);
 //build graph and discretization
 int a,b;
 char s[100];cin>>s;
 totEdge = 0;
 while(~scanf("%d,%d",&a,&b)){
 side[totEdge] = (Side){a,b};
 hh[totEdge*2] = a;
 hh[totEdge*2+1] = b;
 totEdge ++;
 }
 sort(hh,hh+totEdge*2);
 siz = unique(hh,hh+totEdge*2) - hh;
 for(int i = 0;i < totEdge;i ++){
 side[i].u = lower_bound(hh,hh+siz,side[i].u) - hh + 1;
 side[i].v = lower_bound(hh,hh+siz,side[i].v) - hh + 1;
 //cout<<side[i].u<<' '<<side[i].v<<endl;
 }
 //ppDiscretization();
 //build graph and discretization
 //Undir();//Get Parameters of Undirected Graph
 Dir();//Get Parameters of Directed Graph
 return 0;
}
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

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

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

相关文章

切割后面积最大的蛋糕

切割后面积最大的蛋糕 题记&#xff1a; 矩形蛋糕的高度为 h 且宽度为 w&#xff0c;给你两个整数数组 horizontalCuts 和 verticalCuts&#xff0c;其中&#xff1a; horizontalCuts[i] 是从矩形蛋糕顶部到第 i 个水平切口的距离verticalCuts[j] 是从矩形蛋糕的左侧到第 j …

探秘Spring的设计精髓,深入解析架构原理

序员与平庸的程序员之间的区别&#xff0c;是在于认为自己的代码重要还是数据结构更加重要。平庸的程序员眼里只有代码&#xff0c;优秀的程序员则关注数据结构及之前的关系。” 1、spring的设计理念 spring提供了一个轻量级的开发框架&#xff0c;抽象了实际开发中的很多共…

解决大模型“裸”奔,恒生打通落地金融“最后一公里”

大数据产业创新服务媒体 ——聚焦数据 改变商业 在数字化的21世纪&#xff0c;技术的每一次进步都能引发行业的巨大变革。进入2023年&#xff0c;大模型无疑是金融数智化升级的关键变革力量。无论是高频交易、风险管理&#xff0c;还是金融咨询和客户服务&#xff0c;大模型都…

【Linux】虚拟机项目部署与发布

目录 一、Linux部署单机项目 1.1 优缺点 1.2 将项目共享到虚拟机 1.3 解压后将war包放入tomcat 1.4 数据库导入脚本 1.5 Tomcat启动项目 二、部署前后端分离项目 2.1 准备工作 2.2 部署SPA项目 2.2.1 nginx反向代理 2.2.2 SPA项目宿主机访问 一、Linux部署单机项目…

【Unity精华一记】特殊文件夹

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

CMMI/ASPICE认证咨询及工具服务

服务概述 质量专家戴明博士的名言“如果你不能描述做事情的过程&#xff0c;那么你不知道你在做什么”。过程是连接有能力的工程师和先进技术的纽带&#xff0c;因此产品开发过程直接决定了产品的质量和研发的效率。 经纬恒润可结合多体系要求&#xff0c;如IATF16949\ISO26262…

S7-200 SMART与ABB ACS580变频器进行MODBUS RTU通信的具体方法示例

S7-200 SMART与ABB ACS580变频器进行MODBUS RTU通信的具体方法示例 1. ABB ACS580变频器一侧的设置:

[17]JAVAEE-HTTP协议

目录 一、什么是HTTP协议 什么时候会用到HTTP协议&#xff1f; HTTP协议的工作流程 二、HTTP的报文格式 抓包 HTTP请求报文格式 1.首行 2.header 常见键值对&#xff1a; 3.空行 4.正文&#xff08;body&#xff09;&#xff08;有的时候可以没有&#xff09; HTTP…

数据挖掘神器Orange初步使用

文章目录 安装示例项目展示鸢尾花数据 安装 可以在官网下载&#xff0c;地址为Orange&#xff0c;如果已经装了Anaconda&#xff0c;则可在Anaconda Navigator中找到一个非常猥琐的图标&#xff0c;下面写着Orange3&#xff0c;可以点击Install&#xff0c;装完之后点Launch就…

软考系统架构师知识点集锦六:项目管理

一、考情分析 二、考点精讲 2.1进度管理(时间管理) 进度管理:为了确保项目按期完成所需要的管理过程。 2.1.1过程 [WBS分解的基本要求] WBS的工作包是可控和可管理的&#xff0c;不能过于复杂。任务分解也不能过细&#xff0c;一般原则WBS的树形结构不超过6层。每个工作包要…

文件上传预览下载

文件上传的表单必须满足三个条件: 1.表单组件标签只能用:<input type"file" value"xxx">会自动弹框让用户选择文件 2.请求方式只能用post 3.表单编码格式只能用:mutipart/form-data 根据HTTP协议规定,浏览器每次向后台提交参数,都会对参数进行统一…

selenium工作原理和反爬分析

一、 Selenium Selenium是最广泛使用的开源Web UI(用户界面)自动化测试套件之一&#xff0c;支持并行测试执行。Selenium通过使用特定于每种语言的驱动程序支持各种编程语言。Selenium支持的语言包括C#&#xff0c;Java&#xff0c;Perl&#xff0c;PHP&#xff0c;Python和Ru…

编程实例:多人同时计时计费管理系统软件,可适用于钓场计时等管理

编程实例&#xff1a;多人同时计时计费管理系统软件&#xff0c;可适用于钓场计时等管理 编程系统化课程总目录及明细&#xff0c;点击进入了解详情。https://blog.csdn.net/qq_29129627/article/details/134073098?spm1001.2014.3001.5502 1、使用该编程工具开发的多人计时计…

Kafka - 3.x 副本不完全指北

文章目录 kafka 副本的基本信息Leader选举过程Kafka Controllerkafka 分区副本Leader的选举流程实际演示① 查看first的详细信息&#xff0c;注意观察副本分布情况② 停掉hadoop103上的kafka进程③ 再次查看first的相信信息&#xff0c;观察副本分布④ 处理分区leader分布不均匀…

吴恩达《机器学习》1-4:无监督学习

一、无监督学习 无监督学习就像你拿到一堆未分类的东西&#xff0c;没有标签告诉你它们是什么&#xff0c;然后你的任务是自己找出它们之间的关系或者分成不同的组&#xff0c;而不依赖于任何人给你关于这些东西的指导。 以聚类为例&#xff0c;无监督学习算法可以将数据点分成…

第八节——Vue渲染列表+key作用

一、列表渲染 vue中使用v-for指令进行列表 <template><div><!-- item 代表 当前循环的每一项 --><!-- index 代表 当前循环的下标--><!-- 注意&#xff1a;必须要加key--><div v-for"(item, index) in arr" :key"index"…

vue源码分析(三)——new Vue 的过程(详解data定义值后如何获取的过程)

文章目录 零、准备工作1.创建vue2项目2.修改main.js 一、import Vue from vue引入的vue是哪里来的&#xff08;看导入node_modules包&#xff09;1&#xff1a; 通过node_modules包的package.json文件2&#xff1a; 通过配置中的main入口文件进入开发环境的源码&#xff08;1&a…

MySQL数据库——视图的更新、视图作用以及案例

目录 视图的更新 介绍 示例 视图作用 案例 视图的更新 介绍 要使视图可更新&#xff0c;视图中的行与基础表中的行之间必须存在一对一的关系。 如果视图包含以下任何一项&#xff0c;则该视图不可更新&#xff1a; 聚合函数或窗口函数&#xff08;SUM()、MIN()、MAX()…

体外循环手术中循环管路灌注流量精密自动控制解决方案

摘要&#xff1a;在目前的体外循环手术过程中&#xff0c;需要灌注师快速而精确地操作使得血液流速调节到期望的目标值。基于国外文献报道的血流量自动控制方法和装置&#xff0c;本文提出了技术改进且国产化解决方案。通过本解决方案中增加的国产系列电控夹管阀、电控针阀和具…

C++之特殊类的设计

目录 一、单例模式 1、设计模式 2、单例模式 1、饿汉模式 2、懒汉模式 3、单例对象的释放问题 二、设计一个不能被拷贝的类 三、设计一个只能在堆上创建对象的类 四、设计一个只能在栈上创建对象的类 五、设计一个不能被继承的类 一、单例模式 1、设计模式 概念&am…