当前位置: 首页 > news >正文

【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来说会简单一些,有一个洗车厂,里面有若干台洗车机器&#xf…...

前端随机验证码安全验证sdk

前端随机验证码安全验证sdk 前言介绍一、效果展示二、使用步骤1.引入库2.参数说明3.方法与事件说明4.如何通过API获取当前用户的验证状态 ​ 前端必备工具推荐网站(免费图床、API和ChatAI等实用工具): http://luckycola.com.cn/ 前言 验证码:是一种校验区分用户是…...

语境化语言表示模型

一.语境化语言表示模型介绍 语境化语言表示模型(Contextualized Language Representation Models)是一类在自然语言处理领域中取得显著成功的模型,其主要特点是能够根据上下文动态地学习词汇和短语的表示。这些模型利用了上下文信息&#xf…...

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的时候&#xff0…...

微服务架构最佳实践

我的新书《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处理更完美。 对于下面这种数据的处理,你能想到几种方法…...

在 Taotoken 控制台中如何管理多个 API Key 并设置访问控制与审计

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在 Taotoken 控制台中如何管理多个 API Key 并设置访问控制与审计 对于需要接入多个大模型应用的团队或开发者而言,集中…...

SolidWorks插件开发避坑指南:手把手教你搞定工具栏图标乱跑和注册表清理(C#版)

SolidWorks插件开发实战:彻底解决工具栏图标错乱与注册表残留问题 1. 问题现象与根源分析 当你在SolidWorks插件开发过程中修改插件名称或反复调试时,是否遇到过这些令人抓狂的场景? 工具栏上出现多个重复的功能按钮图标位置随机错位&#xf…...

Microsoft大规模取消 Claude Code 授权,内部强制向 Copilot CLI 迁移

2.8 万行遗留系统重构实战 | Claude Code / Cursor / Copilot 横向对比最近AI Coding工具圈子直接打起来了。Microsoft开始大规模取消Claude Code授权,把内 部开发者往Copilot CLI上推(5月14日左右The Verge等媒体报道);几乎同时O…...

VisualCppRedist AIO:Windows系统运行库终极解决方案

VisualCppRedist AIO:Windows系统运行库终极解决方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经在安装新软件或游戏时,突…...

云端IDE开发CircuitPython:VS Code EDU实战指南与工具链解析

1. 项目概述:当CircuitPython遇上云端IDE如果你玩过像Adafruit的Metro M4、Raspberry Pi Pico这类微控制器板子,对CircuitPython一定不陌生。它让硬件编程变得像写Python脚本一样简单,code.py一保存,板子上的LED立马就能闪起来。但…...

3步高效部署AutoJs6:Android自动化开发实战指南

3步高效部署AutoJs6:Android自动化开发实战指南 【免费下载链接】AutoJs6 安卓平台 JavaScript 自动化工具 (Auto.js 二次开发项目) 项目地址: https://gitcode.com/gh_mirrors/au/AutoJs6 AutoJs6作为Android平台领先的JavaScript自动化工具,为开…...

构建个人效率工具集:模块化Shell环境配置与自动化工作流实践

1. 项目概述与核心价值最近在整理个人技术栈和自动化工具时,发现了一个挺有意思的项目,叫“Tsai1030/Tsai_PIG”。乍一看这个仓库名,可能会让人有点摸不着头脑,PIG?和数据处理框架Apache Pig有关吗?还是某种…...

网安工具系列python系列【仅供参考】:Python实战:利用fofa API高效搜索网络资产

Python实战:利用fofa API高效搜索网络资产 Python实战:利用fofa API高效搜索网络资产 1. 从零开始:为什么你需要一个自动化的资产搜索工具? 2. 动手前的准备:你的fofa账户和Python环境 2.1 获取你的fofa API凭证 2.2 搭建Python脚本环境 3. 核心代码拆解:一行行理解搜索脚…...

英雄联盟智能助手Seraphine:如何用3个核心功能提升你的排位胜率

英雄联盟智能助手Seraphine:如何用3个核心功能提升你的排位胜率 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 你是否曾在英雄联盟排位赛中因为BP阶段手忙脚乱而错失先机?是否因为不了…...

Windows风扇控制终极指南:Fan Control让你的电脑更静音更高效

Windows风扇控制终极指南:Fan Control让你的电脑更静音更高效 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tren…...