啟發演算法a
A. 啟發式演算法的介紹
啟發式演算法(heuristic algorithm)是相對於最優化演算法提出的。一個問題的最優演算法求得該問題每個實例的最優解。啟發式演算法可以這樣定義:一個基於直觀或經驗構造的演算法,在可接受的花費(指計算時間和空間)下給出待解決組合優化問題每一個實例的一個可行解,該可行解與最優解的偏離程度一般不能被預計。
B. 人工智慧要考試了 還有好多不會 請教有哪五種常用的啟發式演算法A演算法和A*演算法是嗎
都算的。
其它的常見演算法還有:
模擬退火演算法(Simulated Annealing Algorithm);
蟻群演算法(Ant Algorithm);
禁忌搜索演算法(Tabu Search Algorithm);
神經網路演算法(Neural Network Algorithm);
遺傳演算法(Genetic Algorithm)
希望對你有幫助^^
C. 對 啟發式演算法的理解
什麼是啟發式演算法轉自:p://blog.csdn.net/aris_zzy/archive/2006/05/27/757156.aspx引言:
解決實際的問題,要建模型,在求解。求解要選擇演算法,只有我們對各種演算法的優缺點都很熟悉後才能根據實際問題選出有效的演算法。但是對各種演算法都了如指掌是不現實的,但多知道一些,會使你的選擇集更大,找出最好演算法的概率越大。現在研一,要開題了些點文獻綜述,願與大家分享。大自然是神奇的,它造就了很多巧妙的手段和運行機制。受大自然的啟發,人們從大自然的運行規律中找到了許多解決實際問題的方法。對於那些受大自然的運行規律或者面向具體問題的經驗、規則啟發出來的方法,人們常常稱之為啟發式演算法(Heuristic Algorithm)。現在的啟發式演算法也不是全部來自然的規律,也有來自人類積累的工作經驗。啟發式演算法的發展:
啟發式演算法的計算量都比較大,所以啟發式演算法伴隨著計算機技術的發展,取得了巨大的成就。
40年代:由於實際需要,提出了啟發式演算法(快速有效)。
50年代:逐步繁榮,其中 貪婪演算法和局部搜索 等到人們的關注。
60年代: 反思,發現以前提出的啟發式演算法速度很快,但是解得質量不能保證,而且對大規
模的問題仍然無能為力(收斂速度慢)。啟發式演算法的不足和如何解決方法:
(水平有限 僅僅提出6點)
啟發式演算法目前缺乏統一、完整的理論體系。
很難解決! 啟發式演算法的提出就是根據經驗提出,沒有什麼堅實的理論基礎。
由於NP理論,啟發式演算法就解得全局最優性無法保證。
等NP?=P有結果了再說吧,不知道這個世紀能不能行。
各種啟發式演算法都有個自優點如何,完美結合。
如果你沒有實際經驗,你就別去干這個,相結合就要做大量嘗試,或許會有意外的收獲。
啟發式演算法中的參數對演算法的效果起著至關重要的作用,如何有效設置參數。
還是那句話,這是經驗活但還要悟性,只有try again………..
啟發演算法缺乏有效的迭代停止條件。
還是經驗,迭代次數100不行,就200,還不行就1000…………
還不行估計就是演算法有問題,或者你把它用錯地方了………..
啟發式演算法收斂速度的研究等。
你會發現,沒有完美的東西,要快你就要付出代價,就是越快你得到的解也就遠差。其中(4)集中反映了超啟發式演算法的克服局部最優的能力。雖然人們研究對啟發式演算法的研究將近50年,但它還有很多不足:1.啟發式演算法目前缺乏統一、完整的理論體系。2.由於NP理論,各種啟發式演算法都不可避免的遭遇到局部最優的問題,如何判斷3.各種啟發式演算法都有個自優點如何,完美結合。4.啟發式演算法中的參數對演算法的效果起著至關重要的作用,如何有效設置參數。5.啟發演算法缺乏有效的迭代停止條件。6.啟發式演算法收斂速度的研究等。
70年代:計算復雜性理論的提出,NP問題。許多實際問題不可能在合理的時間范圍內找到全局最優解。發現貪婪演算法和局部搜索演算法速度快,但解不好的原因主要是他們只是在局部的區域內找解,等到的解沒有全局最優性。
由此必須引入新的搜索機制和策略………..
Holland的遺傳演算法出現了(Genetic Algorithm)再次引發了人們研究啟發式演算法的
興趣。
80年代以後:
模擬退火演算法(Simulated Annealing Algorithm),人工神經網路(Artificial Neural Network),禁忌搜索(Tabu Search)相繼出現。
最近比較熱或剛熱過去的:
演化演算法(Evolutionary Algorithm), 蟻群演算法(Ant Algorithms), 擬人擬物演算法,量子演算法等。
各個演算法的思想這就不再詳細給出(以後會給出一些,關注我的blog) ,為什麼要引出啟發式演算法,因為NP問題,一般的經典演算法是無法求解,或求解時間過長,我們無法接受。這里要說明的是:啟發式演算法得到的解只是近似最優解(近似到什麼程度,只有根據具體問題才能給出). 二十一世紀的最大的數學難題NP?=P,如果NP=P啟發式演算法就不在有存在的意義。 優勝劣汰是大自然的普遍規律,它主要通過選擇和變異來實現。選擇是優化的基本思想,變異(多樣化)是隨機搜索或非確定搜索的基本思想。「優勝劣汰」是演算法搜索的核心,根據「優勝劣汰」策略的不同,可以獲得不同的超啟發式演算法。超啟發式演算法的主要思想來自於人類經過長期對物理、生物、社會的自然現象仔細的觀察和實踐,以及對這些自然現象的深刻理解,逐步向大自然學習,模仿其中的自然現象的運行機制而得到的。遺傳演算法:是根據生物演化,模擬演化過程中基因染色體的選擇、交叉和變異得到的演算法。在進化過程中,較好的個體有較大的生存幾率。模擬退火:是模擬統計物理中固體物質的結晶過程。在退火的過程中,如果搜索到好的解接受;否則,以一定的概率接受不好的解(即實現多樣化或變異的思想),達到跳出局部最優解得目的。神經網路:模擬大腦神經處理的過程,通過各個神經元的競爭和協作,實現選擇和變異的過程。禁忌搜索:模擬人的經驗,通過禁忌表記憶最近搜索過程中的歷史信息,禁忌某些解,以避免走回頭路,達到跳出局部最優解的目的。螞蟻演算法:模擬螞蟻的行為,擬人擬物,向螞蟻的協作方式學習。這幾種超啟發式演算法都有一個共同的特點:從隨機的可行初始解出發,才用迭代改進的策略,去逼近問題的最優解。他們的基本要素:(1)隨機初始可行解;(2)給定一個評價函數(常常與目標函數值有關);(3)鄰域,產生新的可行解;(4)選擇和接受解得准則;(5)終止准則。
D. 影響演算法a啟發能力的重要因素有哪些
-多個組函數對索引運算,不走索引,需要NOT NULL約束或手動加IS NOT NULL條件
dingjun123@ORADB> SELECT SUM(object_id) ,count(object_id) FROM t ;
Execution Plan
----------------------------------------------------------
Plan hash value: 2966233522
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 5 | 299 (1)| 00:00:04 |
| 1 | SORT AGGREGATE | | 1 | 5 | | |
| 2 | TABLE ACCESS FULL| T | 75264 | 367K| 299 (1)| 00:00:04 |
---------------------------------------------------------------------------
E. 什麼是啟發式演算法(轉)
它並不告訴你該如何直接從A點到達B點,它甚至可能連A點和B點在哪裡都不知道。實際上,啟發式方法是穿著小丑兒外套的演算法:它的結果不太好預測,也更有趣,但不會給你什麼30 天無效退款的保證。 駕駛汽車到達某人的家,寫成演算法是這樣的:沿167 號高速公路往南行至Puyallup;從SouthHillMall出口出來後往山上開4.5 英里;在一個雜物店旁邊的紅綠燈路口右轉,接著在第一個路口左轉;從左邊褐色大房子的車道進去,就是NorthCedar路714號。 用啟發式方法來描述則可能是這樣:找出上一次我們寄給你的信,照著信上面的寄出地址開車到這個鎮;到了之後你問一下我們的房子在哪裡。這里每個人都認識我們——肯定有人會很願意幫助你的;如果你找不到人,那就找個公共電話亭給我們打電話,我們會出來接你。 從上面的啟發式演算法的解釋可以看出,啟發式演算法的難點是建立符合實際問題的一系列啟發式規則。
F. A*演算法現實應用的實際意義
A*演算法在人工智慧中是一種典型的啟發式搜索演算法,為了說清楚A*演算法,我看還是先說說何謂啟發式演算法。
一、何謂啟發式搜索演算法
在說它之前先提提狀態空間搜索。狀態空間搜索,如果按專業點的說法就是將問題求解過程表現為從初始狀態到目標狀態尋找這個路徑的過程。通俗點說,就是在解一個問題時,找到一條解題的過程可以從求解的開始到問題的結果(好象並不通俗哦)。由於求解問題的過程中分枝有很多,主要是求解過程中求解條件的不確定性,不完備性造成的,使得求解的路徑很多這就構成了一個圖,我們說這個圖就是狀態空間。問題的求解實際上就是在這個圖中找到一條路徑可以從開始到結果。這個尋找的過程就是狀態空間搜索。
常用的狀態空間搜索有深度優先和廣度優先。廣度優先是從初始狀態一層一層向下找,直到找到目標為止。深度優先是按照一定的順序前查找完一個分支,再查找另一個分支,以至找到目標為止。這兩種演算法在數據結構書中都有描述,可以參看這些書得到更詳細的解釋。
前面說的廣度和深度優先搜索有一個很大的缺陷就是他們都是在一個給定的狀態空間中窮舉。這在狀態空間不大的情況下是很合適的演算法,可是當狀態空間十分大,且不預測的情況下就不可取了。他的效率實在太低,甚至不可完成。在這里就要用到啟發式搜索了。
啟發式搜索就是在狀態空間中的搜索對每一個搜索的位置進行評估,得到最好的位置,再從這個位置進行搜索直到目標。這樣可以省略大量無畏的搜索路徑,提到了效率。在啟發式搜索中,對位置的估價是十分重要的。採用了不同的估價可以有不同的效果。我們先看看估價是如何表示的。
啟發中的估價是用估價函數表示的,如:
f(n) = g(n) + h(n)
其中f(n)是節點n的估價函數,g(n)實在狀態空間中從初始節點到n節點的實際代價,h(n)是從n到目標節點最佳路徑的估計代價。在這里主要是h(n)體現了搜索的啟發信息,因為g(n)是已知的。如果說詳細點,g(n)代表了搜索的廣度的優先趨勢。但是當h(n)>>g(n)時,可以省略g(n),而提高效率。這些就深了,不懂也不影響啦!我們繼續看看何謂A*演算法。
二、初識A*演算法
啟發式搜索其實有很多的演算法,比如:局部擇優搜索法、最好優先搜索法等等。當然A*也是。這些演算法都使用了啟發函數,但在具體的選取最佳搜索節點時的策略不同。象局部擇優搜索法,就是在搜索的過程中選取「最佳節點」後舍棄其他的兄弟節點,父親節點,而一直得搜索下去。這種搜索的結果很明顯,由於舍棄了其他的節點,可能也把最好的節點都舍棄了,因為求解的最佳節點只是在該階段的最佳並不一定是全局的最佳。最好優先就聰明多了,他在搜索時,便沒有舍棄節點(除非該節點是死節點),在每一步的估價中都把當前的節點和以前的節點的估價值比較得到一個「最佳的節點」。這樣可以有效的防止「最佳節點」的丟失。那麼A*演算法又是一種什麼樣的演算法呢?其實A*演算法也是一種最好優先的演算法。只不過要加上一些約束條件罷了。由於在一些問題求解時,我們希望能夠求解出狀態空間搜索的最短路徑,也就是用最快的方法求解問題,A*就是干這種事情的!我們先下個定義,如果一個估價函數可以找出最短的路徑,我們稱之為可採納性。A*演算法是一個可採納的最好優先演算法。A*演算法的估價函數可表示為:
f'(n) = g'(n) + h'(n)
這里,f'(n)是估價函數,g'(n)是起點到終點的最短路徑值,h'(n)是n到目標的最斷路經的啟發值。由於這個f'(n)其實是無法預先知道的,所以我們用前面的估價函數f(n)做近似。g(n)代替g'(n),但g(n)>=g'(n)才可(大多數情況下都是滿足的,可以不用考慮),h(n)代替h'(n),但h(n)<=h'(n)才可(這一點特別的重要)。可以證明應用這樣的估價函數是可以找到最短路徑的,也就是可採納的。我們說應用這種估價函數的最好優先演算法就是A*演算法。哈!你懂了嗎?肯定沒懂!接著看!
舉一個例子,其實廣度優先演算法就是A*演算法的特例。其中g(n)是節點所在的層數,h(n)=0,這種h(n)肯定小於h'(n),所以由前述可知廣度優先演算法是一種可採納的。實際也是。當然它是一種最臭的A*演算法。
再說一個問題,就是有關h(n)啟發函數的信息性。h(n)的信息性通俗點說其實就是在估計一個節點的值時的約束條件,如果信息越多或約束條件越多則排除的節點就越多,估價函數越好或說這個演算法越好。這就是為什麼廣度優先演算法的那麼臭的原因了,誰叫它的h(n)=0,一點啟發信息都沒有。但在游戲開發中由於實時性的問題,h(n)的信息越多,它的計算量就越大,耗費的時間就越多。就應該適當的減小h(n)的信息,即減小約束條件。但演算法的准確性就差了,這里就有一個平衡的問題。
G. 啟發式演算法的特點是什麼呢
啟發式演算法的特點是在理論上沒有精確的行為的分析,或者可以表明存在很壞的輸入,在這些輸入上運行很慢
H. 游戲中為什麼用啟發式a星演算法
首先,A* 是啟發式演算法,在尋路過程中搜索的范圍相比 Dijsktra 一般要小得多(當然,有時也可能一樣)
其次,A* 演算法的搜索速度和效率可控,可以通過控制代價函數來權衡搜索的速度和精度之間的關系
I. 什麼是啟發式演算法
大自然是神奇的,它造就了很多巧妙的手段和運行機制。受大自然的啟發,人們從大自然的運行規律中找到了許多解決實際問題的方法。對於那些受大自然的運行規律或者面向具體問題的經驗、規則啟發出來的方法,人們常常稱之為啟發式演算法(Heuristic Algorithm)。現在的啟發式演算法也不是全部來自然的規律,也有來自人類積累的工作經驗。 駕駛汽車到達某人的家,寫成演算法是這樣的:沿167 號高速公路往南行至陽谷;從陽谷高速出口出來後往山上開4.5 英里;在一個雜物店旁邊的紅綠燈路口右轉,接著在第一個路口左轉;從左邊褐色大房子的車道進去,就是某人的家。 啟發式方法來描述則可能是這樣:找出上一次我們寄給你的信,照著信上面的寄出地址開車到這個鎮;到了之後你問一下我們的房子在哪裡。