杨田芳 李孟凯 王丛
摘 要:动车组运用所是负责对动车进行检修、养护等工作的场所,全国已有超过50个动车运用所。动车组的检修根据行驶情况被划分成不同检修等级,不同等级对应不同的工序。在这里我们引用计算机进程中的PV操作,通过Python来实现,S在本题目中即为可提供检修服务的车间资源数量。来解决并发进程间互斥和同步关系,调配资源之间的合理利用。当同一种维修资源被耗尽时,需要这种资源的工序不得不进入阻塞阶段,此时,表示有些进程正在等待该资源,因此要唤醒一个阻塞状态的进程,即直到有其他竞争对手释放足够的资源,此时工序才可以从阻塞中恢复,进入就绪阶段。
关键词:动车组检修;PV操作;资源配置;Python
1 问题描述
如表1所示,不同类型的动车组每个工序需要花费的时间是不一样的。请根据附件中附表一到达动车运用所的动车信息,计算维修完这些动车的总时间。
2 问题分析
车辆检修资源有限,动车与动车之间构成了对于维修车间的竞争互斥关系,每辆动车,都拥有自己的检修状态,以及车辆型号,所以在检修方案规划时,情况复杂,常规方法难以解决。此时我们从问题中抽象出单个动车的自动状态机,将每个动车状态划分为,就绪,维修(运行),与阻塞状态,但是问题假设中,不考虑车辆交换时间,所以问题可以进一步转化为,维修(运行)与阻塞两个状态。
此时提出信号量处理的PV操作方法,1962年,迪克斯特拉数学教授,设计与实现了一种具有多道程序运行能力的操作系统——THE。
在PV操作中,P代表资源占用,当有动车进入S维修工序之前,尝试对S资源进行占用操作,因为本题中,车辆对于维修车间的占用关系比较简单,任意车辆在某一时刻只会占用一个资源,所以当S≥1时,P操作占用资源成功,当S=0时,P操作失败,该动车维修陷入阻塞状态。此时在其他的动车维修进程中,某一个车辆完成了车辆的S检修程序,对S资源进行V释放操作,S资源加1,并解除等待队列中的一个阻塞状态。
PV操作与常规方法相比较有限在于,在一个特定系统中,如果同时运行的进程之间存在着相互制约的同步运行状态,(例如相同时刻,不只有一个动车需要检修),为了避免多个进程在同一时刻在一个临界区域中同时请求不可分割的独立资源时,(同一车间不能同时维修两个车辆),此时根据迪克斯特拉提出的PV同步可以化解,进程与进程之间的复杂关系,從而转化为进程与资源之间的相对简单的占用释放关系。
所以在此基础上,我们只需要考虑,不同车辆对于某一个维修工序的排斥关系,在推广至所有的维修工序,问题迎刃而解,当所有动车顺序完成了所有的检修工作,问题就得到了解决。我们只需要在每个资源中记录下这个资源维修过的车辆,便可以还原出维修方案,同时在每个动车对象中,记录最后一次维修的结束时间,就可以得到动车完成维修的时间,与动车到达时间做差,得到维修总时长。
3 条件假设
(1)假设第一辆动车组抵达动车运用所时,所有检修车间都是空闲的,且车间之间的转换时间忽略不计。
(2)假设执行PV操作时,没有时间延误;
(3)假设进程实现的是先到先服务的系统操作。
4 模型建立与求解
问题2提出不同类型的动车组每个工序需要花费的时间是不一样的。请根据附件中附表一到达动车运用所的动车信息,计算维修完这些动车的总时间。此时我们将每个动车组的维修进程进行绑定,通过PV操作进行不同工序的开展工作,得到从第一辆动车组到达时间(0:16)到最后一辆动车组离开(9:17)所需要的总时间为541分钟(9个小时零1分钟),如表2所示:
5 结语
巧妙地利用计算机进程中的PV操作,摆脱了传统排队模型的影响,从问题中抽象出单个动车的自动状态机,问题可以进一步转化为,维修(运行)与阻塞两个状态这样,我们只需要考虑,不同车辆对于某一个维修工序的排斥关系,在推广至所有的维修工序,问题迎刃而解,当所有动车顺序完成了所有的检修工作,问题就得到了解决。资源中记录下这个资源维修过的车辆,同时在每个动车对象中,记录最后一次维修的结束时间,就可以得到动车完成维修的时间。
参考文献:
[1]《计算方法》科学出版社-教材[M] .2011年7月
[2]清华大学《操作系统》学习笔记[M].
[3]《PV操作经典问题》简书[Z].