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

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

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

閱讀全文

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

熱點內容
dns最好的伺服器是什麼 瀏覽:61
下載運行的app後台怎麼撤出來 瀏覽:98
網易我的世界怎麼加材質給伺服器 瀏覽:760
app舊版本不更新怎麼操作 瀏覽:368
如何編譯ddwrt 瀏覽:65
命令行讀文件 瀏覽:352
phpjson轉多維數組 瀏覽:912
linuxboot修復 瀏覽:845
程序在線編譯系統的設計與實現 瀏覽:722
電腦c盤記錄存在哪個文件夾 瀏覽:155
演算法分析與設計替換方法 瀏覽:850
老程序員丟失手機 瀏覽:274
新世紀日本語pdf 瀏覽:85
基於單片機的數字示波器 瀏覽:38
登qq伺服器連接中什麼意思 瀏覽:439
表格宏命令 瀏覽:994
肯德基app設定在哪裡 瀏覽:473
蘋果電腦文件夾怎麼添加列印機 瀏覽:703
pythonswagger 瀏覽:235
作業打卡解壓素材 瀏覽:159