2021年认证杯SPSSPRO杯数学建模C题(第一阶段)破局共享汽车求解全过程文档及程序

news2025/1/16 1:45:56

2021年认证杯SPSSPRO杯数学建模

C题 破局共享汽车

原题再现:

  自 2015 年以来,共享汽车行业曾经“百花齐放”,多个项目获得巨额融资。但因为模式过重、运营成本过高、无法盈利等问题,陆续有共享汽车公司因为资金链断裂而倒闭。据易观发布的《2019 中国共享汽车平台创新白皮书》显示,2019 年的共享汽车行业,是中小参与者不断出局,头部平台拉动行业重启增长的一年。而共享汽车增速在 2019 年 5–10 月达到 2.21%,超过网约车和线上租车。
  在以前,汽车被当作“大件”购买。而现在,由于车型更新迭代之快让人眼花缭乱,加之受疫情影响,消费者的决策过程会变得更长。消费者有用车的欲望、有消费升级的欲望,但他们越来越聪明了,他们想知道,有没有更轻更好的用车方式。共享汽车的“分时租赁”模式很多的解决了这个问题。但是这种方式的成本控制环节过多,导致盈利非常困难。
  第一阶段问题: 附件是共享汽车的位置数据集,数据集中提供了时间,经纬度等位置信息,以及停车点上停放的车辆的数量和车辆列表。请建立数学模型分析该城市的共享汽车使用分布情况,并且制定一个对企业最有利的共享汽车调度方案。

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

  如今,在汽车款式更迭速度的迅猛增长与疫情对消费者决策的影响等客观因素,与人们生活水平日益提高导致的用车需求增长与欲望增强等主观因素作用下,“共享汽车”因其特殊的“分时租赁”优势,以更低的成本满足更多人群的用车需求,超越买车租车等选项成为人们心中的首选。但是,在“共享汽车”市场环境稳中向好的同时,其本身存在的控制环节多,模式重、成本高等因素的仍导致“共享汽车”产业盈利困难,许多相关·企业最终都因资金链断裂而倒闭。基于此可以说,有利的共享汽车调度方案市决定企业命运的关键一环。本文参考附件信息,分析城市的共享汽车使用分布情况,制定了一个对企业最有利的共享汽车调度方案。
  针对问题一: 我们先用 python 读取 cvs 数据,通过读取的数据,依托地图坐标系统,读取数据表中的经纬度,参考这些数据,查询到共享单车分布的具体地点在以色列特拉维夫市。
  针对问题二:在问题一的基础上,我们利用 python 中的 matplotlib 模块,以经度、纬度、停车点上停放的车辆的数量为参数变量,绘制了气泡图。在这些用颜色标记的区域中,红色标记代表车辆数较多,黄色标记代表车辆数中等,蓝色标记代表车辆数较少,依托此图可以看出,车辆主要分布在两块红色的区域中。

问题分析:

  根据题目所给的条件与优化调度方案减少成本的目的,再结合实际资源分配情况与客观因素的调整,方案的准确性与可行性进行数学建模。在建模过程中设立前提假设,避免其他客观因素对数学模型造成误差,导致优化方案的拟合度降低,最终导致方案的执行可能性下降。
  根据附录所给的数据,对数据进行处理和可视化,先对经纬度进行处理,确定该城市大致位置,再借助相关地图软件进一步确定数据分析结果的准确区域。根据附录中提供的车辆相关数据绘制该城市的共享单车使用分布情况(从宏观和围观入手),并求解模型参数得出最终结论。
  在问题一结果的基础上,结合实际情况,建立相关模型。为企业制定一个更有利的解决方案,尽可能实现企业利益的最大化,同时提高当地人民的出行效率以及共享汽车使用者对企业的满意度,根据所划分区域的范围、经纬度、车辆数目相关信息建立数学模型,最后建立规划模型即可完成调度方案的制定。

模型假设:

  假设 1:表中的共享汽车的定位都是相对准确切没有较大误差。
  假设 2:共享汽车之间的速度相同。
  假设 3:该城市的共享汽车的数量是一定的,即不存在大规模的共享汽车输入与输出。
  假设 4:该城市的共享汽车停放区域固定,不改变。

