人工智能原理復習--搜索策略(二)

文章目錄

  • 上一篇
  • 啟發式搜索
  • 與或圖搜索
  • 博弈
  • 下一篇

上一篇

人工智能原理復習–搜索策略(一)

啟發式搜索

提高一般圖搜索效率的關鍵是優化OPEN表中節點的排序方式
最理想的情況是每次排序OPEN表表首n總在解答路徑上

全局排序–對OPEN表中的所有節點進行排序(A算法,A*算法)
局部排序–僅對新擴展出來的子節點排序(爬山法)

A算法
基本思想:
設計體現啟發式知識的評價函數 f ( n ) f(n) f(n)指導OPEN表中帶擴展節點的排序。
評價函數: f ( n ) = g ( n ) + h ( n ) f(n) = g(n) + h(n) f(n)=g(n)+h(n)
n – 搜索圖G中的節點
f(n) – G中從初始狀態節點s,經由節點n到達目標節點 n g n_g ng?, 估計的最小代價
g(n) – G中從s到n,目前實際的路徑代價
h(n) – 從n到 n g n_g ng?, 估計的最小代價
h(n)稱為啟發式函數

與一般圖搜索順序類似
但是在擴展n的節點時對每個子節點 n i n_i ni?計算 f ( n , n i ) = g ( n , n i ) + h ( n i ) f(n, n_i) = g(n, n_i) + h(n_i) f(n,ni?)=g(n,ni?)+h(ni?)
然后適當標記修改指針,排序OPEN表
在這里插入圖片描述
實現啟發式搜索應考慮的關鍵因素:

  1. 搜索算法的可采納性
  2. 啟發式函數h(n)的強弱及其影響

若一個搜索算法總能找到最短(代價最小)的解答路徑,則稱該狀態空間的搜索算法具有可采納性,也叫最優性。
寬度優先搜索算法是可采納的,只是搜索效率不高。
A算法是可采納的



.
A ? 算法 A^*算法 A?算法
如果A算法是可采納的則 f ? ( n ) = g ? ( n ) + h ? ( n ) f^*(n) = g^*(n) + h^*(n) f?(n)=g?(n)+h?(n)
*代表實際的最短路徑
理想情況下: g ( n ) = g ? ( n ) 、 h ( n ) = h ? ( n ) g(n) = g^*(n)、h(n) = h^*(n) g(n)=g?(n)h(n)=h?(n)
每次搜索過程中不擴展任何無關結點

而實際情況下g(n)容易在已經生成搜索樹中計算出來,但是h(n)具有未知性,只能盡可能靠近 h ? ( n ) h^*(n) h?(n)

因此可以得出 A ? 算法定義 A^*算法定義 A?算法定義
在A算法中,規定 h ( n ) < = h ? ( n ) h(n) <= h^*(n) h(n)<=h?(n)
A算法中最優秀的就是 A ? A^* A?算法

而 h(n)接近 h ? ( n ) h^*(n) h?(n)的程度–是衡量啟發式函數的強弱

  • h ( n ) < h ? ( n ) h(n) < h^*(n) h(n)<h?(n)且差距過大,排序誤差較大,產生更大的搜索圖,無用節點更多
  • h ( n ) > h ? ( n ) h(n) > h^*(n) h(n)>h?(n)且h(n)過強,A算法失去可采納性,不能確保找到最短路徑
  • h ( n ) = h ? ( n ) h(n) = h^*(n) h(n)=h?(n)可以確保生成最小的搜素圖,找到最短路徑

因此 A ? A^* A?算法就是在 h ( n ) < = h ? ( n ) h(n) <= h^*(n) h(n)<=h?(n)的條件下,越大越好。

若h(n) = 0 ? \Rightarrow ? BFS
若g(n) = 0 ? \Rightarrow ? DFS

在這里插入圖片描述
通過模擬過程,和算法設計與分析的堆優化的分支界限法相似

在這里插入圖片描述
close表就是已經訪問過的狀態,open表就是待訪問的狀態,而評估函數就是找出下一個最先訪問的狀態
在這里插入圖片描述
定義狀態空間,
定義對應狀態的h(n)
在這里插入圖片描述
在這里插入圖片描述
為更有效地搜索解答,可使用評價函數 f ( n ) = g ( n ) + w ? h ( n ) f(n) = g(n) + w*h(n) f(n)=g(n)+w?h(n),添加一個加權
在搜索圖的淺層(上部),可讓w取較大值,使得搜索加速向縱深方向搜索
當搜索到較深的層次時,再讓 w w w 取較小值, 保證 w h ( n ) < = h ? ( n ) wh(n) <= h^*(n) wh(n)<=h?(n)的情況下,在橫向方向發展,尋找較短的解答路徑

