2017年MathorCup数学建模B题共享单车解题全过程文档及程序

这篇具有很好参考价值的文章主要介绍了2017年MathorCup数学建模B题共享单车解题全过程文档及程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

2017年第七届MathorCup高校数学建模挑战赛

B题 共享单车

原题再现:

  共享单车是指企业在校园、地铁站点、公交站点、居民区、商业区、公共服务区等提供自行车单车共享服务,是一种分时租赁模式。共享单车是一种新型共享经济。共享单车已经越来越多地引起人们的注意,由于其符合低碳出行理念,政府对这一新鲜事物也处于善意的观察期。
  很多共享单车公司的单车都有 GPS 定位,能够实现动态化地监测车辆数据、骑行分布数据,进而对单车做出全天候供需预测,为车辆投放、调度和运维提供指引。
  请根据下面附件给出数据及结合根据需要自己收集的数据,完成以下问题:
  (1)根据附件 1 中共享单车的骑行数据,估计共享单车的时空分布情况。如从某地点 A 出发,到达不同地点的分布情况。可分时间段讨论。
  (2)假如根据调查,得到人们的骑行需求估计数据,见附件 2。
  根据问题 1 的估计结果,建立数学模型解决如何优化共享单车的调度问题。
  (3)根据附件 1 的骑行数据和附件 2 的需求数据,判断各区域所需共享单车的满足程度,给出你的度量指标。若增加 100 辆单车,如何进行投放更优。
  (4)附件 3 是某地区投入不同数量共享单车后打车人次的数据。据此分析研究共享单车的投入对该地区打车市场的影响。同时请你收集实际数据进行量化研究。
2017年MathorCup数学建模B题共享单车解题全过程文档及程序
2017年MathorCup数学建模B题共享单车解题全过程文档及程序

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

  随着共享单车的出现和普及,共享单车系统在城市公共交通中的地位越来越重要,由于其快捷、方便、环保的特点,共享单车已成为居民解决出行“最后一公里”问题的重要选择。
   首先,我们利用 VBA 编程对数据进行处理,整理成为包含以下五项指标的数据表:出发时间、到达时间、出发区域、到达区域、骑行时长,对骑行时长进行方差分析,从而假设从 A 地出发到达 B 地的骑行时长以平均值代替,并假设骑行速度都统一为正常人的平均速度 15km/h,从而解出各个区域相对距离矩阵。
   针对问题一,我们分为时间分布和空间分布讨论。从时间分布上看,各个区域单车在 420—900 分钟流动频繁、分布密集,其他时段逐渐下降,1380 分钟以后分布趋于静止。从空间分布来说,我们通过 VBA 编程统计分析得到从出发区域至到达区域车次的OD 矩阵,可以明显看出,共享单车在 1 到 2、2 到 3、3 到 4、……、9 到 10 之间的分布较为密集、其他地区基本呈现均匀分布。
  针对问题二,建立了单调度中心调度模型和动态调度优化模型。根据附件 1、附件2 的数据计算出现有单车情况下的各个地区的单车需求量,确定不同地区单车的需求时间和可接受时间。根据问题 1 结果估计不同地区间的最短距离,建立单调度中心调度模型并利用 MATLAB 软件和遗传算法求解得出初始调度方案,最优调度路线为2-5-6-3-7-10-9-2。以单调度中心软时间窗调度模型为基础建立动态需求调度优化模型,向初始静态优化解中不断插入新的调度需求,应用“初始静态优化+实时动态优化”的方法对多个连续静态调度问题进行求解不断优化调度路线,初次优化结果为5-2-3-4-8-10-9,其中 5、2、3 已完成调度。
  针对问题三,要判断各区域所需共享单车的满足程度。首先我们定义了从出发区域i 到到达区域 j 的需求量、满足量以及需求满足比作为衡量各区域所需共享单车满足程度的指标。根据问题一得到的 OD 矩阵以及附件 2 所给的需求矩阵,即可计算出从出发区域 i 到到达区域 j 的需求满足比,进而判断各区域所需共享单车的满足程度。由结果可知,各区域的满足程度从 78%到 99%不等,总体来看,满足程度较好。按照问题二的需求比例即可求得 100 辆单车的投放方案。
  针对问题四,要分析研究共享单车的投入对该地区打车市场的影响。根据附件 3 的数据,我们将单车投放量作为自变量,打车人次作为因变量,作出散点图。观察得到在单车投放量小于 4000 辆时呈现线性关系,大于 4000 辆时呈现非线性关系。因此我们以x=4000 为分段点建立一元线性回归模型、一元非线性回归模型,利用 MATLAB 求解,得出方程。通过观察方程,我们得出共享单车投放量与打车人次呈负相关,即共享单车投放量越大,打车人次越少,从而对打车市场产生负面影响。并且搜集到上海市 4 月份单车使用次数及打车人次的数据,从时间维度分析我们可以得出,固定日期分时段单车使用次数与打车人次数的图像呈现近似的趋势,而固定时段分日期单车使用次数与打车人次数呈现线性负相关的关系。

