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

共享单车系统作为一种绿色环保的出行方式,已成为现代城市公共交通的重要组成部分。本文将使用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 -= 1bikeshare.B += 1# 定义从B到A借车的函数
def bike_to_A():bikeshare.B -= 1bikeshare.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.rhkb.cn/news/400173.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚拟化—XenServer安装教程详细(附客户端连接)

🏡作者主页:点击! 🐧Linux基础知识(初学):点击! 🐧Linux高级管理防护和群集专栏:点击! 🔐Linux中firewalld防火墙:点击! ⏰️创作…

Unity 编写自己的aar库,接收Android广播(broadcastReceiver)并传递到Unity

编写本文是因为找了很多文章,都比较片段,不容易理解,对于Android新手来说理解起来不友好。我这里写了一个针对比较小白的文章,希望有所帮助。 Android端 首先还是先来写Android端,我们新建一个Android空项目&#xf…

重新定义AI绘画体验,Midjourney全面进阶指令指南

前言 在人工智能绘画的世界里,Midjourney无疑是一颗璀璨的明珠。今天,就让我们一同探索这个神奇工具的奥秘,开启一段全新的AI绘画之旅。 一、奇妙之门:Midjourney的本质 与众不同的是,Midjourney并非一个单纯的软件,而是栖身于Discord平台的一位"云端画师"。有别于本…

【微信小程序】网络数据请求

1. 小程序中网络数据请求的限制 2. 配置 request 合法域名 3. 发起 GET 请求 调用微信小程序提供的 wx.request() 方法,可以发起 GET 数据请求,示例代码如下: 4. 发起 POST 请求 调用微信小程序提供的 wx.request() 方法,可以…

(计算机网络)网络层

目录 一.网络层提供哪种服务 二.两种服务的比较 三.ip协议 四.ip地址 五.ip地址的分类 六.子网掩码 七.路由器介绍 一.网络层提供哪种服务 1.ip地址--唯一的标识互联网上的某一台主机 2. 虚电路:虚拟的电路 二.两种服务的比较 ip数据报,不需要建…

Visual Studio Code 安装与 C/C++ 语言运行总结

​ 大家好,我是程序员小羊! 前言: Visual Studio Code(简称 VS Code)是由微软开发的一款轻量级、强大的代码编辑器,支持多种编程语言和开发框架。由于其丰富的插件生态系统和灵活的配置选项,VS…

Layui——隐藏表单项后不再进行验证

目录 修改后的部分代码 修改后的完整代码 我编辑用户信息和添加新用户用的是同一个表单,不同的是编辑用户信息里没有密码项和确认密码项,但是把它们隐藏后仍然要进行验证,也就是说它们俩的验证并没有随着表单项的隐藏而关闭。原因&#xf…

gitlab实现CI/CD自动化部署

gitlab实现CI/CD自动化部署 项目根目录中新增gitlab-ci.yml在gitlab上查看gitlab-runner配置方法配置服务器环境推送代码,触发runner,实现自动构建和部署参考 gitlab支持通过配置CI/CD实现自动化部署我们的代码项目,主要核心就是配置gitlab-c…

【mamba学习】(一)SSM原理与说明

mamba输入输出实现与transformer几乎完全一样的功能,但速度和内存占用具有很大优势。对比transformer,transformer存在记忆有限的情况,如果输入或者预测的序列过长可能导致爆炸(非线性),而mamba不存在这种情…

【精通SDL之----SDL_RenderReadPixels截屏】

SDL_RenderReadPixels截屏 前言一、SDL_RenderReadPixels简介二、问题现象三、规避方案1. 离屏纹理2. ding! *灵光一现* 前言 最近使用SDL2在鸿蒙系统(Harmoney OS)上截取视频播放过程中的数据,发现捕获的数据为空,然在windows上却可以正常捕获&#xff…

Linux-软件管理

文章目录 19. 软件管理19.1 linux软件介绍19.2 RPM包概述19.3 RPM软件包安装19.4 RPM软件包依赖问题19.5 DPKG软件包19.6 linux 软件包前端工具19.7 windows 前端工具winget19.8 linux 前端工具yum概述19.9 设置yum远程仓库19.10 yum 软件包管理19.11 epel软件仓库19.12 yum本地…

海康相机二次开发学习笔记1-环境配置

因为最近可以用一段时间海康加密狗,Visionpro二次开发暂时停更一段时间,开始记录一下海康相机二次开发的学习笔记. 环境配置 1. 创建项目 打开Visual Studio,新建.NetFramework项目,选择WindowsForms,点击下一步,选择项目名称,点击下一步,点击确定打开项目属性,点击生成选项…

TED: 1靶场复现【附代码】(权限提升)

机下载地址: Ted: 1 ~ VulnHubTed: 1, made by Avraham Cohen. Download & walkthrough links are available.https://www.vulnhub.com/entry/ted-1,327/ 1. 主机发现端口扫描目录扫描敏感信息获取 1.1. 主机发现 nmap -sn 192.168.59.0/24|grep -B 2 00:0C…

面试题:什么是 Redis 的雪崩、穿透和击穿?Redis 崩溃之后会怎么样?该如何应对这种情况?如何处理 Redis 的穿透?

面试题:什么是 Redis 的雪崩、穿透和击穿?Redis 崩溃之后会怎么样?该如何应对这种情况?如何处理 Redis 的穿透? 面试题面试官心理分析面试题剖析缓存雪崩缓存穿透缓存击穿 面试题 了解什么是 Redis 的雪崩、穿透和击穿…

百度智能云发布3款轻量级+2款场景大模型

文心大模型ERNIE 3.5是目前百度智能云千帆大模型平台上最受欢迎的基础大模型之一。针对用户的常见通用的对话场景,ERNIE 3.5 在指令遵循、上下文学习和逻辑推理能力三方面分别进行了能力增强。 ERNIE Speed作为三款轻量级大模型中的“大个子”,推理场景…

微调LLama 3.1——七月论文审稿GPT第5.5版:拿早期paper-review数据集微调LLama 3.1

前言 对于llama3,我们之前已经做了针对llama3 早7数据微调后的测评 去pk llama2的早7数据微调后,推理测试集中的早期paper:出来7方面review去pk gpt4推理测试集中的早期paper:7方面reviewground truth是早期paper的7方面人工rev…

Mysql-B树和B+树的区别

当我们为ID去建立一个主键索引的时候,Mysql底层就会为我们去维护一棵树的结构,从而提升我们的数据检索效率,树的共同特性:小的索引在左边,大的索引在右边,每一次结点的寻址,都是一次磁盘的IO&am…

Linux 基本指令讲解 上

linux 基本指令 clear 清屏 Alt Enter 全屏/退出全屏 pwd 显示当前用户所处路径 cd 改变目录 cd /root/mikecd … 返回上级目录cd - 返回最近所处的路径cd ~ 直接返回当前用户自己的家目 roor 中:/root普通用户中:/home/mike mkdir 创建一个文件夹(d) …

简单的class.getResource与classLoader.getResource区别

简单的getClass().getResource()与ClassLoader.getResource()区别 1.简介 我们在springboot项目中,如果要获取到自己配置的资源或者配置类信息一般会用到Class.getResource()或ClassLoader.getResource(),这两种方式在使用的过程中很容易混淆&#xff…

智慧景区系统:科技赋能旅游新体验

随着信息技术的飞速发展,旅游业正经历着前所未有的变革,智慧景区系统作为这一变革的先锋,正以其独特的魅力重塑着游客的旅行方式。智慧景区系统,顾名思义,是运用物联网、大数据、云计算、人工智能等现代信息技术&#…