專利名稱:大型及超大型網(wǎng)絡(luò)中時間費用優(yōu)化的等效子網(wǎng)絡(luò)子系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及項目管理軟件中的網(wǎng)絡(luò)計劃優(yōu)化。
背景技術(shù):
時間費用優(yōu)化問題一直是管理中的核心問題之一。目前的時間費用優(yōu)化方法一般都比較復(fù)雜,計算工作量都比較大,占計算機的內(nèi)存也很多。雖然大部分問題,由于計算機的進(jìn)步也能解決,但是對大型的網(wǎng)絡(luò),尤其是超大型的網(wǎng)絡(luò),計算時間都太長,有些甚至達(dá)到幾年幾十年,實際上是不可計算的。為了解決這個問題,為了使該問題的計算量都大幅度地減少,而且要求對任何的方法都能適用,本子系統(tǒng)根據(jù)我們多年研究CPM網(wǎng)絡(luò)得到如下的新結(jié)論“CPM中,經(jīng)過任意工序
的最長的路線與關(guān)鍵路線的路長之差,恰恰等于該工序的機動時間”。根據(jù)這一新結(jié)論,我們開發(fā)出了由少數(shù)幾條路線組成的子網(wǎng)絡(luò)代替原來由幾十條幾百條甚至上千條路線組成的復(fù)雜的原始網(wǎng)絡(luò),而計算結(jié)果完全相同的新的子系統(tǒng),從而使計算量大大減少,使原來能計算的問題變得更加簡單,使原來由于時間過長而不能計算的很多問題變得可以計算,客觀上大大提升了計算機解決問題的能力。
例如,要把總工期1000天的工程縮短為995天,則只需把路長大于995天的路線組成一個子網(wǎng)絡(luò),壓縮該子網(wǎng)絡(luò)即可。因為短于995天的路線壓縮與否,對總工期的縮短都毫無意義。因為大部分路線的路長是短于995天的,因此大部分路線被刪去,所以得到的等效子網(wǎng)絡(luò)就十分簡單。尤其是無論用什么方法壓縮工期,都會使計算的工作量大大減少。過去這個方法不可行,是因為要找出路長大于995天的每條路線是十分復(fù)雜的,甚至它的計算量比壓縮工期的計算量還要大,因此過去這個方法無法實現(xiàn),但現(xiàn)在由于我們新的研究結(jié)論,使得尋找比995天長的路線變得十分簡單,因而該想法就可以實現(xiàn)了。
所以說該子系統(tǒng)能大大提升計算機解決問題的能力,尤其是適合于任何已知的計算方法。該子系統(tǒng)的使用毫無疑問會大大提高壓縮工期的效率,同時也會產(chǎn)生很大的經(jīng)濟(jì)效益。
發(fā)明內(nèi)容
為了克服目前項目管理軟件不能很好地解決大型及超大型網(wǎng)絡(luò)的時間費用優(yōu)化問題,本發(fā)明能根據(jù)新的結(jié)論很容易找出用于壓縮工程總工期的等效子網(wǎng)絡(luò)。等效子網(wǎng)絡(luò)的求出大大降低了計算的復(fù)雜度,使原來能計算的問題變得更加簡單,使原來由于時間過長而不能計算的很多問題變得可以計算,客觀上大大提升了計算機解決問題的能力。
本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是根據(jù)“CPM中,經(jīng)過任意工序
的最長的路線與關(guān)鍵路線的路長之差恰恰等于該工序的機動時間”這一新結(jié)論,選用十字鏈表作為網(wǎng)絡(luò)圖的數(shù)據(jù)結(jié)構(gòu),選用數(shù)組、結(jié)構(gòu)和單鏈表作為求解等效子網(wǎng)絡(luò)的數(shù)據(jù)結(jié)構(gòu)。
等效子網(wǎng)絡(luò)的算法是等效子網(wǎng)絡(luò)中的所有的路線必定相應(yīng)經(jīng)過機動時間小于等于有效壓縮量的工序,假設(shè)uv為機動時間小于等于有效壓縮量的工序,則su為前半段路線,即網(wǎng)絡(luò)圖的源點到u之間的最長路線;ve為后半段路線,即網(wǎng)絡(luò)圖的匯點到v之間的最長路線。那么,等效子網(wǎng)絡(luò)中的某一條路線的模型為lx=su+uv+ve。前半段路線和后半段路線的算法如下所示 前半段路線su的求法 在節(jié)點u的緊前工序中找最早結(jié)束時間最大的工序,設(shè)為k-u;在節(jié)點k的緊前工序中找最早結(jié)束時間最大的工序,設(shè)為r-k;再對r重復(fù)以上過程,直到源點a為止,則a→… →r→k→u即是su。
后半段路線ve的求法 在節(jié)點v的緊后工序中找最遲開始時間最小的工序,設(shè)為v-w;在節(jié)點w的緊后工序中找最遲開始結(jié)束時間最小的工序,設(shè)為w-x;再對x重復(fù)以上過程,直到匯點z為止,則v→w→x→…→z即是ve。
下面是編程要用到的數(shù)據(jù)結(jié)構(gòu) 1.網(wǎng)絡(luò)圖的十字鏈表數(shù)據(jù)類型定義 typedef struct ArcBox{ intperiod;//period代表工期 struct ArcBox *hlink,*tlink;AnsiString name,tailvexname,headvexname,es,ls;//es代表 工序的最早開始時間,ls代表工序的最遲開始時間,tailvexname代表 該工序的尾節(jié)點的名稱,headvexname代表該工序的頭節(jié)點的名稱,name 代表該工序的名稱 }ArcBox;//工序結(jié)點 typedef struct VexNode{ AnsiString name;//name代表該節(jié)點的名稱 float a,b;//a代表該節(jié)點的最早開始時間,b代表該節(jié)點的最遲結(jié)束時間 POINT pt;//pt代表網(wǎng)絡(luò)圖中節(jié)點的坐標(biāo) ArcBox *firstin,*firstout; }VexNode;//節(jié)點結(jié)點 typedef struct OLGraph{ list<VexNode>xlist;//表頭列表 int vexnum,arcnum;//網(wǎng)絡(luò)圖中當(dāng)前的節(jié)點數(shù)和工序數(shù) AnsiString pjstart;//CPM網(wǎng)絡(luò)圖中的源點開始時間 }OLGraph;//CPM網(wǎng)絡(luò)圖的十字鏈表數(shù)據(jù)類型 2.為確定等效子網(wǎng)絡(luò)而定義的數(shù)據(jù)類型 gjjd[99]是用來存儲關(guān)鍵節(jié)點的數(shù)組。
asso jqgx[200];//asso是一種結(jié)構(gòu)類型,它包含工序的name,headvex,tailvex,TF(機動時間)和period,在jqgx[200]中保存網(wǎng)絡(luò)圖的所有關(guān)鍵節(jié)點的緊前非關(guān)鍵工序。
asso1 jqgx1[20];//asso1是一種結(jié)構(gòu)類型,它包含工序的name,headvex,tailvex,EF(最早結(jié)束時間),LS(最遲開始時間),start,end和period;jqgx1[20]用于存儲在求解前主鏈的過程中的緊前工序。
asso2 jhgx[20];//asso2是一種結(jié)構(gòu)類型,它包含和asso1同樣內(nèi)容,只不過比較大小的依據(jù)不同;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;//這是編程要用到的網(wǎng)絡(luò)圖節(jié)點全局變量。
等效子網(wǎng)絡(luò)的算法如下所示 input調(diào)入網(wǎng)絡(luò)圖并存放在十字鏈表G中 gxn←1,jqgxn←1,jhgxn←1,gjgxn1←0,gjgxn2←0 begin G.xlist.sort() dwlist←G.xlist.begin() dwlistend←G.xlist.end() 求出所有關(guān)鍵節(jié)點的緊前非關(guān)鍵工序jqgx[gxn] 按TF由小到大對jqgx[gxn]進(jìn)行排序//注意此排序包含機動時間相等的工序 //下面的算法是找出前半段路線 begin p1←new ArcBox node.name←jqgx[1].tailvexname dwlist1←gg.xlist.begin() dwlist1←find(dwlist1,dwlistend,node) ii←1 while(p1?。絅ULL)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]中的數(shù)據(jù)按EF由大到小進(jìn)行排序,排完序之后,數(shù)據(jù)仍存放在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 //下面把每次得到的最早結(jié)束時間最大的緊前工序保存在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 //找出后半段路線的算法與找出前半段路線的算法相同,在此省略 //下面的算法給等效網(wǎng)絡(luò)圖中的工序標(biāo)上標(biāo)記 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?。絅ULL)do begin if(zcgjgx[i].name==p->name)then p->cbj←1//1表示等效網(wǎng)絡(luò)圖中的某一工序 p←NULL found←true else p←p->tlink end end delete p dwlist++ end i←i+1 end end end 本發(fā)明的有益效果是,等效子網(wǎng)絡(luò)的求出大大降低了計算的復(fù)雜度,使原來能計算的問題變得更加簡單,使原來由于時間過長而不能計算的很多問題變得可以計算,客觀上大大提升了計算機解決問題的能力,尤其是適合于任何已知的計算方法。該子系統(tǒng)的使用毫無疑問會大大提高壓縮工期的效率,同時也會產(chǎn)生很大的經(jīng)濟(jì)效益。
圖1是大型及超大型網(wǎng)絡(luò)中時間費用優(yōu)化的等效子網(wǎng)絡(luò)子系統(tǒng)流程圖。
具體實施例方式 大型及超大型網(wǎng)絡(luò)中時間費用優(yōu)化的等效子網(wǎng)絡(luò)子系統(tǒng)是在Windows XP操作系統(tǒng)下使用C++Builder 6.0開發(fā)設(shè)計的。它的系統(tǒng)功能結(jié)構(gòu)如說明書附圖中的圖1所示,在“壓縮工期”模塊中提供了等效網(wǎng)絡(luò)圖的自動產(chǎn)生功能,等效網(wǎng)絡(luò)圖產(chǎn)生以后,就可以對它實施各種壓縮工期的方法,該子系統(tǒng)的使用毫無疑問會大大提高壓縮工期的效率,同時也會產(chǎn)生很大的經(jīng)濟(jì)效益。
權(quán)利要求
1.一種大型及超大型網(wǎng)絡(luò)中時間費用優(yōu)化的等效子網(wǎng)絡(luò)的方法,包括
(1)用于等效網(wǎng)絡(luò)圖產(chǎn)生的步驟;
其特征是所述大型及超大型網(wǎng)絡(luò)中時間費用優(yōu)化的等效子網(wǎng)絡(luò)的方法還包括
(1)在等效網(wǎng)絡(luò)圖產(chǎn)生的步驟中,使用了等效子網(wǎng)絡(luò)中的某一條路線的模型為lx=su+uv+ve。
全文摘要
一種大型及超大型網(wǎng)絡(luò)中時間費用優(yōu)化的等效子網(wǎng)絡(luò)的方法,如摘要附圖所示,根據(jù)“CPM中,經(jīng)過任意工序的最長的路線與關(guān)鍵路線的路長之差恰恰等于該工序的機動時間”這一新結(jié)論,它選用十字鏈表作為網(wǎng)絡(luò)圖的數(shù)據(jù)結(jié)構(gòu),選用數(shù)組、結(jié)構(gòu)和單鏈表作為求解等效網(wǎng)絡(luò)圖的數(shù)據(jù)結(jié)構(gòu),等效子網(wǎng)絡(luò)中的某一條路線的模型為lx=su+uv+ve,等效子網(wǎng)絡(luò)的求出大大降低了計算的復(fù)雜度,使原來能計算的問題變得更加簡單,使原來由于時間過長而不能計算的很多問題變得可以計算,尤其是適合于任何已知的計算方法。該子系統(tǒng)的使用毫無疑問會大大提高壓縮工期的效率,同時也會產(chǎn)生很大的經(jīng)濟(jì)效益。
文檔編號G06Q10/04GK101127105SQ200710145958
公開日2008年2月20日 申請日期2007年8月31日 優(yōu)先權(quán)日2007年8月31日
發(fā)明者李星梅, 乞建勛, 周遠(yuǎn)成 申請人:周遠(yuǎn)成