模型的建立与求解

绘制热力图

  热力图是数据可视化项目中,比较常用的显示方式。通过颜色变化程度,它可以直观反应出热点分布,区域聚集等数据信息。为了使 csv 文件的数据更加直观直观,以便做后续分析,我们利用 python 中的地图可视化组件 folium 对数据进一步处理,绘制出相应的共享汽车数据热力图。
在这里插入图片描述

数据所属区域的确定

  利用地图 api 软件定位,查询到数据所属区域位于以色列境内,紧邻地中海东南的城市特拉维夫市。
在这里插入图片描述

“微观”热力图的放大

  从“宏观”角度进行数据分析后,为了探究更微观的分布情况,我们选择了共享汽车分布密度较高的区域进一步研究。
在这里插入图片描述
  根据图像所展示的热力分布,其中红色区域代表共享汽车分布密度较高,黄色区域代表共享汽车分布密度相对均匀,而蓝色区域则代表共享汽车的分布密度较低。由此可以看出,共享汽车的分布呈高度集中化,且向四周密度逐渐降低。与人口流动密度呈正相关,且具有较高的拟合优度。

气泡图的绘制

  大概观察宏观热点图与微观热点图之后,再加上之前的数据分析,我们决定利用python 中的 matplotlib 模块以经度,纬度,停车点上停放的数量为参数变量绘制气泡图,以此帮助后续的数学建模。
在这里插入图片描述

初步分析

  按照附录中所给的数据,通过查找相关资料,可以知道经度和纬度每相差 0.1 度就是相差十一公里,所以可以通过经度纬度每 0.1 度偏差,就被分为一个区域,被分为多个区域之后,共享汽车只能停在不同的区域内。如果某个区域满了(也就是这 11km*11km的区域内),只能在其他区域进行停车。那么如何再最短的时间内找到最近的区域停车点,可以用 Dijkstra 最短路径算法判断该区域内距离该区域最近的停车点,然后判断是否有停车位,如果有空闲的停车位,就能停,如果没有就再次通过最短路径算法找到下一个距离最短的停车区域。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

调度方案

  共享汽车的两端使用者和运营商, 供需平衡是城市共享汽车供给量与需求量达到平衡的一种状态,是影响运营商盈利的一个关键性因素。根据上述所有模型的求解结果我们可以知道特拉维夫市共享汽车的使用情况如下:
  1. 大部分停车点的车辆滞留率较高,但是南部地区在车辆滞留率较高的同时,车流量很小
  2. 大部分地区车辆的驶入驶出率约为 1,但是南部驶入驶出率相对较高
  3. 大部分地区周三车辆的驶入驶出率和车流量最低,周五车辆的驶入驶出率和车流量最高。
  根据是上述分析运营商车辆调度出现了问题:运营商在南部地区和北部投放的车辆太多远远超过用户需求量,导致了资源的浪费;其次,南部地区的车辆:驶入>驶出;此外,周五是用户需求量的高峰期,周三是一个低谷。为解决上述问题我们将给出以下得调度方案:
  1. 运营商应适当降低南部地区和北部车辆的投放量。
  2. 定期将南部的车辆调往中北部地区,在满足用户需求的同时,降低南部地区和北部地区车辆的滞留率,避免南部车辆堆积。
  3. 在周五用户需求量高峰期到来之前,运营商应该提前完成车辆调度以满足用户
的需求。

论文缩略图:

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

程序代码:

共享汽车热力图 python 代码

import numpy as np
import pandas as pd
import seaborn as sns
import folium
import webbrowser
from folium.plugins import HeatMap
num = 1048574
lat = np.array(df["latitude"][0:num]) # 获取维度之维度值
lon = np.array(df["longitude"][0:num]) # 获取经度值
pop = np.array(df["total_cars"][0:num],dtype=float) # 获取车数,转化为 numpy 浮点型
data1 = [[lat[i],lon[i],pop[i]] for i in range(num)] #将数据制作成[lats,lons,weights]的形
式
map_osm = folium.Map(location=[35,110],zoom_start=5) #绘制 Map,开始缩放程度是
5 倍
HeatMap(data1).add_to(map_osm) # 将热力图添加到前面建立的 map 里
file_path = r"E:\2021 认证杯 c 题\C1\共享汽车使用分布.html" map_osm.save(file_path) # 保存为 html 文件

