background-image: url("../pic/slide-front-page.jpg") class: center,middle exclude: FALSE # 数据、模型与决策</br></br>(Data, Model and Decision) <!--- chakra: libs/remark-latest.min.js ---> ### 胡华平 ### 西北农林科技大学 ### 经济管理学院数量经济教研室 ### huhuaping01@hotmail.com ### 2025-04-01
--- class: center, middle, duke-orange,hide_logo name: chapter09 exclude: FALSE # 第9章 项目安排:</br></br>计划评审法/关键路线法 ### [.white[9.1 活动时间已知的项目安排]](#known) ### [9.2 活动时间不确定的项目安排](#uncertain) ### [9.3 时间与成本抉择](#option) --- layout: false class: center, middle, duke-softblue,hide_logo name: known # 9.1 活动时间已知的项目安排 --- layout: true <div class="my-header-h2"></div> <div class="watermark1"></div> <div class="watermark2"></div> <div class="watermark3"></div> <div class="my-footer"><span>huhuaping@    <a href="#chapter09"> 第09章 项目安排</a>                       <a href="#known">9.1 活动时间已知的项目安排</a> </span></div> --- ## 引子 .fyi[ 计划评审法和关键路径法可用来对大量项目进行计划、安排和控制: - (1)新产品及工艺的研发; - (2)工厂、建筑物及高速公路的建造; - (3)大型复杂设备的维护; - (4)新系统的设计与安装。 ] --- ## 引子 .puzzle[ 管理者必须回答以下问题: - (1)完成该项目总工需要多少事件? - (2)每一特定活动的开始和完成日期? - (3)为了保证项目按计划进行,哪些活动是“极为重要的”,必须严格按照计划完成? - (4)“不重要”的活动最多可延时多长时间完成,而不致影响整个项目的完成时间? ] --- ## 西山购物中心案例:案例背景 .case[ **案例说明**: - 西山购物中心公司(Western Hills Shopping Center)正在计划对现有32个购物中心综合体进行现在化改革并扩张规模。 - 该项目预计能为8-10个新的商业购物中心综合体提供空间 - 所有者要计划、安排、完成这个项目。 ] --- ## 西山购物中心案例:项目活动
--- ## 西山购物中心案例:项目网络图 根据表中给出的活动信息,可以构造一个项目网络图: - 网络中的节点(方形框)代表每项活动,弧(箭头线)代表各项活动之间的优先顺序。 <img src="../pic/chpt09-west-hill-graph.jpg" width="700" style="display: block; margin: auto;" /> --- ## 西山购物中心案例:项目网络图+时间 对项目网络图做一些改动,如下图,在每个节点左上方单元格中都给出了该活动的字母代码,其下方单元格中则列出了完成活动需要的时间。 <img src="../pic/chpt09-west-hill-graph-with-time.png" width="700" style="display: block; margin: auto;" /> --- ## 西山购物中心案例:关键路径 **路径**就是指从起点到终点之间相连节点的序列。 - 为了确定完成项目所需要的时间,必须要找出关键路径。 - 为了完成整个项目,网络中的所有路径都必须相互横越,因此需要找出其中最长的路径,它决定了完成项目与所需要的全部时间。 - 如果最长路径上的活动被延误,那么整个活动完成的时间就会被延误,因此,最长路径即为**关键路径**。 关键路径上的活动称为项目的**关键活动**。 --- ## 西山购物中心案例:定义(ES和EF) 对于一项活动,我们定义: - 最早开始时间(Earliest Start): `\(ES\)` - 最早完成时间(Earliest Finish): `\(EF\)` - 活动时间 `\(t\)` 我们需要对项目网络图进行**向后推进**,计算最早完成时间EF和最早开始时间ES: -------------- > **计算规则1**:一项活动的最早完成时间,等于最早开始时间加上活动时间: `\(EF=ES+t\)` -------------- > **计算规则2**:每项活动的最早开始时间 `\((ES)\)`等于它的所有紧前活动的最早完成时间 `\((EF)\)`的最大值。 -------------- ??? > 如何确定每项活动的最早开始时间ES?如何确定每项活动的最早完成时间EF? --- ### 计算示例0:活动A的最早完成时间 .puzzle[ - 如何确定每项活动的最早开始时间ES?如何确定每项活动的最早完成时间EF? ] - 将每项活动的所需时间 `\(t\)`写在活动代码下方单元格。 - 将每项活动的最早开始时间和最早完成时间写到节点处的右侧单元格。 <img src="../pic/chpt09-key-path-determin-calculate.jpg" width="350px" style="display: block; margin: auto;" /> - 设活动A最早开始时间为0,而完成活动A需要5周,所以活动A的最早完成时间为 `\(EF=5\)`。 --- ### 计算示例1:活动A和B的最早完成时间 下图展示了整个项目网络图的部分(活动A、B、C和H)。 .pull-left[ <img src="../pic/chpt09-key-path-calc-demo- 00.png" width="927" height="450" style="display: block; margin: auto;" /> ] .pull-right[ 观察易知: - 活动A是活动C的唯一紧前活动 - 活动H有两个紧前活动,分别是活动B和活动C ] --- ### 计算示例2:活动A和B的最早完成时间 下图展示了整个项目网络图的部分(活动A、B、C和H)。 .pull-left[ <img src="../pic/chpt09-key-path-calc-demo- 00.png" width="927" height="450" style="display: block; margin: auto;" /> ] .pull-right[ 容易计算: - 活动A的最早完成时间为 `\(EF = ES +t = 0+ 5 =5\)` - 活动B的最早完成时间为 `\(EF = ES +t = 0+ 6 =6\)` ] --- ### 计算示例3:活动C的最早完成时间 下图展示了整个项目网络图的部分(活动A、B、C和H)。 .pull-left[ <img src="../pic/chpt09-key-path-calc-demo- 02.png" width="936" height="450" style="display: block; margin: auto;" /> ] .pull-right[ 进一步计算: - 活动C的最早完成时间为 `\(EF = ES +t = 5+ 4 =9\)` ] --- ### 计算示例4:活动H的最早完成时间 下图展示了整个项目网络图的部分(活动A、B、C和H)。 .pull-left[ <img src="../pic/chpt09-key-path-calc-demo- 02.png" width="936" height="450" style="display: block; margin: auto;" /> ] .pull-right[ 进一步计算: - 活动H的紧前活动有活动B和C,最大的最早完成时间出现在活动C上,即 `\(ES_H=Max(EF_B, EF_C)= EF_C =9\)` - 因此,活动H的最早完成时间为 `\(EF_H = ES_H +t = EF_C +t = 9+ 12 =21\)` ] --- ### 计算示例5:所有活动的最早完成时间 下图展示了整个项目网络图的最早开始时间和最早完成时间。 <img src="../pic/chpt09-key-path-calc-demo- 01.png" width="1232" height="450" style="display: block; margin: auto;" /> --- ## 西山购物中心案例:定义(LS和LF) 对于一项活动,进一步定义: - 最晚开始时间(Latest Start): `\(LS\)` - 最晚完成时间(Latest Finish): `\(LF\)` 我们需要对项目网络图进行**向前逆推**,计算最晚开始时间LS和最晚完成时间LF: -------------- > **计算规则1**:一项活动的最晚开始时间LS,等于最晚完成时间LF减去活动时间t: `\(LS=LF-t\)` -------------- > **计算规则2**:一项活动的最晚完成时间LF,等于其所有**紧后活动**最晚开始时间的.red[**最小值**]。 -------------- ??? > 区隔符号的使用 --- ### 示例1:计算活动I的最晚开始时间LS和最晚完成时间LF - 将一项活动的最晚开始时间LS,写在该活动的最早开始时间ES下方的单元格 - 将一项活动的最晚完成时间LF,写在该活动的最早完成时间EF下方的单元格 <div class="figure" style="text-align: center"> <img src="../pic/chpt09-key-path-LS-LF.png" alt="活动I的LS和LF" width="400" /> <p class="caption">活动I的LS和LF</p> </div> --- ### 示例2:计算活动I的最晚开始时间LS和最晚完成时间LF <img src="../pic/chpt09-key-path-LS-LF-full-H.png" width="630px" style="display: block; margin: auto;" /> 对于活动H:如何计算最晚开始时间和最晚完成时间? -- - 其唯一紧后活动项目为活动I,而活动I的最晚开始时间为 `\(LS_I=24\)`,因此活动H的最晚完成时间等于 `\(LF_H=LS_I=24\)`。 - 又因为活动H的用时为 `\(t_H=12\)`,因此活动H的最晚开始时间为 `\(LS_H = LF_H-t_H=24-12=12\)`。 --- ### 示例3:项目所有活动的最晚开始时间LS和最晚完成时间LF 对于整个项目网络图,我们可以计算出所有活动的最晚开始时间LS和最晚完成时间LF。 <img src="../pic/chpt09-key-path-LS-LF-full.png" width="780" style="display: block; margin: auto;" /> --- ## 西山购物中心案例:松弛(定义) **松弛**(又称时差,slack):是指延误某项活动的活动时间而又不影响项目整体完工时间的时间长度。其计算公式为: `$$Slack =LS-ES=LF-EF$$` --- ### 示例1:活动C的松弛量计算 <img src="../pic/chpt09-key-path-LS-LF-full-CE.png" width="700" style="display: block; margin: auto;" /> 对于活动C: -- - 活动C的松弛量 `\(Slack_C =LS-ES=8-5=3\)`,或者 `\(Slack_C =LF-EF=12-9=3\)`。 - 也即活动C可以最多延误3周完成,而又不影响整个项目的计划完成时间。 --- ### 示例2:活动E的松弛量计算 <img src="../pic/chpt09-key-path-LS-LF-full-CE.png" width="700" style="display: block; margin: auto;" /> 对于活动E: -- - 活动E的松弛量 `\(Slack_E =LS-ES=5-5=0\)`,或者 `\(Slack_E =LF-EF=6-6=0\)`。 - 活动E没有任何松弛,为了不影响整个项目的计划完成时间,活动E不能有任何延误。 --- ## 西山购物中心案例:关键活动(定义) **关键活动**(又称重要活动):是指没有任何松弛的活动。也即: `$$ES=LS, \quad \text{or} \quad EF=LF$$` .case[ 例如: - 前述计算中,活动C有3周的松弛量 `\((Slack_C =LS-ES=8-5=3)\)`,因此活动C可以最多延误3周完成,而又不影响整个项目的计划完成时间。因此,从这个角度来看,活动C对于整个项目能否按期完成并不是那么重要。 - 前述计算中,活动E没有任何松弛量 `\((Slack_E =LS-ES=5-5=0)\)`,为了不影响整个项目的计划完成时间,活动E不能有任何延误。因此,从这个角度来看,活动E对于整个项目能否按期完成非常重要,因此是整个项目的**关键活动**之一! ] --- ### 示例1:找到整个项目的所有关键活动 <div class="figure" style="text-align: center"> <img src="../pic/chpt09-key-path-LS-LF-full.png" alt="西山购物中心项目路径图" width="800" /> <p class="caption">西山购物中心项目路径图</p> </div> --- ### 示例2:找到整个项目的所有关键活动
--- ### 示例3:找到整个项目的所有关键活动 <img src="../pic/chpt09-key-path-LS-LF-full-all-keys.png" width="700" style="display: block; margin: auto;" /> - 活动A、E、F、G、I都没有任何松弛量 `\((Slack = 0)\)` - 因此这五项活动都是西山购物中心整个项目路径图的**关键活动**! - 这也进一步意味着:这些关键活动之前的**非关键活动**所能容忍的最大松弛量(或延误时间),都可能会增加整体项目的完工时间! --- ## 西山购物中心案例:确定关键路径 根据以上规则和算法,我们可以为所有活动建立最早开始时间和最早完成时间: <img src="../pic/chpt09-key-path-calc-demo- 03.png" width="750" style="display: block; margin: auto;" /> > 最后一项活动I的最早完成时间是26 `\((EF=26)\)`,因此整个项目的完成时间为26周。 --- ## PERT/CPM关键路径程序:理论步骤 .notes[ 下面,简单总结一下PERT/CPM关键路径程序的主要步骤: - (1)列出组成项目的活动清单 - (2)确定每项活动的紧前活动 - (3)估计每项活动的完成时间 - (4)画出项目网络图,描述在第1步和第2步中列出的活动及其紧前活动。 - (5)利用项目网络图和活动时间估计,通过向前推的方法,确定每项活动的最早开始时间和最早完成时间。最后一项活动的最早完成时间也就是项目的完成时间。 ] --- ## PERT/CPM关键路径程序:理论步骤 .notes[ 下面,简单总结一下PERT/CPM关键路径程序的主要步骤: - (6)将在第5步中求出的项目完成时间作为最后一项活动的最晚完成时间,利用向后逆推的方法,确定每项活动的最晚开始时间和最晚完成时间。 - (7)比较每项活动的最早开始时间和最晚开始时间,确定松弛。 - (8)找出所有松弛为0的活动,这些活动就是关键活动。 - (9)利用从第5步和第6步中取得的信息为项目设计活动安排。 ] --- ### PERT/CPM关键路径程序:实操步骤1 - **步骤1**:打开管理科学家软件,选择分析模块`7. PERT/CPM`。 <img src="../pic/seq-chpt09-cpm/chpt09-cmp-hill-seq-001.jpg" width="700" style="display: block; margin: auto;" /> --- ### PERT/CPM关键路径程序:实操步骤2 - **步骤2**:新建路径分析工作文件。 <img src="../pic/seq-chpt09-cpm/chpt09-cmp-hill-seq-002.jpg" width="630" style="display: block; margin: auto;" /> --- ### PERT/CPM关键路径程序:实操步骤3 - **步骤3**:确定分析类型,选择`Known Activity Times`;设定活动数量。 <img src="../pic/seq-chpt09-cpm/chpt09-cmp-hill-seq-003.jpg" width="630" style="display: block; margin: auto;" /> --- ### PERT/CPM关键路径程序:实操步骤4 - **步骤4**:设定各活动的所需时间;设定各活动的紧前活动都有哪些。 <img src="../pic/seq-chpt09-cpm/chpt09-cmp-hill-seq-004.jpg" width="630" style="display: block; margin: auto;" /> --- ### PERT/CPM关键路径程序:实操步骤5 - **步骤5**:点击开始求解。 <img src="../pic/seq-chpt09-cpm/chpt09-cmp-hill-seq-005.jpg" width="630" style="display: block; margin: auto;" /> --- ### PERT/CPM关键路径程序:实操步骤6 - **步骤6**:得到求解分析结果。 <img src="../pic/seq-chpt09-cpm/chpt09-cmp-hill-seq-006.jpg" width="630" style="display: block; margin: auto;" /> --- ### PERT/CPM关键路径程序:实操步骤7 - **步骤7**:把问题分析过程,保存下来。 <img src="../pic/seq-chpt09-cpm/chpt09-cmp-hill-seq-007.jpg" width="630" style="display: block; margin: auto;" /> --- ### PERT/CPM关键路径程序:实操步骤8 - **步骤8**:把工作文件保存到电脑中,给文件命名。以后可以直接用管理科学家软件再打开分析文件,方便进行查看或修改。 <img src="../pic/seq-chpt09-cpm/chpt09-cmp-hill-seq-008.jpg" width="700" style="display: block; margin: auto;" /> --- layout:false background-image: url("../pic/thank-you-gif-funny-fan.gif") class: inverse,center # 本节结束