第7章 AOE网与关键路径

纵饮孤独 提交于 2019-12-20 11:24:19

【AOE网】

【概念】

与AOV网相对应的是边表示活动的有向无环图 AOE(Activity On Edge) ,如下图所示。

图中顶点表示事件(Event),每个事件表示在其前的所有活动已经完成,其后的活动可以开始;弧表示活动,弧上的权值表示相应活动所需的时间或费用。

与AOE有关的研究问题:

  1. 完成整个工程至少需要多少时间?
  2. 哪些活动是影响工程进度(费用)的关键?

【定义】

v0v_0是起点,从v0v_0viv_i的最长路径长度称为事件viv_i的最早发生时间,即是以viv_i为尾的所有活动的最早发生时间。

若活动aia_i是弧<j,k><j, k>,持续时间是dut(<j,k>)dut(<j, k>),设:

e(i)e(i):表示活动aia_i的最早开始时间。

l(i)l(i):在不影响进度的前提下,表示活动aia_i的最晚开始时间。则l(i)e(i)l(i)-e(i)表示活动aia_i的时间余量,若l(i)e(i)=0l(i)-e(i)=0,表示活动aia_i是关键活动。

ve(i)ve(i):表示事件viv_i的最早发生时间,即从起点到顶点viv_i的最长路径长度;

vl(i)vl(i):表示事件viv_i的最晚发生时间。

对上面的四个定义,有以下三个关系式:

  • 含义是:源点事件的最早发生时间设为00;除源点外,只有进入顶点vjv_j的所有弧所代表的活动全部结束后,事件vjv_j才能发生。即只有vjv_j的所有前驱事件viv_i的最早发生时间ve(i)ve(i)计算出来后,才能计算ve(j)ve(j)

  • 方法是:对所有事件进行拓扑排序,然后依次按拓扑顺序计算每个事件的最早发生时间。

  • 含义是:只有vjv_j的所有后继事件vkv_k的最晚发生时间vl(k)vl(k)计算出来后,才能计算vl(j)vl(j)
  • 方法是:按拓扑排序的逆顺序,依次计算每个事件的最晚发生时间。

数学是美学,算法是艺术。对我这种菜鸡来说,恐怕唯一能做的就是慢慢接受并尝试运用数学形式吧!

【求AOE中关键路径和关键活动】

【算法思想】

① 利用拓扑排序求出AOE网的一个拓扑序列;

② 从拓扑排序的序列的第一个顶点(源点)开始,按拓扑顺序依次计算每个事件的最早发生时间ve(i)ve(i)

③ 从拓扑排序的序列的最后一个顶点(汇点)开始,按逆拓扑顺序依次计算每个事件的最晚发生时间vl(i)vl(i)

【手工分析】

对于上图的AOE网,处理过程如下:

  1. 拓扑排序的序列是:(v0,v1,v2,v3,v4,v5,v6,v7,v8)
  2. 根据上面计算ve(i)ve(i)的公式7-2和计算vl(i)vl(i)的公式7-3 ,计算各个事件的ve(i)ve(i)vl(i)vl(i)值,如下表所示。
  3. 根据上面公式7-1,计算各个活动的e(i)e(i)l(i)l(i),如下表所示。
    在这里插入图片描述
  4. 根据关键路径的定义,知该AOE网的关键路径是: (v0, v2, v4, v7 , v8) 和 (v0, v2, v5 , v7 , v8) 。
  5. 关键路径活动是:<v0, v2>,<v2, v4>,<v2, v5>,<v4, v7>,<v5, v7>,<v7, v8> 。

明白了手工分析,占个坑,代码就先不实现了,后面的几篇代码可能也没时间实现了,准备期末考试。
考完或者下学期有时间补上

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!