计算最近停车点

import pandas as pd
import random
from sklearn.metrics.pairwise import euclidean_distances
import numpy as np
#读取数据
data = pd.read_csv('E:\Desktop\认证杯数学建模\共享汽车定位数据.csv')
#纬度数据
lat = list(data['latitude'])
#精度数据
long = list(data['longitude'])
#停车点数据
cars = list(data['total_cars'])
# 汽车随机点位
def getRandomCarPos():
# 随机纬度
rand_lat = random.uniform(min(lat),max(lat))
#随机精度
rand_long = random.uniform(min(long),max(long))
return rand_lat,rand_long
# Dijkstra 算法/最短路径算法
def dijkstra(graph,src):
# 判断图是否为空,如果为空直接退出
if graph is None:
return None
nodes = list(range(len(graph)))
# 获取图中所有节点
visited=[]
# 表示已经路由到最短路径的节点集合
if src in nodes:
#起始节点在节点集合中
visited.append(src)
nodes.remove(src)
else:
return None
distance={src:0}
# 记录源节点到各个节点的距离
for i in nodes:
distance[i]=graph[src][i]
# 初始化
path={src:{src:[]}}
# 记录源节点到每个节点的路径
k=pre=src
while nodes:
mid_distance=float('inf')
for v in visited:
for d in nodes:
new_distance = graph[src][v]+graph[v][d]
#记录 nodes 中的最小距离节点,即将要加入 visited 集合中的节点
if new_distance < mid_distance:
mid_distance=new_distance
graph[src][d]=new_distance
# 进行距离更新
k=d
pre=v
distance[k]=mid_distance
# 最短路径
path[src][k]=list(path[src][pre])
#[i for i in path[src][pre]]
path[src][k].append(k)
# 更新两个节点集合
visited.append(k)
nodes.remove(k)
#print(visited,nodes)
# 输出节点的添加过程
return distance,path
def dijk(graph_list,int0,int1):
distance_dict,path_dict= dijkstra(graph_list, int0)
# 查找从源点 0 开始带其他节点的最短路径
distance = distance_dict[int1]
path = path_dict[int0][int1]
path = [int0] + path
return distance,path
# 获取符合经纬度范围节点
def getFitDataLimit(rand_lat,rand_long):
#存储符合范围节点经纬度信息
data_limit = []
#范围数据选取 0.055 为 5 公里范围
for i in range(len(lat)):
if (rand_lat - 0.055) <= lat[i] <= (rand_lat + 0.055) and (rand_long - 0.055) <=
long[i] <= (rand_long + 0.055):
data_limit.append([lat[i],long[i],cars[i]])
return data_limit
# 范围内距离最小且有停车位的停车点经纬度信息
def getSim(data_limit):
# 计算范围内停车点距离汽车点的距离
distance =
[euclidean_distances(np.array([[item[0],item[1]]]),np.array([[rand_lat,rand_long]]))[0][0] for
item in data_limit]
# 存储距离最小的节点索引
min_index = []
# 计数器
count = 0
# 遍历获取距离最小索引
for item in distance:
if item == min(distance):
print(count)
min_index.append(count)
count += 1
# 停车点停车数为 0 的停车点经纬度坐标
stop = [[lat[i],long[i]] for i in min_index if cars[i] == 0]
return stop
if __name__ == '__main__':
# 模拟 3 个汽车经纬度信息
for i in range(3):
#获取经纬度信息
rand_lat,rand_long = getRandomCarPos()
print('the first car position:',rand_lat,rand_long)
#获取范围
data_limit = getFitDataLimit(rand_lat,rand_long)
#计算停车点
stop = getSim(data_limit)
print(stop)

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

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

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

相关文章

RocketMQ存储设计的奥妙

