制造业维修模拟
maintsim的Python项目详细描述
维护sim
maintsim
可用于对离散制造系统建模,其中组件随时间降级并接受维护。用户可以定义系统的配置和参数,以及要执行的维护策略。它建立在simpy
离散事件模拟包上。
安装Maintsim
除了python 3.6+,maintsim还依赖以下包: 工作流首先创建由以下参数定义的PIP安装维护
。计划故障不符合维护能力限制,且未与随机故障一起进行彻底测试。使用此软件包
要求
建立制造系统
系统
对象:配置参数
处理时间
-串行线中每台机器的处理时间列表。间隔时间
-部件到达系统中第一台机器之间的时间。默认值为1,这可确保第一台机器不会饿死。缓冲区大小
-每台机器的缓冲区大小列表,或所有机器的缓冲区大小的整数值。默认值为1。对于n台机器,有n-1个缓冲区。故障参数
故障模式
-当前为"降级"
或无
。每台机器都有相同的降级模式。默认情况下,机器不会降级。
"降级"
-机器降级根据离散状态马尔可夫过程发生。目前只支持马尔可夫退化。需要指定故障参数
,如下小节所述。计划的故障
-模拟时间内发生的计划故障列表。每个窗体(位置、时间、持续时间)
马尔可夫退化参数
使用failure\u params
参数指定降级模式有几个选项,应该作为字典传递。
- 恒定降级速率-作为
降级速率
键的值传递,可以是单个浮点或每台机器的浮点列表。该值是在每个时间步降级一个单位的概率,因此应介于0和1之间。创建上双向退化转换矩阵。 - 失败状态-如果指定了降级率,则每台计算机的最大运行状况(失败)状态可以作为
失败状态
键的值传递。默认失败状态为10。 - 完整的降级转换矩阵-可以指定为一个
numpy
数组(在这种情况下,每台机器将受到相同的降级配置文件)或作为降级转换键的值的每台机器的数组列表。
如果failure_mode='降级'
被传递到系统
对象,则必须定义降级率
或降级转换
。超过恒定降解速率的降解曲线尚未经过彻底测试。
维护参数
维护策略
-当前为'cm'
或'cbm'
。'cm'
-"纠正性维护"是默认策略,根据降级模式的确定,机器只有在完全故障时才能进行维修。'cbm'
-"公司"基于状态的维护",一旦机器的状态达到规定的阈值,就会执行预防性维护。
维护参数-定义指定维护策略的参数。对于
cbm
,计划维护的阈值列表。- 目前每台机器有11个健康状态,0表示完全健康,10表示故障状态。维护阈值应在此范围内。
repair_params
-一个基于修复类型的scipy.stats
冻结的修复时间离散分布的字典。- 例如,
repair_params={'cm':stats.randint(10,20),'cbm':stats.randint(20,40)}
- 例如,
维护容量
可同时执行的最大维护作业数。当前,如果同时计划的维护作业数超过容量,则将以先进先出(FIFO)的方式进行处理。维护成本
-按类型列出每种维护作业的成本字典。
系统状态参数
这些参数可以设置为在模拟之前初始化系统状态。默认情况下,系统以空缓冲区和运行状况良好的计算机开始。
初始剩余处理
-每台机器的剩余处理时间列表。默认情况下,这等于机器没有零件时的总处理时间。初始缓冲区
-每个缓冲区的初始级别列表。初始运行状况
-每台机器的初始运行状况列表。 当前未自动验证初始系统状态的有效设置。
创建自定义维护计划程序
系统
对象可以接受一个附加的调度程序
对象,该对象将确定当要维护的机器数量超过维护容量时如何安排维护作业。默认情况下,系统将使用由scheduler
类定义的fifo调度程序。还可以创建继承自maintsim.scheduler
类的自定义计划程序。这个新类应该包含一个choose\u next
方法,该方法接受当前维护队列作为参数。然后,此方法应返回要分配维护的机器对象列表。每次从作业中释放维护资源时,都会执行choose\u next
方法。
使用蒙特卡罗树搜索的自定义调度程序的示例(由mctsmcts包实现)如下所示:
importmaintsimimportmctsclassMCTSScheduler(maintsim.Scheduler):''' Resolves maintenance scheduling conflicts using Monte Carlo tree search. '''def__init__(self,time_limit=None,iteration_limit=None,**kwds):''' Must specify either a time limit (in seconds) or iteration limit for the MCTS. '''super().__init__(**kwds)self.limit={}iftime_limitanditeration_limit:print('Error: cannot specify time and iteration limit.')eliftime_limit:self.limit['timeLimit']=time_limit*1000else:self.limit['iterationLimit']=iteration_limitdefchoose_next(self,queue):# formulate and solve MCTSmcts_schedule=mcts.mcts(**self.limit)best_action=mcts_schedule.search(initialState=MaintenanceState(self.system))next_machine=[self.system.machines[best_action-1]]returnnext_machine
模拟系统
当系统被实例化时,它将通过创建必要的对象来初始化,这些对象包括simpy环境、维护资源、机器和缓冲区。可以使用以下参数调用
系统的
simulate
方法来运行模拟:
标题
-模拟的平铺,用于命名保存的任何文件。预热时间
采集数据之前模拟运行的时间。有助于在观察前确保系统处于稳定状态。sim_time
-预热完成后模拟运行的持续时间。指标将根据这段时间内的系统性能来确定。seed
-模拟的随机种子。给定的种子应该总是产生相同的结果。详细
-布尔型。true
将打印模拟运行的摘要。false
将抑制所有打印输出,如果正在运行许多复制,则可能首选打印输出。
模拟数据
西弗拉l创建数据帧以记录模拟运行的数据,并存储为系统
对象的属性。状态数据
-每一时间步骤中每台机器的剩余处理时间和缓冲级别。生产数据
-每一时间步每台机器的生产量(单位)和吞吐量(单位/时间)。机器数据
-每一时间步骤中每台机器的状态,包括机器是否正常工作、被阻塞或缺料。队列数据
-每个时间步骤等待维护的机器数。维护数据
-维护活动的日志,包括活动发生的时间、活动类型(纠正、预防等)、活动是什么(故障或维修)、持续时间或故障时间。
迭代模拟
状态数据
-每一时间步骤中每台机器的剩余处理时间和缓冲级别。生产数据
-每一时间步每台机器的生产量(单位)和吞吐量(单位/时间)。机器数据
-每一时间步骤中每台机器的状态,包括机器是否正常工作、被阻塞或缺料。队列数据
-每个时间步骤等待维护的机器数。维护数据
-维护活动的日志,包括活动发生的时间、活动类型(纠正、预防等)、活动是什么(故障或维修)、持续时间或故障时间。一个系统可以使用系统进行多次模拟。迭代模拟法。此方法的参数为:
复制
-运行模拟的次数。预热时间
采集数据之前模拟运行的时间。性能统计信息仅在经过此时间后收集。sim_time
-将模拟每个复制的持续时间。目标
所有复制完成后将返回的目标值。选项包括:生产
-以系统单位表示的生产量。ppl
-指定模拟时间内系统的永久生产损失。可用性
-系统中机器的总体可用性百分比。
verbose
-true
或false
决定是否在完成所有复制后显示摘要统计信息。
一个简单的例子
以下是实施CBM政策的最小示例:
>>>importmaintsim>>>fromscipyimportstats>>>>>>system=maintsim.System(process_times=[3,5,4],...buffer_sizes=5,...failure_mode='degradation',...failure_params={'degradation rate':[0.25,0.1,0.2]},...maintenance_policy='CBM',...maintenance_params={'CBM threshold':[8,6,7]},...repair_params={'CM':stats.randint(20,30),...'CBM':stats.randint(10,20)},...maintenance_capacity=1)>>>system.simulate(warmup_time=100,sim_time=500)Simulationcompletein0.89sUnitsproduced:31Systemavailability:68.93%
计划功能
计划的主要功能包括
- 模拟迭代的并行化
- 提高了迭代模拟的效率
- 导出系统模型以供重用