模型假设:

  ❖ 假设 0 分钟为凌晨 0 点;
  ❖ 假设各单车的行驶速度均匀固定;
  ❖ 假设出发区域 i 到到达区域 j 的相对距离=骑行时长×骑行速度。
  ❖ 假设区域 1 到 10 只有一个调度中心且位于区域 1,配备足够多的同型号调度车辆,能为地区 1 到 10 内所有地点提供调度服务;
  ❖ 假设调度车辆必须从调度中心出发,完成调度任务后需返回调度中心;
  ❖ 假设各地区的调度需求不能大于调度车辆容量;
  ❖ 假设各地区间的最短路网距离已知,调度车辆在任意两地区间行驶时必须选择两地区间的路网最短路径;
  ❖ 假设调度车辆在路网中的平均行驶速度已知且固定,不受其他因素影响;
  ❖ 假设前一△t内完成调度的最后一个地点是下一△t内新调度路径的起点;
  ❖ 假设所收集到的上海市单车使用人次数和出租车使用人次数真实可靠。

问题分析:

  针对问题一,在分析共享单车的时空分布情况时,考虑到时空既可以指不同时间下的空间分布,又可以指不同区域单车的时间分布。我们将其综合考虑,对于时间分布,直接将各个点做出散点图并不直观,所以我们将其划分成每 60 分钟一个时间段,统计时间段内的单车出发、到达车次,绘制图表观察。对于空间分布,我们通过建立 OD 矩阵,描述区域间交通中一定时间范围内所有出行起点和终点之间的出行交通量,间接反映空间分布情况。
  针对问题二,题目要求根据问题 1 的共享单车的时空分布情况的估计结果,建立数学模型解决如何优化共享单车的调度问题。首先,假设骑行人的骑行距离一定,由平均骑行时间可计算出各地区间的相对距离。其次,根据客户需求是否实时变动,调度问题可分为静态和动态调度问题。对动态调度问题求解时可将动态调度问题转化为多个连续静态调度问题进行求解,即“初始静态优化+实时动态优化”。先根据系统内各地点在某一时刻的调度需求,形成初始的调度方案,然后不断更新各地点的调度需求,同时更新调度方案,实现调度需求与调度路径的不断反馈,最终达到动态优化的目的。
  针对问题三,要判断各区域所需共享单车的满足程度。首先我们应该衡量各区域所需共享单车满足程度的指标,建立指标评价体系,但是由于题目所给数据不全面,无法得到指标体系的具体数据,所以我们只用需求满足比来作为衡量各区域所需共享单车满足程度的指标。
  针对问题四,要分析研究共享单车的投入对该地区打车市场的影响。根据附件 3 的数据,我们可以将单车投放量作为自变量,打车人次作为因变量,作出散点图,观察单车投放量与打车人次的关系,探究是线性还是非线性,是正相关还是负相关。再用MATLAB 软件得到具体的函数关系。进而得到单车投放量对打车市场的影响关系。

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

2017年MathorCup数学建模B题共享单车解题全过程文档及程序
2017年MathorCup数学建模B题共享单车解题全过程文档及程序

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

程序代码:(代码和文档not free)

The actual procedure is shown in the screenshot文章来源地址https://www.toymoban.com/news/detail-441174.html

import pandas as pd
from math import radians, cos, sin, asin, sqrt,ceil
import numpy as np
import geohash

