大型及超大型网络中时间费用优化的等效子网络子系统的制作方法

文档序号:6611880阅读:348来源:国知局
专利名称:大型及超大型网络中时间费用优化的等效子网络子系统的制作方法
技术领域
本发明涉及项目管理软件中的网络计划优化。

背景技术
时间费用优化问题一直是管理中的核心问题之一。目前的时间费用优化方法一般都比较复杂,计算工作量都比较大,占计算机的内存也很多。虽然大部分问题,由于计算机的进步也能解决,但是对大型的网络,尤其是超大型的网络,计算时间都太长,有些甚至达到几年几十年,实际上是不可计算的。为了解决这个问题,为了使该问题的计算量都大幅度地减少,而且要求对任何的方法都能适用,本子系统根据我们多年研究CPM网络得到如下的新结论“CPM中,经过任意工序

的最长的路线与关键路线的路长之差,恰恰等于该工序的机动时间”。根据这一新结论,我们开发出了由少数几条路线组成的子网络代替原来由几十条几百条甚至上千条路线组成的复杂的原始网络,而计算结果完全相同的新的子系统,从而使计算量大大减少,使原来能计算的问题变得更加简单,使原来由于时间过长而不能计算的很多问题变得可以计算,客观上大大提升了计算机解决问题的能力。
例如,要把总工期1000天的工程缩短为995天,则只需把路长大于995天的路线组成一个子网络,压缩该子网络即可。因为短于995天的路线压缩与否,对总工期的缩短都毫无意义。因为大部分路线的路长是短于995天的,因此大部分路线被删去,所以得到的等效子网络就十分简单。尤其是无论用什么方法压缩工期,都会使计算的工作量大大减少。过去这个方法不可行,是因为要找出路长大于995天的每条路线是十分复杂的,甚至它的计算量比压缩工期的计算量还要大,因此过去这个方法无法实现,但现在由于我们新的研究结论,使得寻找比995天长的路线变得十分简单,因而该想法就可以实现了。
所以说该子系统能大大提升计算机解决问题的能力,尤其是适合于任何已知的计算方法。该子系统的使用毫无疑问会大大提高压缩工期的效率,同时也会产生很大的经济效益。


发明内容
为了克服目前项目管理软件不能很好地解决大型及超大型网络的时间费用优化问题,本发明能根据新的结论很容易找出用于压缩工程总工期的等效子网络。等效子网络的求出大大降低了计算的复杂度,使原来能计算的问题变得更加简单,使原来由于时间过长而不能计算的很多问题变得可以计算,客观上大大提升了计算机解决问题的能力。
本发明解决其技术问题所采用的技术方案是根据“CPM中,经过任意工序

