查看“︁启发式算法”︁的源代码
←
启发式算法
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{inappropriate tone|time=2019-08-24T19:24:03+00:00}} {{TA |G1=IT }} {{unreferenced|time=2013-09-30T19:15:13+00:00}} [[计算机科学]]中所謂的'''heuristic''',除了有經驗法則的意思外(見[[啟發式]]),它還有另外兩個技術上的意義。 == 啟發式演算法 == 電腦科學的兩大基礎目標,就是發現可[[證明]]其[[執行期|執行效率]]良好且可得[[最优化|最佳解]]或次佳解的[[演算法]]。而'''啟發式'''演算法則試圖一次提供一个或全部目標。例如它常能發現很不錯的解,但也沒辦法證明它不會得到較壞的解;它通常可在合理時間解出答案,但也沒辦法知道它是否每次都可以這樣的速度求解。 有時候人們會發現在某些特殊情況下,啟發式演算法會得到很壞的答案或效率極差,然而造成那些特殊情況的資料結構,也許永遠不會在現實世界出現。因此現實世界中啟發式演算法很常用來解決問題。啟發式演算法處理許多實際問題時通常可以在合理時間內得到不錯的答案。 有一類的通用啟發式策略稱為[[元启发算法]]({{lang|en|metaheuristic}}),通常使用亂數搜尋技巧。他們可以應用在非常廣泛的問題上,但不能保證效率。 == 啟發式演算法與最短路徑問題 == 所謂的[[最短路径]]問題有很多種意思,在這裡'''啟發式'''指的是在一個[[树的遍历|搜尋樹]]的節點上定義的[[函数 (数学)|函数]]<math>h(n)</math>,用於評估從此節點到目標節點成本最小的[[路徑]]。啟發式通常用於資訊充份的搜尋演算法,例如[[最好优先]][[貪婪演算法]]與[[A*]]。最好优先貪婪演算法會為啟發式函數選擇最低代價的節點;A*則會為<math> g(n)+h(n) </math>選擇最低代價的節點,此<math>g(n)</math>是從起始節點到目前節點的路徑的確實代價。如果<math>h(n)</math>是'''可接受的'''(admissible)意即<math>h(n)</math>未曾付出超過達到目標的代價,則A*一定會找出[[最佳化|最佳解]]。 最能感受到啟發式演算法好處的經典問題是[[n-puzzle]]。此問題在計算錯誤的拼圖圖形,與計算任兩塊拼圖的[[曼哈頓距離]]的總和以及它距離目的有多遠時,使用了本演算法。注意,上述兩條件都必須在可接受的範圍內。 === 啟發式演算法對運算效能的影響 === 任何的搜尋問題中,每個節點都有<math>b</math>個選擇以及到達目標的深度<math>d</math>,一個毫無技巧的演算法通常都要搜尋<math>b^d</math>個節點才能找到答案。啟發式演算法藉由使用某種切割機制降低了[[分支因子]]({{lang|en|branching factor}})以改進搜尋效率,由<math>b^d</math>降到較低的<math>b'</math>。分叉率可以用來定義啟發式演算法的[[偏序关系]],例如:若在一個<math>n</math>節點的搜尋樹上,<math>h_1(n)</math>的分叉率較<math>h_2(n)</math>低,則<math>h_1(n)< h_2(n)</math>。啟發式為每個要解決特定問題的搜尋樹的每個節點提供了較低的分叉率,因此它們擁有較佳效率的計算能力。 === 找尋新的啟發式演算法 === 如何找到一個分叉率較少又通用的合理啟發式演算法,已被{{Which|[[人工智慧]]社群|time=2024-08-29}}深入探究過。他們使用幾種常見技術: * 部分問題的解答的代價通常可以評估解決整個問題的代價,通常很合理。例如一個10-puzzle拼盤,解題的代價應該與將1到5的方塊移回正確位置的代價差不多。通常解題者會先建立一個儲存部份問題所需代價的[[模式資料庫]](pattern database)以評估問題。 * 解決較易的'''近似問題'''通常可以拿來合理評估原先問題。例如[[曼哈頓距離]]是一個簡單版本的n-puzzle問題,因為我們假設可以獨立移動一個方塊到我們想要的位置,而暫不考慮會移到其他方塊的問題。 * 給我們一群合理的啟發式函式<math>h_1(n), h_2(n), ..., h_i(n)</math>,而函式<math>h(n) = \max\{h_1(n), h_2(n), ..., h_i(n)\}</math>則是個可預測這些函式的啟發式函式。 一個在1993年由[[A.E. Prieditis]]寫出的程式ABSOLVER就運用了這些技術,這程式可以自動為問題產生啟發式演算法。ABSOLVER為[[n-puzzle|8-puzzle]]產生的啟發式演算法優於任何先前存在的!而且它也發現了第一個有用的解[[魔術方塊]]的啟發式程式。 == 參閱 == *[[人工智慧]] * [[專家系統]] *[[元启发算法|元啟發算法]] * {{tsl|en|Heuristic evaluation||Heuristic evaluation}} * [[推理機]] * {{tsl|en|Inquiry||Inquiry}} * [[解决问题]] * [[爬山算法]] * [[模拟退火|模拟退火算法]] * [[遗传算法]] * [[Tabu算法]] * [[最好优先]] * [[通用图]] * [[A*搜寻算法]] {{Authority control}} [[Category:啟發式演算法]]
该页面使用的模板:
Template:Authority control
(
查看源代码
)
Template:Inappropriate tone
(
查看源代码
)
Template:Lang
(
查看源代码
)
Template:TA
(
查看源代码
)
Template:Tsl
(
查看源代码
)
Template:Unreferenced
(
查看源代码
)
Template:Which
(
查看源代码
)
返回
启发式算法
。
导航菜单
个人工具
登录
命名空间
页面
讨论
不转换
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
工具
链入页面
相关更改
页面信息