#数据读取
data = pd.read_csv("./mobike_shanghai_sample_updated.csv")
print(data.head(10))
print(data.info())
data['start_time'] = pd.to_datetime(data['start_time'])
data['end_time'] = pd.to_datetime(data['end_time'])
print(data.info())
data["lag"] = (data.end_time - data.start_time).dt.seconds/60
def geodistance(item):
    lng1_r, lat1_r, lng2_r, lat2_r = map(radians, [item["start_location_x"], item["start_location_y"], item["end_location_x"], item["end_location_y,"]]) # 经纬度转换成弧度
    dlon = lng1_r - lng2_r
    dlat = lat1_r - lat2_r
    dis = sin(dlat/2)**2 + cos(lat1_r) * cos(lat2_r) * sin(dlon/2)**2
    distance = 2 * asin(sqrt(dis)) * 6371 * 1000 # 地球平均半径为6371km
    distance = round(distance/1000,3)
    return distance
#data按行应用geodistance()得到distance列的数值
data["distance"] = data.apply(geodistance,axis=1)
#通过摩拜单车的踪迹获取每次交易骑行的路径
def geoaadderLength(item):
    track_list = item["track"].split("#")
    adderLength_item = {}
    adderLength = 0
    for i in range(len(track_list)-1):
        start_loc = track_list[i].split(",")
        end_loc = track_list[i+1].split(",")
        adderLength_item["start_location_x"],adderLength_item["start_location_y"] = float(start_loc[0]),float(start_loc[1])
        adderLength_item["end_location_x"],adderLength_item["end_location_y"] = float(end_loc[0]),float(end_loc[1])
        adderLength_each = geodistance(adderLength_item)
        adderLength = adderLength_each + adderLength
    return adderLength
data["adderLength"] = data.apply(geoaadderLength,axis=1)
data['weekday'] = data.start_time.apply(lambda x: x.isoweekday())
data['hour'] = data.start_time.apply(lambda x: x.utctimetuple().tm_hour)
data['cost'] = data.lag.apply(lambda x: ceil(x/30))
#因数据集仅包含八月份发起的订单数据,故以9月1日为R值计算基准
data['r_value_single'] = data.start_time.apply(lambda x: 32 - x.timetuple().tm_mday) 
# 按每个用户id所有订单日期距9/1相差天数的最小值作为r值
r_value = data.groupby(['userid']).r_value_single.min()    
f_value = data.groupby(['userid']).size()    # 按每个用户id八月累积订单数量作为f值
m_value = data.groupby(['userid']).cost.sum()    # 按每个用户id八月累积消费金额作为m值
#把r值、f值、m值组合成DataFrame
rfm_df = pd.DataFrame({'r_value':r_value,'f_value':f_value,"m_value":m_value})
rfm_df["r_score"] = pd.cut(rfm_df["r_value"],5,labels=[5,4,3,2,1]).astype(float)
rfm_df["f_score"] = pd.cut(rfm_df["f_value"],5,labels=[1,2,3,4,5]).astype(float)
rfm_df["m_score"] = pd.cut(rfm_df["m_value"],5,labels=[1,2,3,4,5]).astype(float)
#后面*1是为了把布尔值false和true转成0和1
rfm_df["r是否大于均值"] = (rfm_df["r_score"] > rfm_df["r_score"].mean())*1
rfm_df["f是否大于均值"] = (rfm_df["f_score"] > rfm_df["f_score"].mean())*1
rfm_df["m是否大于均值"] = (rfm_df["m_score"] > rfm_df["m_score"].mean())*1
#把每个用户的rfm三个指标统合起来
rfm_df["class_index"] = (rfm_df["R是否大于均值"]*100) + (rfm_df["f是否大于均值"]*10) + (rfm_df["m是否大于均值"]*1) 

def transform_user_class(x):
    if x == 111:
        label = "重要价值用户"
    elif x == 110:
        label = "消费潜力用户"
    elif x == 101:
        label = "频次深耕用户"
    elif x == 100:
        label = "新用户"
    elif x == 11:
        label = "重要价值流失预警用户"
    elif x == 10:
        label = "一般用户"
    elif x == 1:
        label = "高消费唤回用户"
    elif x == 0:
        label = "流失用户"
    return label
rfm_df["user_class"] = rfm_df["class_index"].apply(transform_user_class)
data = data.merge(rfm_df["user_class"], on = 'userid', how = 'inner')
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

