網站首頁 編程語言 正文
啟發式搜索在人工智能中起著關鍵作用。在本章中,您將詳細了解它。
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
相關推薦
- 2022-03-25 Go語言什么時候該使用指針(go指針的作用)
- 2022-04-28 詳解Pandas的三大利器(map,apply,applymap)_python
- 2022-05-18 python操作jira添加模塊的方法_python
- 2023-01-21 flask中響應錯誤的處理及errorhandler的應用方式_python
- 2022-07-11 gstreamer的消息傳遞機制
- 2022-10-12 pandas實現手機號號碼中間4位匿名化的示例代碼_python
- 2023-02-27 python實現定時任務的八種方式總結_python
- 2022-09-21 Python+pandas編寫命令行腳本操作excel的tips詳情_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支