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

文章目錄

  • 上一篇
  • 搜索概述
  • 一般圖搜索
  • 盲目搜索
  • 下一篇

上一篇

人工智能原理復習–確定性推理

搜索概述

問題求解分為兩大類:知識貧乏系統(依靠搜索技術解決)、知識豐富系統(依靠推理技術)
兩大類搜索技術:

  1. 一般圖搜索、啟發式搜索
  2. 基于問題規約的與或圖搜索

求解問題包括:1. 目標表示 2.搜索 3.執行
初始狀態集合和操作符集合定義了問題的搜索空間

搜索策略評價標準:

  1. 完備性
  2. 最優性
  3. 時間復雜性
  4. 空間復雜性

一般圖搜索

狀態空間搜索是一般圖搜索的代表形式,用狀態空間搜索來求解問題的系統均定義一個狀態空間,并通過適當的搜索算法態空間中搜索解答路徑

狀態空間表示法:定義狀態的描述形式,將一切狀態表示出來,再定義一組操作算子,通過他們將問題由一種狀態轉變為另一個狀態。問題求解過程就是不斷通過操作作用于狀態的過程,得到操作狀態到目標狀態所用的操作序列的過程。

而使用操作最少或較少的解稱為最優解,采用不同的搜索策略得到的結果順序也可能不同。



狀態空間可表示成二元組(S, O):
S:表示所有可能到達的合法狀態構成的集合
O:表示操作算子的集合
狀態就用一個矢量來表示某一時刻問題現狀的快照

狀態空間圖:1. 結點:狀態 2. 有向弧:狀態的變遷 3.弧上的標簽:導致狀態變遷的操作算子
問題的狀態空間是一個表示該問題的所有可能狀態及其變遷的有向圖

狀態空間表示例子在這里插入圖片描述

  1. 狀態:(1, 0, 1) 表示狀態位(正,反,正)
  2. 操作算子:
    a:表示翻轉第一個錢幣
    b:表示翻轉第二個錢幣
    c:表示翻轉第三個錢幣

在這里插入圖片描述
傳教士與野人問題
描述:N個傳教士帶領N個野人劃船過河;
需要滿足三個約束條件:

  1. 船上人數不得超過載重限量,設為K個人
  2. 任意時刻(包括兩岸、船上)野人數量不得超過傳教士
  3. 允許在河的某一岸或者在船上只有野人而沒有傳教士

求解當N = 3,K = 2時的狀態空間有向圖
解:
狀態表示:
(m, c, b)表示(傳教士在左岸的實際數量,野人在左岸實際數量,船是否停在左岸(0/1))
共有 4 x 4 x 2 = 32中狀態
其中合法狀態:

  1. 左岸傳教士和右岸傳教士人數大于野人
    m = 1, c = 1; m = 2, c = 2;
  2. 左岸只有野人沒有傳教士
    m = 0, c = 0, 1, 2, 3
  3. 左岸只有傳教士沒有野人
    m = 3, c = 0, 1, 2, 3

不可能達到的合法狀態:

  • (0, 0, 1)人過去了船飄了回去
  • (0, 3, 0) 傳教士過去不帶野人不符合目的
  • (3, 0, 1) 野人過去但是船回來了
  • (3, 3, 0) 只有船過去了

操作算子:
L(x, y)表示從左岸向右岸劃船,x表示傳教士人數,y表示野人數量
R(x, y)表示從右岸向左岸劃船,x表示傳教士人數,y表示野人數量

x, y取值為(1, 0) , (2, 0), (1, 1), (0, 1), (0, 2)
可以看出野人自己也會劃船

在這里插入圖片描述
而整個狀態空間搜索可以用五元組表示:
SE=(S,O,E,I,G)
E–搜索引擎(搜索策略/算法)
I–問題的初始狀態
G–問題的目標狀態

基本思想:通過搜索引擎E尋找一個操作算子的調用序列,使問題從初始狀態I變遷到目標狀態G之一。
解答路徑就是從初始狀態到目標狀態的操作算子的調用序列。

搜索樹:
一般圖的搜索過程是或圖,操作算子之間時一種“或”的關系

