本發明涉及一種基于深度優先的配電網路徑搜索方法,屬于配電網的分析領域。
背景技術:
目前,配電網的規劃和運行中存在大量需要分析的問題,如配電網重構、饋線供電能力分析、配電網n-1分析、配電網n-1分析、負荷轉供路徑優化等。配電網的路徑在這些問題的分析中起到重要的作用。現有的配電網路徑搜索方法中搜索得到的路徑不夠全面,難以對路徑進行分類利用,使用時效率較低。且無法直接通過得到路徑對配電網的運行結構和運行方式進行充分完整的描述,在配電網分析中,會產生大量不符合要求的運行結構,需要另外采取搜索生成樹等方法,以保證配電網正確的運行結構,降低了效率。
技術實現要素:
為了克服上述現有方法的不足,本發明提供了一種基于深度優先的配電網路徑搜索方法。該方法基于深度優先的思想,對配電網的拓撲圖進行遍歷,并按特定的條件篩選,得到配電網中所有的供電路徑。通過對搜索得到的路徑進行分類,最終得到三種供電路徑:按電源分類的所有供電路徑;按路徑終點的負荷分類的所有路徑;按路徑中經過的支路分類的所有路徑。該方法搜索得到的三種路徑具有很強的規律性,能夠對配電網的運行給出充分的描述,可用在配電網重構、饋線供電能力分析、配電網n-1分析、負荷轉供路徑優化等眾多問題中,且方法的復雜度性能十分優越,具有良好的實際應用價值。
本發明是通過以下技術方案來實現的:一種基于深度優先的配電網路徑搜索方法,該方法包含以下步驟:
步驟1:搜索配電網中所有的供電路徑,按電源分類。對配電網拓撲圖中每一個電源節點,搜索出以該電源為起點的所有路徑。
步驟2:搜索按終點負荷節點分類及經過支路分類的兩類路徑。這兩種路徑都通過搜索已經得到的按電源分類的所有路徑而得到。首先找出以某個負荷節點為終點的所有路徑和經過某一條支路的所有路徑,再對所有負荷和支路的結果進行匯總,得到所需的兩種路徑。
進一步地,所述步驟1中對配電網的搜索中采用一個堆棧結構來實現遍歷的遞歸過程,在堆棧中保留搜索過程經過的節點,保存路徑信息。每次搜索到一個節點,則對應的也有一條從電源到該節點的供電路徑p,即將當前棧中的節點依次相連,再將棧頂節點與新搜索到的節點相連得到的一條新的路徑。
對于新搜索到的節點,判斷是否滿足以下三個條件:該節點不存在于棧中;當前生成的該節點的供電路徑p不能與已經搜索到的路徑相同;該節點不為電源節點。若新搜索到的節點不滿足上述任一個條件,則繼續對棧頂元素的下一個鄰接點進行搜索;若都滿足,則令該節點入棧,并記錄新得到的路徑p。這樣保證不會遺漏也不重復記錄任何一條供電路徑。
通過路徑搜索最終得到的結果為:以第一個電源為起點的所有路徑,以第二個電源為起點的所有路徑,…,以第n個電源為起點的所有路徑。這一系列按電源分類的路徑,存儲在數組pathes中。用一個數組supplystart記錄不同類的路徑在pathes中的起始位置。
搜索按電源分類的所有供電路徑的方法詳細流程如下,流程圖如圖1所示:
1)建立一個arraylist數組列表變量pathes,用于存放搜索得到的路徑。建立一個棧。設圖中的電源節點共有n個,分別為s1,s2,…,sn,si表示第i個電源節點。令i=1,即從第1個電源節點開始處理。建立一個數組supplystart,記錄從每一個電源出發的路徑在pathes中的起始位置。
2)當前處理的電源節點為si,將si壓入棧中。將supplystart[i]賦值為pathes中已經存儲的路徑條數。
3)當前的棧頂元素為節點t,設與t鄰接的所有節點為a1,a2,…,am,aj表示第j個鄰接節點。設置一個布爾型的標記變量flag1,令flag1=true。令j=1,即從第1個鄰接點開始處理。設置一個布爾型的標記變量flag2。
4)當前處理的t的鄰接節點為aj。令flag2=true。
5)判斷aj是否在棧中。若在棧中,則令flag2=false。
6)判斷aj是否為電源節點。若是電源節點,則令flag2=false。
7)用當前棧中的節點,加上節點aj,生成一條對應的路徑p。路徑p的生成過程為:從棧底節點到棧頂節點,將棧中的節點依次連接,所得到的支路依次加入p中,最后再將棧頂節點與節點aj連接所得到的支路加入p中。遍歷pathes中已經得到的路徑,判斷是否已經存在新生成的路徑p。若存在,則令flag2=false。
8)判斷flag2值是否為true:
①如果flag2的值為true,則轉入9)。
②如果flag2的值為false,則轉入10)。
9)令aj入棧,令flag1=false。將新生成的路徑p記錄到pathes中。此時,棧頂元素t更新為新入棧的節點aj,轉入11)。
10)令j=j+1。若j≤m,則轉入4),對t的下一個鄰接點進行搜索;若j>m,表示與當前的棧頂元素t鄰接的所有節點都已經處理完,轉入11),m為t的鄰接節點的個數。
11)判斷flag1的值是否為true
①如果flag1的值為false,則轉入3)。
②如果flag1的值為true,則棧頂節點t出棧。判斷棧是否為空:
i若棧不為空,轉入3)。
ii若棧為空,令i=i+1。若i≤n,則轉入2),對下一個電源節點進行處理。若i>n,搜索完成,結束,n為所有電源節點的個數。
進一步地,所述步驟2中搜索以某個負荷為終點的所有路徑,過程為:遍歷按電源分類的所有路徑,對每一條路徑,判斷其終點處的節點是否為指定的負荷節點,若是,則將該路徑記錄。
搜索經過某一條支路的所有路徑,過程為:遍歷從電源出發的所有路徑,對每一條路徑中所包含的支路進行搜索,若含有指定的支路,則將該路徑記錄。
進而對圖中的每一個負荷節點,進行相應的搜索,可以得到按路徑終點的負荷分類的所有路徑,存入數組cnpathes中。用數組cnstart記錄非同一終點負荷節點的路徑在cnpathes中的起始位置。對圖中的每一條支路都進行相應搜索,可以得到按路徑中經過的支路分類的所有路徑,存入數組edgepathes中。用數組edgestart記錄非經過同一支路的路徑在edgepathes中的起始位置。
本發明中基于深度優先的配電網路徑搜索方法,該方法的時間復雜度為o(n3),空間復雜度為o(m2),其中,n為配電網中的節點個數,m為配電網中支路條數。該方法具有優異的時間復雜度和空間復雜度性能,在配電網分析中具有廣泛的實際應用價值。
與現有的方法相比,本發明的有益效果是:該方法搜索得到的三種路徑具有很強的規律性,能夠對配電網的運行給出充分的描述,可用在配電網重構、饋線供電能力分析、配電網n-1分析、負荷轉供路徑優化等眾多問題中。且方法保持了優越時間復雜度和空間復雜度性能,能夠準確和快速地搜索出配電網中的供電路徑。
附圖說明
圖1為本發明搜索配電網中所有供電路徑的方法的流程示意圖;
圖2為包含3個電源、5個負荷節點的配電網拓撲圖;
圖3為采用本發明方法從圖2中搜索得到由電源s1出發的所有路徑。
具體實施方式
下面結合附圖對本發明進一步說明。
本發明的方法是先獲得以每個電源為起點的所有路徑,具體采用一個堆棧結構來實現遍歷的遞歸過程,在堆棧中保留搜索過程經過的節點,保存路徑信息。每次搜索到一個節點,則對應的也有一條從電源到該節點的供電路徑p,即將當前棧中的節點依次相連,再將棧頂節點與新搜索到的節點相連得到的一條新的路徑。
對于新搜索到的節點,判斷是否滿足以下三個條件:該節點不存在于棧中;當前生成的該節點的供電路徑p不能與已經搜索到的路徑相同;該節點不為電源節點。若新搜索到的節點不滿足上述任一個條件,則繼續對棧頂元素的下一個鄰接點進行搜索;若都滿足,則令該節點入棧,并記錄新得到的路徑p。這樣保證不會遺漏也不重復記錄任何一條供電路徑。
再遍歷按電源分類的所有路徑,對每一條路徑,判斷其終點處的節點是否為指定的負荷節點,若是,則將該路徑記錄;遍歷從電源出發的所有路徑,對每一條路徑中所包含的支路進行搜索,若含有指定的支路,則將該路徑記錄。
該方法基于深度優先的思想,對配電網的拓撲圖進行遍歷,并按特定的條件篩選,得到配電網中所有的供電路徑。通過對搜索得到的路徑進行分類,最終得到三種供電路徑:按電源分類的所有供電路徑;按路徑終點的負荷分類的所有路徑;按路徑中經過的支路分類的所有路徑。該方法搜索得到的三種路徑具有很強的規律性,能夠對配電網的運行方式給出充分的描述,可用在配電網分析的眾多問題中,如配電網重構、饋線供電能力分析、配電網n-1分析、負荷轉供路徑優化等,且方法的時間復雜度和空間復雜度性能十分優越,具有廣泛的實際應用價值。
下面以如圖2所示的配電網拓撲圖為例說明本發明的主要思路,其中電源節點為s1、s2和s3。搜索得到的路徑用c1-c2…-cn的形式表示,其中c1、c2、…、cn表示路徑中包含的節點名稱。以s1為例說明路徑形成的過程。
首先s1入棧,成為棧頂節點,鄰接節點只有l2,判斷l2是否滿足上文所述入棧的3個條件:棧中不存在l2;已經找到的路徑中不存在s1-l2;l2不是電源節點。3個條件都滿足,l2入棧,得到路徑s1-l2。
繼續對l2的鄰接節點進行搜索:若搜索到s1,則s1已經在棧中,不能入棧;若搜索到l3或l5,則符合入棧的三個條件。假設先搜索到l3,則l3入棧得到路徑s1-l2-l3。
繼續從l3開始搜索,搜索到l1,則l1入棧,得到路徑s1-l2-l3-l1。
搜索l1的鄰接節點,其中s3為電源節點,l3已經在棧中,所以l1的鄰接節點都不滿足入棧的條件,則l1出棧。
此時棧頂元素為l3,繼續對l3的鄰接節點進行搜索。若再次搜索到l1,則生成的路徑為s1-l2-l3-l1。已經得到的路徑中包含該路徑,因此l1不再滿足入棧的條件。
搜索到下一個滿足入棧條件的節點為l4。
至此,節點入棧的三個條件中每個條件不滿足的情況都已經分別遇到,節點入棧和出棧的操作也已經涉及,后續的搜索中所遇到的情況將與之前的類似。搜索完成后得到的從電源s1出發的所有路徑如圖3所示。搜索獲得所有電源相應的所有路徑后,再遍歷按電源分類的所有路徑,對每一條路徑,判斷其終點處的節點是否為指定的負荷節點,若是,則將該路徑記錄;遍歷從電源出發的所有路徑,對每一條路徑中所包含的支路進行搜索,若含有指定的支路,則將該路徑記錄。
基于深度優先的配電網路徑搜索方法的優勢在于:通過特定的篩選條件,基于深度優先的思想,對配電網的拓撲圖進行遍歷,能夠不重復也不遺漏地得到配電網中所有的供電路徑。通過對搜索得到的路徑進行分類,全面地得到三種供電路徑:按電源分類的所有供電路徑;按路徑終點的負荷分類的所有路徑;按路徑中經過的支路分類的所有路徑。該方法最有價值的意義在于搜索得到的三種路徑具有很強的規律性,能夠對配電網的運行方式給出充分的描述,可用配電網重構、饋線供電能力分析、配電網n-1分析、負荷轉供路徑優化等問題中,且方法的時間復雜度和空間復雜度性能十分優越。