檔案建立日期: 2019/12/22
最後修訂日期: None
相關軟體資訊:
Win 10 | Python 3.7.2 | Python-constraint 1.4.0 |
參考檔案: AI with Python Tutorial
說明: 所有內容歡迎引用, 只需註明來源及作者, 本文內容如有錯誤或用詞不當, 敬請指正.
標題: 人工智慧 (09) 啟發式搜尋
啟發式搜尋 ( Heuristic Search )
試探法的使用縮小了對解決方案的搜尋範圍,並消除了錯誤的選擇。 使用啟發式在搜尋空間中進行搜尋的方法稱為啟發式搜尋。
控制策略或搜尋技術
- 盲目搜尋 - 搜尋整個狀態空間以獲得解決方案。廣度優先搜尋(BFS, Breadth First Search)和深度優先搜尋(DFS, Depth First Search)是無資訊搜尋的示例。
- 啟發式搜尋 - 有一些關於狀態的額外資訊。此額外資訊對於計算要探索和擴充套件的子節點之間的偏好很有用。最佳優先搜尋(BFS, Best First Search),A*,均值和分析 ( Mean and Analysis ) 是啟發式搜尋的示例。
- 限制滿足問題(CSP, Constraint Satisfaction Problems ) - 必須在某些限制下解決的問題。
例 1. 限制滿足
# -----------------------------------------------------------------------------
# Constraint Satisfaction Problems (CSPs)
# -----------------------------------------------------------------------------
from constraint import *
problem = Problem()
problem.addVariable('a', range(10)) # a = 0 ~ 9
problem.addVariable('b', range(10)) # b = 0 ~ 9
problem.addConstraint(lambda a, b: a * 2 == b) # 條件: 2a = b
solutions = problem.getSolutions() # 解題 - 答案: (0,0), (1,2),
print (solutions) # (2,4), (3,6), (4,8)
例 2. 魔方 (行, 列, 對角線, 反對角線和都是一樣的矩陣)
# -----------------------------------------------------------------------------
# Magic Number
# -----------------------------------------------------------------------------
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(0,iSize): # 反對角線加總
drResult +=matrix_ms[i][iSize-1-i]
sum_list.append(drResult)
if len(set(sum_list))>1: # 去掉重複的長度
return False # 如果不是1, 表示
return True # 八條線的和不一樣
print(magic_square([[1,2,3],
[4,5,6],
[7,8,9]]))
print(magic_square([[4,9,2],
[3,5,7],
[8,1,6]]))
本作品採用《CC 協議》,轉載必須註明作者和本文連結