搜索術語:

  1. 節點深度:根節點指示初始狀態,不同情況對應的操作順序長度
  2. 節點擴展:應用操作算子將上一狀態轉變到下一狀態而拓展出節點
  3. 路徑:要求路徑是無環的
  4. 路徑代價:

符號說明:
s – 初始狀態節點
G – 搜索圖
OPEN – 存放待擴展節點的表
CLOSE – 存放已被擴展的結點的表
MOVE-FIRST(OPEN) – 取OPEN表首的節點作為當前要被擴展的節點n同時將結點n移至CLOSE表

分為兩個階段:

  1. 初始化
    • 建立只包含初始結點s的搜索圖G:={s}
    • OPEN:={s}
    • CLOSE:={}
  2. 搜索循環
    • MOVE-FIRST(OPEN)-取出OPEN表首的結點n作為擴展節點,同時將其移到close表
    • 拓展n的子節點,插入圖G和OPEN表
    • 適當標記和修改指針
    • 排序OPEN表

擴展的節點分為3類:

  1. 全新節點(直接加入到OPEN表中)
  2. 已出現在OPEN表中的節點(在OPEN表排序,找最短搜索順序)
  3. 已出現在CLOSE表中的節點(當前確定的路徑)

盲目搜索

提高搜索效率的關鍵是優化OPEN表中節點的排序方式

BFS
擴展當前節點后生成的子節點總是置于OPEN表的后端,及OPEN表作為隊列,先進先出,是搜索優先向橫向方向發展。

性質:

  1. 當問題有解時,一定能找到解
  2. 當問題為單位代價時,有解時,一定能找到最優解
  3. 效率較低,具有通用性,屬于圖搜索方法

優缺點:

  1. 找到目標節點的路徑最短
  2. 時間和空間復雜度都比較高,無用節點較多

DFS
擴展當前節點后生成的子節點總是置于OPEN表的前端,即OPEN表作為棧,后進后出,使搜索優先向縱深方向發展。

由于人工智能中一條路徑的深度不可測,所以這樣做不一定找得到最佳解,甚至可能找不到解,所以為了保證能找到解所以應加上深度界限(有界DFS),或者采取不斷加大深度界限的辦法,反復搜索(迭代加深DFS)。

DFS的性質:

  • 不能保證找到最優解
  • 當深度限制不合理時,可能找不到解
  • 最壞情況下相當于窮舉,是一個通用的與問題無關的方法

優缺點:
優點:比BFS使用較少的空間
缺點:既不是完備的,也不是最優的

BFS與DFS的比較

DFSBFS
適用場合當問題有多個解且只需要找到其中一個時,往往對深度進行限制確保搜索到的是最短路徑
共同優缺點優點:不需要設計排序方法,簡單易行,適用于復雜度不高的問題缺點:節點排序的盲目性,白白搜索了大量無關的狀態節點

有界DFS
按深度優先算法進行,但是要給深度一個限制

深度dm很重要,當dm過小時可能找不到解是不完備的,當dm過大時,搜索過程會產生過多的無用節點,即浪費了計算機資源,又降低了搜索效率

主要問題就是深度限制值dm的選取

迭代加深搜索
先任意給定一個較小的數作dm,然后按有界深度算法搜索,若在此深度限制內找到了解,則算法結束,否則增大深度限制dm,繼續搜索。

相對于整個樹的結點來說,距離根節點的節點就是很少的,對這些節點反復擴展對于整個樹來說是很小的,所以相對看了負擔實際很小。

四種方法的比較

  • 四種方法都可以用于生成和測試后面改進的算法的性能
  • 寬度優先搜索需要指數數量的空間,深度優先搜索的空間復雜度和最大搜索深度呈線性關系
  • 迭代加深搜索對一顆深度受控的樹采用深度優先的搜索,它結合了寬度優先和深度優先的優點,和寬度優先搜索一樣,它是最優的,也是完備的。但對空間要求和深度優先搜索一樣是適中的。
標準寬度優先深度優先有界深度迭代加深
時間 b d b^d bd b m b^m bm b d m b^{dm} bdm b d b^d bd
空間 b d b^d bd b ? m b*m b?m b ? d m b*dm b?dm b d bd bd
最優
完備如果 d m > d dm > d dm>d

b是分支系數,d是解答深度,m是搜索樹的最大深度,dm是深度限制

