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

news2024/9/19 9:41:16

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

文章目录

        • 一、背景
        • 二、模型
        • 三、模型代码求解
        • 四、分析过程
        • 五、总结

一、背景

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

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

二、模型

模型的基本设定如下:

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

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

三、模型代码求解

以下是模型的完整代码,通过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的自行车数量变化情况。这一模型为进一步的优化分析奠定了基础。

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

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

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

相关文章

大厂面试题分享第二期

大厂面试题分享第二期 如果执行了一条命令,"select count(*)from…",使用哪个引擎更快,为什么?垃圾回收器 CMS 和 G1的区别介绍一下CMS和G1CMS(并发)垃圾收集器G1垃圾回收器 HTTPS和HTTP的区别主…

网站谷歌SEO优化要注意什么?

就最近我们接触的客户而言,有不少客户连最基本的seo常识都没有,他们固然可能是技术大咖,但如果你还是期望从谷歌seo获取流量,那么,最基本的源代码输出必须要有,正常情况下,整个页面除了动画交互…

windows10和linux(debian12)设置静态ip————附带详细过程

文章目录 0 背景1 linux(debian)1.1 查看网络配置1.2 获取ip动态分配下的配置1.3 打开网络配置文件1.4 重新启动网络服务1.5 验证设置 2 windows2.1 查看自动获取ip地址下的配置2.2 进行设置 0 背景 因为下位机只能获取固定的ip(ip池很小&am…

递归 与 dfs 综合练习(一)

目录 一、找出所有子集的异或总和再求和 1.题目链接:1863. 找出所有子集的异或总和再求和 2.题目描述: 3.解法(递归) 🌵算法思路: 🌵算法代码: 二、全排列 II 1.题目链接&…

“低代码技术:数字化工厂的加速器与智能制造的桥梁“

引言 随着工业4.0和智能制造的快速发展,数字化工厂成为了现代制造业的核心概念。这一转型不仅依赖于物联网、人工智能、大数据等新兴技术,也需要软件开发的支持。然而,传统的软件开发模式由于其复杂性和周期长,难以快速适应数字化…

案例-华东某财险公司:引入监控易一体化运维软件

在华东这片经济活跃、金融繁荣的热土上,某财险公司作为行业内的佼佼者,始终致力于通过科技创新提升业务运营效率与服务品质。随着公司业务规模的不断扩大,IT基础设施的复杂性和重要性日益凸显,如何实现对庞大IT基础资源的实时监控…

从概念到现实:手机设计可视化如何重塑科技美学

在这个日新月异的数字时代,手机已不仅仅是通讯工具,它更是我们生活方式的延伸,是连接世界的窗口,是创意与科技的完美结晶。 想象一下,在浩瀚的数字海洋中,一款尚未面世的手机,通过高精度的3D建模…

在亚马逊云科技上安全、合规、私密地调用生成式AI大模型

项目简介: 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践,并应用到自己的日常工作里。 本次介绍的是如何安全、合规、私密地调用亚…

2024最全最新VMWare以及Linux配置(含yum失效解决方案)

血泪教训浓缩的精华配置、报错解决(解决99%问题) 目录 1.Linux环境搭建 1.1安装VMWare 1.1.1卸载老版本VMWare(如果有的话) 1.1.2开始安装VMware 1.2创建虚拟机 1.3安装Centos7 1.4设置虚拟机快照 1.5安装远程连接SSH客户…

AI换脸模型(384-448模型430万底丹)

模型训练素材19万张来自于 1、香港中文大学CelebA预训练集-WF512版-量大角度全-11万5千张 2、DST全角度训练图集V3.1 WF512【2.6W张 6GB 】 3、女性人脸数据,预训练炼丹专用 4、补全SRC极限角度 5、全角度512分辨率7万张素材 下载地址: 链接&#xf…

day09——集合ArrayList

ArrayList类 ArrayList表示一种集合,它是一个容器,用来存储数据的,类似于数组。但不同于数组,数组一旦创建大小不变,而集合大小是可变的。 ArrayList常用方法 ArrayList是泛型类,可以约束存储的数据类型…

TLE8386-2EL:汽车级DC-DC转换器中文资料书

描述 TLE8386-2EL是一款具有内置保护功能的低端感应升压控制器。该器件的主要功能是将输入电压升高&#xff08;升压&#xff09;到更大的输出电压。开关频率可从100kHz调整至700kHz&#xff0c;并可与外部时钟源同步。 TLE8386-2EL的独特功能可将关断电流消耗降至 <2μA。该…

Python 如何进行静态代码分析(pylint, flake8)

Python 的静态代码分析是一种在不执行代码的情况下&#xff0c;对代码进行检查的技术。其主要目的是在代码运行前发现潜在的错误、风格问题以及其他代码质量问题。静态代码分析在提高代码的可维护性、可读性和可靠性方面发挥着重要作用。常用的静态代码分析工具包括 Pylint 和 …

观测云突变告警,精准预测云原生的系统异常

背景 观测云 DataKit 是一个强大的数据采集工具&#xff0c;能够收集和监控容器化环境和 Kubernetes 集群的指标、对象和日志数据。通过灵活使用 DataKit 收集的数据&#xff0c;可以对 Kubernetes 集群进行深入的监控和分析&#xff0c;从而实现更好的运维和优化。以下是一些…

如何使用yolov5-master进行训练

主要记录配置完成的yolov5-master如何进行自定义数据集训练。 本人使用的设备是jetson-orin AGX&#xff0c;系统是英伟达官方魔改过的ubuntu18.04.。 一、修改配置 首先观察train.py的__main__部分&#xff0c;我们发现训练程序接受很多个参数。 其中我们必须要关注的参数包括…

【网络编程】UDP实现网络通信(C语言、Ubuntu实现)

代码实现&#xff1a;分为udpSer.c(服务器端)和udpCli.c(客户端) //udpSer.c #include <myhead.h>#define SER_PORT 9999 #define SER_IP "192.168.83.128"int main(int argc, const char *argv[]) {//1、创建用于通信的服务器套接字文件描述符int sfd sock…

AI大模型学习之白话笔记(三) -- Assistants API入门

经过上面两篇文章的学习&#xff0c;恭喜你开始进入了人工智能的世界&#xff01;在这篇文章中&#xff0c;你将跟我一起学习如何使用Assistants API快速构建一个针对特定领域的人工智能助手。 我们从基础开始&#xff0c;一步步带你用Assistants API完成一个应用的整个过程。…

智能分析/视频汇聚EasyCVR安防视频融合管理云平台技术优势分析

安防行业的发展历程主要围绕视频监控技术的不断改革升级&#xff0c;从最初的模拟监控到数字监控&#xff0c;再到高清化、网络化监控&#xff0c;直至现在的智能化监控&#xff0c;每一次变革都推动了行业的快速发展。特别是近年来&#xff0c;随着AI、大数据、物联网等技术的…

Proxmox LXC 部署ubuntu,centos

前言CT 在 Proxmox VE 中,“CT”是 Container(容器)的缩写。PVE 支持两种主要类型的容器:LXC 和 OpenVZ(针对较旧的 Linux 内核)。这些容器提供了一种轻量级的虚拟化方式,允许用户在一个操作系统实例上运行多个隔离的系统环境。 PVE CT 特别是指在 Proxmox 平台上创建…

深入探索MySQL C API:使用C语言操作MySQL数据库

目录 引言 一. MySQL C API简介 二. MySQL C API核心函数 2.1 初始化和连接 2.2 配置和执行 2.3 处理结果 2.4 清理和关闭 2.5 错误处理 三. MySQL使用过程 四. 实现CRUD操作 4.1 创建数据库并建立表 ​编辑 4.2 添加数据&#xff08;Create&#xff09; ​编辑 …