小白零基础学数学建模应用系列(二):基于Python的共享单车系统建模与仿真分析

共享单车系统作为一种绿色环保的出行方式,已成为现代城市公共交通的重要组成部分。本文将使用Python编程语言,并结合modsim库,构建并仿真一个共享单车系统的模型,通过这一过程来展示如何进行系统的建模与分析。

文章目录

一、背景

随着共享经济的发展,共享单车在全球范围内迅速普及。它不仅为短途出行提供了便利,还有效缓解了城市交通压力。然而,如何科学管理和优化共享单车系统,确保不同站点之间的自行车分布合理,是一个亟待解决的问题。

本次分析假设两个站点A和B之间存在一个共享单车系统,用户可以在两个站点之间骑行。我们将通过构建一个简单的数学模型,来分析和预测系统的运行情况。

二、模型

模型的基本设定如下:

  • 系统包含两个自行车车架,分别位于站点A和站点B。
  • 系统初始共有12辆自行车,其中站点A车架上有10辆,站点B车架上有2辆。
  • 用户可以从一个车架借车,骑行至另一个车架。每次借还车后,两个车架的自行车数量将发生变化。

为了描述这一过程,我们使用modsim库中的State对象来表示系统的状态。State对象包含两个变量,AB,分别表示站点A和站点B车架上的自行车数量。

三、模型代码求解

以下是模型的完整代码,通过Python实现系统的建模与仿真,并对仿真结果进行可视化展示。

python 复制代码
# 下载modsim模块
# from os.path import basename, exists
#
#
# def download(url):
#     filename = basename(url)
#     if not exists(filename):
#         from urllib.request import urlretrieve
#         local, _ = urlretrieve(url, filename)
#         print('Downloaded ' + local)
#
#
# download('https://raw.githubusercontent.com/AllenDowney/' +
#          'ModSimPy/master/modsim.py')
# 导入modsim库

from modsim import *
import matplotlib.pyplot as plt

# 初始化系统状态
bikeshare = State(A=10, B=2)

# 定义从A到B借车的函数
def bike_to_B():
    bikeshare.A -= 1
    bikeshare.B += 1

# 定义从B到A借车的函数
def bike_to_A():
    bikeshare.B -= 1
    bikeshare.A += 1

# 定义一个时间步长函数,模拟借车过程
def step(p1, p2):
    if flip(p1):
        bike_to_B()
    if flip(p2):
        bike_to_A()

# 创建一个TimeSeries对象,用于记录每个时间点的系统状态
results = TimeSeries()

# 运行仿真,模拟10个时间步长
for i in range(10):
    step(0.5, 0.33)
    results[i] = bikeshare.A

# 绘制仿真结果
plt.plot(results, label='A')
decorate(title='A-B Bikeshare',
         xlabel='Time step (min)',
         ylabel='Number of bikes')

# 显示图表
plt.show()

运行如下:

四、分析过程

通过上述代码的运行,我们可以得到站点A在10个时间步长内自行车数量的变化曲线。以下是对模型仿真结果的详细分析:

  1. 时间步长的定义与运行

    • 每次时间步长代表1分钟。模型运行了10个时间步长,模拟了10分钟内共享单车在站点A和B之间的分布情况。
    • 通过设置借车概率(如站点A为0.5,站点B为0.33),我们可以模拟不同站点的用户活跃度。借车概率的不同,反映了用户在各站点借车的频率差异。
  2. 自行车数量的动态变化

    • 随着时间的推移,自行车在两个站点之间流动。站点A的自行车数量会随着用户的借车行为而减少,或者因为从站点B还车而增加。
    • 模拟结果显示,站点A的自行车数量在一定范围内波动。这种波动取决于借车的概率设定以及系统初始状态。
  3. 图形分析

    • 通过绘制时间步长与站点A自行车数量的曲线,我们可以直观地看到自行车数量的动态变化。
    • 如果仿真时间更长,可以观察到系统趋向稳定的自行车分布情况,或者发现某一站点可能出现车架空置或满载的现象,这为优化系统提供了参考。
五、总结

通过本文的分析,我们构建了一个简单的共享单车系统模型,并使用Python和modsim库进行了仿真。通过代码求解和结果的可视化,我们可以清晰地观察到不同时间步长下站点A的自行车数量变化情况。这一模型为进一步的优化分析奠定了基础。

在实际应用中,这种模型可以帮助城市规划者优化共享单车系统的配置,提高用户的使用体验。同时,未来可以通过增加更多的变量(如天气、用户数量变化等)来扩展模型,进一步提高仿真的精确度和实用性。

相关推荐
YYXZZ。。38 分钟前
PyTorch——搭建小实战和Sequential的使用(7)
人工智能·pytorch·python
四川兔兔41 分钟前
pytorch 与 张量的处理
人工智能·pytorch·python
AI蜗牛之家4 小时前
Qwen系列之Qwen3解读:最强开源模型的细节拆解
人工智能·python
C++ 老炮儿的技术栈4 小时前
UDP 与 TCP 的区别是什么?
开发语言·c++·windows·算法·visual studio
wgslucky4 小时前
Dubbo报错:module java.base does not “opens java.lang“ to unnamed module
java·开发语言·dubbo
whyeekkk5 小时前
python打卡第48天
开发语言·python
DougLiang6 小时前
关于easyexcel动态下拉选问题处理
java·开发语言
全职计算机毕业设计6 小时前
基于Java Web的校园失物招领平台设计与实现
java·开发语言·前端
5:007 小时前
云备份项目
linux·开发语言·c++
Eiceblue7 小时前
Python读取PDF:文本、图片与文档属性
数据库·python·pdf