下一篇

未完待續

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

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

相關文章

海思3516DV500下的目標識別算法運行評估,包含yolov7,yolov8

目前在3516DV500下,自己訓練的模型的評估實測結果。根據實際模型會有些許差異。 涉及到技術細節的部分因為商業用途,有部分省略。如需相關技術服務項目合作可私信聯系。 我司推出的目標識別跟蹤模塊,支持熱紅外、可見光主流多光譜視頻輸入與目…

WeiPHP 微信開發平臺 SQL注入漏洞復現

0x01 產品簡介 weiphp 是一個開源,高效,簡潔的微信開發平臺,基于 oneThink 內容管理框架實現。 0x02 漏洞概述 weiphp 微信開發平臺 _send_by_group、 wp_where、 get_package_template等接口處存在 SQL 注入漏洞,攻擊者利用此漏洞可獲取數據庫中的信息(例如,管理員后臺…

三數組最小距離:2020年408算法題

算法思想 算法實現 #define INT_MAX 0x7fffffff //c語言int類型最大值 //計算絕對值 int abs(int a){if(a<0) return -a;else return a; } //判斷a是否為3個數中最小值 bool isMin(int a,int b,int c){if(a<b&&a<c) return true;return false; }//主函數 in…

RepidJson中Writer類、FilewriteStream類、 PrettyWriter類的區別

rapidjson是一個C的JSON解析庫&#xff0c;可以用于解析和序列化JSON數據。 Writer是rapidjson中一種基本的輸出流&#xff0c;用于將JSON數據輸出到字符串或文件中。 FileWriteStream是一個Writer的子類&#xff0c;它專門用于將JSON數據輸出到文件中。相比于普通的Writer&a…

平臺工程文化:軟件開發的創新路徑和協作之道

在快速發展的軟件開發領域&#xff0c;具有前瞻性思維的企業組織正在擁抱平臺工程文化的變革力量。這種創新方法強調創建共享平臺、工具和實踐&#xff0c;使開發人員能夠更快、更高效地交付高質量的軟件。在本文中&#xff0c;我們將深入探討平臺工程文化的核心原則和深遠的好…

C語言期末考試復習PTA數據類型及表達式-分支結構程序-循環結構-數組經典選擇題

目錄 第一章&#xff1a;C語言數據類型和表達式 第一題&#xff1a; 第二題&#xff1a; 第三題&#xff1a; 第四題&#xff1a; 第五題&#xff1a; 第六題&#xff1a; 第七題&#xff1a; 第八題&#xff1a; 第九題&#xff1a; 第二章&#xff1a;分支結構程序…

打包 抖音直播云游戲

抖音直播云游戲 oaid資源中的bcpkix-jdk15to18-1.68.jar與抖音云游戲的資源沖突。 其實資源名稱是一樣的&#xff0c;拷貝時資源名稱有變化。 為解決此問題&#xff0c;需要規范化文件的資源名稱&#xff0c;將.置為_ Error: Command failed: cmd /c echo off && Chc…

NoSuchColumnFamilyException: org.apache.hadoop.hbase.regionserv

問題 在IDEA運行HBASE腳本時出現如下報錯&#xff1a; org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: Column family table does not exist in region hbase:meta,,1.1588230740 i…

Java多線程并發(二)

四種線程池 Java 里面線程池的頂級接口是 Executor&#xff0c;但是嚴格意義上講 Executor 并不是一個線程池&#xff0c;而只是一個執行線程的工具。真正的線程池接口是 ExecutorService。 newCachedThreadPool 創建一個可根據需要創建新線程的線程池&#xff0c;但是在以前…

深入了解數據庫鎖:類型、應用和最佳實踐

目錄 1. 引言 2. 數據庫鎖的基本概念 2.1 悲觀鎖和樂觀鎖 2.2 排他鎖和共享鎖 3. 悲觀鎖的應用場景 3.1 長事務和大事務 3.2 并發修改 3.3 數據庫死鎖 4. 悲觀鎖的最佳實踐 4.1 精細控制鎖的粒度 4.2 避免死鎖 4.3 考慮樂觀鎖 5. 案例分析 5.1 銀行系統的轉賬操作…

【GEE筆記】隨機森林特征重要性計算并排序

隨機森林是一種基于多個決策樹的集成學習方法&#xff0c;可以用于分類和回歸問題。在gee中可以使用ee.Classifier.smileRandomForest()函數來創建一個隨機森林分類器&#xff0c;并用它來對影像進行分類。 隨機森林分類器有一個重要的屬性&#xff0c;就是可以計算每個特征&a…

人工智能虛擬化環境

人工智能虛擬化環境通過模擬、管理和優化計算資源、數據資源和軟件環境&#xff0c;可以為人工智能算法和應用提供更加高效、靈活和可靠的運行平臺。本文將探討人工智能虛擬化環境的概念、技術和應用&#xff0c;并展望其在人工智能領域的未來發展。 首先&#xff0c;人工智能…

LVGL的學習

該LVGL基于LVGL的8.2版本 開關的控件Demo lv_obj_t* switch_obj lv_switch_create(lv_scr_act());lv_obj_set_size(switch_obj, 120, 60);lv_obj_align(switch_obj, LV_ALIGN_CENTER, 0, 0); 對象&#xff1a; 對于這一類對象&#xff0c;他們有共同的屬性的幾個特征。 創建部…

.NET使用分布式網絡爬蟲框架DotnetSpider快速開發爬蟲功能

前言 前段時間有同學在微信群里提問&#xff0c;要使用.NET開發一個簡單的爬蟲功能但是沒有做過無從下手。今天給大家推薦一個輕量、靈活、高性能、跨平臺的分布式網絡爬蟲框架&#xff08;可以幫助 .NET 工程師快速的完成爬蟲的開發&#xff09;&#xff1a;DotnetSpider。 注…

Vue3組件使用問題

Vue3組件學習 文章目錄 Vue3組件學習一、Message 全局提示組件返回數據換行問題二、DatePicker 日期選擇框組件限制選定年份問題 一、Message 全局提示組件返回數據換行問題 問題&#xff1a;使用中發現僅僅通過寫入\n或<br/>&#xff0c;無法實現回車顯示的結果。 解決…

java中synchronized關鍵字的用法

在java編程中&#xff0c;經常需要用到同步&#xff0c;而用得最多的也許是synchronized關鍵字了&#xff0c;下面看看這個關鍵字的用法。因為synchronized關鍵字涉及到鎖的概念&#xff0c;所以先來了解一些相關的鎖知識。java的內置鎖&#xff1a;每個java對象都可以用做一個…

在Pytorch中使用Tensorboard可視化訓練過程

這篇是我對嗶哩嗶哩up主 霹靂吧啦Wz 的視頻的文字版學習筆記 感謝他對知識的分享 本節課我們來講一下如何在pytouch當中去使用我們的tensorboard 對我們的訓練過程進行一個可視化 左邊有一個visualizing models data and training with tensorboard 主要是這么一個教程 那么這里…

Flutter一直 Running Gradle task ‘assembleDebug‘

Flutter升級到3.13.7之后&#xff0c;一直Running Gradle task ‘assembleDebug’&#xff0c;之前運行還沒問題。 試了各種方法&#xff0c;比如添加阿里云鏡像&#xff0c;flutter\packages\flutter_tools\gradle目錄下修改build.gradle.kts文件&#xff0c;都不行。 參考大佬…

Termux+Hexo結合內網穿透輕松實現安卓手機搭建博客網站發布公網訪問

文章目錄 前言 1.安裝 Hexo2.安裝cpolar3.遠程訪問4.固定公網地址 前言 Hexo 是一個用 Nodejs 編寫的快速、簡潔且高效的博客框架。Hexo 使用 Markdown 解析文章&#xff0c;在幾秒內&#xff0c;即可利用靚麗的主題生成靜態網頁。 下面介紹在Termux中安裝個人hexo博客并結合…

ArkTS語言難嗎?鴻蒙指南

HarmonyOS的開發語言是ArkTS、JS(JavaScript)。 ArkTS簡介 ArkTS是HarmonyOS優選的主力應用開發語言。ArkTS圍繞應用開發在TypeScript&#xff08;簡稱TS&#xff09;生態基礎上做了進一步擴展&#xff0c;繼承了TS的所有特性&#xff0c;是TS的超集。因此&#xff0c;在學習…