問題的本質(zhì)是一個(gè)多層圖交叉分支優(yōu)化的組合優(yōu)化NP-難問題,算法的目的是為了將復(fù)雜的AOE網(wǎng)絡(luò)分塊局部繪制再合并成整體運(yùn)用算法以實(shí)現(xiàn)最大化減少分支交叉的目的。
要實(shí)現(xiàn)的是多層次網(wǎng)絡(luò)繪制(總?cè)肟谠谙?,總出口在上所以?jié)點(diǎn)也是自下而上排的有向無環(huán)圖)就是數(shù)據(jù)結(jié)構(gòu)中的AOE網(wǎng)。初步想法是:
1. 多層次劃分子網(wǎng):
步驟:使用社區(qū)檢測(cè)算法(選擇最適合數(shù)據(jù)的算法,如不同的社區(qū)檢測(cè)算法像GeLouvain算法等,考慮使用Leiden算法,它是Louvain算法的改進(jìn)版,能夠更快地收斂并且通常能找到更優(yōu)的社團(tuán)結(jié)構(gòu))根據(jù)拓?fù)鋽?shù)據(jù)和聚類指標(biāo)對(duì)網(wǎng)絡(luò)進(jìn)行分層次劃分。
2. 確定子網(wǎng)的相對(duì)位置:
步驟:將同層次子網(wǎng)視作一個(gè)節(jié)點(diǎn),根據(jù)分層法和拓?fù)鋽?shù)據(jù)分析子網(wǎng)(劃分區(qū)域)之間的分支連通情況,運(yùn)用啟發(fā)式搜索算法進(jìn)行節(jié)點(diǎn)排序(只能左右,上下位置關(guān)系被AOE圖性質(zhì)和分層法相對(duì)定死)以確定各子網(wǎng)在總網(wǎng)中的層次關(guān)系及相對(duì)位置。
或者可以利用層次聚類算法(如自底向上的層次聚類)來幫助確定子網(wǎng)的層次關(guān)系和相對(duì)位置。
可以協(xié)商確認(rèn)
3. 明確各個(gè)子網(wǎng)的初步形狀:
步驟:根據(jù)子網(wǎng)的相對(duì)位置,初步確定每個(gè)子網(wǎng)的初步形狀,以方便后續(xù)兩步驟進(jìn)行操作。
(在設(shè)計(jì)初步形狀時(shí),可以考慮使用圖形優(yōu)化技術(shù)來減少節(jié)點(diǎn)的重疊和邊的交叉,提高圖形的可讀性)。
4. 對(duì)子網(wǎng)內(nèi)的節(jié)點(diǎn)排序:
步驟:根據(jù)子網(wǎng)所處的相對(duì)位置使用啟發(fā)式搜索算法(如蟻群算法)結(jié)合Sugiyama分層法(可能會(huì)用到虛擬坐標(biāo))對(duì)子網(wǎng)內(nèi)的節(jié)點(diǎn)進(jìn)行排序,以減少子網(wǎng)內(nèi)分支交叉,防止子網(wǎng)間連通分支穿透子網(wǎng)。(減少分支交叉,是一個(gè)多層圖分支交叉優(yōu)化的組合優(yōu)化問題)
5. 確認(rèn)具體坐標(biāo)進(jìn)行繪制:
步驟:連接各子網(wǎng)合并成總體網(wǎng)絡(luò)圖。使用Fruchterman-Reingold算法等來確定每個(gè)節(jié)點(diǎn)的具體坐標(biāo)。保證節(jié)點(diǎn)不重爹以及非交叉分支不匯集。
最后合成最終的效果圖那樣的一個(gè)橢圓形形狀總圖。
?。。‘?dāng)然算法都是我初步設(shè)想的可能有不合理你可以商量著換主要按照分塊局部到整體的繪制的思路來就行
做出來的最終效果圖不要兩個(gè)橢圓要合并成一個(gè)橢圓的總圖,保證所有有向邊的方向傾斜趨勢(shì)是向上的,確保是有向無環(huán)圖??!
因?yàn)槭墙M合優(yōu)化得NP難問題,交叉必不可免,但追求效果要實(shí)現(xiàn)最小化交叉分支數(shù)!