迭代加深 A ? A^* A?算法
由于 A ? A^* A?算法會將節點全部保存在內存中,所以 A ? A^* A?算法困在空間問題
因此有了迭代加深 A ? A^* A?算法 I D A ? IDA^* IDA?算法
但是不滿足最優性和完備性
它以深度優先的方式在有限制的深度內搜索目標節點,在每個深度上,該算法在每個深度上都會檢查節點是否出現如果出現則停止,否則深度加一繼續搜索。啟發函數用作深度的限制, 而不是選擇擴展結點的排序。

特點:由于 A ? A^* A?算法需要指數級的存儲空間,沒有深度限制,而 I D A ? IDA^* IDA?算法可以節省大量內存。當啟發式函數是最優的時候, I D A ? IDA^* IDA?算法和 A ? A^* A?算法擴展相同的結點,并且可以找到最優路徑。

與或圖搜索

問題歸約:是將復雜問題轉換成若干需要同時處理的較為簡單的子問題后再加以分別求解,只有子問題全部解決時,問題才算解決。問題的解答由子問題的解答聯合構成。
實質就是,將目標逆向推理分解成一個個子問題,直至最后把初始問題歸約為一個平凡的本原問題集合。

運用問題歸約策略得到的狀態空間圖稱為與或圖。

表示:
用圓弧將幾條節點間關聯弧連接起來,子問題全部解決才能導致原問題解決。
或關系 → \rightarrow 解決其中一個或關系就能解決上層問題

與或圖基本概念:

  • K-連接:父節點與K個子節點連接,子節點之間是與關系。
    一個父節點可以有多個K-連接(與關系)
    K-連接之間是或關系
  • 解圖:解答路徑不復存在,取而代之的是廣義的接路徑----解圖, 解圖是純粹的與圖,節點之間不存在或關系。
  • 終節點:能用于聯合表示目標狀態的節點

在這里插入圖片描述

  • 解圖的生成:從根節點選K-連接,然后從子節點再選擇K-連接直到所有K-節點都指向終節點為止。存在或關系可能搜索到多個解圖。

  • 解圖的代價:
    令K-連接的代價就是K
    則代價 C ( n ) = K + C ( n 1 ) + C ( n 2 ) + . . . + C ( n k ) C(n) = K + C(n_1) + C(n_2) + ...+ C(n_k) C(n)=K+C(n1?)+C(n2?)+...+C(nk?)

  • 能解節點:
    終節點是能解節點,若K-連接的子節點都是能解節點則這個父節點也是能解節點。

  • 不能解節點:
    非終節點是不能解節點,若K-連接至少連接一個不能解節點則父節點是不能解節點

AO*算法

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

博弈

博弈樹的特點:

  • 博弈的初始狀態是初始節點
  • 博弈樹的“與”節點和“或”節點是逐層交替出現的
  • 整個博弈過程始終站在某一方的立場,讓自己獲勝的為可解節點,讓對方獲勝的都是不可解節點

極大極小過程
考慮對弈若干不之后從可能的走法中選一步相對好的走法來走,即在有限的搜索深度范圍內進行求解。
需要定義一個靜態評估函數f,對棋取臺式進行分析。
雙方定義:
MAX方:有利于,f( p)取正值
MIN方:有利于,f( p)取負值
均衡時f§為0,p代表棋局。

基本思想:

  1. 當輪到MIN走步的節點時(取與時),MAX應考慮最壞情況( f ( p ) f(p) f(p)取極小值)
  2. 當輪到MAX走步的節點時(取或時),MAX應考慮最好的情況( f ( p ) f(p) f(p)取極大值)
  3. 評價使用1、 2的極值進行推出評估函數的值

過程:
定義博弈樹的層數(往后考慮幾步),設定靜態評估函數(找到最優步),形成博弈樹

優點

  1. 確保最優解: 極大極小過程的一個主要優勢是能夠確保在有限的博弈情境中找到最優解,即使是在較為復雜的游戲中也能找到最優解決方案。
  2. 理論上的保證: 在完全信息和有限博弈的情況下,這個算法可以保證找到一個最優解,這是一種理論上的保證。
  3. 廣泛適用性: 這種算法不僅限于特定類型的游戲或情景,可以應用于各種類型的博弈,從棋類游戲到經濟決策等。

缺點

  1. 計算復雜度高: 在某些情況下,特別是在博弈樹非常龐大的情況下,極大極小過程需要大量的計算資源和時間,可能會變得不切實際,效率較低。
  2. 只適用于完全信息博弈: 這個算法假設所有的信息都是完全可見的,而在現實生活中很多情況下信息并不完整,這限制了它在實際應用中的適用性。

