【SimPy系列博客之官方example学习与解读】—— Example 3: Car Wash
Hello,CSDN的各位小伙伴们,又见面啦!今天我们要学习的例程是:Car Wash!我们开始吧!
例程背景
这个例程相对于example 2来说会简单一些,有一个洗车厂,里面有若干台洗车机器,一台机器在一段时间内只能给一台车进行洗车服务。车辆陆陆续续到达洗车厂,如果有机器空闲,则开始为该车辆服务,如果没有机器空闲,则车辆会排队等待,直到有空闲的机器。
例程代码分析
照旧,基本的头文件和参数的定义我们就不赘述了:
import simpy
import randomRANDOM_SEED = 42
NUM_MACHINES = 2
WASHTIME = 5
T_INTER = 7
SIM_TIME = 20
下面我们先定义洗车厂,首先我们想洗车场有n个机器 ,每个机器自然就是建模成simpy中的resource。另外,洗车场还会有洗车的功能,洗车功能则需要花费一些时间。有了这些理解,我们可以直接写出洗车场的类:
class CarWash:# carwash里面包含了若干个机器,能够同时为车辆进行洗车服务def __init__(self, env, num_machines, washtime):self.env = envself.machine = simpy.Resource(env, capacity=num_machines)self.washtime = washtimedef wash(self):yield self.env.timeout(self.washtime) # 洗车需要花费的时间
下面我们来定义单一台车辆的行为,值得注意的是:车辆什么时候到达洗车场我们是不需要在车辆自己的建模中考虑的,应该把它分离出来,我们需要考虑的是车辆到达洗车场后,如何做:请求机器资源,然后开始洗车,然后释放机器资源并离开。所以我们可以写出车辆行为的代码:
def car(env, name, cw):print('Car: ', name, ' arrives at the carwash at: ', env.now)with cw.machine.request() as request: # 请求机器资源yield request # 等待洗车机print('Car: ', name, ' enters the carwash at: ', env.now)yield env.process(cw.wash()) # 开始洗车print('Car: ', name, ' leaves the carwash at: ', env.now)
with 跳出后,simpy会自动释放resource。最后,我们来简单定义一个车辆陆陆续续到达洗车场的函数即可:
def set_up(env, num_machines, washtime, t_inter):# 先创建一个carwash类carwash = CarWash(env, num_machines, washtime)i = 0# 初始有四辆车for _ in range(4):i += 1env.process(car(env, i, carwash))# 创建后续驶来的车辆while True:i += 1yield env.timeout(random.randint(t_inter - 2, t_inter + 2))env.process(car(env, i, carwash))
最后启动仿真:
print('EXAMPLE 3: CAR WAHS...')
random.seed(RANDOM_SEED)
env = simpy.Environment()
env.process(set_up(env, NUM_MACHINES, WASHTIME, T_INTER))
env.run(until=SIM_TIME)
仿真结果如下:
EXAMPLE 3: CAR WAHS...
Car: 1 arrives at the carwash at: 0
Car: 2 arrives at the carwash at: 0
Car: 3 arrives at the carwash at: 0
Car: 4 arrives at the carwash at: 0
Car: 1 enters the carwash at: 0
Car: 2 enters the carwash at: 0
Car: 5 arrives at the carwash at: 5
Car: 1 leaves the carwash at: 5
Car: 2 leaves the carwash at: 5
Car: 3 enters the carwash at: 5
Car: 4 enters the carwash at: 5
Car: 6 arrives at the carwash at: 10
Car: 3 leaves the carwash at: 10
Car: 4 leaves the carwash at: 10
Car: 5 enters the carwash at: 10
Car: 6 enters the carwash at: 10
Car: 5 leaves the carwash at: 15
Car: 6 leaves the carwash at: 15
Car: 7 arrives at the carwash at: 17
Car: 7 enters the carwash at: 17
相关文章:
【SimPy系列博客之官方example学习与解读】—— Example 3: Car Wash
Hello,CSDN的各位小伙伴们,又见面啦!今天我们要学习的例程是:Car Wash!我们开始吧! 例程背景 这个例程相对于example 2来说会简单一些,有一个洗车厂,里面有若干台洗车机器…...
前端随机验证码安全验证sdk
前端随机验证码安全验证sdk 前言介绍一、效果展示二、使用步骤1.引入库2.参数说明3.方法与事件说明4.如何通过API获取当前用户的验证状态 前端必备工具推荐网站(免费图床、API和ChatAI等实用工具): http://luckycola.com.cn/ 前言 验证码:是一种校验区分用户是…...
语境化语言表示模型
一.语境化语言表示模型介绍 语境化语言表示模型(Contextualized Language Representation Models)是一类在自然语言处理领域中取得显著成功的模型,其主要特点是能够根据上下文动态地学习词汇和短语的表示。这些模型利用了上下文信息…...
PDO【配置】
PDOr: 6040 控制字 6060 模式 6083 加速度 6084 减速度 =====================【定位1】:// 补间7 607A 定位位置 6081 定位速度 =====================【速度3】: 60FF 目标速度 =====================【力矩4…...
CMake入门教程【高级篇】管理MSVC编译器警告
😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 1.什么是MSVC?2.常用的屏蔽警告3.MSVC所有警告4.target_compile_options用法5.如何在CMake中消除MSVC的警告?6.屏蔽警告编写技巧...
【JaveWeb教程】(8)Web前端基础:Vue组件库Element之Table表格组件和Pagination分页组件 详细示例介绍
目录 1 Table表格组件1.1 组件演示1.2 组件属性详解 2 Pagination分页2.1 组件演示2.2 组件属性详解2.3 组件事件详解 接下来我们来学习一下ElementUI的常用组件,对于组件的学习比较简单,我们只需要参考官方提供的代码,然后复制粘贴即可。本节…...
llama_index 创始人为我们展示召回提升策略(提升15%)
用句子向量替换为句子向量 句子检索,将句子转化为向量。在检索的过程中,假如句子命中,则将句子周围的内容也当做检索内容。 对比句子检索和之前的按块去做切分的检索。可以看到,内容的相关性提升了8%, 构建数据的时候…...
RAG 详解
原文:GitHub - Tongji-KGLLM/RAG-Survey 目录 RAG调查 什么是RAG?RAG的范式 幼稚的 RAG高级 RAG模块化 RAG如何进行增强?RAG 还是微调?如何评估 RAG?前景 严峻的挑战多式联运扩展RAG的生态系统RAG论文清单 增强阶段 …...
【llm 部署运行videochat--完整教程】
# 申请llama权重 https://ai.meta.com/resources/models-and-libraries/llama-downloads/ -> 勾选三个模型 -> 等待接收右键信息 # 下载llama代码库 git clone https://github.com/facebookresearch/llama.git cd llama bash download.py -> email -> url …...
Talking about likes
Tutorial Hi! Tim here with another 925English lesson! In today’s lesson, we’re learning how to talk about likes and preferences. Why It’s Important: Talking about things we like is common in various situations, from meetings to casual chats over lunch…...
DeepSeek 发布全新开源大模型,数学推理能力超越 LLaMA-2
自从 LLaMA 被提出以来,开源大型语言模型(LLM)的快速发展就引起了广泛研究关注,随后的一些研究就主要集中于训练固定大小和高质量的模型,但这往往忽略了对 LLM 缩放规律的深入探索。 开源 LLM 的缩放研究可以促使 LLM…...
代码随想录算法训练营第二十一天| 回溯 216. 组合总和 III 17. 电话号码的字母组合
216. 组合总和 III 可以参考77.组合中关于选取数组的相关操作。 递归函数的返回值以及参数:一般为void类型 递归函数终止条件:path这个数组的大小如果达到k,说明我们找到了一个子集大小为k的组合了,然后当n为0的时候࿰…...
微服务架构最佳实践
我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 构建和管理微服务是一项艰巨的任务。这是因为微服务就像多个并行的整体应用程序,它们都必须处于同步通信和并发运行时间。因此,在设计和构建…...
国内首款支持苹果Find My芯片-伦茨科技ST17H6x
深圳市伦茨科技有限公司(以下简称“伦茨科技”)发布ST17H6x Soc平台。成为继Nordic之后全球第二家取得Apple Find My「查找」认证的芯片厂家,该平台提供可通过Apple Find My认证的Apple查找(Find My)功能集成解决方案。…...
linux 01 centos镜像下载,服务器,vmware模拟服务器
https://www.bilibili.com/video/BV1pz4y1D73n?p3&vd_source4ba64cb9b5f8c56f1545096dfddf8822 01.使用的版本 国内主要使用的版本是centos 02.centos镜像下载 这里的是centos7 一.阿里云官网地址:https://www.aliyun.com/ 二. -----【文档与社区】 —【…...
Linux安装RabbitMq明白纸(无图)
Linux安装RabbitMq步骤 安装环境Erlang和RabbitMQ版本对照安装包下载地址登录Linux服务器创建安装目录将之前下载的两个rpm文件上传到这个目录下,并解压安装Erlang安装完成后,查看Erlang版本安装socat(RabbitMq安装需要这个)解压并…...
Android - CrashHandler 全局异常捕获器
官网介绍如下:Thread.UncaughtExceptionHandler (Java Platform SE 8 ) 用于线程因未捕获异常而突然终止时调用的处理程序接口。当线程由于未捕获异常而即将终止时,Java虚拟机将使用thread . getuncaughtexceptionhandler()查询该线程的UncaughtExceptio…...
商品源数据如何采集,您知道吗?
如今,电子商务已经渗透到了人们生活的方方面面。2020年新冠肺炎突如其来,打乱了人们正常的生产生活秩序,给经济发展带来了极大的影响。抗击疫情过程中,为避免人员接触和聚集,以“无接触配送”为营销卖点的电子商务迅速…...
输入输出流、字符字节流、NIO
1、对输入输出流、字符字节流的学习,以之前做的批量下载功能为例 批量下载指的是,将多个文件打包到zip文件中,然后下载该zip文件。 1.1下载网络上的文件 代码参考如下: import java.io.*; import java.net.URL; import java.n…...
js中对数字,超大金额(千位符,小数点)格式化处理
前言 这个问题的灵感来自线上一个小bug,前两天刚看完同事写的代码,对数字类型处理的很好,之前一直都是用正则和toFixed(2)处理数字相关,后面发现使用numeral.js处理更完美。 对于下面这种数据的处理,你能想到几种方法…...
零基础封神!10行代码写渗透专用爬虫,一键扫遍靶场敏感资产
零基础封神!10行代码写渗透专用爬虫,一键扫遍靶场敏感资产 上一篇我们一起打破了认知壁垒,焊死了合规红线,用3行代码跑通了第一个渗透型爬虫。 很多粉丝后台私信我说,第一次跑通代码,看到命令行里打印出靶场…...
MCP3302/MCP3304 13位差分ADC驱动开发与硬件协同设计指南
1. MCP330X库深度解析:面向嵌入式工程师的13位差分ADC驱动开发指南MCP330X系列Arduino库是专为Microchip MCP3302与MCP3304高精度模数转换器设计的底层驱动框架。该库并非简单封装,而是基于对SPI协议时序、ADC采样原理及嵌入式资源约束的深刻理解所构建的…...
集成学习:为什么单打独斗不如“打群架”?(上篇)
如果你刚开始接触机器学习,可能听说过“随机森林”“XGBoost”这些名字,它们经常在各种数据竞赛里屠榜。这些方法的背后,都站着一个共同的大佬——集成学习。说人话就是:三个臭皮匠,顶个诸葛亮。与其把所有赌注押在一个…...
打破设备壁垒:VR-Reversal实现3D内容自由视角全设备适配
打破设备壁垒:VR-Reversal实现3D内容自由视角全设备适配 【免费下载链接】VR-reversal VR-Reversal - Player for conversion of 3D video to 2D with optional saving of head tracking data and rendering out of 2D copies. 项目地址: https://gitcode.com/gh_…...
小智AI固件开发者的福音:VSCode插件一键搞定ESP-IDF v5.4环境(Windows/Linux通用)
小智AI固件开发者的福音:VSCode插件一键搞定ESP-IDF v5.4环境(Windows/Linux通用) 在物联网开发领域,ESP32系列芯片凭借其优异的性能和丰富的功能,已经成为智能硬件开发的首选平台之一。而作为ESP32官方推荐的开发框架…...
关联分析——从购物篮到推荐引擎的算法演进
1. 从购物篮到推荐引擎的关联分析演进 记得我第一次接触关联分析是在2015年,当时在一家零售企业做数据分析。老板扔给我一堆购物小票数据,让我找出"像啤酒和尿布那样的神奇组合"。那时候我才明白,原来数据里藏着这么多有趣的秘密。…...
GHelper:华硕笔记本性能优化的轻量解决方案 - 告别Armoury Crate臃肿体验
GHelper:华硕笔记本性能优化的轻量解决方案 - 告别Armoury Crate臃肿体验 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Fl…...
如何通过GitHub配置Resume简历:无需代码的终极解决方案
如何通过GitHub配置Resume简历:无需代码的终极解决方案 【免费下载链接】resume 🚀 在线简历生成器 项目地址: https://gitcode.com/gh_mirrors/resu/resume Resume是一款功能强大的在线简历生成器,让你无需编写代码即可轻松创建专业简…...
新手必看,用快马生成的示例代码轻松学懂stm32f103c8t6引脚配置
作为一个刚接触STM32的开发者,我完全理解新手面对芯片引脚配置时的困惑。最近在InsCode(快马)平台尝试生成STM32F103C8T6的示例代码时,发现它特别适合用来建立引脚功能与代码的映射关系。下面分享我的学习过程: 理解芯片引脚特性 STM32F103C…...
深入解析DW_apb_i2c与TMP75的寄存器交互:从配置到温度读取
1. 认识TMP75温度传感器与DW_apb_i2c控制器 TMP75是德州仪器(TI)推出的一款高精度数字温度传感器,采用I2C接口通信,内置12位ADC,分辨率可达0.0625C。我在多个嵌入式项目中都用过它,实测稳定性相当不错。它的…...
