用线性规划建模(确定参数)关键路径法

关键路径法(CPM)又称为网络计划法,是项目管理的基本方法。项目管理关心项目的执行时间和执行费用等问题,首先的是项目的总工期,其次是组成项目的工作的开始完成时间和结束完成时间及其对总工期的影响,而后是当项目需要压缩工期时,每个项目任务的工期是否需要压缩、压缩量是多少等问题。在整个项目中,有一系列首尾相接的任务,他们的浮动时差为0,组成了所谓关键路径。如果某个关键路径上的任务一旦延期,则总工期一定会延期,除非压缩其他关键路径上的任务的工期。这里先讨论确定参数时的关键路径法。

最小总工期和关键路径寻找的线性规划模型

以[1]中第八章的一个例题为例,假设有A,B,C,D,E,F五项任务组成了项目,他们执行时长和紧前任务如下表所示:

按照上面的信息可以画出网络计划图:

这个图里的A任务用弧(1,3)表示,其执行时长度为6。C认为用弧(3,5)表示,执行时间长度为8。C任务的紧前任务是A和B。Dummy任务是执行时长为0的虚任务,作用是避免同样的弧(即点对)表示不同的任务。例如不采用Dummy时,任务A和任务B都会用弧(1,3)表示而产生歧义。

对于上面的网络计划图,建立线性规划模型时必须给予表达。方法是出所有弧及弧上的权(即执行时长):

G={1 2 9

1 3 6

2 3 0

3 4 7

3 5 8

4 5 10

5 6 12}

用变量x[i]表示第i节点的执行时刻,于是线性规划的目标即极小化总工期,即min x[N]-x[1]。这里 N=6,是项目的结束节点编号,也是节点的数目。

min x[N]-x[1]

线性规划的约束只要保证任务的执行时间长度就可以了:

x[G[k][2]] - x[G[k][1]] >= G[k][3] | k=1,..., NE

上面假设G里面共有NE条边,则对任意一条边k (k=1,...,NE), 其弧上第二节点的执行时刻x[G[k][2]]与第一节点的执行时刻x[G[k][1]]之差应大于等于该项任务的执行时长G[k][3]。

有必要把x[1]设为0:

x[1]=0

把目标和约束写在一起:

min x[N]-x[1]

subject to

x[G[k][2]] - x[G[k][1]] >= G[k][3] | k=1,...,NE

x[1]=0

上面的模型还不能够被求解,缺少符号的说明和数据,加上后这样:

min x[N]-x[1]

subject to

x[G[k][2]] - x[G[k][1]] >= G[k][3] | k=1,...,NE

x[1]=0

whereN,NE are numbers

G[k][j]is a number | k=1,...,NE; j=1,...,3x[i]is a variable of nonnegative number|i=1,...,N

data

N=6NE=7G={1 2 9

1 3 6

2 3 0

3 4 7

3 5 8

4 5 10

5 6 12}

在+Leapms软件中对上面的模型进行求解得到:

+Leapms>solve

The LPissolved to optimal.

找到线性规划最优解.非零变量值和最优目标值如下:

.........

x2*=9x3*=9x4*=16x5*=26x6*=38.........

Objective*=38.........

得知项目的最短工期为38。如果想获取关键路径信息需要利用对偶值。首先使用savelp命令获得lp模型(即展开的代数模型)。

\==================================\

\Problem cpm

\.lp file gnerated by+Leapms

\==================================\

Minimize

Obj:-x1+x6

Subject to

C1:-x1+x2>=9C2:-x1+x3>=6C3:-x2+x3>=0C4:-x3+x4>=7C5:-x3+x5>=8C6:-x4+x5>=10C7:-x5+x6>=12C8: x1=0End

\==================================\

而后使用dual命令获取当前的对偶解:

+Leapms>dual

dual[1]*=1dual[2]*=0dual[3]*=1dual[4]*=1dual[5]*=0dual[6]*=1dual[7]*=1dual[8]*=0

忽略对偶为0的对偶变量,得关键路径为边(即lp模型里的约束)C1,C3,C4,C6,C7, 对应于弧(1,2), (2,3), (3,5), (5,6). 即关键路径如下:

参考文献

[1] WayneL.Winston, 韦恩·L.温斯顿, 温斯顿. Operations research[M]// OPERATIONS RESEARCH. 2011.

