下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年人能力评估师安全防护竞赛考核试卷含答案
- 内燃机车钳工班组协作竞赛考核试卷含答案
- 催化裂化工岗位安全演练考核试卷含答案
- 珠宝首饰评估师合规化测试考核试卷含答案
- 味精制造工规程强化考核试卷含答案
- 煤直接液化操作工岗前职业规范考核试卷含答案
- 液压支架工岗前行为考核试卷含答案
- 平地机操作工岗前工作技巧考核试卷含答案
- 从业理论试题及参考答案
- 《比例》试题与答案解析
- 2026年跨境电商海外仓
- 2026年教科版新教材科学六年级上册教学计划(含进度表)
- 2026年西藏人民法院聘用书记员考试试题及答案
- 小学道德与法治新部编版五年级上册全册教案(2026秋)
- (2026年秋)七年级上册道德与法治知识点大全(2024修订版)
- 2026宁夏医科大学总医院自主招聘事业单位工作人员87人考试模拟试题及答案详解
- 2026宁夏医科大学总医院自主招聘事业单位工作人员87人笔试备考题库及答案详解
- 中交栈桥设计指南2022年
- 小学信息科技人教版(新教材)六年级全一册教学设计(全册)
- 新时代陕西省立德树人工作指南细则
- 《光伏发电工程可行性研究报告编制规程》(NB/T32043-201)中文版
评论
0/150
提交评论