日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

AI與Python人工智能啟發式搜索概念理解_python

作者:weixin_42238387 ? 更新時間: 2022-07-19 編程語言

啟發式搜索在人工智能中起著關鍵作用。在本章中,您將詳細了解它。

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

現在,給出矩陣的值并檢查輸出 -

print(magic_square([[1,2,3], [4,5,6], [7,8,9]]))

您可以觀察到輸出將為False,因為總和不是相同的數字。

print(magic_square([[3,9,2], [3,5,7], [9,1,6]]))

您可以觀察到輸出將為True,因為總和是相同的數字,即此處為15。

原文鏈接:https://blog.csdn.net/weixin_42238387/article/details/89049553

欄目分類
最近更新