RocketMQ作为一款基于磁盘存储的中间件&#xff0c;具有无限积压能力&#xff0c;并提供高吞吐、低延迟的服务能力&#xff0c;其最核心的部分必然是它优雅的存储设计。 1、存储概述 RocketMQ存储的文件主要包括Commitlog文件、ConsumeQueue文件、Index文件。 RocketMQ将所有…

温振传感器有几种传输方式?

在现代化社会中&#xff0c;各种机器无时无刻参与着我们的日常生活&#xff0c;承担在我们的周围承担起重要作用&#xff0c;轴承、电机、泵体等也成为工业文明中关键存在&#xff0c;它们的温度和状态影响着整个工业自动化系统运行的健康和效率。 长期以来&#xff0c;传感器技…

数字集成电路设计(四、Verilog HDL数字逻辑设计方法)(一)

文章目录1.Verilog语言的设计思想和可综合特性2. 组合电路的设计2.1 数字加法器2.2 数据比较器2.3 数据选择器2.4 数字编码器2.4.1 3位二进制8线-3线编码器2.4.2 8线-3线优先编码器2.4.3 二进制转化十进制8421BCD编码器&#xff08;重要&#xff09;2.4.4 8421BCD十进制余3编码…

ue4使用Niagara粒子实现下雨效果,使用蓝图调节雨量

一、使用Niagara粒子系统实现下雨效果 1. 首先创建一个雨水的材质 新建 — 材质 2. 创建Niagara系统 新建 新建 — FX — Niagara系统 — 来自所选发射器的新系统 — 下一步 — 选择Fountain — 点击号&#xff0c;点击完成 删除下面的“Add Velocity in Cone” 添加“…

矩池云如何自定义端口,访问自己的web项目

本文将向您介绍如何在矩池云租用服务器的时候自定义端口&#xff0c;并将您的 web 项目部署到自定义端口&#xff0c;最后实现在本地通过自定义端口对应链接访问服务。 上传代码和数据 首先&#xff0c;您需要将本地的项目代码和数据上传到矩池云网盘。这里为了方便您测试使用…

类似ps的python工具lama cleaner

Lama Cleaner是个类似ps图片的工具&#xff0c;可以把图片中不想要的部分p掉&#xff0c;或者填补图片中丢失的部分。用下来感觉还蛮靠谱&#xff0c;对于不会ps的人是福音&#xff0c;记录一下。 相关介绍&#xff1a;https://github.com/Sanster/lama-cleaner 1.安装 安装…

react 中 ref 管理列表

背景 最近在看 react 新的官方文档 的时候&#xff0c;看到这么一个标题&#xff0c;How to manage a list of refs using a ref callback&#xff0c;就是一个图片的列表&#xff0c;类似这样 然后点击按钮的时候&#xff0c;通过 scrollIntoView 这个 api 来让他滚动&#…

python生成模拟微信气泡图片

0. 起因 众所周知&#xff0c;借刀杀人最为致命&#xff0c;聊天也是如此。 最近我的群聊画风逐渐变味&#xff1a; 当然&#xff0c;这种图片的生产成本很低&#xff0c;只需在设置页关闭昵称显示&#xff0c;把聊天背景重置为灰色&#xff0c;然后利用截图工具截图&#xf…

【金融项目】尚融宝项目(十三)

25、充值 25.1、需求介绍 25.1.1、投资人充值 **1、需求描述 ** 标的产生后&#xff0c;平台展示标的&#xff0c;投资人就可以在平台投资标的&#xff0c;获取收益&#xff1b;投资人投资标的必须满足以下条件&#xff1a; 充值过程与绑定过程一致&#xff0c;也是在平台发…

Delphi 11.2 Alexandria程序集代码

Delphi 11.2 Alexandria程序集代码 高DPI VCL设计器-VCL设计器现在在设计时使用类似Microsoft Windows的样式&#xff0c;这意味着除非禁用此功能&#xff0c;否则设计器中的控件始终使用此样式绘制。此样式与Windows当前使用的浅色或深色主题相匹配。 编辑器选项卡-在版本11.2…

【3D目标检测】Frustum PointNets for 3D Object Detection from RGB-D Data

