啟發式搜尋在人工智能中起着關鍵作用。在本章中,您将詳細了解它。
AI中的啟發式搜尋的概念
啟發式是一個經驗法則,它引導我們找到可能的解決方案。人工智能中的大多數問題具有指數性質并且具有許多可能的解決方案。您不确切知道哪些解決方案是正确的,并且檢查所有解決方案将非常昂貴。
是以,啟發式的使用縮小了對解決方案的搜尋範圍,并消除了錯誤的選項。使用啟發式引導搜尋空間中的搜尋的方法稱為啟發式搜尋。啟發式技術非常有用,因為在使用它們時可以提高
搜尋速度。
不知情和知情搜尋之間的差別
有兩種類型的控制政策或搜尋技術:不知情和知情。這裡給出了詳細解釋 -
不知情的搜尋
它也被稱為盲目搜尋或盲目控制政策。之是以這樣命名是因為隻有關于問題定義的資訊,并且沒有關于狀态的其他額外資訊。這種搜尋技術将搜尋整個狀态空間以獲得解決方案。廣度優先搜尋(BFS)和深度優先搜尋(DFS)是不知情搜尋的示例。
知情搜尋
它也被稱為啟發式搜尋或啟發式控制政策。之是以這樣命名是因為有一些關于狀态的額外資訊。此額外資訊對于計算要探索和擴充的子節點之間的首選項很有用。将存在與每個節點相關聯的啟發式功能。最佳首次搜尋(BFS),A*,平均值和分析是知情搜尋的示例。
限制滿足問題(CSP)
限制意味着限制或限制。在人工智能中,限制滿足問題是在某些限制條件下必須解決的問題。重點必須是在解決此類問題時不要違反限制。最後,當我們達到最終解決方案時,CSP必須遵守限制。
限制滿足解決現實問題
前面的部分涉及建立限制滿足問題。現在,讓我們将它應用于現實世界的問題。通過限制滿足解決的現實世界問題的一些例子如下 -
解決代數關系
在限制滿足問題的幫助下,我們可以解決代數關系。在這個例子中,我們将嘗試解決一個簡單的代數關系 a * 2 = b 。它将在我們定義的範圍内傳回 a 和 b 的值。
完成這個Python程式後,您将能夠了解解決限制滿足問題的基礎知識。
注意,在編寫程式之前,我們需要安裝名為python-constraint的Python包。您可以借助以下指令安裝它 -
pip install python-constraint
以下步驟顯示了使用限制滿足來解決代數關系的Python程式 -
使用以下指令導入 限制 包 -
from constraint import *
現在,建立一個名為 problem() 的子產品對象,如下所示 -
problem = Problem()
現在,定義變量。注意,這裡我們有兩個變量a和b,我們将10定義為它們的範圍,這意味着我們在前10個數字中得到了解。
problem.addVariable('a', range(10))
problem.addVariable('b', range(10))
接下來,定義我們要在此問題上應用的特定限制。注意,我們在這裡使用限制 a * 2 = b 。
problem.addConstraint(lambda a, b: a * 2 == b)
現在,使用以下指令建立 getSolution() 子產品的對象-
solutions = problem.getSolutions()
最後,使用以下指令列印輸出 -
print (solutions)
您可以按如下方式觀察上述程式的輸出 -
[{'a': 4, 'b': 8}, {'a': 3, 'b': 6}, {'a': 2, 'b': 4}, {'a': 1, 'b': 2}, {'a': 0, 'b': 0}]
魔術廣場
幻方是一個方形網格中不同數字(通常是整數)的排列,其中每行和每列中的數字以及對角線中的數字都加起來稱為“魔術常數”的相同數字。
以下是用于生成幻方的簡單Python代碼的逐漸執行 -
定義一個名為 magic_square 的函數,如下所示 -
def magic_square(matrix_ms):
iSize = len(matrix_ms[0])
sum_list = []
以下代碼顯示了正方形的垂直代碼 -
for col in range(iSize):
sum_list.append(sum(row[col] for row in matrix_ms))
以下代碼顯示了正方形的水準代碼 -
sum_list.extend([sum (lines) for lines in matrix_ms])
以下代碼顯示了正方形水準的代碼
原文dlResult = 0
for i in range(0,iSize):
dlResult +=matrix_ms[i][i]
sum_list.append(dlResult)
drResult = 0
for i in range(iSize-1,-1,-1):
drResult +=matrix_ms[i][i]
sum_list.append(drResult)
if len(set(sum_list))>1:
return False
return True