α ? β \alpha-\beta α?β過程


由于極大極小過程生成博弈樹會生成規定深度的所有節點后在進行評估函數的倒推計算,這使得生成博弈樹和估計值的倒推兩個過程完全分離,因此搜索效率較低。

如果能邊生成博弈樹,邊進行估值計算,則可能不必生成規定深度內的所有節點,以減少搜索的次數,這就是 α ? β \alpha-\beta α?β過程。


好處: α ? β \alpha-\beta α?β過程是吧生成后繼節點和倒推評估函數的過程結合起來,及時減掉無用分支來提高算法效率,所以也稱 α ? β \alpha-\beta α?β剪枝

取MAX節點的最大下界為 α \alpha α
而MIN節點的最小上界為 β \beta β

步驟:

  1. 初始化 β \beta β + ∞ +\infty +, α \alpha α ? ∞ -\infty ?
  2. 從上至下MAX,MIN交替
  3. MAX層只改變 α \alpha α
  4. MIN層只改變 β \beta β
  5. α , β \alpha, \beta α,β是傳遞的
  6. α > = β \alpha >= \beta α>=β時剪枝

下一篇

未完待續

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210528.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210528.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210528.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue實例事件

實例方法 / 事件 vm.$on 監聽當前實例上的自定義事件。事件可以由 vm.$emit 觸發。回調函數會接收所有傳入事件觸發函數的額外參數。 vm.$on(test, function (msg) {console.log(msg) }) vm.$emit(test, hi) // > "hi"vm.$once( event, callback ) 監聽一個自定義…

Vue筆記(二)基本語法

基本語法 <style> table {border-collapse: collapse;margin:0 auto; } strong {color: rgb(235, 51, 100); }td, th {padding-left: 6px; } table tr td:first-child {width:150px } table tr td:nth-child(2) {width:300px } </style> <template><tabl…

mysql面試題——MVCC

一&#xff1a;什么是MVCC&#xff1f; 多版本并發控制&#xff0c;更好的方式去處理讀-寫沖突&#xff0c;就是為了查詢一些正在被另一個事務更新的行&#xff0c;并且可以看到它們被更新之前的值&#xff0c;這樣在做查詢的時候就不用等待另一個事務釋放鎖。 二&#xff1a…

萬界星空科技mes系統中看板管理

我們很多企業現在都有大屏&#xff0c;那到底萬界星空科技低代碼云mes系統管理中看板管理有什么作用&#xff1f;我總結了幾條: 1.提高車間的生產效率 2.有效的監控設備運行狀況 3.控制生產線運行 4.增加和改善用戶體驗 5.提高工作效率和工作安全性

Zabbix監控騰訊云VPC

一、簡介 私有網絡&#xff08;Virtual Private Cloud&#xff0c;VPC&#xff09;是騰訊云上一塊由用戶自定義的邏輯隔離網絡空間&#xff0c;為云服務器、云數據庫等資源提供安全可控的網絡環境。通過構建邏輯隔離的、用戶自定義配置的網絡空間&#xff0c;用戶能夠提升其云…

vue組件插槽

組件的插槽 組件本身就是一個容器&#xff0c;也可以是一個vue對象&#xff0c;也是一個虛擬DOM 普通插槽 組件本身是一個容器&#xff0c;這個容器本身是空的&#xff0c;當我們把需要封裝的html結構裝進去之后&#xff0c;我們可以認為這個容器被塞滿了&#xff0c;那就意…

WIN11家庭中文版使用ENSP+VirtualBox啟動AR失敗40錯誤+未完全關閉hyper-V,以及安裝VirtualBox兼容性問題

使用版本&#xff1a;eNSP 1.3.00.100VirtualBox 5.2.44WinPcap_4_1_3Wireshark最新版。 win11系統最好按照上述版本安裝&#xff0c;VirtualBox不要安裝更高版本&#xff0c;否則可能出現不兼容情況&#xff0c;Wireshark版本要求還好&#xff0c;安裝順序是VirtualBox 5.2.4…

python+pytest接口自動化之參數關聯

什么是參數關聯&#xff1f; 參數關聯&#xff0c;也叫接口關聯&#xff0c;即接口之間存在參數的聯系或依賴。在完成某一功能業務時&#xff0c;有時需要按順序請求多個接口&#xff0c;此時在某些接口之間可能會存在關聯關系。比如&#xff1a;B接口的某個或某些請求參數是通…

如何利用人工智能+物聯網技術實現自動化設備生產

