本文已参与「新人创作礼」活动,一起开启掘金创作之路。
获取更多资讯,赶快关注《智能制造与智能调度》公众号吧!
【Jasima系列教程】
- 初识Jasima-调度仿真系列教程预告
- (本文)初识Jasima-Jasima中的建模对象
@[TOC]
初识Jasima-Jasima中的建模对象
个人认为,Jasima中的这些建模对象是最关键的,对其如何进行建模,考虑哪些属性,对这些对象进行什么操作,决定了Jasima对不同问题的广泛性,不同场景的适用性和车间模拟的真实性。这些通过本节教程就可以掌握十之八九,其实后面的教程也就变的简单多了。(点击“这里”获取Jasima开源代码)
Jasima中的对象按照不同功能可以大致分为几类:实体对象、投料源、监听器、优先级规则等,下面将一一讲解。
调度实体对象
车间Shop
车间实际上规定了调度调度的范围,限定了需要调度的作业、机床和工艺路线,而这些信息都可以在仿真实验的创建车间阶段进行初始化。
工作站WorkStation
工作站也就是工作中心,为一组机床的集合,通常情况下,一个工作站前有一个缓存(队列),也即是说工作站内的机床共用这一个缓存。在配置车间时,会根据车间定义生成对应数量的工作站。当工件到达时会进入缓存,工作站会从其可用的机床中按照一定的规则选择最优先的机床,并将工件从缓存中移除。
机床IndividualMachine
机床有三种状态:故障、空闲和繁忙,通过定义故障源DowntimeSource实现在某些时刻模仿机床故障,当机床正在加工或已经故障时,再次故障不会中断加工或故障,而是会等到加工完成或故障结束时再故障。
作业Job
作业为车间中最主要的工作单位,当作业进入到工作站的缓存时,会设置作业的当前工作站和到达时间,当作业开始加工时,会根据加工机床的加工结束时间确定作业的完成时间,而开始加工时间即为仿真当前时间,同时如果仿真设置为允许前瞻,那么作业还会通知下一机床(如果当前不是最后一道工序)考虑未来到达。
批处理Batch
批处理是在单道工序中一起处理的临时作业集合,所以其最重要的属性就是作业列表jobsInBatch,由于有多个作业,因此在获取相关属性时,都是对这些作业遍历后得到的,如在获取批次的到达时间时,取的是这些作业中最晚的到达时间。
工序Operation
每个作业需要经过一个或多个工序的加工才能完成,工序定义了加工所需要的工作站、加工时间、准备状态、批次信息等。
工艺Route
工艺就是按照给定工序数组加工的一条路线。
投料源
JobSource
JobSource是所有作业释放类的抽象类,定义了车间环境、是否停止到达,在初始化时通过重复调用创建下一作业来产生作业。
静态投料源StaticJobSource
静态投料源是根据外部文件读取数据的,此时所有所有作业初始时均已就绪,投料源会循环创建作业直到达到文件中定义的作业数。
动态投料源DynamicJobSource
在动态源中指定了作业到达时间、交货期因子、权重、机床编号、加工时间、工序数等的随机分布,并据此创建作业。
故障源DowntimeSource
在机床对象中已经介绍过,机床存在故障源,故障源通过机床对象machine与机床相关联,而故障策略则由故障间隔时间(timeBetweenFailures)和故障修复时间(timeToRepair)定义,timeBetweenFailures表示修复完成后到下一次故障之间的时间,timeToRepair为故障的时间,如一台机床每24小时就故障1小时,那么就可以设置timeBetweenFailures为23小时,而timeToRepair为1小时。
维护源MaintenanceSource
维护源用于对计划维护进行建模,分别使用timeBetweenFailures和timeToRepair定义维护间隔和维护时间。维护源继承于故障源,但是和故障源不同的是,维护源中的timeBetweenFailures使用上一次维护的开始作为参考,而故障源则是使用上一次故障的结束。例如,一台机床每24小时就故障1小时,那么就可以通过维护源设置timeBetweenFailures为24小时,而timeToRepair为1小时。
监听器
车间监听器ShopListener
该监听器为基于**作业释放(job releases)和完成(job completions)**进行结果收集的类的基类。
工作站监听器WorkStationListener
工作站监听器的基类,将不同的事件(工作站工件到达、工件选择、工件完成、工作站激活和工作站失效)委托给指定方法。
作业监听器JobListener
主要负责监听作业的释放、完成、进入队列、离开队列、开始加工、完成加工等事件进行相应处理。
优先级规则
优先级队列PriorityQueue
实现了具有优先级的队列,队列中元素的排序通过排序规则PR确定,实际上工作站中的队列即为此类的对象。
优先级目标PrioRuleTarget
优先级目标定义了优先级队列到底对什么进行排序,Jasima中有批处理和作业的概念,因此本质上Batch和Job都是继承于PrioRuleTarget的可排列对象。
优先级规则PR
在优先级队列中需要指定优先级规则进行排序,而PR为所有排序规则的基类。
排序规则
ATC:明显滞后成本规则(Apparent Tardiness Costs)。
CR:临界比规则(Critical Ratio rule)。
EDD:交货期越早越优先(Earliest Due Date first)。
FASFS:先进入车间先服务(First Arrival at Shop First Served)。
FCFS:先进入队列先服务(First Come First Served)。
MDD:改进交货期规则(Modified Due Date),剩余加工时间和剩余交货期的较大值越大,优先级越低。
MOD:改进工序交货期规则(Modified Operation Due Date),工序工时和剩余工序交货时间的较大值越大,优先级越低。
ODD:工序交货期规则(Operation Due Date)。
RND:随机规则,队列中的每个作业具有相同的选择几率。
SI:为SPT的截断版本,通常表示为,首先按照松弛正负进行分组,然后每一组内再通过SPT进行排序。
SLK:最小松弛规则(Least (global) Slack rule),
SPT:最短加工时间(Shortest Processing Time)。
SRPT:最短剩余加工时间(Shortest Remaining Processing Time)。
SRPTPerPT:每单位工时的剩余加工时间(Remaining Processing Time per Imminent Processing Time)。
SRPTPerSLK:每单位松弛的剩余加工时间(Remaining Processing Time per Slack)。
TieBreakerFASFS:该规则按照作业编号升序排列,可以保证得到一个确定的排序,因而通常用作tie-breaker。
在Jasima中还有很多种不同的规则(准备相关、权重相关等),这里不再一一介绍。