學生一枚,在網上學習的過程中發現csdn、、知乎上的一些文章被一些人抄來抄去,個人覺得很沒意思;有些**對初學者很不友好,因為門檻很高,例如,我本意是要學習某個庫的介面函式a,結果搜到的**給我介紹其他函式b、函式c、函式d,結果我需要把函式abcd全部學一遍才能get到我想學習的函式a,這無形之中就加重了我的學習負擔;有些講解也邏輯不夠清晰,讓初學者摸不著頭腦。
希望總結一下學習過程中的注意事項以及感悟,幫助和我一樣的其他初學者少踩一些坑,因為坑真的很多。
一. 基本定義
啟發式演算法heuristic algorithm,heuristic這個單詞本意就包括「啟發」「探索」等含義,相應的,啟發式演算法本質可以理解為是一種試探性的搜尋方法,也可以理解為通過隨機性不斷的找到乙個問題的更好的解。
二. 相關名稱
這些名稱不一定有準確的範圍,有學術化的叫法也有口語化的叫法,多數時候這些名稱的含義相同,所以不要糾結演算法的名稱,理解演算法的原理最重要!
三. 需要注意的地方:
1. 啟發式演算法只是解決問題的一種框架
也可以說是一種套路,啟發式演算法需要聯絡具體問題,問題的建模、搜尋過程與啟發式演算法框架合理的結合,才能體現出比較好的效果。(結合越緊密,搜尋效率也就越高,效果也就越好。對於這一點的理解只有實踐後才能深入體會,剛接觸啟發式演算法的人,可能成功讓演算法跑起來並且通過迭代不斷找到更好的解就已經興奮不已了,我當初就是這樣)
2. 啟發式演算法的各種新式命名層出不窮,掌握經典演算法才是最關鍵的
接觸過博士畢業**答辯,**評審專家的意見包含這麼一條,大概意思是,「阿貓阿狗」各種演算法很多,你的演算法和他們有什麼區別或者改進。「阿貓阿狗」這個詞我記的特別清楚,說明現在各種新式命名有些氾濫了。
目前,很多演算法可以認為是換湯不換藥。對於應用啟發式演算法的應用者來說,掌握經典演算法並理解其思路就行了,其他很多演算法都是衍生出的演算法,意義不是太大。
經典的五種方法包括:遺傳演算法,粒子群演算法,蟻群演算法,禁忌搜尋,模擬退火。
啟發式與元啟發式演算法
啟發式演算法 heuristic algorigthm 是一種基於直觀或經驗構造的演算法,在可接受的花費 指計算時間 計算空間等 給出待解決優化問題的每一例項的乙個可行解,該可行解與與最優解的偏離程度一般不可以事先預計。啟發式演算法是一種技術,這種演算法可以在可接受的計算費用內找到最好的解,但不一定...
啟發式演算法和元啟發式演算法
是一種基於直觀或經驗構造的演算法,在可接受的花費 指計算時間 計算空間等 給出待解決優化問題的每一例項的乙個可行解,該可行解與與最優解的偏離程度一般不可以事先預計。啟發式演算法是一種技術,這種演算法可以在可接受的計算費用內找到最好的解,但不一定能保證所得到解的可行性及最優性,甚至大多數情況下無法闡述...
啟發式演算法與元啟發式演算法
相對與精確演算法提出的。是一種群體智慧型演算法。平衡區域性最優解與全域性最優解。啟發式演算法可以這樣定義 乙個基於直觀或經驗構造的演算法,在可接受的花費 指計算時間和空間 下給出待解決組合優化問題每乙個例項的乙個可行解,該可行解與最優解的偏離程度一般不能被預計。許多啟發式演算法是相當特殊的,依賴於某...