專利名稱:一種全節(jié)點遍歷路徑優(yōu)化方法
技術領域:
本發(fā)明屬于路徑規(guī)劃領域,特別應用于對源和宿沒有特殊規(guī)定的全節(jié)點遍歷路徑 規(guī)劃,其模型可應用于SMT(表面貼裝技術)自動檢測路徑規(guī)劃等實際問題。
背景技術:
路徑規(guī)劃作為一種抽象的數(shù)據(jù)模型,其原型可以是存在于任一領域的一個規(guī)劃問 題,以自動檢測為例,在工業(yè)自動化領域,很多自動檢測過程都是針對一個平面中的多個檢 測點檢查,由于大多數(shù)設備都是串行工作,需要在檢查完一個節(jié)點后再檢查另一個,路徑優(yōu) 化的好就可以明顯的節(jié)省時間,提高檢查效率。以SMT領域,焊點的自動光學檢測(AOI)為例,絕大多數(shù)檢測設備的工作方式是, 移動X、Y軸使被檢測的電路板(PCB)與取像的工業(yè)相機產(chǎn)生相對運動,移動相機到需要檢 查的位置上方進行曝光取像,獲得圖像后再通過檢測算法進行不良檢查。這樣,整個檢查時 間就由控制軸移動時間、相機曝光時間、檢測算法時間等3個不同的時間段的總和決定。由 于其中的檢測過程是純粹的軟件過程,可以與控制軸的運動過程和相機的報告過程并行處 理,也就是在軸運動和相機曝光的同時,計算機運行檢測算法進行不良檢查,而相機曝光時 間一般極小(毫秒級),整個檢查過程的時間花費主要歸結(jié)為控制軸移動的時間。因此,為 了提高檢測速度,縮短軸移動距離、提高電機速度就成了最直接有效的方法,任何電機的速 度都有其極限,而且高速電機的功率很高,啟動、停止時對設備機體的沖擊很大,價格也非 常昂貴,所以從設備綜合性能的角度來講,更好的優(yōu)化檢測過程的路徑,縮小軸移動的距離 才是縮小檢測時間最高效的手段。根據(jù)上面介紹的自動檢查方式,可以不失一般性的假設被檢測的電路板不運動, 只有相機在2維平面上進行運動。將相機停下曝光、檢測的過程抽象為一個節(jié)點,相機移動 路徑抽象為連接節(jié)點的邊,邊上的值為相機移動的距離。這樣,尋找最優(yōu)路徑的問題就轉(zhuǎn)化 為在檢測節(jié)點網(wǎng)絡中搜尋最優(yōu)的遍歷路徑。由于實際檢測中,相機可以在任意兩個節(jié)點間 移動,所以這個網(wǎng)絡為一個全向全連通圖。又由于裝載、卸載電路板的過程存在,使得相機 可以并行的移動到出發(fā)節(jié)點或從最終節(jié)點回到原點,所以遍歷過程的源節(jié)點和宿節(jié)點可以 是任意的。理論上,尋找一個圖的最優(yōu)遍歷路徑是一個NP完全問題,也就是不可能在有限時 間得到真正的最優(yōu)解,因此大多數(shù)檢測設備都是以橫向或者縱向優(yōu)先的方法取得S型路 徑,或者從外到內(nèi)獲得螺旋形的路徑。這幾種常用的方法在檢測點足夠密集的情況下與最 優(yōu)遍歷路徑比較相似,但是當節(jié)點網(wǎng)絡不是很密集甚至是稀疏的情況下,會帶來很大的浪 費,如圖2所示的情況。而在實際的檢測過程中,由于被檢測的電路板形狀、大小經(jīng)常會變 化,電路板上元件的布局也非常不固定,所以固定的S型路徑和螺旋型路徑基本上不可能 得到最優(yōu)路徑的近似。
發(fā)明內(nèi)容
為了解決上述問題,提高自動檢測效率,本發(fā)明提供了一種高效、可靠的全節(jié)點遍 歷路徑尋優(yōu)方法。所述方法具體包括—種全節(jié)點遍歷路徑優(yōu)化方法,其特征在于,所述方法包括以下步驟步驟A、根據(jù)需要解決的問題構(gòu)建節(jié)點網(wǎng)絡,在可能出現(xiàn)分支的地方建立節(jié)點,以 從一個節(jié)點到另一個節(jié)點的花費作為該有向邊的值;步驟B、構(gòu)建節(jié)點網(wǎng)絡的最小生成樹;步驟C、根據(jù)最小生成樹,以新增邊花費最小為原則,對所有有分支的節(jié)點,逐一去 除分支并建立端點間的連接;步驟D、不斷重復步驟C直到網(wǎng)絡的最小生成樹每個節(jié)點都沒有分支,轉(zhuǎn)化為節(jié)點 單向隊列,從而生成優(yōu)化后的遍歷路徑。優(yōu)選的,所述步驟B中的節(jié)點網(wǎng)絡一般為雙向或者全向網(wǎng)絡,所述的雙向網(wǎng)絡是 指兩個連通的節(jié)點間的邊是有向的,即對于連通的A、B節(jié)點,無論從A節(jié)點到B節(jié)點還是從 B節(jié)點到A節(jié)點都是可行的(如果A、B節(jié)點間是單向連通的,則只能從A到B,不能從B到 A)。所述全向網(wǎng)絡是指網(wǎng)絡中任一個節(jié)點和網(wǎng)絡中的所有其他節(jié)點間都是雙向連通的。兩 個節(jié)點間的邊代表從一個節(jié)點到另一個節(jié)點間的花費。其中所述花費是節(jié)點間的距離,在其他應用中也可以是時間、金錢等其他代價,所 以在本發(fā)明中對于花費并不僅僅限定于節(jié)點之間的距離。優(yōu)選的,所述步驟B中構(gòu)建最小生成樹的具體步驟為優(yōu)選但不限于使用Prim算 法構(gòu)建網(wǎng)絡的最小生成樹。優(yōu)選的,在所述步驟A中,根據(jù)需要解決的問題構(gòu)建節(jié)點網(wǎng)絡,其方法為根據(jù)具體問題,在可能出現(xiàn)分支的地方建立節(jié)點;以從一個節(jié)點到另一個節(jié)點的花費作為該有向邊的值;優(yōu)選的,所述步驟C包括以下具體步驟(1)根據(jù)構(gòu)建的最小生成樹建立節(jié)點間的連通矩陣;優(yōu)選的,矩陣橫縱坐標均為 節(jié)點索引,矩陣值代表橫縱坐標節(jié)點對間是否連通,連通的值為1,不連通的值為0 ;(2)根據(jù)構(gòu)建的最小生成樹建立有分支的節(jié)點隊列優(yōu)選的,節(jié)點隊列中的每個 節(jié)點最少包含節(jié)點序號和分支個數(shù)兩個信息;(3)根據(jù)構(gòu)建的最小生成樹建立端點節(jié)點的隊列;優(yōu)選的,端點隊列中的每個節(jié) 點最少包含節(jié)點序號信息;(4)對分支節(jié)點隊列的每一個節(jié)點,試探性切斷節(jié)點的一個分支,同時建立端點間 的一個新連接,記錄網(wǎng)絡增加的花費(網(wǎng)絡增加的花費是指新增邊的花費和被截斷邊花費 的差值);優(yōu)選的,在切斷節(jié)點分支時,臨時性的將分支節(jié)點隊列中的該節(jié)點分支數(shù)減1,將 新連接的端點的分支數(shù)加1 ;(5)以增加花費最小為準則,對有分支節(jié)點逐一去掉其它分支,直到保留花費最小 的單向連接。增加的花費是新增邊和去除邊的花費差,去分支時一個有分支的節(jié)點最少有3 個分支可以選擇,如圖5中的N0.4節(jié)點,新增的連接也有很多選擇,而去掉不同分支時,端 點的情況也不一樣,也就是新增連接的候選也不一樣,所以需要一個準則來決定去掉哪個 新增哪個,這個準則就是新增的花費減去去掉的花費最小。要把新增連接的花費和去除分
4支的花費當做一個整體看,就是整個網(wǎng)絡的新增花費;(6)更新連通矩陣;優(yōu)選的,將新增加的連通的端點設為1,斷開的分支位置設為0 ;(7)更新分支節(jié)點隊列;優(yōu)選的,從節(jié)點隊列中去掉沒有分支的節(jié)點;(8)更新端點隊列。優(yōu)選的,從端點隊列中去掉新建立連接后的兩個端點;優(yōu)選的,所述步驟(4)中建立端點間新連接的操作中需要檢查新建立的連接是否 會使節(jié)點的拓撲結(jié)構(gòu)中出現(xiàn)環(huán),如果使環(huán)結(jié)構(gòu)出現(xiàn)則不能建立該連接。優(yōu)選的,檢查環(huán)結(jié)構(gòu)出現(xiàn)的具體步驟為(9)以端點隊列中的一個端點為起始點,通過連通矩陣檢查與該端點連接的其他 端點,所有相連的端點都以該端點序號作為標記;(10)再檢查與已標記節(jié)點相連接的節(jié)點,以同樣的值標記未標記的節(jié)點;(11)重復上一步驟,直到相連接的所有節(jié)點都被標記;(12)檢查網(wǎng)絡中的所有節(jié)點,如果所有節(jié)點都被標記,則表示所有節(jié)點間是連通 的,沒有環(huán)結(jié)構(gòu),否則,代表網(wǎng)絡中出現(xiàn)環(huán)結(jié)構(gòu),網(wǎng)絡已不是全連通的。優(yōu)選的,所述步驟D的具體步驟為重復步驟(4)至步驟(8),直到分支節(jié)點隊列為空,端點隊列中只有2個端點。優(yōu)選的,端點隊列的2個端點一個為起點,一個為終點,從起點出發(fā)通過連通矩陣 可以得到節(jié)點遍歷路徑。優(yōu)選的,在得到優(yōu)化好的路徑后,還可以按橫向或縱向優(yōu)先的方式即S路徑方式, 或者螺旋路徑方式,得到另一遍歷路徑作為備份路徑。優(yōu)選的,在得到優(yōu)化好的路徑后,通過和備份路徑比較花費,選取花費最小的路徑 作為優(yōu)化后的遍歷路徑。
圖1是全節(jié)點遍歷路徑優(yōu)化簡要流程圖;圖2是一種可能的檢測點分布示意圖;圖3是全節(jié)點遍歷路徑優(yōu)化方法流程圖;圖4是節(jié)點去分支過程的流程圖;圖5是環(huán)結(jié)構(gòu)生成示意圖。
具體實施例方式下面根據(jù)說明書附圖并結(jié)合優(yōu)選實施例對本發(fā)明的技術方案作進一步詳細說明。 在此,本發(fā)明的示意性實施例及說明用于解釋本發(fā)明,但并不作為對本發(fā)明的限定。如圖1所示為全節(jié)點遍歷路徑優(yōu)化簡要流程圖,包括以下步驟步驟A、根據(jù)需要解決的問題構(gòu)建節(jié)點網(wǎng)絡,在可能出現(xiàn)分支的地方建立節(jié)點,以 從一個節(jié)點到另一個節(jié)點的花費作為該有向邊的值;步驟B、構(gòu)建節(jié)點網(wǎng)絡的最小生成樹;步驟C、根據(jù)最小生成樹,以新增邊花費最小為原則,對所有有分支的節(jié)點,逐一去 除分支并建立端點間的連接,其中所述邊花費指兩個節(jié)點間的邊長;步驟D、不斷重復步驟C直到網(wǎng)絡的最小生成樹每個節(jié)點都沒有分支,轉(zhuǎn)化為節(jié)點單向隊列,從而生成優(yōu)化后的遍歷路徑。在得到優(yōu)化好的路徑后,還進一步按橫向或縱向優(yōu)先的方式即S路徑方式得到另 一遍歷路徑作為備份路徑。通過和備份路徑比較花費,選取花費最小的路徑作為優(yōu)化后的 遍歷路徑。本發(fā)明公開的一種高效的全節(jié)點遍歷路徑優(yōu)化方法在本實施例的應用參見圖3, 具體步驟如下步驟301、為本實施例構(gòu)建節(jié)點網(wǎng)絡。本實施例為X、Y平面自動檢測路徑規(guī)劃,網(wǎng)絡中的節(jié)點為預先規(guī)劃好的檢測點, 網(wǎng)絡中的邊為相應節(jié)點間的距離,由于本實施例中,設備可以從一個檢測點移動到任一一 其他檢測點,所以所有節(jié)點間都有邊,而且邊的方向為雙向的,構(gòu)建的網(wǎng)絡為連通完全圖。由于所有檢查點都必須經(jīng)過并進行檢查,而且實際應用中對檢查過程的起始點和 終點并不做要求,所以本方法的目標是在構(gòu)建好的連通網(wǎng)絡中尋找最短的遍歷路徑,同時 并不做源和宿位置的限制。步驟302、獲得節(jié)點網(wǎng)絡的最小生成樹。網(wǎng)絡的最小路徑遍歷問題是一個NP完全問題,無法在有限的時間內(nèi)得到最優(yōu)解。 使用基本的深度優(yōu)先或者廣度優(yōu)先方法得到的遍歷路徑,在實際應用中意味著出現(xiàn)走回頭 路的情況,顯然不是最優(yōu)路徑。最小生成樹可以得到節(jié)點的最近鄰居,是尋找最優(yōu)路徑的很 好的出發(fā)點。本實施例中使用Prim算法獲得網(wǎng)絡的最小生成樹,當然實際應用時也可以采 用別的方法,本發(fā)明并不限制獲得最小生成樹的方法。步驟303、建立連通矩陣。根據(jù)獲得的最小生成樹建立連通矩陣,可以使用2維數(shù)組的方式存儲,不連通的 節(jié)點對使用0標記,連通的使用1標記。步驟304、建立有分支的節(jié)點隊列。根據(jù)獲得的最小生成樹搜索有分支的節(jié)點,將這些節(jié)點按隊列或者數(shù)組的方式存 儲,每個節(jié)點結(jié)構(gòu)中應該至少包括節(jié)點序號、分支數(shù)等信息。步驟305、建立端點節(jié)點隊列。根據(jù)獲得的最小生成樹建立端點節(jié)點隊列,端點節(jié)點是最小生成樹上只有一個鄰 居,也就是只有一條邊的節(jié)點,端點節(jié)點的隊列同樣可以按隊列或者數(shù)組的方式存儲,每個 節(jié)點結(jié)構(gòu)中應該包括節(jié)點序號、鄰居序號的信息。步驟306、去掉分支節(jié)點的一個分支,建立一個端點間的新連接。去掉最小生成樹 的分支并且建立新連接的準則為新增邊花費最小,具體方法如附圖4所示,步驟如下步驟401、對當前節(jié)點的所有分支,取其中的某一分支截斷。分支截斷后,需要更新 與該邊相關的節(jié)點連通矩陣和端點隊列、分支節(jié)點隊列。步驟402、如果分支截斷以后,新增加了端點,則在端點隊列中加入該節(jié)點。步驟403、在端點隊列中查找花費最小的端點節(jié)點對,連接起來。在建立新連接的時候需要檢查該連接是否會導致環(huán)形結(jié)構(gòu)的出現(xiàn)。附圖5是產(chǎn)生 環(huán)結(jié)構(gòu)的一個例子。如果打斷No. 4和No. 6節(jié)點的連接,同時對No. 8節(jié)點和No. 9節(jié)點建 立新連接,這時No. 6、No. 7、No. 8、No. 9節(jié)點會形成環(huán)結(jié)構(gòu)。檢查環(huán)結(jié)構(gòu)的方法如下(1)以端點隊列中的一個端點為起始點,通過連通矩陣檢查與該端點連接的其他
6端點,所有相連的端點都以該端點序號作為標記;(2)再檢查與已標記節(jié)點相連接的節(jié)點,以同樣的值標記未標記的節(jié)點;(3)重復上一步驟,直到相連接的所有節(jié)點都被標記;(4)檢查網(wǎng)絡中的所有節(jié)點,如果所有節(jié)點都被標記,則表示所有節(jié)點間是連通 的,沒有環(huán)結(jié)構(gòu),否則,代表網(wǎng)絡中出現(xiàn)環(huán)結(jié)構(gòu),網(wǎng)絡已不是全連通的。步驟404、計算最小生成樹上新增路徑的花費。新增路徑的花費為新增邊的花費和被截斷邊花費的差值。步驟405、比較新增的花費是否是最小花費(每次計算的花費和之前累積的去比, 總是保留最小的那個)。步驟406、如果是新增花費最小的選擇,則記錄新增路徑花費的值,被截斷的邊,以 及新連接的端點狀況。步驟407、針對節(jié)點的所有分支進行步驟401-步驟406操作,最終輸出新增花費最 小時的截斷分支和新增端點連接情況。步驟307、根據(jù)步驟407輸出的結(jié)果,更新連通矩陣。被截斷的邊的對應位置設為0,新增邊的對應位置設為1。步驟308、根據(jù)步驟407輸出的結(jié)果,更新分支節(jié)點隊列。從分支節(jié)點隊列中去掉已經(jīng)沒有分支的節(jié)點。步驟309、根據(jù)步驟407輸出的結(jié)果,更新端點隊列。
從端點隊列中去掉新建連接時所用的端點。步驟310、檢查網(wǎng)絡中的分支節(jié)點情況,如果網(wǎng)絡中還要分支節(jié)點則重復步驟306 一步驟309,直到網(wǎng)絡中不再有分支節(jié)點為止。網(wǎng)絡中的分支節(jié)點情況可以從分支節(jié)點隊列或者網(wǎng)絡的連通矩陣獲得。循環(huán)結(jié)束時,分支節(jié)點隊列應該為空,端點隊列應該只有2個節(jié)點。步驟311、生成優(yōu)化后的路徑。根據(jù)端點隊列中保存的節(jié)點信息,以一個節(jié)點為起點,另一個節(jié)點為終點,由網(wǎng)絡 的連通矩陣構(gòu)建起點到終點的節(jié)點隊列,即為優(yōu)化后的路徑。步驟312、生成備份路徑。由最初網(wǎng)絡狀態(tài),以S型路徑或者螺旋形路徑的方式,生成網(wǎng)絡的遍歷路徑,用作 優(yōu)化路徑的備份。步驟314、比較步驟311生成的優(yōu)化路徑和步驟312生成的備份路徑的花費,取花 費最小的為最終的優(yōu)化路徑。以上所述僅是本發(fā)明的優(yōu)選實施方式,應當指出,對于本技術領域的普通技術人 員來講,在不脫離本發(fā)明原理的前提下,還可以作出若干改進和潤飾,這些改進和潤飾也應 視為本發(fā)明的保護范圍。
權(quán)利要求
1.一種全節(jié)點遍歷路徑優(yōu)化方法,其特征在于,所述方法包括以下步驟步驟A、根據(jù)需要解決的問題構(gòu)建節(jié)點網(wǎng)絡,在可能出現(xiàn)分支的地方建立節(jié)點,以從一 個節(jié)點到另一個節(jié)點的花費作為該有向邊的值;步驟B、構(gòu)建節(jié)點網(wǎng)絡的最小生成樹;步驟C、根據(jù)最小生成樹,以新增花費最小為原則,對所有有分支的節(jié)點,逐一去除分支 并建立端點間的連接;步驟D、不斷重復步驟C直到網(wǎng)絡的最小生成樹每個節(jié)點都沒有分支,轉(zhuǎn)化為節(jié)點單向 隊列,從而生成優(yōu)化后的遍歷路徑。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟B中的節(jié)點網(wǎng)絡為雙向或者全向 網(wǎng)絡,兩個節(jié)點間的邊代表從一個節(jié)點到另一個節(jié)點間的花費。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟B優(yōu)選但不限于使用Prim算法 構(gòu)建網(wǎng)絡的最小生成樹。
4.根據(jù)權(quán)利要求1所述的方法,所述步驟C優(yōu)選進一步包括以下具體步驟(1)根據(jù)構(gòu)建的最小生成樹建立節(jié)點間的連通矩陣;(2)根據(jù)構(gòu)建的最小生成樹建立有分支的節(jié)點隊列(3)根據(jù)構(gòu)建的最小生成樹建立端點節(jié)點的隊列;(4)對分支節(jié)點隊列的每一個節(jié)點,試探性切斷該分支節(jié)點的一個分支,同時從端點 節(jié)點的隊列中找出距離最近的兩個端點節(jié)點,在其間建立一個新連接,記錄網(wǎng)絡增加的花 費;(5)以增加花費最小為準則,對有分支節(jié)點逐一去掉其它分支,直到保留花費最小的單 向連接;(6)更新連通矩陣;(7)更新分支節(jié)點隊列;(8)更新端點節(jié)點隊列。
5.根據(jù)權(quán)利4所述的方法,其特征在于,在距離最近的兩個端點節(jié)點間建立新連接時, 還需要檢查新建立的連接是否會使節(jié)點的拓撲結(jié)構(gòu)中出現(xiàn)環(huán),如果使環(huán)結(jié)構(gòu)出現(xiàn)則不能建 立該連接。
6.根據(jù)權(quán)利1所述的方法,其特征在于,所述在步驟D中,所述節(jié)點單向隊列是指節(jié)點網(wǎng)絡變成單向連通的隊列。此時分支節(jié)點隊列為空,端點 隊列中只有2個端點。
7.根據(jù)權(quán)利6所述方法,其特征在于,端點隊列的2個端點一個為起點,一個為終點,從 起點出發(fā)通過連通矩陣可以得到節(jié)點遍歷路徑。
8.根據(jù)權(quán)利1所述方法,其特征在于,在得到優(yōu)化好的路徑后,還需要對原始節(jié)點網(wǎng)絡 按橫向或縱向優(yōu)先的方式即S路徑方式得到另一遍歷路徑作為備份路徑。
9.根據(jù)權(quán)利8所述方法,其特征在于,在得到優(yōu)化好的路徑后,通過和備份路徑比較花 費,選取花費最小的路徑作為優(yōu)化后的遍歷路徑。
全文摘要
本發(fā)明提供了一種高效快速的全節(jié)點遍歷路徑優(yōu)化的方法,最終生成一個單向的節(jié)點隊列路徑。本方法包括以下幾個步驟首先根據(jù)需要解決的實際問題構(gòu)建節(jié)點網(wǎng)絡,該網(wǎng)絡可以是全向網(wǎng)絡,以節(jié)點間的邊記錄路徑花費;然后對全部節(jié)點建立最小生成樹,針對生成樹上的所有分支和端點建立隊列;之后通過試探性的算法對有分支的節(jié)點逐一切斷各個分支,每切斷一個分支就根據(jù)端點隊列搜索距離最小的端點對進行連接,不斷進行這步操作,直到原最小生成樹中的所有分支都被斷開,所有節(jié)點連接成一個單向隊列。在建立新的端點連接時,本方法還提供一種檢測機制以避免新連接使節(jié)點隊列形成一個環(huán),從而避免路徑中有節(jié)點丟失。此外本發(fā)明中還包括一個橫向或縱向優(yōu)先的路徑作為優(yōu)化路徑的備選,以提高整個方法的可靠性。
文檔編號G06F17/50GK102004839SQ201010594468
公開日2011年4月6日 申請日期2010年12月17日 優(yōu)先權(quán)日2010年12月17日
發(fā)明者李鵬杰, 鄭眾喜 申請人:北京優(yōu)納科技有限公司