層中的個(gè)體只被第一層中的 個(gè)體所支配,W此類推,每個(gè)種群中屬于相同層的個(gè)體都會(huì)被分配一個(gè)相同的層號(hào),也就是 第一層中的每個(gè)個(gè)體被分配得到的層號(hào)為1,第二層中的每個(gè)個(gè)體被分配得到的層號(hào)為2, 等等。如果一個(gè)個(gè)體的能效優(yōu)化目標(biāo)函數(shù)值不差于另一個(gè)個(gè)體的能效優(yōu)化目標(biāo)函數(shù)值,且 至少其中一個(gè)個(gè)體的能效優(yōu)化目標(biāo)函數(shù)值優(yōu)于另一個(gè)個(gè)體的,那么運(yùn)個(gè)個(gè)體支配另一個(gè)個(gè) 體??焖倥判蛩惴枋鋈缦?。
[0139] 對(duì)于種群中的每個(gè)個(gè)體P執(zhí)行如下操作:
[0140] 1)初始化Sp=d)。SP集合將會(huì)包括種群中被個(gè)體P支配的所有個(gè)體。
[0141] 。初始化rip= 0。Hp代表種群中支配個(gè)體P的個(gè)體數(shù)量。
[014引扣對(duì)種群中每個(gè)個(gè)體q:如果個(gè)體P支配q,那么將個(gè)體q添加進(jìn)集合Sp,即Sp=SpU{q};否則如果個(gè)體q支配P,那么使得個(gè)體P的被支配計(jì)數(shù)器自增1,即np=np+l。
[0143] 4)如果np= 0,也就是說(shuō)種群中沒(méi)有可W支配個(gè)體P的個(gè)體,那么個(gè)體P屬于第 一層;設(shè)置個(gè)體P的層號(hào)即rank值為1,即1。添加個(gè)體P來(lái)更新rank為1的個(gè)體 集合,即Fi=FiU{p}。
[0144] 對(duì)于非空的第i層執(zhí)行如下操作:
[014引 (I)Q= 4,集合Q用于存放屬于第i+1層的個(gè)體。
[014引 似對(duì)于層F沖的個(gè)體P :對(duì)于集合SP中每個(gè)個(gè)體q,n q= n。-1,個(gè)體q中的被支 配的個(gè)體數(shù)目自減1 ;如果n。= 0,那么表示剩下的個(gè)體中沒(méi)有可W支配個(gè)體q的,因此設(shè) 置Qrank= 1 + 1。將個(gè)體q添加進(jìn)集合Q來(lái)更新Q,即Q=QUq;
[0147] (3)當(dāng)自IJ集合Q是下一層,因此Fi=Q。
[0148] 步驟2. 1. 8 :利用競(jìng)爭(zhēng)選擇策略從種群D中選擇出父種群P;
[0149] 本實(shí)施方式采用競(jìng)爭(zhēng)選擇策略從種群D中選擇出用來(lái)產(chǎn)生后代的父種群P。設(shè)及 到兩個(gè)參數(shù):父種群大小W及競(jìng)爭(zhēng)選擇大??;父種群的大小通常設(shè)置為原始種群D大小的 1/2 ;由于競(jìng)爭(zhēng)選擇依據(jù)包括層號(hào)和擁擠距離,故競(jìng)爭(zhēng)選擇的大小選擇為2。
[0150] 具體選擇的步驟是從種群中隨機(jī)選擇兩個(gè)個(gè)體,首先比較兩個(gè)個(gè)體的rank值,選 擇rank值較小的個(gè)體進(jìn)入父種群P;若兩個(gè)個(gè)體位于同層,即rank值相等,那么比較二者 的擁擠距離(crowdingdistance),選擇擁擠距離較大的個(gè)體進(jìn)入父種群P,擁擠距離用來(lái) 度量個(gè)體與其周圍個(gè)體的差異性,擁擠距離越大越可能為種群帶來(lái)多樣性。
[015。 步驟2. 1.9 :通過(guò)對(duì)父種群P進(jìn)行交叉、變異和修復(fù)操作,得到子種群Q,并計(jì)算子 種群Q中每個(gè)個(gè)體的能效優(yōu)化目標(biāo)函數(shù)值;
[0152] 遺傳操作包括交叉函數(shù)和變異函數(shù)。交叉和變異操作用于從現(xiàn)有的染色體中產(chǎn)生 新的染色體,使得遺傳算法能夠在下一代的捜索空間中產(chǎn)生新的解決方案。根據(jù)經(jīng)驗(yàn)和算 法中的決策變量數(shù),本實(shí)施方式中交叉概率和變異概率分別設(shè)置為0. 9和0. 1。
[0153] 交叉函數(shù)的思想是在兩條染色體間進(jìn)行信息交換,在兩個(gè)染色體的交叉點(diǎn)上 交換兩條染色體。通過(guò)運(yùn)樣做,能夠探索新的路徑,并在此過(guò)程中有希望能找到更好的 路徑。常用的交叉方案有基于節(jié)點(diǎn)交叉NBX(NodeBased化ossover)和部分映射交叉 PMX(PartiallyMapped化ossover),本實(shí)施方式中采用的是NBX,故重點(diǎn)介紹NBX的過(guò)程。
[0154] NBX交叉方案是單點(diǎn)交叉的改進(jìn)。工作形式如下:首先從父種群中隨機(jī)選擇兩條 染色體,然后隨機(jī)生成一個(gè)0-1間隨機(jī)數(shù),將其與交叉概率比較,若隨機(jī)數(shù)小于交叉概率, 則進(jìn)行交叉,否則,放棄交叉。接著,尋找兩條染色體中除首尾節(jié)點(diǎn)(即源目的節(jié)點(diǎn))外相 同的節(jié)點(diǎn)集合,若集合為空,表明兩條染色體中無(wú)可交叉點(diǎn),放棄交叉,否則,從集合中隨機(jī) 選擇1個(gè)節(jié)點(diǎn)作為兩條染色體的交叉點(diǎn)(化ossoverPoint)。確定交叉點(diǎn)后,保留兩條染色 體的源節(jié)點(diǎn)到交叉點(diǎn)部分,交換兩條染色體交叉點(diǎn)后的部分,如圖6所示兩條染色體Pi和Pz交叉后得到新染色體P' 1和P' 2。由此,通過(guò)交叉操作可能得到兩條新的染色體。
[0155] 變異函數(shù)的工作形式如下:首先,隨機(jī)選擇一條染色體,然后隨機(jī)生成一個(gè)0-1間 隨機(jī)數(shù),與變異概率比較,若隨機(jī)數(shù)小于變異概率,則進(jìn)行變異,否則,放棄變異。若進(jìn)行變 異,需要選擇染色體中的變異點(diǎn)位置,可W是將染色體中屯、節(jié)點(diǎn)確定作為變異點(diǎn)位置,也可 W是隨機(jī)選擇染色體中的節(jié)點(diǎn)(不包括源目的節(jié)點(diǎn))作為變異點(diǎn)位置。本實(shí)施方式選擇隨 機(jī)產(chǎn)生變異點(diǎn)。選擇出變異點(diǎn)后,保留源節(jié)點(diǎn)到變異點(diǎn)的染色體,重新隨機(jī)DFS生成變異點(diǎn) 之后的節(jié)點(diǎn)到目的節(jié)點(diǎn)間的路徑,如圖7所示,染色體Ps變異后得到新染色體P3'。由此, 新得到的染色體作為變異之后的染色體。
[0156] 染色體經(jīng)過(guò)上述的交叉和變異操作后,有可能產(chǎn)生路徑環(huán),也就是染色體中存在 相同的節(jié)點(diǎn)。為了解決運(yùn)個(gè)問(wèn)題,本實(shí)施方式采用執(zhí)行修復(fù)函數(shù)作為對(duì)策。修復(fù)函數(shù)找到 并消除路徑中的環(huán)。通過(guò)沿著染色體執(zhí)行捜索找到重復(fù)節(jié)點(diǎn)從而修復(fù)染色體中出現(xiàn)的環(huán)。 如在圖7的染色體變異過(guò)程中,得到的新染色體P3'中存在路徑環(huán),即節(jié)點(diǎn)3重復(fù)出現(xiàn)。那 么通過(guò)修復(fù)操作,如圖8所示,找到并消除P3'中的重復(fù)節(jié)點(diǎn)3,得到無(wú)環(huán)的染色體P3"。
[0157] 步驟2.1. 10 :重新組合原始種群D、子種群Q得到種群S,即S=DUQ;且種群S 的大小必然遠(yuǎn)大于下次進(jìn)化需要的原始種群D大小pop;
[015引步驟2.1. 11:利用非支配排序?qū)ΨN群S中個(gè)體進(jìn)行非劣性分層與排序;
[0159] 步驟2. 1. 12 :根據(jù)精英保留策略,選擇種群S中的前pop個(gè)個(gè)體構(gòu)成新的與原始 種群大小一致的種群,用該新種群更新原始種群D,實(shí)現(xiàn)原始種群D的一次進(jìn)化,并將更新 后的種群D作為下次進(jìn)化的原始種群,轉(zhuǎn)至步驟2. 1. 8 ;
[0160] 根據(jù)精英保留策略,從新種群S中依次選擇第1,2, 3等層的全部染色體加入到新 種群D',直到若繼續(xù)加入下一層的全部染色體后新種群D'大小超過(guò)pop,停止加入下一層 的全部染色體。此時(shí)的種群大小若小于pop,則從下一層的染色體中根據(jù)擁擠距離選擇出剩 余數(shù)目的染色體加入D'。由此,通過(guò)基于非支配的排序,保留下性能較好的染色體進(jìn)入下一 次進(jìn)化過(guò)程,D=D'。
[01步驟2. 1. 13 :重復(fù)執(zhí)行步驟2. 1. 8至步驟2. 1. 12maxgen次,使種群D經(jīng)過(guò)maxgen次迭代進(jìn)化后,從中選擇出能效優(yōu)化目標(biāo)函數(shù)值最優(yōu)的個(gè)體,若該個(gè)體的能效優(yōu)化目標(biāo)函 數(shù)值不為Inf,則路由成功,轉(zhuǎn)到步驟2. 1. 14 ;否則,路由失敗,轉(zhuǎn)到步驟2. 1. 15 ;
[016引步驟2. 1. 14 :將該個(gè)體作為滿足約束的源節(jié)點(diǎn)S到目的節(jié)點(diǎn)d的最優(yōu)路徑,用該 個(gè)體的請(qǐng)求業(yè)務(wù)量更新鏈路負(fù)載矩陣X,并將當(dāng)前取出的該請(qǐng)求從隊(duì)列R中刪除,然后轉(zhuǎn)到 步驟2. 1. 3;
[0163] 步驟2. 1. 15:請(qǐng)求阻塞數(shù)加1,并將當(dāng)前取出的該請(qǐng)求從隊(duì)列R中刪除,然后轉(zhuǎn)到 步驟2. 1. 3。
[0164] 步驟2. 2:在步驟2. 1的初始路由基礎(chǔ)上,根據(jù)網(wǎng)絡(luò)能效目標(biāo),先將鏈路利用率為 零的鏈路進(jìn)行休眠,然后再根據(jù)鏈路利用率從小到大依次對(duì)剩余鏈路嘗試進(jìn)行休眠,并在 休眠鏈路后隨即進(jìn)行基于流重定向的重新路由,得到符合網(wǎng)絡(luò)能效優(yōu)化目標(biāo)的路由;具體 過(guò)程如圖3所示。
[0165] 鏈路休眠的主要思想是在完成路徑安排的基礎(chǔ)上,首先將鏈路利用率為零的鏈路 置為休眠狀態(tài),然后根據(jù)鏈路利用率從小到大將剩余鏈路進(jìn)行排序,依次選擇鏈路作為候 選休眠鏈路,如果鏈路休眠后仍能維持全網(wǎng)強(qiáng)連通性且通過(guò)該鏈路的所有OD流均可W通 過(guò)重定向匯聚到其他開(kāi)啟鏈路上,那么被選擇的鏈路最終可W進(jìn)入休眠狀態(tài),否則繼續(xù)選 擇下一條鏈路作為候選休眠鏈路,直到遍歷完所有鏈路。
[016引步驟2. 2. 1 :將鏈路矩陣Link中鏈路利用率為0的鏈路置于休眠狀態(tài),得到新的 鏈路矩陣Link_l;
[0167] 步驟2. 2. 2 :根據(jù)鏈路利用率從小到大將鏈路矩陣Link_l中的鏈路進(jìn)行排序,生 成候選休眠鏈路隊(duì)列I;
[0168] 步驟2. 2. 3 :如果I非空,則按照步驟2. 2. 2中所述的順序從隊(duì)列I中依次逐個(gè)取 出候選休眠鏈路,執(zhí)行步驟2. 2. 4 ;如果I為空,用鏈路矩陣Link_l更新鏈路矩陣Link,轉(zhuǎn) 至步驟2. 1. 2 ;
[0169] 步驟2. 2. 4 :確定當(dāng)前取出的候選休眠鏈路的起終節(jié)點(diǎn),將該鏈路置于休眠狀態(tài), 得到鏈路矩陣Link_2,執(zhí)行步驟2. 2. 5 ;
[0170] 步驟2. 2. 5 :計(jì)算出鏈路矩陣Link_2對(duì)應(yīng)的可達(dá)矩陣,并根據(jù)該可達(dá)矩陣判斷此 時(shí)的網(wǎng)絡(luò)拓?fù)涫欠駨?qiáng)連通,如果仍維持強(qiáng)連通性,則確定所有經(jīng)過(guò)該鏈路的OD流請(qǐng)求的源 節(jié)點(diǎn)、目的節(jié)點(diǎn)和請(qǐng)求業(yè)務(wù)量,執(zhí)行步驟2. 2. 6 ;否則,將當(dāng)前取出的候選休眠鏈路從I中刪 除,轉(zhuǎn)至步驟2. 2. 3,取出下一個(gè)候選休眠鏈路;
[0171] 對(duì)于一個(gè)有向圖,忽略所有有向邊的方向性而得到對(duì)應(yīng)的一個(gè)無(wú)向圖,如果該無(wú) 向圖是連通的,即其中任意兩個(gè)節(jié)點(diǎn)有通路相連,則稱原有向圖是弱連通的;如果在原有向 圖中任意兩點(diǎn)間至少有一節(jié)點(diǎn)至另一節(jié)點(diǎn)的通路存在,則稱該有向圖是單向連通的;而如 果原圖任意兩節(jié)點(diǎn)間的一節(jié)點(diǎn)至另一節(jié)點(diǎn)的通路均存在,即有雙向通路,則稱該有向圖是 強(qiáng)連通的。
[0172] 本實(shí)施方式針對(duì)的是可W看成是有向圖的網(wǎng)絡(luò)拓?fù)洌M(jìn)行鏈路休眠時(shí)必須檢查圖 的強(qiáng)連通性,只有不影響強(qiáng)連通性的鏈路才能進(jìn)一步考慮是否能被休眠。本實(shí)施方式采用 矩陣判別法來(lái)檢查有向圖是否具有強(qiáng)連通性。即根據(jù)有向圖G的鄰接矩陣A計(jì)算得到其可 達(dá)矩陣R,利用可達(dá)矩陣來(lái)判斷強(qiáng)連通性??蛇_(dá)矩陣的定義如下:
[0173] 設(shè)11階簡(jiǎn)單有向圖0=<¥,£>,¥=柄,乂2,...,乂。}為頂點(diǎn)集合,£為有向邊集 合,定義一個(gè)nXn矩陣R=tii],令
,則稱矩陣R為圖G的可達(dá)矩 陣??蛇_(dá)矩陣表明了圖中任意兩個(gè)節(jié)點(diǎn)間是否至少存在一條通路。
[0174] 給定n階布爾矩陣A= [au],B=比1,],定義矩陣的合成運(yùn)算"。"和取大運(yùn)算 ?如下:
[0175] (l)'4sg=|c,,.],c.,, = v("",'A/,。);
[0176] (2) 當(dāng)公=[",,VA"];
[0177] (3)方?> = ^。^ 1,如,=二(?A扭,'); ? k-i '
[017引(4)A(n)=A(ni)OA
[0179]W上各式中V和A分別表示元素的取大、取小運(yùn)算。
[0180] 設(shè)A為簡(jiǎn)單有向圖G= <V,E>的鄰接矩陣,可達(dá)矩陣的常用求法為:
[0181] 尸= .4?.豐s'...貨.爭(zhēng)" (11)
[0182] 那么圖G= <V,E>為強(qiáng)連通的充分必要條件是可達(dá)矩陣P除對(duì)角線元素外的所 有元素全為1。
[0183] 本實(shí)施方式中有向圖的鄰接矩陣等價(jià)于鏈路矩陣Link,計(jì)算有向圖的可達(dá)矩陣并 利用其來(lái)判斷有向圖是否具有強(qiáng)連通性的函數(shù)記為化eckConnectivity0,具有強(qiáng)連通性 則返回1,否則返回0,偽代碼如表