一、背景
2023年, tutte提出的質心法被公認為是第乙個事實上的力導向演算法。2023年, eades提出了一種電荷彈簧模型, 以帶電環代替圖的頂點, 彈簧代替圖的邊, 嘗試用物理方法畫圖, 從而開拓了力導向演算法的新思路。該演算法首先為圖中各頂點賦予隨機的初始位置, 然後系統在電荷之間的斥力和彈簧的彈力作用下, 不停地運動, 直至達到穩定平衡的狀態。
其中力導向演算法是屬於資訊視覺化範疇內的一種經典演算法。而視覺化發展的三個方向: 科學視覺化、資訊視覺化和可視分析。其中圖的布局策略往往決定了整個圖的展示效果。布局策略有很多種,諸如力導向布局、樹布局、群組布局、光譜布局(spectral layout)。資訊視覺化的目標是圖畫迅速且清晰地傳達其背後資訊的能力,平面圖以及美學、演算法效率等則構成評價演算法優良的尺度。
purchase總結了目前業內公認的一般美學原則:
(1) 最小化邊交叉(edge crossing), 即任意兩條邊交叉於一點的情況應盡量少發生;
(2) 最小化邊彎曲(edge bend), 即應盡量避免產生彎曲的邊;
(3) 最大化對稱性;
(4) 最大化角辨識度(angle resolution)
(5) 群組到角原則
二、概念
基於力導向的演算法是彈簧理論演算法中的一種典型演算法。我們可以將整個網路圖想象成虛擬的物理系統,系統中的每個節點都可以看成是具有一定能量的放電粒子,粒子與粒子之間存在著庫侖斥力和胡克引力。在粒子間的斥力和引力的不斷作用下,粒子們從開始的隨機無序狀態不斷發生位移,逐漸趨於平衡有序穩定的終態。同時整個物理系統的能量也在不斷消耗,經過數次迭代後,粒子之間幾乎不再發生相對位移,整個系統達到一種穩定平衡的狀態,即能量趨於零。此刻,最終的這幅理想的社交網路圖也基本繪製完成。
這種方法的缺點是不收斂,總是有節點在兩個不同位置上來回振動,雖然不會收斂,但是來回振動時的配置通常也最終可達到某種穩定的狀態,因此實際的執行都以指定執行的次數來決定停止的條件。另外乙個問題就是網狀圖的節點數太多時,也無法求得令人滿意的結果。當開始配置不好的情況下,通常是力導向演算法的配置結果也不是很好,所以使用力導向演算法通常會配合乙個初始配置的演算法,以達成較滿意的網狀配置。
力導向演算法的想法很簡單,且容易使用和修改以滿足需求。我們可更改網狀圖的初始位置以加快收斂,也可根據不同的要求加入不同種類的力,另外,演算法過程中雖然沒有特別針對網狀圖的對稱性進行配置,但是當網狀圖中存在對稱關係時也能獲得較好的結果。力導向演算法的缺陷是在初始配置不佳的時候所得到的網狀圖也不會很好,所以可根據網狀資料的特性是否選擇該演算法。
三、原理
清單1.力導向核心演算法實現偽**
set up initial node positions randomly //建立初始隨機節點位置
loop for k //迭代次數
for each node u //遍歷點
for each node v
net-force += coulomb_repulsion( u, v ) //庫侖斥力
end for
end for
for each edge e compute //遍歷邊
net-force += hooke_attraction( u1, u2 ) //u1, u2 is start and end node of edge e 胡克吸引力
end for
update x and y values with each net-force // every node has its own net-force//更新節點位置
end loop
偽**的整體思想歸納如下:
1、隨機分布初始節點位置;
2、計算每次迭代區域性區域內兩兩節點間的斥力所產生的單位位移(一般為正值);
3、計算每次迭代每條邊的引力對兩端節點所產生的單位位移(一般為負值);
4、步驟 2、3 中的斥力和引力係數直接影響到最終態的理想效果,它與節點間的距離、節點在系統所在區域的平均單位區域均有關,需要開發人員在實踐中不斷調整;
5、累加經過步驟 2、3 計算得到的所有節點的單位位移;
6、迭代 n 次,直至達到理想效果。
該演算法的平均時間複雜度是由兩部分組成——每次迭代計算每兩點間的斥力變化 o(n2) 和每條邊給端點帶來的引力變化 o(e),共進行 k 次迭代計算,即 o (k * (n2+e) )。其中 n 為節點個數,e 為邊數。
四、應用
文件布局、 uml 用例圖和類圖、電路圖布局等實際問題。
五、參考資料
1.2.
3.曾新紅, 蔡慶河, 黃華軍,等. 基於力導向模型的非一致節點群組布局視覺化演算法研究[j]. 現代圖書情報技術, 2014(9):33-43.
4.徐本柱, 程光春, 李忠澤,等. 基於力導向演算法的線束連線圖自動布局研究[j]. 圖學學報, 2010, 31(6):171-177.
GOAP 目標導向型行為計畫 AI 演算法
全稱 goal oriented action planning 參考 goap 是讓 ai 自己去找到解決問題的方法,我們給ai 提供可以執行的行為,對世界的描述,每個行為執行的先決條件,以及執行行為對世界產生的影響效果。ai 需要有目標 乙個或多個均可 通過世界狀態,根據自身行為,找到一組或多組...
Camshift演算法研究
根據獲得的色彩直方圖將原始影象轉化成色彩概率分布影象,這個過程就被稱作 back projection 在opencv 中的直方圖函式中,包含back projection 的函式,函式原型是 void cvcalcbackproject iplimage img,cvarr backproject...
Diff演算法研究
在unix linux的世界裡面,如果我們需要比較兩個檔案,就會用乙個比較的命令 diff。而這個diff的原理是什麼呢?在diff裡面,我們比較的兩個檔案叫做old和new,而一般是按行來比較。這裡我們可以抽象成乙個字串的比較,比如 old abcdefger new abdefereger 那麼...