matlab 关键路径函数,用线性规划建模(确定参数)关键路径法相关推荐

  1. matlab melbankm,Matlab v_melbankm函数参数详解(英文附例)

    Matlab v_melbankm函数参数详解(英文附例) 笔者使用的是R2019的matlab,下载了voicebox安装至matlab路径下即可使用.下载voicebox请参看此博客 需要注意的是 ...

  2. Matlab自学笔记四:调用函数基本方法、传递参数、函数工作区、命令语法、调用匿名函数

    1.调用函数的基本方法 题目:创建函数y=x²+x+1 首先,使用上一篇的创建函数文件的方法(推荐先看上一篇:Matlab创建函数文件.函数语法定义.匿名函数.多元函数.局部函数等知识串联理解),创建 ...

  3. 参数函数 matlab,MATLAB的函数参数

    本节介绍一下 MATLAB 的函数参数.具体的操作步骤如下: 确定函数参数数量 当调用一个函数时,所用的输入变量和输出变量的数量,在函数内是确定的.nargin 函数确定输入变量个数,nargout ...

  4. Matlab mfcc函数参数详解(英文附例)

    Matlab mfcc函数参数详解 其实可以直接打开源代码看哈. %MFCC Extract the mfcc, log-energy, delta, and delta-delta of audio ...

  5. matlab绘图函数plot调整显示参数

    matlab绘图函数plot调整显示参数 Matlab中,plot绘图的曲线线宽.标记点大小.标记点边框颜色和填充颜色的设置 1.LineWidth:用于设置线宽,其后选项为数值,如0.5,1,2.5 ...

  6. matlab figure函数_DSGE建模与编程入门(54):Matlab入门

    许文立,安徽大学经济学院/CIMERS,cimers_dsge@econmod.cn 宏观经济研学会(CIMERS)的共享网盘的文件已经转移至"量化经济分析平台"及其论坛(交流中心 ...

  7. Matlab v_melcepst函数参数详解(英文附例)

    Matlab v_melcepst函数参数详解(英文附例) 笔者使用的是R2019的matlab,下载了voicebox安装至matlab路径下即可使用.下载voicebox请参看此博客 需要注意的是 ...

  8. Matlab pwelch函数参数意义

    Matlab pwelch函数参数意义 该函数常用形式为[pxx,f] = pwelch(x,window,noverlap,nfft,fs). 其中x为输入信号,window为窗口类型,noverl ...

  9. 基于matlab异步电机 s函数,基于MATLABS函数三相异步电机建模与仿真.doc

    基于MATLABS函数三相异步电机建模与仿真 基于MATLABS函数三相异步电机建模与仿真 [摘 要]该文对基于两相静止坐标系下的三相交流异步电动机进行分析,构造其数学模型,并用MATLAB /SIM ...

  10. yalmip + lpsolve + matlab 求解混合整数线性规划问题(MIP/MILP)

    转自,原文: https://www.cnblogs.com/kane1990/p/3428129.html 最近建立了一个网络流模型,是一个混合整数线性规划问题(模型中既有连续变量,又有整型变量). ...

最新文章

  1. 《Python数据分析与挖掘实战》一3.1 数据质量分析
  2. Github 2020年度报告:你以为新冠击溃了开发者?不!他们创造了更多代码...
  3. Py之pandas:字典格式数据与dataframe格式数据相互转换并导出到csv
  4. 二十三、Java类中重载和重写的区别
  5. 关于C# Winform DataGridView 设置DefaultCellStyle无效的原因与解决方案
  6. CCF201409-5 拼图(30分)
  7. php 使用webservice_PHP中如何调用webservice的实例参考
  8. GFS(Genetic Fuzzy Systems)—— 基于专家先验规则库和遗传算法相结合的智能体决策算法
  9. c语言竖等于意思,C语言竖式问题
  10. python中求包含5的数_Python 内置函数 ( ) 可以返回列表、元组、字典、集合、字符串以及 range 对象中元素个数。_学小易找答案...
  11. 需求调研的方法及过程_培训需求调研方法
  12. 【Java】为什么 StringBuilder 不是线程安全的
  13. 使用IntelliJ IDEA配置Erlang开发环境
  14. salt 源码之 salt-minion启动过程
  15. Java集合源码剖析
  16. (stream流)List转Map
  17. STM32 NXP 单片机MCU - bootloader不完全概述教程
  18. MySQL入门 - 数据库的编辑与备份,DOS与图形界面演示,Navicat软件使用
  19. 页面风格设定参考——色彩及其效
  20. 为什么总是黑php,怎么都在黑PHP?

热门文章

  1. GEE-Python遥感大数据分析、管理与可视化
  2. windows10更新服务器修改,Windows 10彻底关闭自动更新(Windows Update和Windows Update Medic Service)...
  3. 性能、应用、安装,选择LoRaWAN温湿度传感器的关键
  4. Python 爬取“微博树洞”详细教程
  5. 用知识图谱解读抑郁症——树洞
  6. http 传输原理及格式
  7. Termux,安装Aria2 实现BT下载功能
  8. 计算机中分页符号是什么,分节符和分页符有什么区别?
  9. 期货交易 python_strategies/python版CTP商品期货交易类库.py at master · rui/strategies · GitHub...
  10. [BZOJ4340][BJOI2015]隐身术(后缀数组)