python程式設計搜尋 Python啟發式搜尋

2021-10-11 13:08:24 字數 2515 閱讀 4737

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

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)

您可以按如下方式觀察上述程式的輸出 -

[, , , , ]

魔術廣場

幻方是乙個方形網格中不同數字(通常是整數)的排列,其中每行和每列中的數字以及對角線中的數字都加起來稱為「魔術常數」的相同數字。

以下是用於生成幻方的簡單python**的逐步執行 -

定義乙個名為 magic_square 的函式,如下所示 -

def magic_square(matrix_ms):

isize = len(matrix_ms[0])

sum_list =

以下**顯示了正方形的垂直** -

for col in range(isize):

以下**顯示了正方形的水平** -

sum_list.extend([sum (lines) for lines in matrix_ms])

以下**顯示了正方形水平的** -

dlresult = 0

for i in range(0,isize):

dlresult +=matrix_ms[i][i]

drresult = 0

for i in range(isize-1,-1,-1):

drresult +=matrix_ms[i][i]

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 。

python是高階動態程式語言 Python語言

python是一門跨平台 開源 免費的解釋型高階動態程式語言。python支援命令式程式設計 how to do 函式式程式設計 what to do 完全支援物件導向程式設計,擁有大量擴充套件庫。膠水語言 可以把多種不同語言編寫的程式融合到一起實現無縫拼接,更好地發揮不同語言和工具的優勢,滿足不同...

Python程式設計學習第十二課之Python的注釋

當我們編寫的程式 量很大,而且內部邏輯關係非常複雜的時候,閱讀 是非常吃力的。所以我們的程式設計師寧願自己重新寫 也不願意去熟悉別人的 那麼,實際編寫 的過程之中,對 加筆記說明就顯得尤為重要了。在這裡,針對 的筆記被稱為注釋。在之前的幾節課裡面,我們已經不止一次用過注釋了,如下圖所示,以 符號開頭...

python元程式設計運用 深入淺出Python元程式設計

python 官方教程 的開頭是這樣寫的 python 是一門既容易上手又強大的程式語言。這句話本身並無大礙,但需要注意的是,正因為它既好學又好用,所以很多python程式設計師只用到了其強大功能的一小部分。只需要幾個小時,經驗豐富的程式設計師就能學會用 python 寫出實用的程式。然而隨著這最初...