到了这里,关于2017年MathorCup数学建模B题共享单车解题全过程文档及程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2023年MathorCup数学建模C题电商物流网络包裹应急调运与结构优化问题解题全过程

       电商物流网络由物流场地(接货仓、分拣中心、营业部等)和物流场地之间的运输线路组成,如图 1 所示。受节假日和“双十一”、“618”等促销活动的影响,电商用户的下单量会发生显著波动,而疫情、地震等突发事件导致物流场地临时或永久停用时,其处理的包裹将

    2023年04月16日
    浏览(74)
  • 2019年MathorCup数学建模A题数据驱动的城市轨道交通网络优化策略解题全过程文档及程序

       截至 2018 年 12 月 31 日,中国内地累计共有 35 座城市建成并投运城市轨道交通,里程共计 5766.6 公里。进入“十三五”以来,三年累计新增运营线路长度为 2148.7公里,年均新增线路长度为 716.2 公里(2018 中国城市轨道交通协会快报)。表 1 统计了 2018 年中国内地城轨交通

    2024年02月08日
    浏览(74)
  • 2023mathorcup数学建模ABCD思路分析

    更多思路分析,请看文末 A题:量子计算机在信用评分卡组合优化中的应用 题目提到了信用评分卡的组合优化,这是一个经典的优化问题。在这个问题中,需要通过不同的组合方式来选择不同的阈值,以达到最大化贷款利息收入和最小化坏账损失的目标。这个问题可以使用量

    2024年02月04日
    浏览(61)
  • 2023MathorCup数学建模比赛的思路汇总帖

    更新时间【4.13 19:45】ABCD均已更新,选题指导已更新,速看!后续会出各题详细思路及代码! 这里是小云的2023MathorCup数学建模比赛的思路汇总帖,比赛开始后将实时更新~ 竞赛共4道题目(A题、B题、C题和D题) 研究生组同学请从A、B题中任选一个完成答卷; 本科生组及专科

    2023年04月13日
    浏览(54)
  • 国赛 mathorcup数学建模竞赛中的优化问题

    数学建模优化类题目主要是通过数学工具和方法,对现实问题进行建模,并找到最优的解决方案。下面介绍一些常见的分析及解题思路。 1. 确定问题的目标函数和约束条件:首先,需要明确问题的目标,包括最大化或最小化某种指标,如最大利润、最小成本等。同时,还要

    2024年01月21日
    浏览(54)
  • 2023mathorcup及认证杯数学建模最全代码包!

    大家好呀。 mathorcup明早要开赛了,认证杯明晚开始,我应该也不用空泛地去谈什么每个题型用些什么模型这类虽然正确但毫无意义的废话了,比如什么预测问题用时间序列、灰色预测、神经网络啦,比如什么评价问题用层次分析法、模糊综合评价啦,这些对吗?对。有用吗?

    2024年02月06日
    浏览(48)
  • 数学建模学习(5):数学建模各类题型及解题方案

    总体来说,数学建模赛题类型主要分为: 评价类、预测类和优化类 三种,其中优化类是最常见的赛题类 型,几乎每年的地区赛或国赛美赛等均有出题,必须要掌握并且熟悉。     综合评价是数学建模中的一类常见的问题,在国赛和美赛中都经常出现,例如国赛05年长江水质

    2024年02月14日
    浏览(50)
  • 数学建模 | 数学建模常用的十种解题方法

    ===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 =====================================================

    2024年01月15日
    浏览(53)
  • 2022 年 MathorCup 高校数学建模挑战赛A题

    赛道 A:“58 到家”家政服务订单分配问题         “58 到家”是“58 同城”旗下高品质、高效率的上门家政服务平台,平 台向用户提供家政保洁、保姆、月嫂、搬家、维修等众多生活领域的服务。 在家政保洁场景中,用户在平台下单购买服务后,平台会将订单分配给一

    2024年02月10日
    浏览(46)
  • 2023MathorCup 高校数学建模挑战赛D题思路解析

    如下为MathorCup 高校数学建模挑战赛D题思路解析: D 题 航空安全风险分析和飞行技术评估问题 飞行安全是民航运输业赖以生存和发展的基础。随着我国民航业的快速发展,针对飞行安全问题的研究显得越来越重要。2022 年 3 月 21 日,“3.21”空难的发生终结了中国民航安全飞

    2023年04月16日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包