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

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

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

閱讀全文

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

熱點內容
伺服器瀏覽記錄能看到什麼 瀏覽:116
她說程序員不懂浪漫 瀏覽:1004
反甲被動演算法 瀏覽:102
破解NFC二級加密 瀏覽:301
CAD參照編輯的命令 瀏覽:891
python文本挖掘分類 瀏覽:494
硬碟加密位置不可用 瀏覽:544
北宋時期數據加密的方法 瀏覽:277
linux命令行bash 瀏覽:871
php攻擊馬 瀏覽:524
php開發框架哪個好用 瀏覽:669
php網站開發案例教程源碼交流 瀏覽:825
ipone耳機怎麼連接安卓手機 瀏覽:975
pdf變色 瀏覽:379
怎麼對加密文件進行備份 瀏覽:557
如何給帶raid伺服器安裝系統 瀏覽:654
windows命令打開文件 瀏覽:483
php個人簡歷模板 瀏覽:911
sshkeygenlinux 瀏覽:655
java包的創建 瀏覽:682