目录概述细节网络结构视锥候选框3D实例分割边界框参数回归损失函数概述 首先本文是基于图像和点云的&#xff0c;属于早期的模态融合的成果&#xff0c;是串行的算法&#xff0c;而非并行的&#xff0c;更多的是考虑如何根据图像和点云这两个模态的数据进行3D目标检测。 提出动…

亚马逊平台不给力?来Starday,告诉你什么是真正的高阶玩法

距2021年的亚马逊封号潮已经过去了一段时间&#xff0c;但其影响却依然在跨境电商行业间回荡。从4月份起&#xff0c;亚马逊就开始对违反平台规则的卖家进行封号。此后打击规模持续扩大&#xff0c;到6月中下旬&#xff0c;深圳一批头部卖家均被亚马逊平台下架&#xff0c;遭到…

Coverage-based Greybox Fuzzing as Markov Chain

AFLFast: Coverage-based Greybox Fuzzing as Markov Chain 一、论文阅读 论文来自CCS2016 作者&#xff1a;Marcel Bhme 模糊测试领域巨佬 Abstract 基于覆盖的灰盒模糊测试 Coverage-based Greybox Fuzzing (CGF)。大多数测试用例执行少数高频路径&#xff0c;制定策略倾…

浪潮信息工程师:谈一谈设备透传虚拟机启动慢背后的原因及其优化方法 | 第 51 期

本周「龙蜥大讲堂」预告来啦&#xff01;龙蜥社区邀请了浪潮信息操作系统研发工程师崔士伟分享《设备透传虚拟机的快速启动优化》&#xff0c;快来扫码入群&#xff0c;预定前排小板凳观看直播吧&#xff01; 直播主题及内容介绍 直播主题&#xff1a;设备透传虚拟机的快速启…

360+城市空气质量指数-日度数据、良好天数统计(2001-2022年)

360城市空气质量指数-日度数据、良好天数统计&#xff08;2001-2022年&#xff09; 城市空气质量指数-日度数据、良好天数统计 1、包括&#xff1a;360个城市 2、时间&#xff1a;2001.1-2022.1月 3、样本量&#xff1a;1371937条 4、数据来源&#xff1a;空气质量在线…

使用Excel 表示汽车、摩托车10年免检时间、非常清晰。

1&#xff0c;汽车摩托车10年内年检问题 根据最新的国家法律&#xff1a; http://www.wenjiang.gov.cn/wjzzw/c152333/2022-09/30/content_66efe4febb8040758f3f079cf0baa310.shtml 搜索了下&#xff0c;找到了成都的规定&#xff1a; 近日&#xff0c;公安部、市场监管总局…

中电海康-中电52所面经

中电海康&#xff0c;中电52所面经中电海康面经一面&#xff08;电话面&#xff09;二面&#xff08;现场面&#xff09;自我回顾中电海康面经 一面&#xff08;电话面&#xff09; Redis的使用和配置多线程的使用&#xff0c;线程池的使用SpringBoot的核心注解和流程AOP IOC …

java项目-第133期ssm物流服务管理平台系统-java毕业设计

java项目-第133期ssm物流服务管理平台系统-毕业设计 【源码请到资源专栏下载】 今天分享的项目是《物流服务管理平台系统》 该项目分为前台和后台。主要分成三个角色&#xff1a;游客、普通管理员、管理员三个角色。 游客就是用户&#xff0c;只要是访问系统前台的用户都可以算…

华为防火墙的四种智能选路方式

FW支持四种智能选路方式&#xff0c;不同的智能选路方式可以满足不同的需求&#xff0c;管理员可以根据设备和网络的实际情况进行选择。 表1 智能选路方式 智能选路方式 定义 根据链路带宽负载分担 FW按照带宽比例将流量分配到各条链路上。带宽大的链路转发较多的流量&…

【我的渲染技术进阶之旅】基于Filament渲染引擎绘制一个不停旋转的彩色矩形

一、绘制三角形回顾 在上一篇博客 【我的渲染技术进阶之旅】Google开源的基于物理的实时渲染引擎Filament源码分析:Android版本的Filament第一个示例:sample-hello-triangle 中,我们分析了如何使用Filament来绘制一个三角形,效果如下所示,有一个不停旋转的彩色三角形: …