導航:首頁 > 源碼編譯 > 網路防禦路徑優化演算法代碼

網路防禦路徑優化演算法代碼

發布時間:2024-11-10 18:41:07

㈠ A*演算法優化

A演算法是游戲中路徑搜索的常見演算法。Dijkstra是最短路徑的經典演算法,A演算法的思路基本上和Dijkstra演算法一致,在Dijkstra演算法的基礎上增加了啟發函數,也就是:

f(n) = g(n) + h(n)

其中,n是路徑上某一點,g(n)是從出發點到該點的cost,h(n)是關於該點的啟發函數,通常是對從該點到目標花費的一個估計,例如到目標的直線距離或者曼哈頓距離。 A演算法每次選擇f(n)最小的點,然後更新所有g(n)。
如果你明白做源Dijkstra演算法,那麼在這里h(n) = 0 的話,A演算法就和Dijkstra演算法一樣了。
本文不詳細講橘羨解A演算法,需要詳細了解A演算法的具體過程的,參見以下兩篇文章:

理解A*演算法的具體過程
A*演算法詳解

A*演算法優化的關鍵在於h(n)的選擇。 一個啟發函數h(n)被稱為admissible的,是指h(n)的估計,不會超過節點N到目標的實際花費。
如果h(x)滿足以下條件,h(x)被稱為單調的(monotone, or consistent)。 對於任意一條邊(x,y),
h(x) <= d(x,y) + h(y)
其中d(x,y)是(x,y)的長度

如果滿足這個條件,就意味著沒有任何節點需要被處理多次,也就是說,在Dijkstra演算法中,新加入一個節點會導致已添加節點中cost降低的純伍態情況不會存在,也就不需要去更新已添加節點(稱為close set)。

如果一個啟發函數是單調的,那麼該啟發函數一定是admissible的。如果該啟發函數是admissible的,那麼可以證明A*在同類演算法中搜尋到最短的路徑。

問題出在這里:如果我們更在意的是搜索的時間空間花費,而不是最優結果,那麼A*演算法就有優化空間。所以我們放鬆要求,修改我們的啟發函數,使得我們搜尋到的路徑不會比最佳路徑差太多,就是優化演算法,稱為ε-admissible演算法。

有多種ε-admissible演算法,在此只舉例最簡單直接的一種: 加權A*(靜態加權)演算法。

假如ha(n)是一個admissible的啟發函數,我們選取新的啟發函數hw(n) = ε ha(n),其中ε>1 作為啟發函數。就可以在某種程度上進行優化。 下圖1是使用ha(n)作為啟發式演算法,下圖2是使用hw(n)作為啟發式演算法,其中ε取5.

圖1:ha(x)作為啟發演算法

圖2:hn(x)作為啟發演算法

可以看出,ha(n)可以找到最小路徑,但是多了許多無用的搜索;而hw(n)找到的不是最優路徑,但是減少了大量無用搜索。
其他的優化演算法思路類似都是在於啟發函數的選擇。詳見參考文獻。

參考文獻:
https://en.wikipedia.org/wiki/A*_search_algorithm#Admissibility_and_optimality https://en.wikipedia.org/wiki/Consistent_heuristic

㈡ 經典的網路優化演算法跟智能演算法,哪個跟好些譬如Dijkstra演算法和蟻群演算法。

Dijkstra演算法和蟻群演算法是有著本質不同的,屬於兩個范疇了,前者是確定性演算法,輸入一個圖,必定能產生一個可行結果。而後者是屬於啟發式演算法,有隨機因素。不一定能產生好的結果,但一般情況下由於存在啟發式因素和智能因素,能夠產生比較好的結果,但不能保證產生全局最優解。況且前者是一個針對性很強的演算法,只能用於最短路徑計算,而蟻群演算法可以用來解決一大類問題,比如圖演算法、數值優化、數據挖掘等等。

閱讀全文

與網路防禦路徑優化演算法代碼相關的資料

熱點內容
x2pdf 瀏覽:267
python源碼cs 瀏覽:99
數控機床自動編程軟體 瀏覽:736
方舟的伺服器號是什麼 瀏覽:109
沒有伺服器怎麼發現其他節點 瀏覽:337
文明傳奇怎麼開伺服器 瀏覽:56
javalistint 瀏覽:675
程序員到公司當領導 瀏覽:225
用演算法控制玩家的行為 瀏覽:482
androidsdk17下載 瀏覽:792
怎麼給單獨表格添加密碼 瀏覽:12
下載壓縮密碼 瀏覽:259
android系統上編程 瀏覽:470
單片機模擬i2c從機 瀏覽:238
教育年報系統伺服器如何開啟 瀏覽:842
對稱密鑰加密後的長度 瀏覽:294
微製造編程軟體下載 瀏覽:108
旋住宿酒店用哪個App最好 瀏覽:61
三菱編程中怎麼創建子程序 瀏覽:201
在單片機溫度輸入採集信號有 瀏覽:686