本期我们运筹学之网络计划技术的讲解,我们将对网络计划技术的基础知识进行一个简单的回顾,并介绍求解网络计划技术中的节点参数和关键路径的MATLAB和Python相关代码,以帮助大家利用工具快速求解相关问题,做到事半功倍。由于篇幅有限,小编接下来只展示部分代码,小伙伴们可以关注“运筹说”公众号→后台回复“网络计划代码”获取完整代码。话不多说,我们一起来看看吧!
一、基础知识
1、关键路线与工作时间的确定
★关键路线
通常把网络图中需时最长的路叫作关键路线,关键路线上的工作称为关键工作。网络图的关键路线可以通过时间参数的计算求得,总时差为零为关键工作。
工作(i,j)的所需工时可记为t(i,j),有两种确定方法。
★确定型工作时间
在具备工时定额和劳动定额的任务中,工作的工时t(i,j)可以用这些定额资料确定。有些工作虽无定额可查,但有有关工作的统计资料,也可利用统计资料通过分析来确定工作的工时。
★概率型工作时间
(1)定义
对于开发性试制性的任务,往往不具备可用的定额资料,难以准确估计工作所需工时,可以采用三点时间估计法来确定工作的工时。这种方法对每道工作先要作出三种情况的时间估计:即a——最快可能完成时间(最乐观时间);m——最可能完成时间;b——最慢可能完成时间(最悲观时间)。
(2)计算公式
利用上述3个时间a、b、m,可估计每道工作的期望工时:
方差为:
2、事项时间参数
★ 事项的最早时间tE(j)
(1)定义
事项j的最早时间用tE(j)表示,它表明以它为始点的各工作最早可能开始的时间,也表示以它为终点的各工作的最早可能完成时间(相同),它等于从始点事项到该事项的最长路线上所有工作的工时总和。
(2)计算公式
设总开工事项编号为(1),事项最早时间的计算公式为:
其中,式中tE(i)表示与事项j相邻的各紧前事项的最早时间。可令终点事项编号为n,则终点事项的最早时间显然就是整个工程的总最早完工期,即:tE(n)为总最早完工期。
★ 事项的最迟时间tL(i)
(1)定义
事项i的最迟时间用tL(i)表示,它表明在不影响任务总工期条件下,以它为始点的工作的最迟必须开始时间,或以它为终点的各工作的最迟必须完成时间。一般情况下,我们都把任务的最早完工时间作为任务的总工期。
(2)计算公式
事项最迟时间的计算公式为:
其中,tL(j)表示与事项i相邻的各紧后事项的最迟时间。事项最迟时间的计算公式也是递推公式,但与事项最早时间的计算公式相反,是从终点事项开始,按编号由大至小的顺序逐个由后向前计算。
3、工作的时间参数
★ 工作的最早可能开工时间tES(i,j)
一个工作(i,j)的最早可能开工时间用tES(i,j)表示。任何一件工作都必须在其所有紧前工作全部完工后才能开始。计算公式为:
★ 工作的最早可能完工时间tEF(i,j)
工作(i,j)的最早可能完工时间用tEF(i,j)表示。它表示工作按最早开工时间开始所能达到的完工时间。计算公式为:
★ 工作的最迟必须开工时间tLS(i,j)和工作的最迟必须完工时间tLF(i,j)
(1)定义
工作(i,j)的最迟必须开工时间用tLS(i,j)表示。它表示工作(i,j)在不影响整个任务如期完成的前提下,必须开始的最晚时间。工作(i,j)的最迟必须完工时间用tLF(i,j)表示。它表示工作(i,j)按最迟时间开工,所能达到的完工时间。
(2)计算公式
由于这组公式是按工作的最迟必须开工时间由终点向始点逐个递推的公式,因此不能单独分开。计算公式为:
凡是进入总完工事项n的工作(i,n),其最迟完工时间必须等于预定总工期或这个工作的最早可能完工时间。
4、时差
★ 工作的总时差R(i,j)
在不影响任务总工期的条件下,某工作(i,j)可以延迟其开工时间的最大幅度,叫做该工作的总时差。其计算公式为:
★ 工作的单时差r(i,j)
在不影响紧后工作的最早开工时间条件下,此工作可以延迟其开工时间的最大幅度。其计算公式为:
5、时间参数求解算法
★ 问题描述
已知工序明细表G=(w(i,j),t(i,j),Ww(i,j)(m,n))和网络图,包含每项工作w(i,j)的工时t(i,j)和工作w(i,j)的紧前工作Ww(i,j)(m,n)。求G的各项工作时间参数,包括最早可能开工时间tES(i,j),工作的最迟必须开工时间tLS(i,j),总时差R(i,j)和工作总时间,并指出关键路线。
★ 算法流程
二、算法实现
1、例题1
(1)例题介绍
某公司的产前分析网络工程图的工序明细表和网络图如下图所示,求出网络中每个节点的最早开始时间、最迟开始时间、关键路线及所需最短时间。
图1 工序明细表
图2 例一网络图
(2)代码实现
我们以上述例题为例,借助MATLAB介绍实现求解的相关代码。
★ 代码展示
★ 代码调用
代码运行及最终结果展示如下,每个节点的最早开始时间分别为:0,5,10,14,10,31,35,51;每个节点的最迟开始时间分别为:0,6,10,16,10,31,36,51;根据总时差确定关键路线①→③→⑤→⑥→⑧;所需最短的工作总时间为51;
2、例题2
(1)例题介绍
某项产品的制作需要多个步骤工序的实施,现产品的工序明细表和网络图如下所示,求出网络中每个节点的最早开始时间、最迟开始时间、关键路线及所需最短时间。
图3 工序明细表
图4 例二网络图
(2)代码实现
我们以上述例题为例,借助Python介绍实现求解问题的相关代码。
★ 代码展示
★ 代码调用
代码运行及最终结果展示如下,每个节点的最早开始时间分别为:0,3,3,6,6,6,14,11,18;每个节点的最迟开始时间分别为:0,3,6,6,9,12,14,16,18;根据总时差确定关键路线为①→②→③→⑦→⑨→⑩;所需最短的工作总时间为20;
三、参考资料
【网络计划技术节点参数和关键路径的MATLAB实现及优化】
徐永琳,刘露.网络计划技术节点参数和关键路径的MATLAB实现及优化[J].工业仪表与自动化装置,2013(04):26-30.
【根据逻辑关系图以及双代号网络图编写求时间参数】
https://blog.csdn.net/weixin_54627824/article/details/127503757
本期的内容就介绍到这里,想要进一步了解运筹学,关注本公众号,快快学起来吧!
作者 | 尹萌娟 王连聚
责编 | 刘文志
审核 | 徐小峰