background-image: url("../pic/slide-front-page.jpg") class: center,middle # 数据、模型与决策</br></br>(Data, Model and Decision) <!--- chakra: libs/remark-latest.min.js ---> ### 胡华平 ### 西北农林科技大学 ### 经济管理学院数量经济教研室 ### huhuaping01@hotmail.com ### 2022-04-29
<!--- control all child title and chapter slide----> --- class: center, middle, duke-orange,hide_logo name: chapter09 # 第9章 项目安排:</br></br>计划评审法/关键路线法 ### [9.1 活动时间已知的项目安排](#known) ### [9.2 活动时间不确定的项目安排](#uncertain) ### [9.3 时间与成本抉择](#option) --- background-image: url("../pic/slide-front-page.jpg") class: center,middle exclude: TRUE # 数据、模型与决策</br></br>(Data, Model and Decision) <!--- chakra: libs/remark-latest.min.js ---> ### 胡华平 ### 西北农林科技大学 ### 经济管理学院数量经济教研室 ### huhuaping01@hotmail.com ### 2022-04-29
--- class: center, middle, duke-orange,hide_logo name: chapter09 exclude: TRUE # 第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="400" 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="650" 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 # 本节结束 --- background-image: url("../pic/slide-front-page.jpg") class: center,middle exclude: TRUE # 数据、模型与决策</br></br>(Data, Model and Decision) <!--- chakra: libs/remark-latest.min.js ---> ### 胡华平 ### 西北农林科技大学 ### 经济管理学院数量经济教研室 ### huhuaping01@hotmail.com ### 2022-04-29
--- class: center, middle, duke-orange,hide_logo name: chapter09 exclude: TRUE # 第9章 项目安排:</br></br>计划评审法/关键路线法 ### [9.1 活动时间已知的项目安排](#known) ### [.white[9.2 活动时间不确定的项目安排]](#uncertain) ### [9.3 时间与成本抉择](#option) --- layout: false class: center, middle, duke-softblue,hide_logo name: uncertain # 9.2 活动时间不确定的项目安排 --- 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="#uncertain">9.2 活动时间不确定的项目安排</a> </span></div> --- ## 道特公司吸尘器案例:背景 .case[ **案例说明**: - 道特公司管理层希望对无绳吸尘器这种产品制造的可行性进行研究,以便决定是否生产该产品。 - 为了完成可行性研究,公司需要从研发部门、产品测试部、生产部、成品估计部和市场调查部获取足够的信息。 ] --- ## 道特公司吸尘器案例:项目活动
--- ## 道特公司吸尘器案例:网络图 根据表中给出的活动信息,可以构造一个项目网络图: - 网络中的节点(方形框)代表每项活动,弧(箭头线)代表各项活动之间的优先顺序。 <img src="../pic/chpt09-PV-network-path-raw.png" width="750" style="display: block; margin: auto;" /> --- ## 道特公司吸尘器案例:时间不确定性的类型 .fyi[ 为了对不确定活动进行分析,需要获取每项活动的3个估计时间: - 乐观的估计时间a:每项活动都能顺利进行的最小活动时间 - 最可能的估计时间m:一般状态下最可能的活动时间 - 悲观的估计时间b:遭遇重大延误时的最大活动时间 ] - 而且假设估计时间t服从期望 `\(E(t)\)`和方差 `\(var(t) \equiv \sigma^2_t\)`如下的 `\(\beta\)`分布: `$$\begin{align} E(t) &= \frac{a +4m +b}{6} \\ var(t) \equiv \sigma^2_t &= \left(\frac{b-a}{6} \right)^2 \end{align}$$` --- ### 活动时间不确定性:数据表
??? 道特公司吸尘器项目活动的可能时间 --- ### 活动时间不确定性:计算活动A的期望时间及方差 根据上述数据表,我们可以计算得到活动A的期望时间和方差: - A的期望活动时间: `$$\begin{align} E(t)_A &= \frac{a +4m +b}{6} = \frac{4 +4\times5 +12}{6} = 6\\ \end{align}$$` - A活动时间的方差: `$$\begin{align} var(t)_A \equiv \sigma^2_{t,A} &= \left(\frac{b-a}{6} \right)^2 =\left(\frac{12-4}{6} \right)^2 = 1.78 \end{align}$$` --- ### 活动时间不确定性:计算活动A的期望时间及方差 考虑到活动时间不确定性是建立在 `\(\beta\)`概率分布假设基础上的,我们可以将活动A的时间不确定性做如下展示: <img src="../pic/chpt09-PV-A-Et.png" width="700" style="display: block; margin: auto;" /> 类似地,我们可以计算出其他所有活动的期望时间和方差(见下一页)。 --- ### 活动时间不确定性:计算期望时间及方差
--- ## 道特公司吸尘器案例:关键路径 .fyi[ 当我们知道了项目网络图和每项活动的期望活动时间后,就可以确定项目的关键路径,以便确定完成整个项目的期望时间和活动时间表,进而找出关键活动和关键路径。 ] 具体思路如下: - 在计算时,将期望活动时间视为固定值或已知值。利用前述方法求关键路径,之后分析活动时间方差的影响。 - 利用**向后推进**法求出每项活动的最早开始时间ES和最早完成时间EF - 利用**向前逆推**法,求出每项活动的最晚开始时间LS和最晚完成时间LF。 - 计算各项活动的**松弛量**,以确定整个项目的所有**关键活动** - 依据**关键活动**,找出项目的**关键路径**! --- ### 道特公司吸尘器案例:活动时间
--- ### 道特公司吸尘器案例:路径网络图(给出活动时间) - 根据数据表,给出道特公司吸尘器项目所有活动的期望时间E(t)。 <img src="../pic/chpt09-PV-path-network-with-time.png" width="850" style="display: block; margin: auto;" /> --- ### 道特公司吸尘器案例:路径网络图(计算出ES和EF) - 利用“向后推进”法,计算得到道特公司吸尘器项目所有活动的最早开始时间ES和最早完成时间EF。 <img src="../pic/chpt09-PV-network-path-ES-EF.png" width="850" style="display: block; margin: auto;" /> --- ### 道特公司吸尘器案例:路径网络图(计算出LS和LF) - 利用“向前逆推”法,计算得到道特公司吸尘器项目所有活动的最晚开始时间LS和最晚完成时间LF。 <img src="../pic/chpt09-PV-network-path-LS-LF.png" width="850" style="display: block; margin: auto;" /> --- ### 计算所有活动的松弛量和所有关键活动
--- ### 找到整个项目的所有关键活动 <img src="../pic/chpt09-PV-network-path-keys.png" width="700" style="display: block; margin: auto;" /> - 活动A、E、H、I、J都没有任何松弛量 `\((Slack = 0)\)` - 因此这五项活动都是道特公司吸尘器项目路径图的**关键活动**! - 这也进一步意味着:这些关键活动之前的**非关键活动**所能容忍的最大松弛量(或延误时间),都可能会增加整体项目的完工时间! --- ### 道特公司吸尘器案例:项目完成时间的方差 .notes[ 关键路径上活动时间的方差可能会导致项目总体完成时间的方差。 因此,我们将使用关键路径活动时间的方差来确定项目总体完成时间的方差。 - 用T来表示完成整个项目所需要的总时间,则T的期望值就是所有关键活动期望完成时间之和。 - 项目完成时间的方差就等于所有关键路径活动时间方差之和。 ] --- exclude:true ## R chunk: 4条路径的概率计算 --- ## 道特公司吸尘器案例:路径的时间期望和方差 我们重点观察如下四条关键路径: - 路径1: `\(A \Rightarrow E \Rightarrow H \Rightarrow I \Rightarrow J\)` - 路径2: `\(A \Rightarrow C \Rightarrow F \Rightarrow J\)` - 路径3: `\(A \Rightarrow D \Rightarrow G \Rightarrow J\)` - 路径4: `\(B \Rightarrow H \Rightarrow I \Rightarrow J\)` --- ## 道特公司吸尘器案例:路径的时间期望和方差
--- ### 路径1的计算:活动的期望时长和方差(数据形式1) 下面我们先计算路径1: `\(A \Rightarrow E \Rightarrow H \Rightarrow I \Rightarrow J\)`活动时间的期望和方差。
.footnote[ **说明**:其他路径可以类似计算得到 ] --- ### 路径1的计算:活动的期望时长和方差(数据形式2) 下面我们先计算路径1: `\(A \Rightarrow E \Rightarrow H \Rightarrow I \Rightarrow J\)`活动时间的期望和方差。
--- ### 路径1的计算:方案期望总时长和方案时长方差 利用上述数据表,我们可以计算得到: - 路径1的期望总时长为17周: `$$\begin{align} E\left(T_{1}\right)=t_{\mathrm{A}}+t_{\mathrm{E}}+t_{\mathrm{H}}+t_{\mathrm{I}}+t_{\mathrm{J}}=6+3+4+2+2=17 \end{align}$$` - 路径1的各项活动时长的方差为2.72周 `\(^2\)`: `$$\begin{align} \sigma_{1}^{2}=\sigma_{\mathrm{A}}^{2}+\sigma_{\mathrm{E}}^{2}+\sigma_{\mathrm{H}}^{2}+\sigma_{\mathrm{I}}^{2}+\sigma_{\mathrm{J}}^{2}=1.78+0.11+0.69+0.03+0.11=2.72 \end{align}$$` - 路径1的各项活动时长的标准差为1.65周: `$$\begin{align} \sigma_{1}=\sqrt{\sigma_1^2}=\sqrt{2.72} =1.65 \end{align}$$` --- ### 路径1的计算:限期要求与完成的概率 .puzzle[ 道特公司管理层希望计划在20周之内完成吸尘器项目,那么路径1的进度方案满足这个20周期限的概率是多少呢? ] .pull-left[ <img src="../pic/chpt09-PV-z-distribution-demo01.png" width="876" height="400" style="display: block; margin: auto;" /> ] .pull-right[ - 假设项目完成时间T服从正态分布(钟形分布),那么我们就可以利用这个分布图,计算得到满足特定完成期限要求的概率。 ] --- ### 路径1的计算:正态分布与概率计算 .puzzle[ 道特公司管理层希望计划在20周之内完成吸尘器项目,那么路径1的进度方案满足这个20周期限的概率是多少呢? ] .pull-left[ <img src="../pic/chpt09-PV-z-distribution-demo02.png" width="871" height="400" style="display: block; margin: auto;" /> ] .pull-right[ - 如果T服从正态分布,则可以构造出一个标准正态分布 `$$\begin{align} T &\sim N(E(T), \sigma^2) \\ Z = \frac{T-E(T)}{\sigma} &\sim N(0, 1 ) \end{align}$$` - 若期限设定为 `\(T=20\)`周,则通过计算可得到统计量 `\(Z^* = \frac{20-17}{1.65}=1.82\)` - 最后通过正态分布概率查表,可以得到期限内完成的概率值 `\(p =0.9655\)` ] --- ### 全部路径方案的计算:正态分布与概率计算(独立概率) 根据同样的方法,我们可以算出在给定期限 `\(T=20\)`周的要求下,全部4条安排方案都达到要求的概率值。
- 注意,这里计算得到的概率,是4条路径安排方案各自独立运行下,能在限期 `\(T=20\)`周内都能完成的独立概率。 --- ### 全部路径方案的计算:回看所有路径 <img src="../pic/chpt09-PV-network-path-keys.png" width="1533" height="520" style="display: block; margin: auto;" /> --- ### 全部路径方案的计算:正态分布与概率计算(联合概率) 如果4条方案同时进行,那么限期 `\(T=20\)`周内都能完成的联合概率又是多少呢?
我们可以根据下式计算得到联合概率为: `$$\begin{align} P_{all} &= \prod_{i=1}^4{P_i}=P_1\times P_2\times P_3\times P_4\\ & = 0.9655\times 1.0000\times 0.9784\times 1.0000 = 0.9446 \end{align}$$` --- ### 管理科学家软件:PERT/CPM关键路径程序 .notes[ 下面,我们还需要使用管理科学家软件,对活动时间不确定的项目安排,进行操作和训练。 ] --- layout:false background-image: url("../pic/thank-you-gif-funny-fan.gif") class: inverse,center # 本节结束 --- background-image: url("../pic/slide-front-page.jpg") class: center,middle exclude: TRUE # 数据、模型与决策</br></br>(Data, Model and Decision) <!--- chakra: libs/remark-latest.min.js ---> ### 胡华平 ### 西北农林科技大学 ### 经济管理学院数量经济教研室 ### huhuaping01@hotmail.com ### 2022-04-29
--- class: center, middle, duke-orange,hide_logo name: chapter09 exclude: TRUE # 第9章 项目安排:</br></br>计划评审法/关键路线法 ### [9.1 活动时间已知的项目安排](#known) ### [9.2 活动时间不确定的项目安排](#uncertain) ### [.white[9.3 时间与成本抉择]](#option) --- layout: false class: center, middle, duke-softblue,hide_logo name: option # 9.3节 时间与成本抉择 --- 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="#option">9.3 时间与成本抉择</a> </span></div> --- ## 引子 .fyi[ **思考**: - 关键路径法的设计为项目经理提供了增加资源以减少项目完成时间的方法。 - 增加资源一般都会增加项目成本,所以项目经理不得不在减少活动时间和增加额外成本之间做出抉择。 ] --- exclude: true ## R chunk: 项目活动 --- ## 机器维修项目:项目活动 下表描述了一项由5项活动构成的双机器维修项目:
--- ## 机器维修项目:项目网络图 根据表中给出的活动信息,可以构造一个项目网络图: - 网络中的节点(方形框)代表每项活动,弧(箭头线)代表各项活动之间的优先顺序。 <img src="../pic/chpt09-case-cost-network-path-time.png" width="1000" style="display: block; margin: auto;" /> --- ### 机器维修项目:找到整个项目的所有关键活动 根据活动时间确定情形下的项目时间相关计算,我们可以得到下表:
- 关键活动有3项,分别是活动A、B和E。 - 关键路径为 `\(A \Rightarrow B \Rightarrow E\)`,路径长度为 `\(7+3+2=12\)`天。 --- ### 机器维修项目:管理层关注的问题 .fyi[ **项目现实情况:** - 我们假设当前的生产水平要求该维修项目必须在10天之内完成。 - 考虑到项目网络的关键路径长度为12天,我们认识到除非能够缩短活动的已知时间,否则要满足期望的不可能的。 - 这通常可以靠增加资源来缩减活动时间,这种方法就是紧缩(crashing) - 但是,增加额外的资源来缩短活动时间,通常会导致项目成本的增加。 ] .puzzle[ **管理层的关注**: - 那么,如何做到只需要最小资源的增加,就能达到紧缩活动时间的目的呢? ] --- ### 机器维修项目:紧缩活动时间 靠增加资源来缩减活动时间的方法就是所谓的**紧缩**(crashing),也称为**紧缩活动时间**。 .case[ > 例如:总工期是12天,希望10天完成,需要缩短工期2天。 ] 此时,我们需要先得到如下的信息 - 正常或期望时间下的活动成本 - 在最大紧缩时间内完成活动那个的时间(最短可能的活动时间) - 最大紧缩时间下的活动成本 --- ### 机器维修项目:紧缩活动时间(定义) 下面给出其他相关定义: .pull-left[ - `\(\tau_i\)`:活动 `\(i\)`的正常时间(期望时间) - `\(\tau_i'\)`:活动 `\(i\)`的最短时间(最大紧缩下的时间) - `\(M_i\)`:活动 `\(i\)`的最大压缩时间 - `\(C_i\)`:活动 `\(i\)`的正常费用(无紧缩) - `\(C_i'\)`:活动 `\(i\)`在最大紧缩时间下的费用 ] .pull-right[ - 最大压缩时间: `\(M_i = \tau_i - \tau_i'\)` - 每项活动在单位时间上的紧缩成本: `\(K_i=\frac{(C_i'-C_i)}{M_i}\)` ] --- ### 机器维修项目:紧缩活动时间(示例) .case[ 已知如下信息: - 给定活动A的正常完成时间 `\(\tau_A=7\)`天,正常的活动费用为 `\(C_A=500\)`美元。 - 而在最大紧缩状态下,活动A的最短完成时间 `\(\tau_A'=4\)`天,但费用会增加到 `\(C_A'=800\)`美元。 我们可以计算得到: - 最大压缩时间 `\(M_A=\tau_A - \tau_A^{\prime}=7-4=3\)` - 单位时间的紧缩成本为 `\(K_A=\frac{(C_A^{\prime}-C_A)}{M_A} = K_i=\frac{(800-800)}{3}=100\)`(美元/每天) ] --- exclude: true ## R chunk: 紧缩计算 --- ### 机器维修项目:时间与成本的关系
.fyi[ **思考**:为了以最小成本在10天期限内完成整个项目,哪些活动应该被紧缩?紧缩多少时间? ] --- ### 机器维修项目:紧缩方案的一个试错修改 为了以最小的成本在10天内完成,我们可能会最先考虑: - 应该紧缩关键路径上的活动,即A、B、E。 - 而活动A在这3项活动中具有**最低**的单位紧缩成本 `\((K_A=100)\)` - 因此将活动A紧缩2天可以使路径A-B-E的完成时间缩减为期望的10天。 .notes[ **注意**: - 当对现在的关键活动进行紧缩时,关键路径可能会改变 - 因此需要检查修改后网络中的关键路径 - 也许会你会发现其实是可以紧缩其他活动或是修改先前的决定 - 对于小型项目网络,我们或许可以多次试错修改,但是对于复杂大型项目则会变得很困难! ] --- ## 紧缩时间后的线性规划模型:问题描述 .puzzle[ > 如何运用线性规划方法,系统分析项目网络的紧缩问题? ] 下面我们需要先进行问题描述。在PERT/CPM中,我们知道: - 完成时间=最早开始时间+活动时间。也即 `\(EF= ES+t\)` - 如果活动具有松弛时间,则:完成时间>最早开始时间+活动时间。也即: `$$LF > (EF = ES +t)$$` - 由于我们不可能提前知道一项活动是否会于最早开始时间开始,则:完成时间≥最早开始时间+活动时间。也即: `$$LF \geq (EF = ES +t)$$` --- ### 线性规模模型示例:活动A 对于一项活动,我们可以给出如下定义: - `\(x_i\)`:活动i的最早完成时间 `\((EF_i)\)` - `\(y_i\)`:活动i的最大紧缩时间 `\(M_i =(\tau_i - \tau_i^{\prime})\)` --- ### 线性规模模型示例:活动A 对于活动A: .pull-left[ - 活动A最早开始时间为 `\(ES_A=0\)`,正常活动时间为 `\(\tau_A=7\)`。 - 那么A正常的最早完成时间为 `$$x_A = EF_A = ES_A + \tau_A = 0+7 = 7$$` - 同时,活动A在紧缩状态下的最早完成时间为 `$$\begin{align} x_A^{\prime} &= ES_A + \tau_A^{\prime} \\ &= ES_A + (\tau_A - M_A) = ES_A + (\tau_A - y_A) \\ &= 0+(7 - y_A ) \end{align}$$` ] .pull-right[ - 那么,活动A的最早完成时间,正常状态下应该要比紧缩状态下更长。因此有: `$$\begin{align} x_A & \geq x_A^{\prime} \\ x_A &\geq 0+(7 - y_A )\\ x_A + y_A &\geq 7 \end{align}$$` ] --- ### 线性规模模型示例:全部活动的约束条件 首先,我们需要考虑所有活动面临的约束条件: .pull-left[ - 照前述方法,可以得到所有活动的如下关系: `$$\begin{align} x_A + y_A &\geq 7 && \text{(A)} \\ x_B + y_B - x_A &\geq 3 && \text{(B)} \\ x_C + y_C &\geq 6 && \text{(C)} \\ x_D + y_D - x_C &\geq 3 && \text{(D)} \\ x_E + y_E - x_B &\geq 2 && \text{(E1)} \\ x_E + y_E - x_D &\geq 2 && \text{(E2)} \\ \end{align}$$` ] .pull-right[ - 此外,我们还要求,项目必须在10天之内完成,因此需要约束活动活动E的完成时间: `$$x_E \leq 10$$` - 而且,每项活动都有最大紧缩时间的约束: $$ y_A \leq 3; y_B \leq 1; y_C \leq 2; y_D \leq 2; y_E \leq 1$$ ] .footnote[ **注意**:由于活动E有两个紧前活动(B和D),因此活动E有两个约束条件。 ] --- ### 线性规模模型示例:目标函数 .fyi[ - 在正常状态下,项目的总成本为1700美元。 - 而在紧缩状态下,我们可以通过最小化**总紧缩成本**来最小化**项目总成本**(=正常成本+总紧缩成本)。 ] 最终我们得到如下的最小化目标函数: `$$\begin{align} \textrm{Min} \quad f&=\sum_{i = 1}^{5}{K_i\cdot M_i} \\ & = K_i\cdot M_A + K_B\cdot M_B + K_C\cdot M_C + K_D\cdot M_D + K_E\cdot M_E \\ & = 100\cdot y_A + 150\cdot y_B + 200\cdot y_C + 150\cdot y_D + 250\cdot y_E \end{align}$$` --- ### 线性规模模型示例:整个规划模型 最终我们得到了具有10个变量和12个约束条件的线性规划模型: `$$\begin{align} \textrm{Min} \quad f&= 100\cdot y_A + 150\cdot y_B + 200\cdot y_C + 150\cdot y_D + 250\cdot y_E \end{align}$$` > s.t. `$$\begin{align} x_A + y_A &\geq 7 && \text{(A)} \\ x_B + y_B - x_A &\geq 3 && \text{(B)} \\ x_C + y_C &\geq 6 && \text{(C)} \\ x_D + y_D - x_C &\geq 3 && \text{(D)} \\ x_E + y_E - x_B &\geq 2 && \text{(E1)} \\ x_E + y_E - x_D &\geq 2 && \text{(E2)} \\ x_E & \leq 10 &&\\ y_A \leq 3; y_B \leq 1; y_C \leq 2; y_D \leq 2; y_E &\leq 1 && \end{align}$$` --- ### 线性规模模型示例:MST分析结果及解读 采用管理科学家软件MST对线性规划模型求解结果: <table class="table" style="margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:center;"> 活动代码 </th> <th style="text-align:center;"> 正常时间T_i </th> <th style="text-align:center;"> 紧缩时间T_i' </th> <th style="text-align:center;"> 正常费用C_i </th> <th style="text-align:center;"> 紧缩费用C_i' </th> <th style="text-align:center;"> 最大紧缩时间M_i </th> <th style="text-align:center;"> 单位紧缩费用K_i </th> <th style="text-align:center;"> 最优时间解 </th> <th style="text-align:center;"> 紧缩量K_i </th> </tr> </thead> <tbody> <tr> <td style="text-align:center;"> A </td> <td style="text-align:center;"> 7 </td> <td style="text-align:center;"> 4 </td> <td style="text-align:center;"> 500 </td> <td style="text-align:center;"> 800 </td> <td style="text-align:center;"> 3 </td> <td style="text-align:center;"> 100 </td> <td style="text-align:center;color: red !important;background-color: yellow !important;"> 6 </td> <td style="text-align:center;color: red !important;background-color: yellow !important;"> 1 </td> </tr> <tr> <td style="text-align:center;"> B </td> <td style="text-align:center;"> 3 </td> <td style="text-align:center;"> 2 </td> <td style="text-align:center;"> 200 </td> <td style="text-align:center;"> 350 </td> <td style="text-align:center;"> 1 </td> <td style="text-align:center;"> 150 </td> <td style="text-align:center;color: red !important;background-color: yellow !important;"> 3 </td> <td style="text-align:center;color: red !important;background-color: yellow !important;"> 0 </td> </tr> <tr> <td style="text-align:center;"> C </td> <td style="text-align:center;"> 6 </td> <td style="text-align:center;"> 4 </td> <td style="text-align:center;"> 500 </td> <td style="text-align:center;"> 900 </td> <td style="text-align:center;"> 2 </td> <td style="text-align:center;"> 200 </td> <td style="text-align:center;color: red !important;background-color: yellow !important;"> 6 </td> <td style="text-align:center;color: red !important;background-color: yellow !important;"> 0 </td> </tr> <tr> <td style="text-align:center;"> D </td> <td style="text-align:center;"> 3 </td> <td style="text-align:center;"> 1 </td> <td style="text-align:center;"> 200 </td> <td style="text-align:center;"> 500 </td> <td style="text-align:center;"> 2 </td> <td style="text-align:center;"> 150 </td> <td style="text-align:center;color: red !important;background-color: yellow !important;"> 3 </td> <td style="text-align:center;color: red !important;background-color: yellow !important;"> 0 </td> </tr> <tr> <td style="text-align:center;"> E </td> <td style="text-align:center;"> 2 </td> <td style="text-align:center;"> 1 </td> <td style="text-align:center;"> 300 </td> <td style="text-align:center;"> 550 </td> <td style="text-align:center;"> 1 </td> <td style="text-align:center;"> 250 </td> <td style="text-align:center;color: red !important;background-color: yellow !important;"> 1 </td> <td style="text-align:center;color: red !important;background-color: yellow !important;"> 1 </td> </tr> <tr> <td style="text-align:center;"> 合计 </td> <td style="text-align:center;"> 21 </td> <td style="text-align:center;"> 12 </td> <td style="text-align:center;"> 1700 </td> <td style="text-align:center;"> 3100 </td> <td style="text-align:center;"> 9 </td> <td style="text-align:center;"> 850 </td> <td style="text-align:center;color: red !important;background-color: yellow !important;"> 19 </td> <td style="text-align:center;color: red !important;background-color: yellow !important;"> 2 </td> </tr> </tbody> </table> 结果解读: -- - 活动A和活动E最终活动时间分别为6天和1天,比正常状态下分别紧缩了1天时间。 - 总紧缩成本为 `\(K_A \cdot y_A +K_E \cdot y_E = 100 \times 1 +250 \times1 = 350\)` - 因此,正常状态下的项目总成本为1700美元,而紧缩状态下项目总成本为1700+350 = 2050美元。 --- ## 紧缩时间后的线性规划模型:评析 .notes[ - 线性规划解为我们提供了修改后的活动时间,但没有提供修改后的最早开始时间,最晚开始时间和松弛等信息。 - 我们必须用修改后的活动时间和一般的PERT/CPM方法来设计项目的活动时间安排表。 ] --- ### MST-LP线性规划求解:实操步骤1 - **步骤1**:打开管理科学家软件,选择分析模块`4. Integer Linear Programming`。 <img src="../pic/seq-chpt09-crash-LP/chpt09-crash-lp-seq- 01.jpg" width="680" style="display: block; margin: auto;" /> --- ### MST-LP线性规划求解:实操步骤2 - **步骤2**:新建线性规划分析工作;设定相关参数。 <img src="../pic/seq-chpt09-crash-LP/chpt09-crash-lp-seq- 02.jpg" width="730" style="display: block; margin: auto;" /> --- ### MST-LP线性规划求解:实操步骤3 - **步骤3**:根据线性约束模型,填写相关参数;设定求解参数。 <img src="../pic/seq-chpt09-crash-LP/chpt09-crash-lp-seq- 03.jpg" width="1030" style="display: block; margin: auto;" /> --- ### MST-LP线性规划求解:实操步骤4 - **步骤4**:得到线性规划求解结果。 <img src="../pic/seq-chpt09-crash-LP/chpt09-crash-lp-seq- 04.jpg" width="500" style="display: block; margin: auto;" /> --- ### MST-LP线性规划求解:实操步骤5 - **步骤5**:把问题分析过程,保存下来。 <img src="../pic/seq-chpt09-crash-LP/chpt09-crash-lp-seq- 05.jpg" width="730" style="display: block; margin: auto;" /> --- layout:false background-image: url("../pic/thank-you-gif-funny-fan.gif") class: inverse,center # 本节结束 --- layout:false background-image: url("../pic/thank-you-gif-funny-little-yellow.gif") class: inverse,center # 本章结束