基于SimPy的自动化立体仓库建模与仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于SimPy的自动化立体仓库建模与仿真
郑振宇;袁红兵;徐正林
【摘要】自动化立体仓库是现代物流系统的核心和枢纽,其调度的合理性对整个物流系统的效率起着重要的作用.由于对自动化立体仓库进行实际调度研究的复杂性和高代价,对其进行建模仿真是实现调度优化比较经济有效的做法.基于Python平台的SimPy包,建立了一种自动化立体仓库的离散事件动态系统(DEDS)仿真模型,并设置了一些常用的调度规则,通过分析不同调度规则下系统完成一定量任务的运行结果来实现调度优化.
【期刊名称】《制造业自动化》
【年(卷),期】2019(041)003
【总页数】5页(P102-105,108)
【关键词】自动化立体仓库;SimPy;离散事件动态系统
【作者】郑振宇;袁红兵;徐正林
【作者单位】南京理工大学机械工程学院,南京210000;南京理工大学机械工程学院,南京210000;江苏六维智能物流装备股份有限公司,211121
【正文语种】中文
【中图分类】TP391.9
0 引言
自动化立体仓库(以下简称为AS/RS)作为现代物流系统的核心和枢纽,被广泛
运用于各个行业。
AS/RS的作业效率影响着整个物流系统的效率。
因此,AS/RS
的优化调度是一个非常重要的课题。
由于对已建成的AS/RS进行调度研究既复杂
又影响使用,对AS/RS进行建模仿真是研究AS/RS优化调度问题有效且经济的手段。
AS/RS是典型的离散事件动态系统。
离散事件动态系统的模型一般可以用流程图
进行描述。
建模时需要根据具体的系统模型情况,充分反映临时实体在系统中历经的过程、永久实体对临时实体的作用,以及它们之间的逻辑关系[1]。
用于离散事
件动态系统模型建模和分析的方法有很多,常用的有时态逻辑方法、排队网络方法、极大代数法、专家系统方法、遗传算法、Petri网等[2]。
SimPy是一个基于标准Python的离散事件仿真框架,利用SimPy和Python强大的数据分析功能,可以很方便的构建AS/RS的仿真模型并进行分析优化。
本文通过对某公司流通性仓库的出入库作业进行建模仿真,并输出包含系统总运行时间、各个设备的空闲率等结果,同时在建模时对AS/RS运行过程中资源分配冲
突的点设置不同的调度规则。
通过分析AS/RS在不同的调度规则下完成一定量任
务的输出结果,来实现优化调度规则的目的。
1 AS/RS模型描述
如图1所示,该AS/RS主要由货架区、堆垛机、出入库台、输送线、RGV、出入口组成。
货架区由多排高层货架组成,每一个巷道两侧各有一单伸位货架,并由一台堆垛机负责货物的存取。
在巷道口各有一出入台,可容纳一个托盘。
出入台与输送线相连,输送线除了运送货物还起到货物缓存区的作用。
RGV负责将货物在输
送线和出入口之间运输并取放。
图1 AS/RS布局图
入库时,货物被叉车搬运到入口,由RGV运送到上位机分好的巷道,若此时缓存区还有空位,则直接被放入缓存区等待堆垛机入库到上位机分好的货位,否则就在
该巷道等待直到入库台有空位。
出库时,由上位机分配好的巷道堆垛机前往上位机指定的位置取货,送往该巷道出库台,若出库台还有空位则直接放入,等待RGV 取走并送往出口,否则等待直到出库台有空位。
2 SimPy核心概念
SimPy是以进程为基础的离散事件仿真框架。
所有活动主体,如车辆、顾客,都可以用进程(process)来模拟。
这些进程存放在环境(environment)中。
进程之间,以及进程与环境之间,通过事件(event)来进行交互。
进程由Python中的生成器(generators)实现,其采用的时间推进机制为下一事件时间推进机制。
在进程中可以构建事件并通过yield语句抛出事件。
当一个进程抛出事件,进程会被暂停,直到事件被激活。
多个进程可以等待同一个事件,SimPy会按照这些进程抛出的事件激活的先后来恢复进程[3]。
事件中最重要的一类事件是Timeout,这类事件允许进程经过一段时间后再被激活,用来表达一个进程休眠或者活动持续了一段时间。
SimPy中还有一类重要的概念是资源(Resource)类。
资源类可以表达人力、设备资源的分配或者生产过程中物料的消耗。
资源类通过request()方法来表达资源的占用,遵循先到先得的原则,其子类则可以实现优先级队列。
3 AS/RS的建模
AS/RS中的货物资源、设备资源和调度规则都是互相独立的对象,通过面向对象抽象聚合的方法就可以建立独立的对象类。
3.1 AS/RS面向对象分类
AS/RS模型可以分为以下四类:
1)设备类:这是AS/RS实现功能的载体,具体可以派生出运输设备类、储存设备类等。
而运输设备类又可以进一步派生出堆垛机类、RGV类,储存设备类也可以进一步派生出货架类、出入台类等。
每个类都有名字和状态属性,以及各自对应
的工作方法。
2)调度规则类:调度规则类由一系列调度规则组成,AS/RS中发生资源抢占和资源分配时,通过调度规则可以作出资源分配决策。
合适的选择调度规则可以提高工作效率。
本文涉及的规则调度包括出/入库货位选择、堆垛机响应间隔、货位分区、RGV响应间隔、RGV调度,其余设备资源的分配决策均为先到先服务(FCFS)。
3)出入库分发类:该类对象的实例负责将任务订单分发给入库/出库两个模块,
并根据入库/出库设备是否空闲安排入库/出库的执行。
4)任务类:任务类包含任务订单与过账两部分。
任务订单即入库/出库的货物及
数量。
由于整个模型事件高度并发,很难追踪最后一个执行的任务,为了统计所有任务订单完成所需的时间,需要加入过账系统对任务执行完毕的数量进行统计,当过账数量等于订单总数时的系统时间即为完成订单的总耗时。
整个模型的类图如图2所示。
3.2 AS/RS工作流程建模
结合上述分析的AS/RS模型类图,可以根据其聚合关系,建立AS/RS各个模块的工作流程图。
通过信息传递接口M1-M7的连接,图3~图6共同构成了AS/RS的工作流程图。
由于出/入库台、出入库缓存区仅仅起到传递任务指令的作用,故没有画出其工作
流程图。
图3所示的各个子进程也就是AS/RS的各个功能模块。
信息传递接口
M1-M7的含义如下:
1)M1:货位分配进程的信息入口,传入货物种类信息;
2)M2:货位分配进程的信息出口,传出分配好的货位信息;
3)M3:RGV调度进程的信息入口,传入任务指令中的起始设备位置;
4)M4:RGV调度进程的信息出口,传出分配好的RGV;
5)M5:堆垛机工作进程的信息入口,传入任务指令;
图2 AS/RS的类图
图3 AS/RS总进程流程图
图4 出入库分发进程、入库进程、出库进程流程图
6)M6:RGV工作进程的信息入口,传入任务指令;
7)M7:过账进程的信息入口,传入过账信息。
3.3 规则集的设置
本文根据某公司AS/RS的实际运行情况,设置了如下调度规则集:
1)RGV巷道分区
本文研究的AS/RS含有两辆RGV。
在直线往复式双RGV的调度研究中[4],是否对RGV的可达巷道进行划分以及如何划分是一个影响AS/RS工作效率的重要因素。
本文设置的RGV分区规则为:不分区、按巷道进行分区(例如三巷道可以分为1-2或2-1,每个RGV只执行对应分区巷道的工作任务)。
2)出库货位选取
出库货位选取规则分为:出库行优先、出库列优先、出库行列优先、随机出库。
其中出库行优先即选择离出库缓存区行最近的货位;出库列优先即选择离出库缓存区列最近的货位;出库行列优先即选择离出库缓存区行列综合最近的货位。
3)入库货位选取
入库货位选取规则跟出库选区规则一样,区别只在于出库是从有货的货位进行选择,入库是从空货位进行选择。
同时,本文将各种调度规则与实数绑定为字典dict(例如规则1、2、3、4分别和实数1、2、3、4对应绑定),通过实数(key)即可在仿真时调用不同的调度规则。
3.4 模型设计的特点
本文设计的AS/RS仿真模型具有以下特点:
1)可拓展性强
图5 货位分配进程、RGV调度进程流程图
图6 堆垛机工作进程、RGV工作进程、过账进程流程图
设备类方面,由于采用了面向对象的设计思路并进行了功能并发拆分,该模型的设备数量可以根据实际情况进行增删而无需太多代码的改动。
调度规则类方面,本模型根据实际工程应用,在资源分配冲突的地方预设了一些规则调度集,采用与实数绑定为字典(dict),通过一组实数就可以进行调度规则的配置。
如有需要,可增添调度规则来观察分析新的仿真结果,并且只需要在相应的规则集字典类添加新规则算法的绑定即可。
同时Python作为胶水语言,可以不通过代码改写的方式就可以绑定并调用封装好的用其他平台语言开发的调度规则算法API,在做调度优化的时候实现多端多平台合作。
2)运算轻量级
本模型使用SimPy作为离散事件仿真框架,由于其进程通过generator(构造器)而非真正意义上的process实现,整个仿真运行耗时、耗资源很少,非常方便进
行大量的规则调整搭配并进行结果分析。
3)数据统计接口丰富且可定制
行业上其实已经存在了一些用于离散事件系统的工业仿真软件。
但这类仿真软件往往针对某些特定场合高度定制化,提供的数据接口往往不全,缺乏通用的数据库接口,难以满足从多方面数据进行分析评估的需求。
而且这类仿真软件通常固定了程序开发的语言平台,无法满足多平台开发的需求。
3.5 仿真运行
本文使用了一组虚拟仓库设备参数来进行整个系统的仿真,并忽略堆垛机、RGV
运行时的加减速。
具体的参数如表1所示。
表1 仿真参数表堆垛机水平速度 2.0m/s 货位规格1m×1m×1m堆垛机垂直速度
1.0m/s 仓库规格 4巷道8层16列RGV运行速度 1.0m/s 小车数量 2
本文选择的调度规则为巷道不分区、出库行列优先、入库行列优先。
基于优化AS/RS运行效率的角度(缩短AS/RS完成一定量任务的总时间),本次仿真只调用AS/RS总运行时长数据接口。
仿真结果如表2所示。
表2 仿真结果表任务数量总运行时间(s)500入库、500出库 29102.5
4 结论
本文基于Python平台的SimPy包设计了一个AS/RS的仿真模型,很好的反映出了AS/RS运行时的资源冲突、抢占情况,以及高并发的特性。
同时在模型中设置了规则调度集,方便后续通过规则调度的方式对整个立体库系统进行调度优化。
另外,本模型可提供多层次的数据接口,包括总运行时长、堆垛机空闲率、RGV 空闲率等,可方便以后从多个目标(例如效率最高、设备空闲率最低等)进行调度优化。
参考文献:
【相关文献】
[1] 栾飞.基于匈牙利算法的自动化立体仓库出入库优化调度[J].陕西科技大学学报(自然科学版),2011,29(03):122-125.
[2] 江志斌.Petri网及其在制造系统建模与控制中的应用[M].机械工业出版社,2004.
[3] Norm Matloff.Introduction to Discrete-Event Simulation and the SimPy
Language[M].2008:1-5.
[4] 陈华,孙启元.基于TS算法的直线往复2-RGV系统调度研究[J].工业工程与管
理,2015,20(05):80-88.。