的最长的路线与关键路线的路长之差恰恰等于该工序的机动时间”这一新结论,选用十字链表作为网络图的数据结构,选用数组、结构和单链表作为求解等效子网络的数据结构。
等效子网络的算法是等效子网络中的所有的路线必定相应经过机动时间小于等于有效压缩量的工序,假设uv为机动时间小于等于有效压缩量的工序,则su为前半段路线,即网络图的源点到u之间的最长路线;ve为后半段路线,即网络图的汇点到v之间的最长路线。那么,等效子网络中的某一条路线的模型为lx=su+uv+ve。前半段路线和后半段路线的算法如下所示 前半段路线su的求法 在节点u的紧前工序中找最早结束时间最大的工序,设为k-u;在节点k的紧前工序中找最早结束时间最大的工序,设为r-k;再对r重复以上过程,直到源点a为止,则a→… →r→k→u即是su。
后半段路线ve的求法 在节点v的紧后工序中找最迟开始时间最小的工序,设为v-w;在节点w的紧后工序中找最迟开始结束时间最小的工序,设为w-x;再对x重复以上过程,直到汇点z为止,则v→w→x→…→z即是ve。
下面是编程要用到的数据结构 1.网络图的十字链表数据类型定义 typedef struct ArcBox{ intperiod;//period代表工期 struct ArcBox *hlink,*tlink;AnsiString name,tailvexname,headvexname,es,ls;//es代表 工序的最早开始时间,ls代表工序的最迟开始时间,tailvexname代表 该工序的尾节点的名称,headvexname代表该工序的头节点的名称,name 代表该工序的名称 }ArcBox;//工序结点 typedef struct VexNode{ AnsiString name;//name代表该节点的名称 float a,b;//a代表该节点的最早开始时间,b代表该节点的最迟结束时间 POINT pt;//pt代表网络图中节点的坐标 ArcBox *firstin,*firstout; }VexNode;//节点结点 typedef struct OLGraph{ list<VexNode>xlist;//表头列表 int vexnum,arcnum;//网络图中当前的节点数和工序数 AnsiString pjstart;//CPM网络图中的源点开始时间 }OLGraph;//CPM网络图的十字链表数据类型 2.为确定等效子网络而定义的数据类型 gjjd[99]是用来存储关键节点的数组。
asso jqgx[200];//asso是一种结构类型,它包含工序的name,headvex,tailvex,TF(机动时间)和period,在jqgx[200]中保存网络图的所有关键节点的紧前非关键工序。
asso1 jqgx1[20];//asso1是一种结构类型,它包含工序的name,headvex,tailvex,EF(最早结束时间),LS(最迟开始时间),start,end和period;jqgx1[20]用于存储在求解前主链的过程中的紧前工序。
asso2 jhgx[20];//asso2是一种结构类型,它包含和asso1同样内容,只不过比较大小的依据不同;asso1使用FF来比较大小,而asso2使用LS来比较大小。
Jhgx[20]用于存储在求解后主链的过程中的紧后工序。
asso1 cgjgx1[50];//cgjgx1[50]用于存储前半段路线。
asso2 cgjgx2[50];//cgjgx2[50]用于存储后半段路线。
list<VexNode>::iterator dwlist,dwlistend,dwlistend1,dwlist1,dwlist2;//这是编程要用到的全局指针变量。
VexNode node;//这是编程要用到的网络图节点全局变量。
等效子网络的算法如下所示 input调入网络图并存放在十字链表G中 gxn←1,jqgxn←1,jhgxn←1,gjgxn1←0,gjgxn2←0 begin G.xlist.sort() dwlist←G.xlist.begin() dwlistend←G.xlist.end() 求出所有关键节点的紧前非关键工序jqgx[gxn] 按TF由小到大对jqgx[gxn]进行排序//注意此排序包含机动时间相等的工序 //下面的算法是找出前半段路线 begin p1←new ArcBox node.name←jqgx[1].tailvexname dwlist1←gg.xlist.begin() dwlist1←find(dwlist1,dwlistend,node) ii←1 while(p1!=NULL)do beginnode.name←p1->tailvexnamedwlist1←gg.xlist.begin()dwlist1←find(dwlist1,dwlistend,node)node.name←p1->headvexnamedwlist2←gg.xlist.begin()dwlist2←find(dwlist2,dwlistend,node)jqgx1[jqgxn].name←p1->namejqgx1[jqgxn].headvexname←p1->headvexnamejqgx1[jqgxn].tailvexname←p1->tailvexnamejqgx1[jqgxn].EF←dwlist1->a+p1->periodjqgx1[jqgxn].LS←dwlist2->b-p1->periodjqgx1[jqgxn].period←p1>periodjqgxn←jqgxn+1p1←p1->hlink end//下面是对jqgx1[20]中的数据按EF由大到小进行排序,排完序之后,数据仍存放在jqgx1[20]中 list<asso>tlisti←1 while(i<=gxn-1)dobegin tlist.insert(tlist.begin(),jqgx1[i]) i←i+1endtlist.sort()i←1while(i<=gxn-1)dobeginjqgx1[i]←tlist.back()tlist.pop_back()i←i+1end //下面把每次得到的最早结束时间最大的紧前工序保存在cgjgx1[50]中,并把下一级的紧前工序的指针赋给p1 jqgxn←1cgjgx1[ii]←jqgx1[1]p2[ii]←new ArcBox node.name←jqgx1[1].tailvexname dwlist1←gg.xlist.begin() dwlist1←find(dwlist1,dwlistend,node) p1←p2[ii] gjgxn1←ii ii←ii+1 //找出后半段路线的算法与找出前半段路线的算法相同,在此省略 //下面的算法给等效网络图中的工序标上标记 i←1 while(i<=gjgxn1+gjgxn2+1)do begindwlist←G.xlist.begin()dwlistend←G.xlist.end()found←falsewhile(dwlist!=dwlistend&&!found)dobegin p←new ArcBox p←dwlist->firstout while(p!=NULL)do begin if(zcgjgx[i].name==p->name)then p->cbj←1//1表示等效网络图中的某一工序 p←NULL found←true else p←p->tlink end end delete p dwlist++ end i←i+1 end end end 本发明的有益效果是,等效子网络的求出大大降低了计算的复杂度,使原来能计算的问题变得更加简单,使原来由于时间过长而不能计算的很多问题变得可以计算,客观上大大提升了计算机解决问题的能力,尤其是适合于任何已知的计算方法。该子系统的使用毫无疑问会大大提高压缩工期的效率,同时也会产生很大的经济效益。



图1是大型及超大型网络中时间费用优化的等效子网络子系统流程图。

具体实施例方式 大型及超大型网络中时间费用优化的等效子网络子系统是在Windows XP操作系统下使用C++Builder 6.0开发设计的。它的系统功能结构如说明书附图中的图1所示,在“压缩工期”模块中提供了等效网络图的自动产生功能,等效网络图产生以后,就可以对它实施各种压缩工期的方法,该子系统的使用毫无疑问会大大提高压缩工期的效率,同时也会产生很大的经济效益。
权利要求
1.一种大型及超大型网络中时间费用优化的等效子网络的方法,包括
(1)用于等效网络图产生的步骤;
其特征是所述大型及超大型网络中时间费用优化的等效子网络的方法还包括
(1)在等效网络图产生的步骤中,使用了等效子网络中的某一条路线的模型为lx=su+uv+ve。
全文摘要
一种大型及超大型网络中时间费用优化的等效子网络的方法,如摘要附图所示,根据“CPM中,经过任意工序的最长的路线与关键路线的路长之差恰恰等于该工序的机动时间”这一新结论,它选用十字链表作为网络图的数据结构,选用数组、结构和单链表作为求解等效网络图的数据结构,等效子网络中的某一条路线的模型为lx=su+uv+ve,等效子网络的求出大大降低了计算的复杂度,使原来能计算的问题变得更加简单,使原来由于时间过长而不能计算的很多问题变得可以计算,尤其是适合于任何已知的计算方法。该子系统的使用毫无疑问会大大提高压缩工期的效率,同时也会产生很大的经济效益。
文档编号G06Q10/04GK101127105SQ200710145958
公开日2008年2月20日 申请日期2007年8月31日 优先权日2007年8月31日
发明者李星梅, 乞建勋, 周远成 申请人:周远成
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1