下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Python实现离散事件仿真
(如排队系统、物流调度)
一、离散事件仿真的核心概念
环境(Environment)
管理仿真时间,调度事件。
事件(Event)
在特定时间触发的动作(如客户到达、服务完成)。
资源(Resource)
被实体竞争使用的对象(如服务窗口、卡车)。
进程(Process)
通过生成器函数定义的实体行为逻辑。
二、SimPy基础示例:银行排队系统
场景描述
客户随机到达银行,排队等待服务。
银行有2个服务窗口。
每个客户的服务时间固定为1单位时间。
代码实现
python
importsimpyimportrandom
#定义客户行为defcustomerfenv,name,counter):
arrival_time=env.now
print(f"{name}到达时间:{arrivaltime:.2f}")
#请求资源(服务窗口)
withcounter.requestf)asreq:
yieldreq#等待直到有空闲窗口
starttime=env.now
print(f"{name}开始服务时间:{start_time:.2f}(等待时长:{start_time-
arrival_time:.2f})")
#模拟服务时间(随机0.5F.5单位时间)
service_time=random.uniform(0.5,1.5)
yieldenv.timeout(service_time)
print(f”{name}离开时间:{env.now:.2f}(服务时长:{service_time:.2f})")
#定义客户生成器defcustomer_generator(env,counter):
customerjd=0
whileTrue:
yieldenv.timeout(random.expovariate(1.0))#指数分右到达间隔(平均1单位时间)
customerjd+=1
cess{customer(env/f"-{customerjd}",counter))
#创建仿真环境并运行
env=simpy.Environment()
counter=simpy.Resource(env,capacity=2)#2个服务窗口
cess(customer_generator(env,counter))
env.run(until=10)it仿真运行10单位时间
输出示例
text
客户-1到达时间:0.00
客户-1开始服务时间:0.00(等待时长:0.00)
客户・2到达时间:0.83
客户-2开始服务时间:0.83(等待时长:0.00)
客户-3到达时间:1.03
客户-1离开时间:1.32(服务时长:1.32)
客户-3开始服务时间:1.32(等待时长:0.29)
客户-2离开时间:1.84(服务时长:1.01)
三、扩展案例:物流调度系统
场景描述
货物从仓库通过卡车运输到目的地。
仓库有3辆卡车,每辆卡车装载货物需要2单位时间。
货物到达时间服从泊松过程。
代码实现
python
importsimpyimportrandom
deftransportJob(env,truck,jobjd):
print(f”时间{env.now:.2f}:货物{jobjd)开始装载卡车”)
yieldenv.timeout(2)#装载时间
print(f”时间{env.now:.2f}:货物{job.id)装载完成,出发运输")
yieldenv.timeout(S)#运输时间
print。时间{env.now:.2f}:货物{jobjd)到达目的地")
defwarehouse(env,trucks):
job_id=0
whileTrue:
yieldenv.timeout(random.expovanate(U.b))n平均每2单位时间到达一个货物
job_id+=1
cess(transportjob(env,trucks,job_id))
env=simpy.Environment()
trucks=simpy.Resourcefenv,capacity=3)#3辆卡车
cess(warehouse(env,trucks))
env.run(until=20)
输出示例
text
时间0.00:货物1开始装载卡车
时间2.00:货物1装载完成,出发运输
时间3.14:货物2开始装载卡车
时间5.14:货物2装载完成,出发运输
时间7.00:货物1到达目的地
时间8.14:货物2到达目的地
四、关键功能扩展
1.优先级资源请求
python
#使用PriorityResource实现优先级fromsimpyimportPriorityResource,Priorityitem
defcustomer(env,name,priorit/,counter):
withcounter.request(priority=Priorityltem(priority,env.now))asreq:
yieldreq
#…服务逻辑…
counter=PriorityResource(env,capacity=2)
动态资源调整
python
#在仿真中动态增减资源容量defadjust_capacity(env,counter):
yieldenv.timeout(S)
counter.capacity+=1#5单位时间后增加1个窗口
cess(adjust_capacity(env,counter))
3.数据收集与分析
python
#记录等待时间和服务时间
wait_times=[]
service_times=[]
defcustomer(env,name,counter):
arrival_time=env.now
withcounter.request()asreq:
yieldreq
wait_time=env.now-arrival_time
wait_times.append(wait_time)
#...记录服务时间…
五、调试与优化
调试技巧
使用env.step()单步执行。
打印关键事件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- ICU脑卒中后康复护理方案
- 音乐节奏训练教案
- 10kV保护定值计算培训
- 微创外科腹腔镜手术后护理流程
- 心律失常的护理管理策略
- 肾内科慢性肾衰竭血液透析护理干预手册
- 腰椎滑脱科学护理指南
- 镇江市2025-2026学年毕业升学考试模拟卷物理卷(含答案解析)
- 2026届四川省遂宁市中考一模物理试题(含答案解析)
- 妇儿病人的护理技术
- 民兵护路知识讲座
- 《空乘化妆与形象塑造》课程标准
- 高速铁路客运服务系统-旅客服务系统
- 上海交通大学生态学课件第二章:生物与环境
- 读懂孩子行为背后的心理语言课件
- 七十岁换证三力测试题库
- Unit 4 A glimpse of the future Starting out Listening-高中英语外研版(2019)选择性必修第三册
- 园林苗圃学复习2014概要
- GB/T 3390.1-2013手动套筒扳手套筒
- 2022年德清县文化旅游发展集团有限公司招聘笔试试题及答案解析
- 液压与气压传动全版课件
评论
0/150
提交评论