隨著科技的發展與行業競爭的日益激烈&#xff0c;制造業也逐漸走向智能化發展。制造業的改革是利用物聯網技術和自動化設備&#xff0c;實現生產線的智能化和自適應生產&#xff0c;優化生產流程&#xff0c;提高生產效率和質量&#xff0c;為企業創造更大的價值。 方案概述 智…

Gif表情包怎么用圖片制作?一招簡單易上手

很多朋友對于gif動圖的名字不是很熟悉&#xff0c;但是對于“gif表情包”一定很熟悉吧&#xff01;在日常網絡聊天中經常能見到其的身影&#xff0c;能夠調節聊天的氣氛。想要制作gif表情包可以使用gif動圖在線制作&#xff08;https://www.gif.cn/&#xff09;網站-GIF中文網&…

【C語言期末】題目+解析

文章目錄 題目1.下面哪個不是C語言的基本數據類型&#xff1f;&#xff08; B &#xff09;2.C語言的標識符應以字母或&#xff08; A &#xff09;開頭。3.如果需要在C程序里調用標準函數庫中的printf函數&#xff0c;則應該在程序的開頭包含哪個頭文件&#xff1f;&#xff0…

學習Linux(2)-學習Linux命令

Linux目錄結構 Linux目錄結構-菜鳥教程 /bin&#xff1a;bin 是 Binaries (二進制文件) 的縮寫, 這個目錄存放著最經常使用的命令。 /boot&#xff1a;這里存放的是啟動 Linux 時使用的一些核心文件&#xff0c;包括一些連接文件以及鏡像文件。 /dev &#xff1a;dev 是 De…

TensorFlow 常用代碼

TensorFlow 是由 Google 開發的一個用于數值計算的開源軟件庫&#xff0c;主要用于構建和訓練機器學習模型。它的核心是使用數據流圖來描述計算任務。數據流圖是由節點和邊組成的有向圖&#xff0c;每個節點表示一個計算任務&#xff0c;每條邊表示數據傳輸。 TensorFlow 支持…

Dockerfile文件

什么是dockerfile? Dockerfile是一個包含用于組合映像的命令的文本文檔。可以使用在命令行中調用任何命令。 Docker通過讀取Dockerfile中的指令自動生成映像。 docker build命令用于從Dockerfile構建映像。可以在docker build命令中使用-f標志指向文件系統中任何位置的Docke…

C語言-字符串操作函數-附加使用方式

文章目錄 前言字符串復制-strcpy字符串復制&#xff08;按照位數&#xff09;-strncpy字符串比較-strcmp字符串比較(按照位數)-strncmp不區分大小寫的字符串比較-strcasecmp不區分大小寫的比較(前n位)-strncasecmp字符串按照格式寫入-sprintf字符串按照格式和個數寫入-snprintf…

JUC包(面試常問)

1. Callable接口 類似于Runnable接口&#xff0c;Runnable描述的任務&#xff0c;不帶返回值&#xff1b;Callable描述的任務帶返回值。 public class Test {//創建線程&#xff0c;計算12...1000public static void main(String[] args) throws ExecutionException, Interru…

js/jQuery常見操作 之各種語法例子(包括jQuery中常見的與索引相關的選擇器)

js/jQuery常見操作 之各種語法例子&#xff08;包括jQuery中常見的與索引相關的選擇器&#xff09; 1. 操作table常見的1.1 動態給table添加title&#xff08;指定td&#xff09;1.1.1 給td動態添加title&#xff08;含&#xff1a;獲取tr的第幾個td&#xff09;1.1.2 動態加工…

KWin、libdrm、DRM從上到下全過程 —— drmModeAddFBxxx(23)

接前一篇文章:KWin、libdrm、DRM從上到下全過程 —— drmModeAddFBxxx(22) 上一回講解了i915_gem_object_lookup_rcu函數的第1個參數struct drm_file *file,本回講解其第2個參數u32 handle。 (2)參數u32 handle 說起來,handle要比struct drm_file *file參數好理解多了…

怎么更改android的包名,使其可以變成另外一個app

在 Android 中更改應用的包名并不是一項簡單的任務&#xff0c;因為包名在應用的整個代碼和配置文件中都被廣泛使用。但是&#xff0c;你可以通過以下步驟來更改應用的包名&#xff1a; 注意&#xff1a;在更改包名之前&#xff0c;請確保備份你的項目&#xff0c;以防發生意外…

thinkphp 結合swoole 聊天開發實例

好的&#xff0c;下面我為您介紹使用ThinkPHP和Swoole開發聊天應用的實例。 環境搭建 首先需要安裝PHP和Swoole擴展&#xff0c;可以使用以下命令&#xff1a; yum install php php-devel php-pear pecl install swoole新建項目 使用composer新建一個ThinkPHP項目&#xff…