初识Jasima-Jasima中的建模对象

112 阅读6分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

获取更多资讯,赶快关注《智能制造与智能调度》公众号吧!
【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的截断版本,通常表示为SIxSI^x,首先按照松弛正负进行分组,然后每一组内再通过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中还有很多种不同的规则(准备相关、权重相关等),这里不再一一介绍。