You are on page 1of 61

Machine Translated by Google

Bài tập 61

hiểu ngôn ngữ tự nhiên và hệ thống đa tác nhân.

Horvitz và cộng sự. (1988) đặc biệt đề xuất việc sử dụng tính hợp lý được coi là tối đa hóa tiện

ích mong đợi làm cơ sở cho AI. Văn bản của Pearl (1988) là văn bản đầu tiên về AI trình bày sâu về lý

thuyết xác suất và tiện ích; việc trình bày các phương pháp thực tế để lập luận và ra quyết định trong

điều kiện không chắc chắn có lẽ là yếu tố lớn nhất dẫn đến sự chuyển đổi nhanh chóng sang các tác nhân

dựa trên tiện ích trong những năm 1990 (xem Phần IV).

Thiết kế chung cho các tác nhân học tập được mô tả trong Hình 2.15 là cổ điển trong tài liệu học

máy (Buchanan và cộng sự, 1978; Mitchell, 1997). Các ví dụ về thiết kế, như được thể hiện trong các

chương trình, ít nhất là từ chương trình học chơi cờ đam của Arthur Samuel (1959, 1967). Tác nhân học

tập được thảo luận sâu trong Phần V.

Sự quan tâm đến các tác nhân và thiết kế tác nhân đã tăng lên nhanh chóng trong những năm gần đây,

một phần là do sự phát triển của Internet và nhu cầu về phần mềm tự động và di động (Etzioni và Weld,

1994). Các giấy tờ liên quan được thu thập trong Bài đọc về các đại lý (Huhns và Singh, 1998) và Nền

tảng của Cơ quan Rational (Wooldridge và Rao, 1999). Các văn bản về hệ thống đa tác nhân thường cung cấp

sự giới thiệu hay về nhiều khía cạnh của thiết kế tác nhân (Weiss, 2000a; Wooldridge, 2002). Một số

chuỗi hội nghị dành cho tác tử đã bắt đầu vào những năm 1990, bao gồm Hội thảo quốc tế về lý thuyết,

kiến trúc và ngôn ngữ tác tử (ATAL), Hội nghị quốc tế về tác nhân tự trị (AGENTS) và Hội nghị quốc tế về

hệ thống đa tác tử (ICMAS). ). Năm 2002, ba cơ quan này sáp nhập để thành lập Hội nghị chung quốc tế về

các đại lý tự trị và hệ thống đa tác nhân (AAMAS). Tạp chí Đại lý tự trị và Hệ thống đa tác nhân được

thành lập vào năm 1998. Cuối cùng, Hệ sinh thái bọ hung (Hanski và Cambefort, 1991) cung cấp nhiều thông

tin thú vị về hành vi của bọ phân. YouTube có các bản ghi video đầy cảm hứng về hoạt động của họ.

BÀI TẬP

2.1 Giả sử thước đo hiệu suất chỉ liên quan đến T bước thời gian đầu tiên của môi trường và bỏ qua mọi

thứ sau đó. Chứng tỏ rằng hành động của một tác nhân hợp lý có thể không chỉ phụ thuộc vào trạng thái

của môi trường mà còn phụ thuộc vào bước thời gian mà nó đạt tới.

2.2 Chúng ta hãy xem xét tính hợp lý của các chức năng khác nhau của máy hút bụi.

Một. Chứng minh rằng chức năng tác nhân máy hút bụi đơn giản được mô tả trong Hình 2.3 thực sự là

hợp lý theo các giả định được liệt kê ở trang 38.

b. Mô tả hàm tác tử hợp lý trong trường hợp mỗi chuyển động tốn một điểm.

Chương trình đại lý tương ứng có yêu cầu trạng thái nội bộ không?

c. Thảo luận về các thiết kế tác nhân khả thi cho các trường hợp trong đó các ô vuông sạch có thể trở nên

bẩn và không xác định được vị trí địa lý của môi trường. Liệu việc đại lý học hỏi từ kinh nghiệm của

mình trong những trường hợp này có hợp lý không? Nếu vậy thì nó nên học những gì? Nếu không, tai sao không?

2.3 Đối với mỗi khẳng định sau đây, hãy cho biết nó đúng hay sai và hỗ trợ câu trả lời của bạn bằng các

ví dụ hoặc phản ví dụ nếu thích hợp.

Một. Một tác nhân chỉ cảm nhận được một phần thông tin về trạng thái thì không thể có lý trí hoàn hảo.
Machine Translated by Google

62 Chương 2. Đại lý thông minh

b. Tồn tại những môi trường nhiệm vụ trong đó không có tác nhân phản xạ thuần túy nào có thể hành

xử một cách hợp lý. c. Tồn tại một môi trường nhiệm vụ trong đó mọi tác nhân

đều hợp lý. d. Đầu vào của một chương trình tác nhân giống như đầu vào của hàm tác tử. đ.

Mọi chức năng tác nhân đều có thể thực hiện được bằng một số kết hợp chương trình/máy. f. Giả

sử một tác nhân chọn hành động của nó một cách thống nhất một cách ngẫu nhiên từ tập hợp các hành động có thể.

Tồn tại một môi trường nhiệm vụ xác định trong đó tác nhân này là hợp lý. g. Một tác

nhân nhất định có thể hoàn toàn hợp lý trong hai môi trường nhiệm vụ riêng biệt. h. Mọi tác nhân đều có

lý trí trong một môi trường không thể quan sát được. Tôi. Một đại

lý chơi poker hoàn toàn hợp lý sẽ không bao giờ thua.

2.4 Đối với mỗi hoạt động sau đây, hãy đưa ra mô tả PEAS về môi trường nhiệm vụ và mô tả nó theo các thuộc

tính được liệt kê trong Phần 2.3.2.

• Chơi bóng đá. •

Khám phá các đại dương dưới bề mặt Titan. • Mua

sách AI đã qua sử dụng trên Internet. • Chơi một trận

quần vợt. • Tập tennis dựa

vào tường. • Nhảy cao. • Đan áo len. •

Đấu giá một mặt hàng tại cuộc

đấu giá.

2.5 Hãy xác định bằng từ ngữ của bạn các thuật ngữ sau: tác nhân, chức năng tác nhân, chương trình tác nhân, tính

hợp lý, tính tự chủ, tác nhân phản xạ, tác nhân dựa trên mô hình, tác nhân dựa trên mục tiêu, tác nhân dựa trên tiện

ích, tác nhân học tập.

2.6 Bài tập này khám phá sự khác biệt giữa các chức năng tác nhân và chương trình tác tử.

Một. Có thể có nhiều hơn một chương trình tác tử thực hiện một chức năng tác tử nhất định không?

Hãy đưa ra một ví dụ hoặc chỉ ra lý do tại sao không thể

thực hiện được. b. Có chức năng tác nhân nào mà bất kỳ chương trình tác nhân nào không thể

thực hiện được không? c. Với một kiến trúc máy cố định, mỗi chương trình tác nhân có thực hiện chính xác một

chức năng đại lý?

d. Cho một kiến trúc có n bit lưu trữ, có bao nhiêu tác nhân khác nhau có thể được hỗ trợ?

gram có ở đó không?

đ. Giả sử chúng ta giữ cố định chương trình tác nhân nhưng tăng tốc máy lên gấp đôi.

Điều đó có làm thay đổi chức năng của đại lý không?

2.7 Viết chương trình tác nhân mã giả cho các tác nhân dựa trên mục tiêu và tiện ích.

Các bài tập sau đây đều liên quan đến việc triển khai môi trường và tác nhân cho thế giới máy hút bụi.
Machine Translated by Google

Bài tập 63

2.8 Triển khai trình mô phỏng môi trường đo lường hiệu suất cho thế giới máy hút bụi được mô tả trong Hình 2.2

và được chỉ định trên trang 38. Việc triển khai của bạn phải theo mô-đun sao cho các cảm biến, bộ truyền động

và đặc điểm môi trường (kích thước, hình dạng, vị trí đặt bụi bẩn, v.v.) .) có thể được thay đổi dễ dàng. (Lưu

ý: đối với một số lựa chọn về ngôn ngữ lập trình và hệ điều hành đã có sẵn các triển khai trong kho mã trực

tuyến.)

2.9 Thực hiện tác nhân phản xạ đơn giản cho môi trường chân không ở Bài tập 2.8. Chạy môi trường với tác nhân

này cho tất cả các cấu hình bụi bẩn ban đầu và vị trí tác nhân có thể có.

Ghi lại điểm hiệu năng cho từng cấu hình và điểm trung bình chung.

2.10 Hãy xem xét một phiên bản sửa đổi của môi trường chân không trong Bài tập 2.8, trong đó tác nhân bị phạt

một điểm cho mỗi hành động.

Một. Liệu một tác nhân phản xạ đơn giản có thể hoàn toàn hợp lý trong môi trường này không?

Giải thích. b. Thế còn một tác nhân phản xạ có trạng thái thì sao? Thiết

kế một đại lý như vậy. c. Câu trả lời của bạn cho a và b thay đổi như thế nào nếu nhận thức của tác nhân

cho nó trạng thái sạch/bẩn ở mọi ô vuông trong môi trường?

2.11 Hãy xem xét một phiên bản sửa đổi của môi trường chân không trong Bài tập 2.8, trong đó địa lý của môi

trường—phạm vi, ranh giới và chướng ngại vật—không xác định, cũng như cấu hình bụi bẩn ban đầu. (Đại lý có thể

đi Lên và Xuống cũng như Trái và Phải.)

Một. Liệu một tác nhân phản xạ đơn giản có thể hoàn toàn hợp lý trong môi trường này không? Giải

thích. b. Liệu một tác nhân phản xạ đơn giản có chức năng tác nhân ngẫu nhiên có thể hoạt động tốt hơn một

tác nhân phản xạ đơn giản không? Thiết kế một tác nhân như vậy và đo lường hiệu suất của nó trên một

số môi trường. c. Bạn có thể thiết kế một môi trường trong đó tác nhân ngẫu nhiên của bạn sẽ hoạt động kém không?

Hiển thị kết quả của

bạn. d. Liệu một tác nhân phản xạ có trạng thái có thể hoạt động tốt hơn một tác nhân phản xạ đơn giản không? Thiết kế

một tác nhân như vậy và đo lường hiệu suất của nó trên một số môi trường. Bạn có thể thiết kế một tác nhân hợp lý

thuộc loại này không?

2.12 Lặp lại Bài tập 2.11 trong trường hợp cảm biến vị trí được thay thế bằng cảm biến “va chạm” để phát hiện

nỗ lực của tác nhân nhằm di chuyển vào chướng ngại vật hoặc vượt qua ranh giới của môi trường. Giả sử cảm biến

va đập ngừng hoạt động; đại lý nên cư xử như thế nào?

2.13 Môi trường chân không trong các bài tập trước đều mang tính quyết định. Thảo luận về các chương trình

tác nhân có thể áp dụng cho từng phiên bản ngẫu nhiên sau:

Một. Định luật Murphy: 25% trường hợp, hành động Hút không làm sạch sàn nếu sàn bẩn và đọng lại bụi bẩn

trên sàn nếu sàn sạch. Chương trình đại lý của bạn bị ảnh hưởng như thế nào nếu cảm biến bụi bẩn đưa ra

câu trả lời sai 10%?

b. Trẻ nhỏ: Ở mỗi bước thời gian, mỗi ô vuông sạch sẽ có 10% khả năng bị bẩn. Bạn có thể đưa ra một thiết

kế tác nhân hợp lý cho trường hợp này không?


Machine Translated by Google

3 GIẢI QUYẾT VẤN ĐỀ BẰNG

ĐANG TÌM KIẾM

Trong đó chúng ta thấy cách một tác nhân có thể tìm thấy một chuỗi hành động đạt được mục tiêu của mình

khi không có hành động đơn lẻ nào thực hiện được.

Các tác nhân đơn giản nhất được thảo luận trong Chương 2 là các tác nhân phản xạ, hoạt động dựa trên sự ánh xạ trực tiếp

từ trạng thái tới hành động. Các tác nhân như vậy không thể hoạt động tốt trong các môi trường mà bản đồ này quá lớn để

lưu trữ và mất quá nhiều thời gian để tìm hiểu. Mặt khác, các tác nhân dựa trên mục tiêu sẽ xem xét các hành động trong

tương lai và mức độ mong muốn đạt được kết quả của chúng.
GIẢI QUYẾT VẤN ĐỀ
ĐẠI LÝ
Chương này mô tả một loại tác nhân dựa trên mục tiêu được gọi là tác nhân giải quyết vấn đề.

Các tác nhân giải quyết vấn đề sử dụng các biểu diễn nguyên tử , như được mô tả trong Phần 2.4.7—nghĩa là, các trạng

thái của thế giới được coi là tổng thể, không có cấu trúc bên trong nào có thể nhìn thấy được đối với các thuật toán

giải quyết vấn đề. Các tác nhân dựa trên mục tiêu sử dụng các phản hồi có cấu trúc hoặc nhân tố nâng cao hơn thường

được gọi là các tác nhân lập kế hoạch và sẽ được thảo luận trong Chương 7 và 10.

Cuộc thảo luận của chúng tôi về việc giải quyết vấn đề bắt đầu bằng các định nghĩa chính xác về vấn đề và giải

pháp của chúng , đồng thời đưa ra một số ví dụ để minh họa các định nghĩa này. Sau đó chúng tôi mô tả một số thuật toán

tìm kiếm có mục đích chung có thể được sử dụng để giải quyết những vấn đề này. Chúng ta sẽ thấy một số thuật toán tìm

kiếm không chính xác —các thuật toán không cung cấp thông tin nào về vấn đề ngoài định nghĩa của nó. Mặc dù một số thuật

toán này có thể giải quyết bất kỳ vấn đề nào có thể giải được nhưng không có thuật toán nào có thể giải quyết được một

cách hiệu quả. Mặt khác, các thuật toán tìm kiếm có hiểu biết có thể hoạt động khá tốt khi đưa ra một số hướng dẫn về

nơi tìm kiếm giải pháp.

Trong chương này, chúng ta giới hạn ở loại môi trường nhiệm vụ đơn giản nhất, trong đó giải pháp cho một vấn đề

luôn là một chuỗi hành động cố định. Trường hợp tổng quát hơn—trong đó các hành động trong tương lai của tác nhân có thể

thay đổi tùy thuộc vào nhận thức trong tương lai—được xử lý trong Chương 4.

Chương này sử dụng các khái niệm về độ phức tạp tiệm cận (nghĩa là ký hiệu O()) và

NP-đầy đủ. Người đọc không quen với những khái niệm này nên tham khảo Phụ lục A.

3.1 ĐẠI LÝ GIẢI QUYẾT VẤN ĐỀ

Các tác nhân thông minh có nhiệm vụ tối đa hóa thước đo hiệu suất của họ. Như chúng tôi đã đề cập trong Chương 2, việc

đạt được điều này đôi khi được đơn giản hóa nếu tác nhân có thể chấp nhận một mục tiêu và hướng đến việc thỏa mãn nó.

Trước tiên chúng ta hãy xem tại sao và làm thế nào một đại lý có thể làm điều này.

64
Machine Translated by Google

Mục 3.1. Đại lý giải quyết vấn đề 65

Hãy tưởng tượng một đại lý ở thành phố Arad, Romania, đang tận hưởng kỳ nghỉ du lịch. Thước đo

hiệu suất của tác nhân bao gồm nhiều yếu tố: nó muốn cải thiện làn da rám nắng, cải thiện vẻ đẹp La

Mã, ngắm cảnh, tận hưởng cuộc sống về đêm (chẳng hạn như vậy), tránh cảm giác nôn nao, v.v. Bài toán

quyết định là một bài toán phức tạp liên quan đến nhiều sự đánh đổi và việc đọc kỹ các sách hướng dẫn.

Bây giờ, giả sử đại lý có một vé không hoàn lại để bay khỏi Bucharest vào ngày hôm sau. Trong trường

hợp đó, việc người đại diện chấp nhận mục tiêu đến Bucharest là điều hợp lý.

Các phương án hành động không đến được Bucharest đúng thời hạn có thể bị từ chối mà không cần xem xét

thêm và vấn đề quyết định của người đại diện được đơn giản hóa rất nhiều. Mục tiêu giúp tổ chức hành vi

bằng cách giới hạn các mục tiêu mà tác nhân đang cố gắng đạt được và do đó các hành động mà nó cần CÔNG

THỨC MỤC TIÊU cần xem xét. Việc xây dựng mục tiêu, dựa trên tình hình hiện tại và thước đo hiệu suất của tác nhân, là

bước đầu tiên trong việc giải quyết vấn đề.

Chúng ta sẽ coi mục tiêu là một tập hợp các trạng thái trên thế giới—chính xác là những trạng

thái mà mục tiêu được thỏa mãn. Nhiệm vụ của tác nhân là tìm ra cách hành động, hiện tại và trong tương

lai, để đạt được trạng thái mục tiêu. Trước khi nó có thể làm điều này, nó cần quyết định (hoặc chúng

ta cần quyết định thay mặt nó) những loại hành động và trạng thái nào nó nên xem xét. Nếu xét đến những

hành động ở mức độ “đưa chân trái về phía trước một inch” hoặc “xoay vô lăng sang trái một độ”, thì

người đại diện có lẽ sẽ không bao giờ tìm được đường ra khỏi bãi đậu xe chứ đừng nói đến việc đến

Bucharest, bởi vì ở mức độ chi tiết đó, có quá nhiều điều không chắc chắn trên thế giới và sẽ có quá
VẤN ĐỀ
CÔNG THỨC
nhiều bước để tìm ra giải pháp. Xây dựng vấn đề là quá trình quyết định những hành động và trạng thái

nào cần xem xét, với một mục tiêu nhất định. Chúng ta sẽ thảo luận quá trình này chi tiết hơn sau. Hiện

tại, chúng ta hãy giả sử rằng tác nhân sẽ xem xét các hành động ở cấp độ lái xe từ thị trấn lớn này

sang thị trấn lớn khác. Do đó, mỗi tiểu bang tương ứng với việc ở trong một thị trấn cụ thể.

Đại lý của chúng tôi hiện đã chấp nhận mục tiêu lái xe đến Bucharest và đang xem xét nên đi đâu

từ Arad. Ba con đường dẫn ra khỏi Arad, một đến Sibiu, một đến Timisoara và một đến Zerind. Không ai

trong số này đạt được mục tiêu, vì vậy trừ khi tác nhân quen thuộc với địa lý của Romania, nó sẽ không

biết nên đi theo con đường nào.1 Nói cách khác, tác nhân sẽ không biết hành động nào có thể xảy ra của

mình là tốt nhất, bởi vì nó không nhưng vẫn biết đủ về trạng thái của mỗi hành động. Nếu tác nhân không

có thông tin bổ sung - tức là nếu môi trường không xác định theo nghĩa được xác định trong Phần 2.3 -
thì nó không có lựa chọn nào khác ngoài việc

thử một trong các hành động một cách ngẫu nhiên. Tình huống đáng buồn này sẽ được thảo luận ở Chương 4.

Nhưng giả sử người đại diện có bản đồ Romania. Mục đích của bản đồ là cung cấp cho tác nhân thông

tin về các trạng thái mà nó có thể rơi vào và các hành động mà nó có thể thực hiện. Đặc vụ có thể sử

dụng thông tin này để xem xét các giai đoạn tiếp theo của một hành trình giả định qua từng thị trấn

trong số ba thị trấn, cố gắng tìm kiếm một hành trình cuối cùng đến Bucharest. Sau khi tìm thấy đường

đi trên bản đồ từ Arad đến Bucharest, nó có thể đạt được mục tiêu bằng cách thực hiện các hành động lái

xe tương ứng với các chặng của hành trình. Nói chung, một tác nhân với một số tùy chọn trước mắt có giá

trị không xác định có thể quyết định phải làm gì bằng cách trước tiên kiểm tra các hành động trong

tương lai mà cuối cùng dẫn đến trạng thái có giá trị đã biết.

Để cụ thể hơn về ý nghĩa của việc “xem xét các hành động trong tương lai”, chúng ta phải cụ thể

hơn về các đặc tính của môi trường, như được định nghĩa trong Phần 2.3. Hiện tại,

1 Chúng tôi giả định rằng hầu hết độc giả đều ở trong hoàn cảnh tương tự và có thể dễ dàng tưởng tượng mình cũng không biết

gì như người đại diện của chúng tôi. Chúng tôi xin lỗi những độc giả Romania không thể tận dụng được công cụ sư phạm này.
Machine Translated by Google

66 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

chúng tôi giả định rằng môi trường có thể quan sát được, vì vậy tác nhân luôn biết trạng thái hiện tại.

Đối với đại lý lái xe ở Romania, thật hợp lý khi cho rằng mỗi thành phố trên bản đồ đều có một biển báo

cho thấy sự hiện diện của nó đối với những tài xế đang đến. Chúng tôi cũng giả sử môi trường là rời rạc,

vì vậy ở bất kỳ trạng thái nào cũng chỉ có hữu hạn nhiều hành động để lựa chọn. Điều này đúng khi định

hướng ở Romania vì mỗi thành phố được kết nối với một số ít thành phố khác. Chúng tôi sẽ giả định rằng

môi trường đã được biết nên tác nhân biết mỗi hành động sẽ đạt được trạng thái nào. (Có một bản đồ chính

xác đủ để đáp ứng điều kiện này cho các vấn đề về điều hướng.)

Cuối cùng, chúng ta giả định rằng môi trường có tính chất quyết định nên mỗi hành động đều có chính xác

một kết quả. Trong điều kiện lý tưởng, điều này đúng với đại lý ở Romania - điều đó có nghĩa là nếu họ

chọn lái xe từ Arad đến Sibiu thì họ sẽ dừng ở Sibiu. Tất nhiên, các điều kiện không phải lúc nào cũng lý

tưởng, như chúng tôi đã trình bày ở Chương 4.

Theo những giả định này, giải pháp cho mọi vấn đề là một chuỗi hành động cố định.

"Tất nhiên rồi!" người ta có thể nói, "Còn có thể là gì nữa?" Chà, nói chung, nó có thể là một chiến lược

phân nhánh đề xuất các hành động khác nhau trong tương lai tùy thuộc vào những gì nhận thức đến.

Ví dụ: trong điều kiện kém lý tưởng, đặc vụ có thể lên kế hoạch lái xe từ Arad đến Sibiu rồi đến Rimnicu

Vilcea nhưng cũng có thể cần phải có kế hoạch dự phòng trong trường hợp nó vô tình đến Zerind thay vì

Sibiu. May mắn thay, nếu tác nhân biết trạng thái ban đầu và môi trường đã biết và mang tính xác định, nó

sẽ biết chính xác nó sẽ ở đâu sau hành động đầu tiên và nó sẽ cảm nhận được những gì. Vì chỉ có thể thực

hiện được một nhận thức sau hành động đầu tiên nên giải pháp chỉ có thể chỉ định một hành động thứ hai

khả thi, v.v.


TÌM KIẾM Quá trình tìm kiếm một chuỗi hành động để đạt được mục tiêu được gọi là tìm kiếm.
GIẢI PHÁP Thuật toán tìm kiếm lấy một vấn đề làm đầu vào và trả về giải pháp dưới dạng chuỗi hành động. Sau khi tìm

thấy giải pháp, các hành động được đề xuất có thể được thực hiện. Đây được gọi là giai đoạn thực hiện .
CHẤP HÀNH Vì vậy, chúng ta có một thiết kế “xây dựng, tìm kiếm, thực thi” đơn giản cho tác nhân, như trong Hình

3.1. Sau khi hình thành mục tiêu và vấn đề cần giải quyết, tác nhân sẽ gọi thủ tục tìm kiếm để giải quyết

nó. Sau đó, nó sử dụng giải pháp để hướng dẫn các hành động của mình, thực hiện bất kỳ điều gì giải pháp

khuyến nghị làm việc tiếp theo—thường là hành động đầu tiên của trình tự—và sau đó loại bỏ bước đó khỏi

trình tự. Khi giải pháp đã được thực hiện, tác nhân sẽ hình thành một mục tiêu mới.

Lưu ý rằng trong khi tác nhân đang thực hiện chuỗi giải pháp, nó sẽ bỏ qua các nhận thức của mình

khi chọn một hành động vì nó biết trước chúng sẽ là gì. Có thể nói, một đặc vụ thực hiện kế hoạch của mình

với đôi mắt nhắm nghiền phải hoàn toàn chắc chắn về những gì đang diễn ra. Các nhà lý thuyết điều khiển
VÒNG MỞ gọi đây là hệ thống vòng mở , bởi vì việc bỏ qua các nhận thức sẽ phá vỡ vòng lặp giữa tác nhân và môi

trường.

Đầu tiên chúng ta mô tả quá trình hình thành bài toán và sau đó dành phần lớn chương này cho các

thuật toán khác nhau cho hàm TÌM KIẾM . Chúng ta không thảo luận thêm về hoạt động của các hàm UPDATE-

STATE và FORMULATE-GOAL trong chương này.

3.1.1 Vấn đề và giải pháp được xác định rõ ràng

VẤN ĐỀ Một vấn đề có thể được xác định chính thức bởi năm thành phần:

TRẠNG THÁI BAN ĐẦU • Trạng thái ban đầu mà tác nhân bắt đầu. Ví dụ: trạng thái ban đầu cho tác nhân của chúng tôi ở

Romania có thể được mô tả là In(Arad).


Machine Translated by Google

Mục 3.1. Đại lý giải quyết vấn đề 67

hàm SIMPLE-PROBLEM-SOLVING-Agent(percept) trả về một hành động

liên tục: seq, một chuỗi hành động, ban đầu trống

trạng thái, một số mô tả về trạng thái thế giới hiện tại

mục tiêu, mục tiêu, ban đầu là vô giá trị

vấn đề, hình thành vấn đề

trạng thái UPDATE-STATE(trạng thái, nhận thức)

nếu seq trống thì

mục tiêu CÔNG THỨC-MỤC TIÊU(trạng thái)

vấn đề CÔNG THỨC-VẤN ĐỀ(trạng thái, mục tiêu)

seq TÌM KIẾM(vấn đề)

nếu seq = thất bại thì trả về một hành động rỗng

hành động ĐẦU TIÊN(seq)

seq REST(seq)
hành động trả lại

Hình 3.1 Một tác nhân giải quyết vấn đề đơn giản. Đầu tiên nó hình thành một mục tiêu và một vấn đề,

tìm kiếm một chuỗi các hành động có thể giải quyết được vấn đề và sau đó thực hiện các hành động đó

cùng một lúc. Khi việc này hoàn tất, nó sẽ hình thành một mục tiêu khác và bắt đầu lại.

HÀNH ĐỘNG • Mô tả về các hành động có thể có đối với đại lý. Với một trạng thái cụ thể s,

ACTIONS(s) trả về tập hợp các hành động có thể được thực hiện trong s. Chúng tôi nói rằng mỗi

ÁP DỤNG những hành động này được áp dụng trong s. Ví dụ: từ trạng thái In(Arad), áp dụng

hành động là {Go(Sibiu), Go(Timisoara), Go(Zerind)}.

• Mô tả từng hành động thực hiện; tên chính thức cho việc này là sự chuyển đổi

MÔ HÌNH CHUYỂN TIẾP mô hình, được xác định bởi hàm KẾT QUẢ (s, a) trả về trạng thái là kết quả của

NGƯỜI THÀNH CÔNG thực hiện hành động a ở trạng thái s. Chúng tôi cũng sử dụng thuật ngữ kế nhiệm để chỉ bất kỳ trạng thái nào có thể tiếp cận được

từ một trạng thái nhất định bằng một hành động duy nhất.2 Ví dụ: chúng ta có

KẾT QUẢ(Trong(Arad),Go(Zerind)) = In(Zerind) .

KHÔNG GIAN NHÀ NƯỚC Cùng với nhau, trạng thái ban đầu, hành động và mô hình chuyển đổi ngầm xác định không gian trạng thái

của vấn đề—tập hợp tất cả các trạng thái có thể đạt được từ trạng thái ban đầu theo bất kỳ trình tự nào

ĐỒ HỌA của các hành động. Không gian trạng thái tạo thành một mạng hoặc đồ thị có hướng trong đó các nút

là các trạng thái và các liên kết giữa các nút là các hành động. (Bản đồ Romania thể hiện ở

Hình 3.2 có thể được hiểu là đồ thị không gian trạng thái nếu chúng ta xem mỗi con đường là đứng

CON ĐƯỜNG đối với hai hành động điều khiển, mỗi hành động theo một hướng.) Một đường đi trong không gian trạng thái là một chuỗi

của các trạng thái được kết nối bởi một chuỗi hành động.

KIỂM TRA MỤC TIÊU • Kiểm tra mục tiêu, xác định xem một trạng thái nhất định có phải là trạng thái mục tiêu hay không. Đôi khi ở đó

là một tập hợp rõ ràng các trạng thái mục tiêu có thể có và việc kiểm tra chỉ đơn giản là kiểm tra xem dữ liệu đã cho

nhà nước là một trong số đó. Mục tiêu của đặc vụ ở Romania là bộ đơn lẻ {In(Bucharest)}.

2
Nhiều phương pháp giải quyết vấn đề, bao gồm cả các phiên bản trước của cuốn sách này, sử dụng hàm kế tiếp, trong đó

trả về tập hợp tất cả các phần kế tiếp, thay vì các hàm ACTIONS và KẾT QUẢ riêng biệt . Chức năng kế thừa

gây khó khăn cho việc mô tả một tác nhân biết những hành động nào nó có thể thử nhưng không biết những gì họ đạt được. Ngoài ra, lưu ý

một số tác giả sử dụng RESULT(a, s) thay vì RESULT(s, a), và một số sử dụng DO thay vì RESULT.
Machine Translated by Google

68 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

Oradea

71
Neamt

Zerind 87
151
75
Iasi
Arad
140
92
Sibiu
99 Fagaras

118
Vaslui
80

Rimnicu Vilcea
Timisoara

142
111 211
Pitesti
Lugoj 97

70 98
Hirsova
146 85
Mehadia 101 Urziceni
86
75 138
Bucharest
Drobeta 120
90

Craiova Eforie
giurgiu

Hình 3.2 Bản đồ đường đi đơn giản của một phần Romania.

Đôi khi mục tiêu được chỉ định bởi một thuộc tính trừu tượng thay vì một tập hợp các trạng thái được

liệt kê rõ ràng. Ví dụ: trong cờ vua, mục tiêu là đạt đến trạng thái gọi là “chiếu tướng”, khi vua của

đối phương đang bị tấn công và không thể trốn thoát.

CHI PHÍ ĐƯỜNG ĐƯỜNG


• Hàm chi phí đường dẫn gán chi phí bằng số cho mỗi đường dẫn. Tác nhân giải quyết vấn đề chọn một hàm chi

phí phản ánh thước đo hiệu suất của chính nó. Đối với đặc vụ đang cố gắng đến Bucharest, thời gian là

điều cốt yếu, vì vậy chi phí của một con đường có thể là chiều dài tính bằng km. Trong chương này, chúng

ta giả định rằng chi phí của một đường đi có thể được mô tả bằng tổng chi phí của các hành động riêng lẻ

CHI PHÍ BƯỚC


dọc theo đường đi.3 Chi phí bước của việc thực hiện hành động a ở trạng thái s để đạt đến trạng thái s

được biểu thị bằng c(s , BẰNG ). Chi phí từng bước cho Romania được thể hiện trong Hình 3.2 dưới dạng

khoảng cách tuyến đường. Chúng tôi giả định rằng chi phí bước là không âm.4

Các phần tử trước xác định một vấn đề và có thể được tập hợp thành một cấu trúc dữ liệu duy nhất được đưa ra làm

đầu vào cho thuật toán giải quyết vấn đề. Giải pháp cho một vấn đề là một chuỗi hành động dẫn từ trạng thái ban

đầu đến trạng thái mục tiêu. Chất lượng giải pháp được đo bằng

Hàm chi phí đường đi của GIẢI PHÁP TỐI ƯU và một giải pháp tối ưu có chi phí đường đi thấp nhất trong số tất cả các giải pháp.

3.1.2 Xây dựng bài toán

Trong phần trước chúng ta đã đề xuất một công thức của bài toán đến Bucharest theo trạng thái ban đầu, hành

động, mô hình chuyển tiếp, kiểm tra mục tiêu và chi phí đường đi. Công thức này có vẻ hợp lý, nhưng nó vẫn là

một mô hình – một mô tả toán học trừu tượng – chứ không phải là

3 Giả định này thuận tiện về mặt thuật toán nhưng cũng hợp lý về mặt lý thuyết—xem trang 649 trong Chương 17.
4 Ý nghĩa của chi phí âm được khám phá trong Bài tập 3.8.
Machine Translated by Google

Mục 3.2. Vấn đề ví dụ 69

điều thực sự. So sánh mô tả trạng thái đơn giản mà chúng ta đã chọn, In(Arad), với một chuyến đi

xuyên quốc gia thực tế, nơi trạng thái của thế giới bao gồm rất nhiều thứ: những người bạn đồng hành,

chương trình phát thanh hiện tại, phong cảnh ngoài cửa sổ, khoảng cách đến các nhân viên thực thi

pháp luật, khoảng cách đến điểm dừng tiếp theo, tình trạng đường sá, thời tiết, v.v.

Tất cả những cân nhắc này đều bị loại khỏi mô tả tiểu bang của chúng tôi vì chúng không liên quan

đến vấn đề tìm đường đến Bucharest. Quá trình loại bỏ chi tiết khỏi biểu diễn được gọi là trừu tượng
TÓM TẮT hóa.

Ngoài việc trừu tượng hóa mô tả trạng thái, chúng ta phải trừu tượng hóa chính các hành động.

Một hành động lái xe có nhiều tác dụng. Bên cạnh việc thay đổi vị trí của phương tiện và những người

ngồi trong xe, nó còn tốn thời gian, tiêu tốn nhiên liệu, gây ô nhiễm và thay đổi tác nhân (như người

ta nói, việc đi lại ngày càng mở rộng). Công thức của chúng tôi chỉ tính đến sự thay đổi về vị trí.

Ngoài ra, có nhiều hành động mà chúng ta hoàn toàn bỏ qua: bật radio, nhìn ra ngoài cửa sổ, giảm tốc

độ để chờ nhân viên thực thi pháp luật, v.v. Và tất nhiên, chúng tôi không chỉ định các hành động ở

cấp độ “quay vô lăng sang trái một độ”.

Chúng ta có thể xác định chính xác hơn mức độ trừu tượng thích hợp không? Hãy nghĩ về các

trạng thái và hành động trừu tượng mà chúng ta đã chọn tương ứng với tập hợp lớn các trạng thái thế

giới chi tiết và chuỗi hành động chi tiết. Bây giờ hãy xem xét giải pháp cho vấn đề trừu tượng: ví

dụ: đường đi từ Arad đến Sibiu đến Rimnicu Vilcea đến Pitesti đến Bucharest. Giải pháp trừu tượng

này tương ứng với một số lượng lớn các đường dẫn chi tiết hơn. Ví dụ: chúng ta có thể lái xe với đài
phát thanh giữa Sibiu và Rimnicu Vilcea, sau đó tắt nó đi trong phần còn lại của chuyến đi. Sự trừu

tượng hóa có giá trị nếu chúng ta có thể mở rộng bất kỳ giải pháp trừu tượng nào thành một giải pháp

trong thế giới chi tiết hơn; một điều kiện đủ là đối với mọi trạng thái chi tiết “ở Arad”, có một

đường dẫn chi tiết đến trạng thái nào đó “ở Sibiu”, v.v.5 Việc trừu tượng hóa rất hữu ích nếu thực

hiện từng hành động trong giải pháp dễ hơn bài toán ban đầu; trong trường hợp này, chúng đủ dễ để có

thể được thực hiện mà không cần phải tìm kiếm hoặc lập kế hoạch thêm bởi một đại lý lái xe trung

bình. Do đó, việc lựa chọn một sự trừu tượng tốt bao gồm việc loại bỏ càng nhiều chi tiết càng tốt

trong khi vẫn giữ được tính hợp lệ và đảm bảo rằng các hành động trừu tượng dễ thực hiện. Nếu không

có khả năng xây dựng những khái niệm trừu tượng hữu ích, các tác nhân thông minh sẽ hoàn toàn bị thế

giới thực lấn át.

3.2 VẤN ĐỀ VÍ DỤ

Phương pháp giải quyết vấn đề đã được áp dụng cho rất nhiều môi trường nhiệm vụ. Chúng tôi liệt kê một số

vấn đề được biết đến nhiều nhất ở đây, phân biệt giữa các vấn đề về đồ chơi và thế giới thực . Một bài toán

VẤN ĐỀ ĐỒ CHƠI đồ chơi nhằm mục đích minh họa hoặc thực hiện các phương pháp giải quyết vấn đề khác nhau. Nó có thể được

đưa ra một mô tả ngắn gọn, chính xác và do đó các nhà nghiên cứu khác nhau có thể sử dụng nó để so sánh
THẾ GIỚI THỰC
VẤN ĐỀ
hiệu suất của các thuật toán. Một vấn đề trong thế giới thực là vấn đề mà giải pháp của nó được mọi người

thực sự quan tâm. Những vấn đề như vậy có xu hướng không có một mô tả thống nhất duy nhất, nhưng chúng ta

có thể đưa ra hương vị chung cho các công thức của chúng.

5 Xem Phần 11.2 để có bộ định nghĩa và thuật toán đầy đủ hơn.


Machine Translated by Google

70 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

R
L R

L
S S

R R
L R L R

L L
S S
S S
R
L R

S S

Hình 3.3 Không gian trạng thái của thế giới chân không. Liên kết biểu thị hành động: L =
Left,R= Right,S= Suck.

3.2.1 Vấn đề về đồ chơi

Ví dụ đầu tiên chúng ta xem xét là thế giới chân không được giới thiệu lần đầu trong Chương 2. (Xem Hình

2.2.) Bài toán này có thể được phát biểu dưới dạng bài toán như sau:

• Trạng thái: Trạng thái được xác định bởi cả vị trí đại lý và vị trí bụi bẩn. Tác nhân ở một trong

hai địa điểm, mỗi địa điểm có thể có hoặc không chứa bụi bẩn. Như vậy, có 2 × 22 = 8 trạng thái thế

giới có thể có. Một môi trường lớn hơn với n vị trí có n · 2n trạng thái.

• Trạng thái ban đầu: Bất kỳ trạng thái nào cũng có thể được chỉ định làm

trạng thái ban đầu. • Hành động: Trong môi trường đơn giản này, mỗi trạng thái chỉ có ba hành động: Trái, Phải và

Hút. Môi trường lớn hơn cũng có thể bao gồm Lên và Xuống.

• Mô hình chuyển tiếp: Các hành động có tác dụng như mong đợi, ngoại trừ việc di chuyển Trái ở ô vuông

ngoài cùng bên trái, di chuyển Phải ở ô vuông ngoài cùng bên phải và Hút vào ô vuông sạch sẽ không

có tác dụng. Không gian trạng thái hoàn chỉnh được thể hiện trong Hình 3.3.

• Kiểm tra mục tiêu: Kiểm tra xem tất cả các ô vuông có sạch không.

• Chi phí đường đi: Mỗi bước có giá 1, vì vậy chi phí đường đi là số bước trong đường dẫn.

So với thế giới thực, bài toán đồ chơi này có những vị trí rời rạc, bụi bẩn riêng biệt, khả năng làm sạch

đáng tin cậy và nó không bao giờ bẩn hơn. Chương 4 nới lỏng một số giả định này.

CÂU ĐỐ 8 Câu đố 8, một ví dụ được hiển thị trong Hình 3.4, bao gồm một bảng 3 × 3 với tám ô được đánh số và

một khoảng trống. Một ô liền kề với khoảng trống có thể trượt vào khoảng trống. Mục tiêu là đạt được trạng

thái mục tiêu cụ thể, chẳng hạn như trạng thái được hiển thị bên phải hình. Công thức chuẩn như sau:
Machine Translated by Google

Mục 3.2. Vấn đề ví dụ 71

7 2 4 1 2

5 6 3 4 5

số 8 3 1 6 7 số 8

Trạng thái bắt đầu Trạng thái mục tiêu

Hình 3.4 Một ví dụ điển hình của trò chơi xếp hình 8 ô.

• Trạng thái: Mô tả trạng thái xác định vị trí của mỗi ô trong số tám ô và ô trống ở một trong

chín ô vuông. • Trạng thái

ban đầu: Bất kỳ trạng thái nào cũng có thể được chỉ định làm trạng thái ban đầu. Lưu ý rằng bất

kỳ mục tiêu nhất định nào cũng có thể đạt được từ chính xác một nửa số trạng thái

ban đầu có thể có (Bài tập 3.4). • Hành động: Công thức đơn giản nhất xác định các hành động là

chuyển động của khoảng trống Trái, Phải, Lên hoặc Xuống. Có thể có các tập hợp con khác nhau
tùy thuộc vào vị trí trống.

• Mô hình chuyển tiếp: Cho trước một trạng thái và hành động, nó trả về trạng thái kết quả; ví dụ: nếu chúng

ta áp dụng Left cho trạng thái bắt đầu trong Hình 3.4, trạng thái kết quả có số 5 và trạng thái trống được
chuyển đổi.

• Kiểm tra mục tiêu: Việc này kiểm tra xem trạng thái có khớp với cấu hình mục tiêu được hiển thị trong Hình-

ừ 3.4. (Có thể có các cấu hình mục tiêu khác.)

• Chi phí đường đi: Mỗi bước có giá 1, vì vậy chi phí đường đi là số bước trong đường dẫn.

Chúng tôi đã bao gồm những điều trừu tượng nào ở đây? Các hành động được trừu tượng hóa ở trạng thái

bắt đầu và cuối cùng, bỏ qua các vị trí trung gian nơi khối đang trượt. Chúng tôi đã loại bỏ các hành

động như lắc bảng khi các quân cờ bị kẹt và loại trừ việc dùng dao gỡ các quân cờ ra và đặt chúng trở

lại. Chúng tôi chỉ còn lại phần mô tả các quy tắc của câu đố, tránh tất cả các chi tiết về thao tác

vật lý.
KHỐI TRƯỢT
CÂU ĐỐ
Câu đố 8 ô thuộc họ câu đố khối trượt, thường được sử dụng làm bài toán kiểm tra các thuật toán

tìm kiếm mới trong AI. Họ này được biết đến là NP-đầy đủ, do đó người ta không mong đợi tìm được các

phương pháp tốt hơn đáng kể trong trường hợp xấu nhất so với các thuật toán tìm kiếm được mô tả trong

chương này và chương tiếp theo. Câu đố 8 có 9!/2 = 181, 440 trạng thái có thể tiếp cận và có thể giải

dễ dàng. Câu đố 15 (trên bảng 4×4) có khoảng 1,3 nghìn tỷ trạng thái và các trường hợp ngẫu nhiên có

thể được giải một cách tối ưu trong vài mili giây bằng các thuật toán tìm kiếm tốt nhất.

Câu đố 24 (trên bảng 5 × 5) có khoảng 1025 trạng thái và các trường hợp ngẫu nhiên sẽ mất vài giờ để

giải một cách tối ưu.


VẤN ĐỀ 8-Quân Hậu Mục tiêu của bài toán 8 quân hậu là đặt 8 quân hậu lên bàn cờ sao cho không có quân hậu nào tấn

công quân hậu nào khác. (Quân hậu tấn công bất kỳ quân nào trong cùng hàng, cột hoặc đường chéo.)

Hình 3.5 cho thấy một giải pháp đã cố gắng nhưng không thành công: quân hậu ở cột ngoài cùng bên phải

bị quân hậu ở trên cùng bên trái tấn công.


Machine Translated by Google

72 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

Hình 3.5 Gần như là lời giải cho bài toán 8 quân hậu. (Giải pháp được để lại dưới dạng bài tập.)

Mặc dù các thuật toán có mục đích đặc biệt hiệu quả tồn tại cho bài toán này và cho toàn bộ họ n-nữ

hoàng, nhưng nó vẫn là một bài toán thử nghiệm hữu ích cho các thuật toán tìm kiếm. Có hai loại công thức
TĂNG TĂNG
CÔNG THỨC chính. Công thức tăng dần bao gồm các toán tử làm tăng mô tả trạng thái, bắt đầu bằng trạng thái trống;

đối với bài toán 8 quân hậu, điều này có nghĩa là mỗi hành động sẽ thêm một quân hậu vào trạng thái. Công
TRẠNG THÁI HOÀN THÀNH
CÔNG THỨC thức trạng thái hoàn chỉnh bắt đầu với tất cả 8 quân hậu trên bàn cờ và di chuyển chúng xung quanh. Trong

cả hai trường hợp, chi phí đường đi không được quan tâm vì chỉ tính trạng thái cuối cùng. Công thức tăng

dần đầu tiên mà người ta có thể thử là như sau:

• Các bang: Bất kỳ sự sắp xếp nào từ 0 đến 8 quân hậu trên bàn cờ đều được coi là

một bang. • Trạng thái ban đầu: Không có quân hậu

trên bàn cờ. • Hành động: Thêm quân hậu vào bất kỳ ô

trống nào. • Mô hình chuyển tiếp: Trả về bàn cờ có quân hậu được thêm vào ô vuông đã chỉ định. • Kiểm

tra mục tiêu: Có 8 quân hậu trên bàn cờ, không có quân hậu nào bị tấn công.

Trong công thức này, chúng ta có 64 · 63 ··· 57 ≈ 1,8 × 1014 trình tự có thể nghiên cứu. Một công thức

tốt hơn sẽ cấm đặt quân hậu vào bất kỳ ô nào đã bị tấn công:

• Kỳ: Tất cả các cách sắp xếp có thể có của n quân hậu (0 ≤ n ≤ 8), một quân hậu trên mỗi cột trong

n cột ngoài cùng bên trái, không có quân hậu nào tấn công quân hậu khác.

• Hành động: Thêm một quân hậu vào bất kỳ ô nào ở cột trống ngoài cùng bên trái để nó không bị quân

hậu khác tấn công.

Công thức này làm giảm không gian trạng thái 8 quân hậu từ 1,8 × 1014 xuống chỉ còn 2.057 và rất dễ tìm

ra lời giải. Mặt khác, đối với 100 quân hậu, mức giảm là từ khoảng 10400 trạng thái xuống còn khoảng 1052

trạng thái (Bài tập 3.5)—một sự cải thiện lớn, nhưng không đủ để làm cho vấn đề trở nên dễ giải quyết.

Phần 4.1 mô tả công thức trạng thái hoàn chỉnh và Chương 6 đưa ra một thuật toán đơn giản có thể giải

quyết ngay cả bài toán triệu nữ hoàng một cách dễ dàng.


Machine Translated by Google

Mục 3.2. Vấn đề ví dụ 73

Bài toán đồ chơi cuối cùng của chúng tôi do Donald Knuth (1964) nghĩ ra và minh họa cách xuất

hiện các không gian trạng thái vô hạn. Knuth phỏng đoán rằng, bắt đầu từ số 4, một chuỗi các phép

toán giai thừa, căn bậc hai và sàn sẽ đạt đến bất kỳ số nguyên dương mong muốn nào. Ví dụ: chúng ta
có thể đạt 5 từ 4 như sau:

(4!)! = 5 .

Định nghĩa vấn đề rất đơn giản:

• Kỳ: Số dương.

• Trạng thái ban đầu: 4.

• Hành động: Áp dụng phép tính giai thừa, căn bậc hai hoặc tầng (giai thừa chỉ dành cho số

nguyên). • Mô hình chuyển tiếp: Được đưa ra bởi định nghĩa toán học của các phép toán. •

Kiểm tra mục tiêu: Trạng thái là số nguyên dương mong muốn.

Theo hiểu biết của chúng tôi, không có giới hạn nào về số lượng có thể được xây dựng trong quá trình

đạt được mục tiêu nhất định—ví dụ: số 620,448,401,733,239,439,360,000 được tạo ra trong biểu thức cho

5—vì vậy không gian trạng thái cho bài toán này là vô hạn. Các không gian trạng thái như vậy xuất hiện

thường xuyên trong các nhiệm vụ liên quan đến việc tạo ra các biểu thức toán học, mạch điện, bằng

chứng, chương trình và các đối tượng được xác định đệ quy khác.

3.2.2 Các vấn đề trong thế giới thực

TÌM TUYẾN ĐƯỜNG


VẤN ĐỀ
Chúng ta đã thấy vấn đề tìm đường được xác định như thế nào theo các vị trí cụ thể và sự chuyển tiếp

dọc theo các liên kết giữa chúng. Các thuật toán tìm đường được sử dụng trong nhiều ứng dụng. Một số,

chẳng hạn như các trang web và hệ thống trong ô tô cung cấp chỉ đường lái xe, là những phần mở rộng

tương đối đơn giản của ví dụ ở Romania. Những thứ khác, chẳng hạn như định tuyến các luồng video trong

mạng máy tính, lập kế hoạch hoạt động quân sự và hệ thống lập kế hoạch du lịch hàng không, liên quan

đến các thông số kỹ thuật phức tạp hơn nhiều. Hãy xem xét các vấn đề về du lịch hàng không phải được

giải quyết bằng một trang web lập kế hoạch du lịch:

• Tiểu bang: Mỗi tiểu bang rõ ràng bao gồm một địa điểm (ví dụ: sân bay) và thời gian hiện tại.

Hơn nữa, vì chi phí của một hành động (một chặng bay) có thể phụ thuộc vào các chặng bay trước

đó, cơ sở giá vé và trạng thái nội địa hoặc quốc tế của chúng, nên tiểu bang phải ghi lại thông

tin bổ sung về các khía cạnh “lịch sử” này.

• Trạng thái ban đầu: Điều này được xác định bởi truy vấn của

người dùng. • Hành động: Thực hiện bất kỳ chuyến bay nào từ địa điểm hiện tại, ở bất kỳ hạng ghế nào, khởi hành sau

thời gian hiện tại, dành đủ thời gian để di chuyển trong sân bay nếu cần.

• Mô hình chuyển tiếp: Trạng thái khi thực hiện chuyến bay sẽ có điểm đến của chuyến bay là địa

điểm hiện tại và thời gian đến của chuyến bay là thời gian hiện tại.

• Kiểm tra mục tiêu: Chúng ta có ở đích cuối cùng do người dùng chỉ định

không? • Chi phí đường đi: Điều này phụ thuộc vào chi phí tiền tệ, thời gian chờ đợi, thời gian bay, thủ

tục hải quan và nhập cư, chất lượng chỗ ngồi, thời gian trong ngày, loại máy bay, số dặm thưởng cho

khách hàng thường xuyên, v.v.


Machine Translated by Google

74 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

Hệ thống tư vấn du lịch thương mại sử dụng cách trình bày vấn đề kiểu này, với nhiều phức tạp bổ sung để xử lý

cơ cấu giá vé phức tạp mà các hãng hàng không áp đặt. Tuy nhiên, bất kỳ du khách đi biển nào cũng biết rằng

không phải tất cả các chuyến du lịch bằng đường hàng không đều diễn ra theo đúng kế hoạch. Thực sự tốt

hệ thống nên bao gồm các kế hoạch dự phòng—chẳng hạn như đặt chỗ dự phòng trên các chuyến bay thay thế—

trong chừng mực những điều này được chứng minh bằng chi phí và khả năng thất bại của kế hoạch ban đầu.

VẤN ĐỀ DU LỊCH Các bài toán du lịch có liên quan chặt chẽ với các bài toán tìm đường, nhưng có một sự khác biệt quan

trọng. Ví dụ, hãy xem xét bài toán “Hãy ghé thăm ít nhất mỗi thành phố trong Hình 3.2

một lần, bắt đầu và kết thúc ở Bucharest.” Giống như việc tìm đường, các hành động tương ứng

đến các chuyến đi giữa các thành phố lân cận. Tuy nhiên, không gian trạng thái khá khác nhau. Mỗi tiểu bang

phải bao gồm không chỉ vị trí hiện tại mà còn cả tập hợp các thành phố mà đại lý đã ghé thăm.

Vì vậy, trạng thái ban đầu sẽ là In(Bucharest), Visited({Bucharest}), trạng thái trung gian điển hình sẽ là

In(Vaslui), Visited({Bucharest, Urziceni, Vaslui}) và kiểm tra mục tiêu

sẽ kiểm tra xem đại lý có ở Bucharest và tất cả 20 thành phố đã được ghé thăm hay không.
ĐI DU LỊCH
NHÂN VIÊN BÁN HÀNG Bài toán nhân viên bán hàng du lịch (TSP) là bài toán về các chuyến du lịch trong đó mỗi thành phố phải
VẤN ĐỀ

được ghé thăm đúng một lần. Mục đích là tìm ra hành trình ngắn nhất . Vấn đề được biết đến

là NP-hard, nhưng rất nhiều nỗ lực đã được sử dụng để cải thiện khả năng

của thuật toán TSP. Ngoài việc lập kế hoạch chuyến đi cho nhân viên bán hàng du lịch, các thuật toán này

đã được sử dụng cho các nhiệm vụ như lập kế hoạch di chuyển của máy khoan bảng mạch tự động và

máy thả hàng trên sàn cửa hàng.

BỐ CỤC VLSI Sự cố bố cục VLSI yêu cầu định vị hàng triệu thành phần và kết nối

trên một con chip để giảm thiểu diện tích, giảm thiểu độ trễ mạch, giảm thiểu điện dung đi lạc và tối đa hóa

năng suất sản xuất. Vấn đề bố trí xảy ra sau giai đoạn thiết kế logic và được

thường chia thành hai phần: bố trí ô và định tuyến kênh. Trong bố cục ô, nguyên thủy

các thành phần của mạch được nhóm thành các ô, mỗi ô thực hiện một số chức năng được nhận biết

chức năng. Mỗi ô có một vùng phủ sóng cố định (kích thước và hình dạng) và yêu cầu một số lượng nhất định

kết nối với từng ô khác. Mục đích là đặt các ô trên chip để chúng có thể thực hiện

không chồng lên nhau và có chỗ cho các dây kết nối được đặt giữa các ô.

Định tuyến kênh tìm một tuyến đường cụ thể cho từng dây thông qua các khoảng trống giữa các ô. Những cái này

các vấn đề tìm kiếm cực kỳ phức tạp nhưng chắc chắn có giá trị giải quyết. Ở phần sau của chương này,

chúng tôi trình bày một số thuật toán có khả năng giải quyết chúng.

ĐIỀU HƯỚNG ROBOT Điều hướng robot là sự tổng quát hóa của vấn đề tìm đường được mô tả trước đó.

Thay vì đi theo một tập hợp các tuyến đường riêng biệt, robot có thể di chuyển trong một không gian liên tục với

(về nguyên tắc) một tập hợp vô hạn các hành động và trạng thái có thể xảy ra. Đối với robot hình tròn chuyển động trên

bề mặt phẳng, không gian về cơ bản là hai chiều. Khi robot có tay và chân hoặc

bánh xe cũng phải được điều khiển thì không gian tìm kiếm trở nên đa chiều. Trình độ cao

kỹ thuật được yêu cầu chỉ để làm cho không gian tìm kiếm hữu hạn. Chúng tôi kiểm tra một số trong số này

các phương pháp trong Chương 25. Ngoài độ phức tạp của vấn đề, robot thực sự cũng phải

xử lý các lỗi trong kết quả đọc cảm biến và điều khiển động cơ.
TỰ ĐỘNG
CUỘC HỌP Trình tự lắp ráp tự động các vật thể phức tạp bằng robot lần đầu tiên được FREDDY (Michie, 1972) chứng
XUẤT SẮC

minh. Sự tiến bộ kể từ đó tuy chậm nhưng chắc chắn, đến mức

việc lắp ráp các vật thể phức tạp như động cơ điện là khả thi về mặt kinh tế. Đang lắp ráp

vấn đề, mục đích là tìm ra thứ tự để lắp ráp các bộ phận của một đồ vật nào đó. Nếu

chọn sai thứ tự, sẽ không có cách nào để thêm một số phần sau vào chuỗi mà không có
Machine Translated by Google

Mục 3.3. Tìm kiếm giải pháp 75

hoàn tác một số công việc đã được thực hiện. Kiểm tra tính khả thi của một bước trong trình tự là một

bài toán tìm kiếm hình học khó có liên quan chặt chẽ đến việc điều hướng robot. Như vậy, thế hệ

của các hành động pháp lý là phần tốn kém của trình tự lắp ráp. Bất kỳ thuật toán thực tế nào cũng phải

tránh khám phá tất cả ngoại trừ một phần rất nhỏ của không gian trạng thái. Một vấn đề lắp ráp quan trọng khác

THIẾT KẾ PROTEIN là thiết kế protein, trong đó mục tiêu là tìm ra chuỗi axit amin sẽ gấp lại thành một

protein ba chiều với các đặc tính phù hợp để chữa một số bệnh.

3.3 TÌM KIẾM GIẢI PHÁP

Sau khi đã hình thành một số vấn đề, bây giờ chúng ta cần giải quyết chúng. Giải pháp là hành động

trình tự, do đó thuật toán tìm kiếm hoạt động bằng cách xem xét các chuỗi hành động có thể khác nhau. Các

CÂY TÌM KIẾM chuỗi hành động có thể bắt đầu từ trạng thái ban đầu tạo thành cây tìm kiếm với trạng thái ban đầu

NÚT Tại gốc rễ; các nhánh là các hành động và các nút tương ứng với các trạng thái trong không gian trạng thái của

vấn đề. Hình 3.6 thể hiện những bước đầu tiên trong việc xây dựng cây tìm kiếm để tìm đường đi

từ Arad đến Bucharest. Nút gốc của cây tương ứng với trạng thái ban đầu là In(Arad).

Bước đầu tiên là kiểm tra xem đây có phải là trạng thái mục tiêu hay không. (Rõ ràng là không, nhưng điều quan trọng là phải

kiểm tra để chúng ta có thể giải các bài toán mẹo như “bắt đầu ở Arad, đến Arad.”) Sau đó, chúng ta

MỞ RỘNG cần cân nhắc thực hiện nhiều hành động khác nhau. Chúng tôi thực hiện điều này bằng cách mở rộng trạng thái hiện tại; đó là,

TẠO áp dụng từng hành động pháp lý cho trạng thái hiện tại, từ đó tạo ra một tập hợp các trạng thái mới. TRONG

NÚT PHỤ HUYNH trường hợp này, chúng ta thêm ba nhánh từ nút cha In(Arad) dẫn đến ba nhánh con mới

NÚT CON các nút: In(Sibiu), In(Timisoara) và In(Zerind). Bây giờ chúng ta phải chọn cái nào trong ba cái này

khả năng để xem xét thêm.

Đây là bản chất của tìm kiếm—theo đuổi một lựa chọn ngay bây giờ và đặt những lựa chọn khác sang một bên

để sau này, trong trường hợp lựa chọn đầu tiên không dẫn đến giải pháp. Giả sử chúng ta chọn Sibiu trước.

Chúng tôi kiểm tra xem liệu đó có phải là trạng thái mục tiêu hay không (không phải) và sau đó mở rộng nó để có được In(Arad),

Trong (Fagaras), Trong (Oradea) và Trong (RimnicuVilcea). Sau đó chúng ta có thể chọn bất kỳ trong bốn điều này hoặc đi

CUỐNG LÁ quay lại và chọn Timisoara hoặc Zerind. Mỗi nút trong số sáu nút này là một nút lá, nghĩa là một nút

không có con trên cây. Tập hợp tất cả các nút lá có sẵn để mở rộng tại bất kỳ thời điểm nào

BIÊN GIỚI điểm được gọi là biên giới. (Nhiều tác giả gọi đó là danh sách mở, vừa mang tính địa lý vừa

DANH SÁCH MỞ ít gợi ý hơn và kém chính xác hơn, vì các cấu trúc dữ liệu khác phù hợp hơn danh sách.) Trong

Hình 3.6, đường biên của mỗi cây bao gồm các nút có đường viền đậm.

Quá trình mở rộng các nút ở biên giới tiếp tục cho đến khi tìm thấy giải pháp

hoặc không còn trạng thái nào để mở rộng. Thuật toán TREE-SEARCH tổng quát được thể hiện một cách không chính

thức trong Hình 3.7. Các thuật toán tìm kiếm đều có chung cấu trúc cơ bản này; chúng khác nhau chủ yếu

CHIẾN LƯỢC TÌM KIẾM tùy theo cách họ chọn trạng thái nào sẽ mở rộng tiếp theo—cái gọi là chiến lược tìm kiếm.

Người đọc tinh mắt sẽ nhận thấy một điều đặc biệt về cây tìm kiếm được hiển thị trong Hình 3.6: nó bao

gồm đường đi từ Arad đến Sibiu và quay lại Arad một lần nữa! Chúng tôi nói rằng Trong (Arad)

TRẠNG THÁI LẶP LẠI là trạng thái lặp lại trong cây tìm kiếm, được tạo trong trường hợp này bằng một đường dẫn vòng lặp. Đang xem xét

ĐƯỜNG LOOPY những đường dẫn vòng lặp như vậy có nghĩa là cây tìm kiếm hoàn chỉnh cho Romania là vô hạn vì ở đó

không có giới hạn về tần suất người ta có thể đi qua một vòng lặp. Mặt khác, không gian trạng thái –

bản đồ trong Hình 3.2—chỉ có 20 trạng thái. Như chúng ta thảo luận ở Phần 3.4, các vòng lặp có thể gây ra
Machine Translated by Google

76 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

một số thuật toán nhất định sẽ thất bại, khiến cho các vấn đề có thể giải được trở thành không thể giải được. May mắn thay, ở đó

không cần phải xem xét các đường dẫn vòng lặp. Chúng ta có thể dựa vào nhiều thứ hơn là trực giác cho việc này: bởi vì đường dẫn

chi phí có tính chất cộng và chi phí từng bước không âm, đường đi vòng đến bất kỳ trạng thái nhất định nào không bao giờ

tốt hơn con đường tương tự nhưng đã loại bỏ vòng lặp.

ĐƯỜNG DỰ PHÒNG Đường dẫn vòng lặp là trường hợp đặc biệt của khái niệm tổng quát hơn về đường dẫn dự phòng ,

tồn tại bất cứ khi nào có nhiều hơn một cách để đi từ trạng thái này sang trạng thái khác. Hãy xem xét các đường dẫn

Arad–
Sibiu (dài 140 km) và Arad–
Zerind–Oradea–
Sibiu (dài 297 km). Rõ ràng,

con đường thứ hai là dư thừa—nó chỉ là con đường tồi tệ hơn để đạt được trạng thái tương tự. Nếu bạn quan tâm

về việc đạt được mục tiêu, không bao giờ có lý do gì để đi theo nhiều hơn một con đường dẫn đến bất kỳ mục tiêu nào

trạng thái, bởi vì bất kỳ trạng thái mục tiêu nào có thể truy cập được bằng cách mở rộng một đường dẫn cũng có thể truy cập được bằng

mở rộng cái khác.

Trong một số trường hợp, có thể tự xác định vấn đề để loại bỏ những vấn đề dư thừa.

những con đường. Ví dụ: nếu chúng ta xây dựng bài toán 8 quân hậu (trang 71) để có thể có một quân hậu

được đặt vào bất kỳ cột nào thì mỗi trạng thái có n quân hậu có thể được truy cập bởi n! những con đường khác nhau; Nhưng

nếu chúng ta phát biểu lại bài toán sao cho mỗi quân hậu mới được đặt ở cột trống ngoài cùng bên trái,

thì mỗi trạng thái chỉ có thể đạt được thông qua một con đường.

Arad
(a) Trạng thái ban đầu

Sibiu Timisoara Zerind

Arad Fagaras Oradea Rimnicu Vilcea Arad Lugoj Arad Oradea

(b) Sau khi mở rộng Arad Arad

Sibiu Timisoara Zerind

Arad Fagaras Oradea Rimnicu Vilcea Arad Lugoj Arad Oradea

Arad
(c) Sau khi mở rộng Sibiu

Sibiu Timisoara Zerind

Arad Fagaras Oradea Rimnicu Vilcea Arad Lugoj Arad Oradea

Hình 3.6 Cây tìm kiếm một phần để tìm tuyến đường từ Arad tới Bucharest. Các nút đó
đã được mở rộng được tô bóng; các nút đã được tạo nhưng chưa được mở rộng là
được in đậm; các nút chưa được tạo được hiển thị bằng các đường đứt nét mờ.
Machine Translated by Google

Mục 3.3. Tìm kiếm giải pháp 77

hàm TREE-SEARCH(problem) trả về một giải pháp hoặc thất bại khởi tạo
biên giới bằng cách sử dụng trạng thái ban đầu của vòng
lặp vấn
đề nếu biên giới trống thì trả về thất bại
chọn một nút lá và xóa nó khỏi biên giới nếu nút đó

chứa trạng thái mục tiêu sau đó trả về giải pháp tương ứng mở rộng nút đã
chọn, thêm các nút kết quả vào biên giới

hàm GRAPH-SEARCH(problem) trả về một giải pháp hoặc thất bại khởi tạo
biên giới bằng cách sử dụng trạng thái ban đầu của vấn
đề khởi tạo tập hợp đã khám phá thành
vòng lặp
trống nếu biên giới trống thì trả về thất
bại, chọn một nút lá và xóa nó khỏi biên giới nếu

nút chứa trạng thái mục tiêu sau đó trả về giải pháp tương ứng thêm nút
vào tập đã khám phá mở rộng nút
đã chọn, chỉ thêm các nút kết quả vào biên nếu không nằm trong tập
biên hoặc tập đã khám phá

Hình 3.7 Một mô tả không chính thức về các thuật toán tìm kiếm cây và tìm kiếm đồ thị tổng
quát. Các phần của GRAPH-SEARCH được đánh dấu in nghiêng đậm là những phần bổ sung cần thiết để
xử lý các trạng thái lặp lại.

Trong các trường hợp khác, đường dẫn dư thừa là không thể tránh khỏi. Điều này bao gồm tất cả các bài

toán trong đó các hành động có thể đảo ngược được, chẳng hạn như bài toán tìm đường và câu đố khối trượt. Lộ

trình- Tìm LƯỚI HÌNH CHỮ NHẬT trên một lưới hình chữ nhật (giống như lưới được sử dụng sau này trong Hình 3.9) là một ví dụ đặc

biệt quan trọng trong trò chơi máy tính. Trong một lưới như vậy, mỗi trạng thái có bốn trạng thái kế tiếp, do

đó, cây tìm kiếm có độ sâu d bao gồm các trạng thái lặp lại có 4 lá; nhưng chỉ có khoảng 2d2 trạng thái riêng

biệt trong d bước của bất kỳ trạng thái nhất định nào. Với d = 20, điều này có nghĩa là khoảng một nghìn tỷ nút

nhưng chỉ có khoảng 800 trạng thái riêng biệt. Do đó, việc đi theo các đường dẫn dư thừa có thể khiến một vấn

đề có thể xử lý được trở nên khó giải quyết. Điều này đúng ngay cả với các thuật toán biết cách tránh các vòng lặp vô hạn.

Như người ta vẫn nói, các thuật toán quên lịch sử của chúng sẽ chắc chắn lặp lại nó. Cách để
tránh khám phá những con đường thừa là nhớ lại mình đã đi đâu. Để thực hiện điều này, chúng tôi
BỘ KHÁM PHÁ tăng cường thuật toán TREE-SEARCH với cấu trúc dữ liệu được gọi là tập đã khám phá (còn được gọi
DANH SÁCH ĐÃ ĐÓNG là danh sách đóng), ghi nhớ mọi nút được mở rộng. Các nút mới được tạo khớp với các nút được tạo
trước đó—các nút trong tập hợp đã khám phá hoặc đường biên—có thể bị loại bỏ thay vì được thêm vào
đường biên. Thuật toán mới, được gọi là GRAPH-SEARCH, được hiển thị không chính thức trong Hình
3.7. Các thuật toán cụ thể trong chương này dựa trên thiết kế chung này.

Rõ ràng, cây tìm kiếm được xây dựng bằng thuật toán GRAPH-SEARCH chứa nhiều nhất một bản sao
của mỗi trạng thái, vì vậy chúng ta có thể coi nó như việc trồng một cây trực tiếp trên biểu đồ
MÁY TÁCH không gian trạng thái, như trong Hình 3.8. Thuật toán có một thuộc tính hay khác: đường biên phân
tách đồ thị không gian trạng thái thành vùng đã khám phá và vùng chưa khám phá, sao cho mọi đường đi từ
Machine Translated by Google

78 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

Hình 3.8 Chuỗi cây tìm kiếm được tạo ra bởi tìm kiếm đồ thị trong bài toán Romania của Hình 3.2. Ở
mỗi giai đoạn, chúng tôi đã mở rộng mỗi con đường thêm một bước. Chú ý rằng tại
giai đoạn thứ ba, thành phố cực bắc (Oradea) đã trở thành ngõ cụt: cả hai thành phố kế thừa của nó đều
đã được khám phá thông qua các con đường khác.

(Một) (b) (c)

Hình 3.9 Thuộc tính phân tách của GRAPH-SEARCH, được minh họa trên lưới hình chữ nhật
vấn đề. Biên giới (các nút trắng) luôn ngăn cách vùng được khám phá của không gian trạng thái
(các nút màu đen) từ vùng chưa được khám phá (các nút màu xám). Trong (a), chỉ phần gốc đã được mở
rộng. Trong (b), một nút lá đã được mở rộng. Trong (c), những người kế thừa còn lại của gốc
đã được mở rộng theo chiều kim đồng hồ.

trạng thái ban đầu đến trạng thái chưa được khám phá phải đi qua một trạng thái ở biên giới. (Nếu điều này

có vẻ hoàn toàn hiển nhiên, hãy thử Bài tập 3.13 ngay bây giờ.) Tính chất này được minh họa trong Hình 3.9.

Khi mỗi bước di chuyển một trạng thái từ biên giới vào khu vực được khám phá đồng thời di chuyển một số

từ khu vực chưa được khám phá đến biên giới, chúng ta thấy rằng thuật toán này có hệ thống

kiểm tra các trạng thái trong không gian trạng thái, từng trạng thái một, cho đến khi tìm được lời giải.

3.3.1 Hạ tầng thuật toán tìm kiếm

Các thuật toán tìm kiếm yêu cầu cấu trúc dữ liệu để theo dõi cây tìm kiếm đang được xây dựng. Với mỗi nút

n của cây, chúng ta có cấu trúc chứa bốn thành phần:

• n.STATE: trạng thái trong không gian trạng thái mà nút tương ứng;

• n.PARENT: nút trong cây tìm kiếm đã tạo ra nút này;

• n.ACTION: hành động được áp dụng cho nút cha để tạo nút;

• n.PATH-COST: chi phí, thường được ký hiệu là g(n), của đường đi từ trạng thái ban đầu

đến nút, như được chỉ định bởi các con trỏ cha.
Machine Translated by Google

Mục 3.3. Tìm kiếm giải pháp 79

CHA MẸ

5 5 4 Nút HÀNH ĐỘNG = Đúng


CHI PHÍ ĐƯỜNG DẪN = 6

6 6 1 1 8 8
TÌNH TRẠNG

7
7 3 3 22

Hình 3.10 Các nút là cấu trúc dữ liệu mà từ đó cây tìm kiếm được xây dựng. Mỗi nơi có cha
mẹ, một tiểu bang và các lĩnh vực kế toán khác nhau. Mũi tên chỉ từ con tới cha mẹ.

Với các thành phần của nút cha, có thể dễ dàng thấy cách tính toán các thành phần cần
thiết cho nút con. Hàm CHILD-NODE lấy một nút cha và một hành động rồi trả về nút con kết
quả:

hàm CHILD-NODE(vấn đề, cha, hành động) trả về một nút trả về một
nút có

STATE = problem.RESULT(parent.STATE, action),


PARENT = parent, ACTION = action,
PATH-COST = parent.PATH-COST + problem.STEP-COST(parent.STATE, action)

Cấu trúc dữ liệu nút được mô tả trong Hình 3.10. Lưu ý cách con trỏ PARENT xâu chuỗi
các nút lại với nhau thành cấu trúc cây. Những con trỏ này cũng cho phép trích xuất đường
dẫn giải pháp khi tìm thấy nút mục tiêu; chúng tôi sử dụng hàm GIẢI PHÁP để trả về chuỗi
hành động thu được bằng cách đi theo con trỏ cha trở về gốc.
Cho đến nay, chúng ta vẫn chưa cẩn thận trong việc phân biệt giữa các nút và trạng thái, nhưng khi

viết các thuật toán chi tiết, điều quan trọng là phải phân biệt được điều đó. Nút là cấu trúc dữ liệu sổ

sách kế toán được sử dụng để thể hiện cây tìm kiếm. Một trạng thái tương ứng với một cấu hình của thế

giới. Do đó, các nút nằm trên các đường dẫn cụ thể, như được xác định bởi con trỏ PARENT , trong khi các
trạng thái thì không. Hơn nữa, hai nút khác nhau có thể chứa cùng một trạng thái thế giới nếu trạng thái

đó được tạo thông qua hai đường dẫn tìm kiếm khác nhau.

Bây giờ chúng ta đã có các nút, chúng ta cần một nơi nào đó để đặt chúng. Biên giới
cần được lưu trữ theo cách mà thuật toán tìm kiếm có thể dễ dàng chọn nút tiếp theo để mở
XẾP HÀNG rộng theo chiến lược ưa thích của nó. Cấu trúc dữ liệu thích hợp cho việc này là hàng đợi.
Các thao tác trên hàng đợi như sau:

• EMPTY?(queue) chỉ trả về true nếu không còn phần tử nào trong hàng đợi. •

POP(queue) loại bỏ phần tử đầu tiên của hàng đợi và trả về nó. •

INSERT(element, queue) chèn một phần tử và trả về hàng đợi kết quả.
Machine Translated by Google

80 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

Hàng đợi được đặc trưng bởi thứ tự lưu trữ các nút được chèn vào. Ba điểm chung

HÀNG FIFO các biến thể là hàng đợi vào trước, ra trước hoặc hàng đợi FIFO, xuất hiện phần tử cũ nhất của hàng đợi;

HÀNG LIFO hàng đợi vào sau, ra trước hoặc LIFO (còn được gọi là ngăn xếp), sẽ hiển thị phần tử mới nhất

HÀNG ĐỢI ƯU TIÊN của hàng đợi; và hàng đợi ưu tiên, sẽ xuất hiện phần tử của hàng đợi có giá trị cao nhất

ưu tiên theo một số chức năng đặt hàng.

Tập đã khám phá có thể được triển khai bằng bảng băm để cho phép kiểm tra hiệu quả

các trạng thái lặp đi lặp lại. Với việc triển khai tốt, việc chèn và tra cứu có thể được thực hiện trong khoảng

thời gian không đổi cho dù có bao nhiêu trạng thái được lưu trữ. Người ta phải quan tâm thực hiện các

bảng băm với khái niệm đúng đắn về sự bình đẳng giữa các trạng thái. Ví dụ, trong chuyến du lịch

vấn đề nhân viên bán hàng (trang 74), bảng băm cần biết rằng tập hợp các thành phố đã ghé thăm

{Bucharest,Urziceni,Vaslui} giống như {Urziceni,Vaslui,Bucharest}. Đôi khi điều này có thể

có thể đạt được dễ dàng nhất bằng cách nhấn mạnh rằng cấu trúc dữ liệu cho các trạng thái phải ở dạng chuẩn nào đó

Mẫu MẪU CANONICAL ; nghĩa là, các trạng thái tương đương về mặt logic sẽ ánh xạ tới cùng một cấu trúc dữ liệu. Trong trường hợp

trạng thái được mô tả bởi các tập hợp, ví dụ, biểu diễn vectơ bit hoặc danh sách được sắp xếp không có

sự lặp lại sẽ là hợp quy, trong khi danh sách chưa được sắp xếp thì không.

3.3.2 Đo lường hiệu quả giải quyết vấn đề

Trước khi đi vào thiết kế các thuật toán tìm kiếm cụ thể, chúng ta cần xem xét các tiêu chí

có thể được sử dụng để chọn trong số chúng. Chúng ta có thể đánh giá hiệu suất của thuật toán trong

bốn cách:

ĐẦY ĐỦ • Tính đầy đủ: Thuật toán có đảm bảo tìm ra giải pháp khi có giải pháp không?

SỰ TỐI ƯU • Tính tối ưu: Chiến lược có tìm được giải pháp tối ưu như định nghĩa ở trang 68 không?

PHỨC TẠP THỜI GIAN • Độ phức tạp về thời gian: Mất bao lâu để tìm ra giải pháp?

PHỨC HỢP KHÔNG GIAN • Độ phức tạp về không gian: Cần bao nhiêu bộ nhớ để thực hiện tìm kiếm?

Độ phức tạp về thời gian và không gian luôn được xem xét liên quan đến một số thước đo độ khó của bài toán. Trong

khoa học máy tính lý thuyết, thước đo điển hình là quy mô của trạng thái

đồ thị không gian, |V | + |E|, trong đó V là tập các đỉnh (nút) của đồ thị và E là tập hợp

của các cạnh (liên kết). Điều này phù hợp khi biểu đồ là cấu trúc dữ liệu rõ ràng được nhập vào

vào chương trình tìm kiếm. (Bản đồ Romania là một ví dụ về điều này.) Trong AI, biểu đồ thường

được thể hiện ngầm định bằng trạng thái ban đầu, hành động và mô hình chuyển tiếp và thường là vô hạn. Vì những

lý do này, độ phức tạp được thể hiện dưới dạng ba đại lượng: b, phân nhánh

Hệ số NHÂN NHÂN hoặc số lượng người kế nhiệm tối đa của bất kỳ nút nào; d, độ sâu của mục tiêu nông nhất

CHIỀU SÂU nút (tức là số bước dọc theo đường dẫn từ gốc); và m, chiều dài tối đa của

bất kỳ đường đi nào trong không gian trạng thái. Thời gian thường được đo bằng số lượng nút được tạo

trong quá trình tìm kiếm và không gian tính theo số lượng nút tối đa được lưu trong bộ nhớ.

Phần lớn, chúng tôi mô tả độ phức tạp về thời gian và không gian để tìm kiếm trên cây; cho một đồ thị,

câu trả lời phụ thuộc vào mức độ “dư thừa” của các đường dẫn trong không gian trạng thái.

CHI PHÍ TÌM KIẾM Để đánh giá tính hiệu quả của thuật toán tìm kiếm, chúng ta chỉ có thể xem xét chi phí tìm kiếm—

thường phụ thuộc vào độ phức tạp về thời gian nhưng cũng có thể bao gồm một thuật ngữ dành cho bộ nhớ

TỔNG CHI PHÍ cách sử dụng—hoặc chúng ta có thể sử dụng tổng chi phí, kết hợp chi phí tìm kiếm và chi phí đường đi của

giải pháp được tìm thấy. Đối với bài toán tìm đường đi từ Arad đến Bucharest, chi phí tìm kiếm

là lượng thời gian thực hiện việc tìm kiếm và chi phí giải pháp là tổng chiều dài của đường dẫn
Machine Translated by Google

Mục 3.4. Chiến lược tìm kiếm không xác định 81

tính bằng km. Vì vậy, để tính tổng chi phí, chúng ta phải cộng thêm mili giây và km.

Không có “tỷ giá hối đoái chính thức” giữa hai tỷ giá này, nhưng trong trường hợp này có thể hợp lý khi

chuyển km thành mili giây bằng cách sử dụng ước tính tốc độ trung bình của ô tô (vì thời gian là điều mà

đại lý quan tâm). Điều này cho phép tác nhân tìm ra điểm cân bằng tối ưu mà tại đó việc tính toán tiếp

theo để tìm đường đi ngắn hơn sẽ phản tác dụng. Vấn đề tổng quát hơn về sự đánh đổi giữa các loại hàng

hóa khác nhau sẽ được đề cập ở Chương 16.

3.4 CHIẾN LƯỢC TÌM KIẾM KHÔNG CHÍNH XÁC

Phần này đề cập đến một số chiến lược tìm kiếm có tiêu đề tìm kiếm không chính xác (còn gọi là tìm kiếm
KHÔNG THÔNG TIN
TÌM KIẾM
mù). Thuật ngữ này có nghĩa là các chiến lược không có thông tin bổ sung về các trạng thái ngoài thông

TÌM KIẾM MÙ tin được cung cấp trong định nghĩa vấn đề. Tất cả những gì họ có thể làm là tạo ra những người kế thừa và

phân biệt trạng thái mục tiêu với trạng thái không mục tiêu. Tất cả các chiến lược tìm kiếm được phân biệt

theo thứ tự mở rộng các nút. Các chiến lược biết liệu một trạng thái không có mục tiêu là “có triển vọng

hơn” hay không được gọi là chiến lược tìm kiếm có hiểu biết hoặc chiến lược tìm kiếm TÌM KIẾM heuristic ; chúng được đề cập

trong Phần 3.5.

3.4.1 Tìm kiếm theo chiều rộng

CHIỀU RỘNG ĐẦU TIÊN


TÌM KIẾM
Tìm kiếm theo chiều rộng là một chiến lược đơn giản trong đó nút gốc được mở rộng trước, sau đó tất cả các

nút kế thừa của nút gốc được mở rộng tiếp theo, sau đó là các nút kế thừa của chúng , v.v. Nói chung, tất

cả các nút đều được mở rộng ở một độ sâu nhất định trong cây tìm kiếm trước khi bất kỳ nút nào ở cấp độ

tiếp theo được mở rộng.

Tìm kiếm theo chiều rộng là một ví dụ của thuật toán tìm kiếm đồ thị tổng quát (Hình 3.7) trong đó

nút nông nhất chưa được mở rộng được chọn để mở rộng. Điều này đạt được rất đơn giản bằng cách sử dụng

hàng đợi FIFO cho đường biên. Do đó, các nút mới (luôn sâu hơn nút cha mẹ của chúng) sẽ ở phía sau hàng

đợi và các nút cũ, nông hơn các nút mới, sẽ được mở rộng trước. Có một điều chỉnh nhỏ về thuật toán tìm

kiếm đồ thị chung, đó là kiểm tra mục tiêu được áp dụng cho từng nút khi nó được tạo thay vì khi nó được

chọn để mở rộng. Quyết định này được giải thích dưới đây, trong đó chúng tôi thảo luận về độ phức tạp về

thời gian. Cũng lưu ý rằng thuật toán, tuân theo mẫu chung cho tìm kiếm đồ thị, loại bỏ bất kỳ đường dẫn

mới nào đến trạng thái đã có trong tập biên giới hoặc tập khám phá; thật dễ dàng để thấy rằng bất kỳ con

đường nào như vậy ít nhất phải sâu bằng con đường đã được tìm thấy. Do đó, tìm kiếm theo chiều rộng luôn

có đường đi nông nhất tới mọi nút trên biên giới.

Mã giả được cho trong hình 3.11. Hình 3.12 cho thấy tiến trình tìm kiếm trên cây nhị phân đơn giản.

Tỷ lệ tìm kiếm theo chiều rộng theo bốn tiêu chí ở phần trước như thế nào? Chúng ta có thể dễ dàng

thấy rằng nó đã hoàn thành—nếu nút mục tiêu nông nhất ở độ sâu hữu hạn d nào đó, tìm kiếm theo chiều rộng

cuối cùng sẽ tìm thấy nó sau khi tạo ra tất cả các nút nông hơn (với điều kiện hệ số phân nhánh b là hữu

hạn). Lưu ý rằng ngay sau khi nút mục tiêu được tạo, chúng tôi biết đó là nút mục tiêu nông nhất vì tất cả

các nút mục tiêu nông hơn phải đã được tạo và không vượt qua bài kiểm tra mục tiêu. Bây giờ, nút mục tiêu

nông nhất không nhất thiết phải là nút tối ưu ;


Machine Translated by Google

82 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

hàm BREADTH-FIRST-SEARCH(vấn đề) trả về giải pháp hoặc thất bại

nút một nút có STATE = problem.INITIAL-STATE, PATH-COST = 0 if problem.GOAL-


TEST(node.STATE) sau đó trả về SOLUTION(node) Frontier một hàng đợi FIFO
với nút là phần tử duy nhất được khám phá trống set loop
do if EMPTY?(frontier )
sau đó
trả về nút lỗi POP(frontier ) /* chọn nút
nông nhất ở Frontier */ thêm node.STATE để khám phá cho từng hành động trong
problem.ACTIONS(node.STATE) do
child CHILD -NODE(vấn đề, nút, hành động) nếu child.STATE
không nằm trong vùng khám phá hoặc biên giới thì
nếu problem.GOAL-TEST(child.STATE) thì trả về
SOLUTION(child) Frontier INSERT(child,frontier )

Hình 3.11 Tìm kiếm theo chiều rộng trên đồ thị.

về mặt kỹ thuật, tìm kiếm theo chiều rộng là tối ưu nếu chi phí đường dẫn là hàm không giảm theo độ sâu

của nút. Kịch bản phổ biến nhất là tất cả các hành động đều có cùng chi phí.

Cho đến nay, tin tức về tìm kiếm theo chiều rộng rất tốt. Tin tức về thời gian và không gian không mấy

tốt đẹp. Hãy tưởng tượng bạn đang tìm kiếm một cây thống nhất trong đó mọi trạng thái đều có b trạng thái kế thừa.

Gốc của cây tìm kiếm tạo ra b nút ở cấp độ đầu tiên, mỗi nút tạo ra thêm b nút, tổng cộng là b2 ở cấp độ

thứ hai. Mỗi nút trong số này tạo ra thêm b nút, mang lại b3 nút ở cấp độ thứ ba, v.v. Bây giờ giả sử

rằng lời giải ở độ sâu d. Trong trường hợp xấu nhất, đó là nút cuối cùng được tạo ở cấp đó. Khi đó tổng

số nút được tạo là b + b2 + b3 + ··· + bd = O(bd) .

(Nếu thuật toán áp dụng kiểm tra mục tiêu cho các nút khi được chọn để mở rộng, thay vì khi được tạo, thì

toàn bộ lớp nút ở độ sâu d sẽ được mở rộng trước khi phát hiện mục tiêu và độ phức tạp về thời gian sẽ là

O(bd+1 ) .)

Đối với độ phức tạp của không gian: đối với bất kỳ loại tìm kiếm đồ thị nào lưu trữ mọi nút mở

rộng trong tập hợp được khám phá, độ phức tạp của không gian luôn nằm trong hệ số b của độ phức tạp thời

gian. Đặc biệt, đối với tìm kiếm đồ thị theo chiều rộng, mọi nút được tạo sẽ vẫn còn trong bộ nhớ. Sẽ có

các nút O(bd 1) trong tập hợp được khám phá và các nút O(bd) ở biên giới,

MỘT MỘT MỘT MỘT

B C B C B C B C

DE FG DE FG DE FG DE FG

Hình 3.12 Tìm kiếm theo chiều rộng trên cây nhị phân đơn giản. Ở mỗi giai đoạn, nút sẽ được mở rộng
tiếp theo được biểu thị bằng điểm đánh dấu.
Machine Translated by Google

Mục 3.4. Chiến lược tìm kiếm không xác định 83

do đó độ phức tạp của không gian là O(bd), tức là nó bị chi phối bởi kích thước của đường biên. Chuyển đổi

tìm kiếm trên cây sẽ không tiết kiệm được nhiều không gian và trong không gian trạng thái có nhiều đường dẫn dư thừa,

việc chuyển đổi có thể tốn rất nhiều thời gian.

Một giới hạn độ phức tạp theo cấp số nhân như O(bd) thật đáng sợ. Hình 3.13 cho thấy lý do tại sao. Nó

danh sách, đối với các giá trị khác nhau của độ sâu giải pháp d, thời gian và bộ nhớ cần thiết cho tìm

kiếm theo chiều rộng với hệ số phân nhánh b = 10. Bảng giả định rằng 1 triệu nút có thể được

được tạo ra mỗi giây và một nút yêu cầu 1000 byte dung lượng lưu trữ. Nhiều vấn đề tìm kiếm

gần như phù hợp với các giả định này (cho hoặc lấy hệ số 100) khi chạy trên hệ thống hiện đại

máy tính cá nhân.

Chiều sâu Điểm giao Thời gian


Ký ức

2 110 0,11 mili giây 107 kilobyte


4 11.110 11 mili giây 10,6 megabyte
6 106 1,1 giây 1 gigabyte
số 8 108 2 phút 103 gigabyte
10 1010 3 giờ 10 terabyte
12 1012 13 ngày 1 petabyte
14 1014 3,5 năm 99 petabyte
16 1016 350 năm 10 exabyte

Hình 3.13 Yêu cầu về thời gian và bộ nhớ cho tìm kiếm theo chiều rộng. Những con số hiển thị
giả sử hệ số phân nhánh b = 10; 1 triệu nút/giây; 1000 byte/nút.

Hai bài học có thể được rút ra từ Hình 3.13. Đầu tiên, yêu cầu về bộ nhớ là

vấn đề lớn hơn đối với tìm kiếm theo chiều rộng là thời gian thực hiện. Người ta có thể đợi 13 ngày

để tìm giải pháp cho một vấn đề quan trọng với độ sâu tìm kiếm 12, nhưng không có máy tính cá nhân nào có

cần tới petabyte bộ nhớ. May mắn thay, các chiến lược khác đòi hỏi ít bộ nhớ hơn.

Bài học thứ hai là thời gian vẫn là yếu tố chính. Nếu vấn đề của bạn có giải pháp tại

độ sâu 16, thì (theo giả định của chúng tôi) sẽ mất khoảng 350 năm cho tìm kiếm theo chiều rộng (hoặc

thực sự là bất kỳ tìm kiếm không có thông tin nào) để tìm thấy nó. Nói chung, các bài toán tìm kiếm phức tạp theo cấp số nhân

không thể giải được bằng những phương pháp thiếu hiểu biết đối với bất kỳ trường hợp nào ngoại trừ những trường hợp nhỏ nhất.

3.4.2 Tìm kiếm chi phí thống nhất

Khi tất cả các chi phí của bước bằng nhau, tìm kiếm theo chiều rộng là tối ưu vì nó luôn mở rộng phạm vi

nút nông nhất chưa được mở rộng. Bằng một mở rộng đơn giản, chúng ta có thể tìm được thuật toán tối ưu
CHI PHÍ ĐỒNG PHỤC
TÌM KIẾM
với bất kỳ hàm chi phí bước nào. Thay vì mở rộng nút nông nhất, tìm kiếm chi phí đồng đều sẽ mở rộng nút

n với chi phí đường đi thấp nhất g(n). Điều này được thực hiện bằng cách lưu trữ đường biên dưới dạng

hàng đợi ưu tiên được sắp xếp theo g. Thuật toán được thể hiện trong hình 3.14.

Ngoài việc sắp xếp hàng đợi theo chi phí đường đi, còn có hai vấn đề quan trọng khác.

sự khác biệt so với tìm kiếm theo chiều rộng. Đầu tiên là việc kiểm tra mục tiêu được áp dụng cho một nút khi

nó được chọn để mở rộng (như trong thuật toán tìm kiếm đồ thị chung được hiển thị trong Hình 3.7)

thay vì khi nó được tạo ra lần đầu tiên. Lý do là nút mục tiêu đầu tiên được tạo
Machine Translated by Google

84 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

hàm UNIFORM-COST-SEARCH(vấn đề) trả về giải pháp hoặc lỗi

nút một nút có STATE = problem.INITIAL-STATE, PATH-COST = 0 Frontier một hàng

đợi ưu tiên được sắp xếp theo PATH-COST, với nút là phần tử duy nhất được khám phá một vòng

lặp tập hợp trống sẽ làm gì

if EMPTY?

(frontier ) sau đó quay trở lại nút lỗi

POP(frontier ) /* chọn nút có chi phí thấp nhất ở biên giới */ nếu problem.GOAL-

TEST(node.STATE) thì trả về SOLUTION(node) add node.STATE để khám phá cho từng

hành động trong

problem.ACTIONS( node.STATE) do child CHILD-NODE(vấn đề, nút,

hành động) nếu con.STATE không ở trong vùng khám phá

hoặc biên giới thì biên giới INSERT(child,frontier )

nếu không con.STATE nằm ở biên giới với

PATH-COST cao hơn thì thay thế nút biên giới đó bằng nút con

Hình 3.14 Tìm kiếm chi phí đồng nhất trên biểu đồ. Thuật toán này giống hệt với thuật toán tìm kiếm đồ

thị chung trong Hình 3.7, ngoại trừ việc sử dụng hàng đợi ưu tiên và bổ sung kiểm tra bổ sung trong trường

hợp phát hiện ra đường đi ngắn hơn đến trạng thái biên. Cấu trúc dữ liệu của Frontier cần hỗ trợ thử

nghiệm thành viên hiệu quả, do đó, nó phải kết hợp các khả năng của hàng đợi ưu tiên và bảng băm.

Sibiu
99 Fagaras

80

Rimnicu Vilcea

211
Pitesti
97

101

Bucharest

Hình 3.15 Một phần của không gian trạng thái Romania, được chọn để minh họa tìm kiếm chi phí đồng nhất.

có thể nằm trên đường đi dưới mức tối ưu. Sự khác biệt thứ hai là một thử nghiệm được thêm vào trong trường

hợp tìm thấy đường dẫn tốt hơn tới nút hiện ở biên giới.

Cả hai sự sửa đổi này đều có tác dụng trong ví dụ ở Hình 3.15, trong đó vấn đề là đi từ Sibiu đến

Bucharest. Người kế nhiệm Sibiu là Rimnicu Vilcea và Fagaras với giá lần lượt là 80 và 99. Nút chi phí

thấp nhất là Rimnicu Vilcea được mở rộng tiếp theo, thêm Pitesti với chi phí 80 + 97 = 177. Nút chi phí

thấp nhất hiện tại là Fagaras nên được mở rộng, thêm Bucharest với chi phí 99 + 211 = 310. Bây giờ là mục

tiêu nút đã được tạo, nhưng việc tìm kiếm với chi phí thống nhất vẫn tiếp tục, chọn Pitesti để mở rộng và

thêm đường dẫn thứ hai


Machine Translated by Google

Mục 3.4. Chiến lược tìm kiếm không xác định 85

đến Bucharest với chi phí 80+ 97+ 101 = 278. Bây giờ thuật toán sẽ kiểm tra xem liệu con đường mới này có

tốt hơn cái cũ; đúng vậy nên cái cũ bị loại bỏ. Bucharest, hiện có giá g là 278,

được chọn để mở rộng và giải pháp được trả về.

Dễ dàng thấy rằng tìm kiếm chi phí thống nhất nói chung là tối ưu. Đầu tiên, chúng tôi quan sát thấy rằng

bất cứ khi nào tìm kiếm chi phí thống nhất chọn một nút n để mở rộng, đường dẫn tối ưu đến nút đó

đã được tìm thấy. (Nếu không phải như vậy thì sẽ phải có một nút biên giới n khác trên

đường đi tối ưu từ nút đầu đến n, theo thuộc tính phân tách đồ thị của Hình 3.9;

theo định nghĩa, n sẽ có g-cost thấp hơn n và sẽ được chọn trước.) Sau đó,

bởi vì chi phí bước không âm nên đường dẫn không bao giờ ngắn hơn khi các nút được thêm vào. Hai cái này

các sự kiện cùng nhau ngụ ý rằng việc tìm kiếm với chi phí thống nhất sẽ mở rộng các nút theo thứ tự đường dẫn tối ưu của chúng

trị giá. Do đó, nút mục tiêu đầu tiên được chọn để mở rộng phải là giải pháp tối ưu.

Tìm kiếm với chi phí thống nhất không quan tâm đến số bước mà một đường đi có mà chỉ quan tâm đến

tổng chi phí của họ. Do đó, nó sẽ bị mắc kẹt trong một vòng lặp vô hạn nếu có một đường đi có giá trị vô hạn.

chuỗi các hành động không tốn phí—ví dụ: một chuỗi các hành động NoOp.6 Tính hoàn chỉnh là

được đảm bảo với điều kiện chi phí của mỗi bước vượt quá một số hằng số dương nhỏ .

Tìm kiếm với chi phí thống nhất được hướng dẫn bởi chi phí đường đi hơn là độ sâu, do đó độ phức tạp của nó không

dễ dàng đặc trưng theo b và d. Thay vào đó, gọi C là chi phí của giải pháp tối ưu,7

và giả sử rằng mọi hành động đều tốn ít nhất Sau đó, thời .gian và không gian trong trường hợp xấu nhất của thuật toán

độ phức tạp là O(b1+C /), có thể lớn hơn nhiều so với bd. Điều này là do việc tìm kiếm với chi phí đồng nhất

có thể khám phá các cây lớn theo các bước nhỏ trước khi khám phá các đường dẫn liên quan đến các đường dẫn lớn và

có lẽ là những bước hữu ích. Khi tất cả chi phí của bước bằng nhau, b1+C / chỉ là bd+1. Khi tất cả bước

chi phí là như nhau, tìm kiếm theo chi phí thống nhất tương tự như tìm kiếm theo chiều rộng, ngoại trừ việc tìm kiếm sau

dừng ngay khi nó tạo ra mục tiêu, trong khi tìm kiếm chi phí thống nhất sẽ kiểm tra tất cả các nút tại

độ sâu của mục tiêu để xem liệu mục tiêu có chi phí thấp hơn hay không; do đó việc tìm kiếm với chi phí thống nhất thực hiện được nhiều hơn

hoạt động bằng cách mở rộng các nút ở độ sâu d một cách không cần thiết.

3.4.3 Tìm kiếm theo chiều sâu

SÂU ĐẦU TIÊN


TÌM KIẾM
Tìm kiếm theo chiều sâu luôn mở rộng nút sâu nhất trong biên giới hiện tại của cây tìm kiếm.

Tiến trình tìm kiếm được minh họa trong Hình 3.16. Việc tìm kiếm tiến hành ngay lập tức

tới mức sâu nhất của cây tìm kiếm, nơi các nút không có nút kế thừa. Như những nút đó

được mở rộng, chúng bị loại khỏi biên giới, do đó việc tìm kiếm sẽ “trở lại” tới kết quả tiếp theo

nút sâu nhất vẫn còn những nút kế thừa chưa được khám phá.

Thuật toán tìm kiếm theo chiều sâu là một ví dụ của thuật toán tìm kiếm đồ thị trong Hình 3.7; trong

khi tìm kiếm theo chiều rộng sử dụng hàng đợi FIFO thì tìm kiếm theo chiều sâu sử dụng hàng đợi LIFO.

Hàng đợi LIFO có nghĩa là nút được tạo gần đây nhất sẽ được chọn để mở rộng. Cái này

phải là nút sâu nhất chưa được mở rộng vì nó sâu hơn nút gốc của nó—do đó,

là nút sâu nhất chưa được mở rộng khi nó được chọn.

Để thay thế cho việc triển khai kiểu TÌM KIẾM ĐỒ HỌA , người ta thường triển khai tìm kiếm theo chiều

sâu bằng một hàm đệ quy tự gọi chính nó trên mỗi phần tử con của nó trong

xoay. (Thuật toán đệ quy theo độ sâu đầu tiên kết hợp giới hạn độ sâu được hiển thị trong Hình 3.17.)

6 NoOp hay “không hoạt động” là tên của một lệnh hợp ngữ không thực hiện chức năng nào.
7 Ở đây và xuyên suốt cuốn sách, “ngôi sao” trong C có nghĩa là giá trị tối ưu cho C.
Machine Translated by Google

86 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

MỘT MỘT MỘT

B C B C B C

D E F G D E F G D E F G

CHÀO JKLMNO HIJKLMNO CHÀO JKLMNO

MỘT MỘT MỘT

B C B C C

D E F G D E F G E F G

CHÀO JKLMNO Tôi JKLMNO JKLMNO

MỘT MỘT

C B C C

E F G E F G F G

JK LMNO K LMNO LMNO

MỘT MỘT MỘT

C C C

F G F G F G

LMNO LM KHÔNG M KHÔNG

Hình 3.16 Tìm kiếm theo chiều sâu trên cây nhị phân. Vùng chưa được khám phá được hiển thị dưới ánh sáng

xám. Các nút được khám phá không có nút con ở biên giới sẽ bị xóa khỏi bộ nhớ. Điểm giao

ở độ sâu 3 không có nút kế thừa và M là nút mục tiêu duy nhất.

Các thuộc tính của tìm kiếm theo chiều sâu phụ thuộc rất nhiều vào việc tìm kiếm bằng đồ thị hay

phiên bản tìm kiếm cây được sử dụng. Phiên bản tìm kiếm đồ thị, tránh các trạng thái lặp lại và các đường dẫn dư thừa,

hoàn thiện trong không gian trạng thái hữu hạn vì cuối cùng nó sẽ mở rộng mọi nút.

Mặt khác, phiên bản tìm kiếm cây chưa hoàn chỉnh - ví dụ, trong Hình 3.6,

thuật toán sẽ đi theo vòng lặp Arad–Sibiu–


Arad–
Sibiu mãi mãi. Tìm kiếm cây theo chiều sâu có thể

được sửa đổi mà không tốn thêm bộ nhớ để nó kiểm tra các trạng thái mới so với các trạng thái trên đường dẫn từ

gốc đến nút hiện tại; điều này tránh được các vòng lặp vô hạn trong không gian trạng thái hữu hạn nhưng không tránh được

sự gia tăng của các đường dẫn dư thừa. Trong không gian trạng thái vô hạn, cả hai phiên bản đều thất bại nếu một giá trị vô hạn

gặp phải con đường không có mục tiêu. Ví dụ, trong bài toán Knuth thứ 4, tìm kiếm theo chiều sâu sẽ

tiếp tục áp dụng toán tử giai thừa mãi mãi.

Vì những lý do tương tự, cả hai phiên bản đều không tối ưu. Ví dụ, trong Hình 3.16, tìm kiếm theo chiều sâu sẽ

khám phá toàn bộ cây con bên trái ngay cả khi nút C là nút mục tiêu. Nếu nút J là

cũng là một nút mục tiêu, khi đó tìm kiếm theo chiều sâu sẽ trả về nó dưới dạng một giải pháp thay vì C, điều này

sẽ là một giải pháp tốt hơn; do đó, tìm kiếm theo chiều sâu không phải là tối ưu.
Machine Translated by Google

Mục 3.4. Chiến lược tìm kiếm không xác định 87

Độ phức tạp về thời gian của tìm kiếm đồ thị theo chiều sâu bị giới hạn bởi kích thước của không

gian trạng thái (tất nhiên có thể là vô hạn). Mặt khác, tìm kiếm cây theo chiều sâu có thể tạo ra tất cả

các nút O(bm) trong cây tìm kiếm, trong đó m là độ sâu tối đa của bất kỳ nút nào; điều này có thể lớn

hơn nhiều so với kích thước của không gian trạng thái. Lưu ý rằng bản thân m có thể lớn hơn nhiều so với

d (độ sâu của nghiệm nông nhất) và là vô hạn nếu cây không bị chặn.

Cho đến nay, tìm kiếm theo chiều sâu dường như không có lợi thế rõ ràng so với tìm kiếm theo chiều

rộng, vậy tại sao chúng ta lại đưa nó vào? Lý do là sự phức tạp về không gian. Đối với tìm kiếm đồ thị,

không có lợi thế nào, nhưng tìm kiếm cây theo chiều sâu chỉ cần lưu trữ một đường dẫn duy nhất từ nút gốc

đến nút lá, cùng với các nút anh chị em chưa được mở rộng còn lại cho mỗi nút trên đường dẫn. Khi một nút

đã được mở rộng, nó có thể bị xóa khỏi bộ nhớ ngay khi tất cả các nút con của nó đã được khám phá đầy đủ.

(Xem Hình 3.16.) Đối với không gian trạng thái có hệ số phân nhánh b và độ sâu m tối đa, tìm kiếm theo

chiều sâu yêu cầu chỉ lưu trữ các nút O(bm).

Sử dụng các giả định tương tự như trong Hình 3.13 và giả sử rằng các nút ở cùng độ sâu với nút mục tiêu

không có nút kế tiếp, chúng tôi thấy rằng tìm kiếm theo chiều sâu sẽ yêu cầu 156 kilobyte thay vì 10

exabyte ở độ sâu d = 16, hệ số 7 nghìn tỷ không gian ít hơn lần. Điều này đã dẫn đến việc áp dụng tìm

kiếm cây theo chiều sâu làm công việc cơ bản của nhiều lĩnh vực AI, bao gồm sự thỏa mãn ràng buộc (Chương

6), sự thỏa mãn mệnh đề (Chương 7) và lập trình logic (Chương 9). Trong phần còn lại của phần này, chúng

tôi tập trung chủ yếu vào phiên bản tìm kiếm cây của tìm kiếm theo chiều sâu.

QUAY LẠI
TÌM KIẾM
Một biến thể của tìm kiếm theo chiều sâu được gọi là tìm kiếm quay lui vẫn sử dụng ít bộ nhớ hơn.

(Xem Chương 6 để biết thêm chi tiết.) Trong quá trình quay lui, tại một thời điểm chỉ có một phần kế tiếp

được tạo ra chứ không phải tất cả các phần kế tiếp; mỗi nút được mở rộng một phần sẽ ghi nhớ nút kế thừa

nào sẽ được tạo tiếp theo. Theo cách này, chỉ cần bộ nhớ O(m) chứ không cần O(bm). Tìm kiếm quay lui tạo

điều kiện cho một thủ thuật tiết kiệm bộ nhớ (và tiết kiệm thời gian) khác: ý tưởng tạo ra thành công

bằng cách sửa đổi trực tiếp mô tả trạng thái hiện tại thay vì sao chép nó trước. Điều này làm giảm yêu

cầu bộ nhớ xuống chỉ còn một mô tả trạng thái và hành động O(m). Để tính năng này hoạt động, chúng ta

phải có khả năng hoàn tác từng sửa đổi khi quay lại để tạo thành phần kế tiếp. Đối với các vấn đề có mô

tả trạng thái lớn, chẳng hạn như lắp ráp robot, những kỹ thuật này rất quan trọng để thành công.

3.4.4 Tìm kiếm theo độ sâu giới hạn

Sự thất bại đáng xấu hổ của tìm kiếm theo chiều sâu trong không gian trạng thái vô hạn có thể được giảm
.
bớt bằng cách cung cấp cho tìm kiếm theo chiều sâu một giới hạn độ sâu được xác định trước. Nghĩa là, các
GIỚI HẠN SÂU
TÌM KIẾM
nút ở độ sâu được xử lý như thể chúng không có phần kế tiếp. Cách tiếp cận này được gọi là tìm kiếm giới

hạn độ sâu. Giới hạn độ sâu giải quyết vấn đề đường dẫn vô hạn. Thật không may, nó cũng đưa ra thêm một

nguồn không đầy đủ nếu chúng ta chọn <d, tức là mục tiêu nông nhất nằm ngoài giới hạn độ sâu. (Điều này

có thể xảy ra khi d không xác định.) Tìm kiếm theo độ sâu giới hạn cũng sẽ không tối ưu nếu chúng ta chọn

>d. Độ phức tạp về thời gian của nó là O(b) và độ phức tạp về không gian của nó là O(b). Tìm kiếm theo

chiều sâu có thể được xem là trường hợp đặc biệt của tìm kiếm có giới hạn độ sâu với =∞.

Đôi khi, giới hạn độ sâu có thể dựa trên hiểu biết về vấn đề. Ví dụ: trên bản đồ Romania có 20

thành phố. Vì vậy, chúng ta biết rằng nếu có một nghiệm thì nó phải có độ dài dài nhất là 19, vì vậy = 19

là một lựa chọn khả thi. Nhưng trên thực tế nếu chúng ta nghiên cứu
Machine Translated by Google

88 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

hàm DEPTH-LIMITED-SEARCH(vấn đề, giới hạn) trả về một giải pháp, hoặc trả về lỗi/ngắt RECURSIVE-
DLS(MAKE-NODE(problem.INITIAL-STATE), vấn đề, giới hạn)

hàm RECURSIVE-DLS(nút, vấn đề, giới hạn) trả về giải pháp hoặc lỗi/ngắt
nếu problem.GOAL-TEST(node.STATE) thì trả về GIẢI PHÁP(node) nếu không
nếu giới hạn = 0 thì trả về điểm cắt
nếu

không thì có điểm cắt xảy


ra? false cho mỗi hành động trong vấn đề.ACTIONS(node.STATE)
làm con CHILD-NODE( vấn đề, nút, hành động)
kết quả RECURSIVE-DLS(con, vấn đề, giới hạn 1) nếu
kết quả = cắt thì xảy ra cắt? đúng nếu không nếu
kết quả = thất bại thì trả về kết quả nếu
xảy ra cắt? sau đó trả lại điểm cắt nếu không thì trả về thất bại

Hình 3.17 Triển khai đệ quy tìm kiếm cây có giới hạn độ sâu.

lập bản đồ cẩn thận, chúng tôi sẽ phát hiện ra rằng có thể đến bất kỳ thành phố nào từ bất kỳ thành phố nào

ĐƯỜNG KÍNH khác trong tối đa 9 bước. Con số này, được gọi là đường kính của không gian trạng thái, cho chúng ta giới hạn

độ sâu tốt hơn, dẫn đến tìm kiếm giới hạn độ sâu hiệu quả hơn. Tuy nhiên, đối với hầu hết các vấn đề, chúng

ta sẽ không biết giới hạn độ sâu phù hợp cho đến khi giải quyết được vấn đề.

Tìm kiếm giới hạn độ sâu có thể được triển khai như một sửa đổi đơn giản cho thuật toán tìm kiếm cây

hoặc đồ thị tổng quát. Ngoài ra, nó có thể được thực hiện như một thuật toán đệ quy đơn giản như trong Hình

3.17. Lưu ý rằng tìm kiếm theo độ sâu giới hạn có thể kết thúc với hai loại lỗi: giá trị lỗi tiêu chuẩn cho

biết không có giải pháp; giá trị ngưỡng cho thấy không có giải pháp nào trong giới hạn độ sâu.

3.4.5 Tìm kiếm theo chiều sâu sâu lặp lại


LẶP LẠI
TÌM KIẾM SÂU SÂU
Tìm kiếm sâu hơn lặp lại (hoặc tìm kiếm theo chiều sâu lặp đi lặp lại) là một chiến lược chung, thường được

sử dụng kết hợp với tìm kiếm cây theo chiều sâu, để tìm ra giới hạn độ sâu tốt nhất. Nó thực hiện điều này

bằng cách tăng dần giới hạn—đầu tiên là 0, sau đó là 1, rồi 2, v.v.—cho đến khi tìm thấy mục tiêu.

Điều này sẽ xảy ra khi giới hạn độ sâu đạt tới d, độ sâu của nút mục tiêu nông nhất. Thuật toán được thể hiện

trong hình 3.18. Làm sâu sắc lặp đi lặp lại kết hợp các lợi ích của tìm kiếm theo chiều sâu và chiều rộng.

Giống như tìm kiếm theo chiều sâu, yêu cầu bộ nhớ của nó rất khiêm tốn: chính xác là O(bd). Giống như tìm

kiếm theo chiều rộng, nó hoàn thành khi hệ số phân nhánh hữu hạn và tối ưu khi chi phí đường đi là hàm không

giảm theo độ sâu của nút. Hình 3.19 cho thấy bốn lần lặp của LẶP-SÂU-TÌM KIẾM trên cây tìm kiếm nhị phân,

trong đó giải pháp được tìm thấy ở lần lặp thứ tư.

Tìm kiếm sâu hơn lặp đi lặp lại có vẻ lãng phí vì các trạng thái được tạo ra nhiều lần. Hóa ra điều

này không quá tốn kém. Lý do là trong cây tìm kiếm có cùng hệ số phân nhánh (hoặc gần giống nhau) ở mỗi cấp,

hầu hết các nút đều ở cấp dưới cùng, do đó việc các cấp trên được tạo ra nhiều lần không thành vấn đề. Trong

tìm kiếm sâu hơn lặp đi lặp lại, các nút ở mức dưới cùng (độ sâu d) được tạo một lần, các nút ở mức
Machine Translated by Google

Mục 3.4. Chiến lược tìm kiếm không xác định 89

hàm LẶP-SÂU-TÌM KIẾM(vấn đề) trả về giải pháp hoặc thất bại
cho độ sâu = 0 đến ∞ làm
result DEPTH-LIMITED-SEARCH(vấn đề, độ sâu)
nếu kết quả = điểm cắt thì trả về kết quả

Hình 3.18 Thuật toán tìm kiếm sâu lặp đi lặp lại áp dụng tìm kiếm có giới hạn độ sâu với giới hạn
tăng dần. Nó chấm dứt khi tìm thấy giải pháp hoặc nếu tìm kiếm theo độ sâu giới hạn trả về thất
bại, nghĩa là không có giải pháp nào tồn tại.

Giới hạn = 0
MỘT MỘT

Giới hạn = 1
MỘT MỘT MỘT MỘT

B C B C B C B C

Giới hạn = 2
MỘT MỘT MỘT MỘT

B C B C B C B C

D E F G D E F G D E F G D E F G

MỘT MỘT MỘT MỘT

B C B C B C B C

D E F G D E F G D E F G D E F G

Giới hạn = 3
MỘT MỘT MỘT MỘT

B C B C B C B C

D E F G D E F G D E F G D E F G

H TÔI JKLMNO CHÀO JKLMNO CHÀO JKLMNO CHÀO JKLMNO

MỘT MỘT MỘT MỘT

B C B C B C B C

D E F G D E F G D E F G D E F G

CHÀO JKLMNO CHÀO JKLMNO H TÔI JK LMNO CHÀO JK LMNO

MỘT MỘT MỘT MỘT

B C B C B C B C

D E F G D E F G D E F G D E F G

CHÀO JK LMNO CHÀO JK LMNO H TÔI JKLM KHÔNG CHÀO JKLM KHÔNG

Hình 3.19 Bốn lần lặp của tìm kiếm lặp sâu hơn trên cây nhị phân.
Machine Translated by Google

90 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

cấp độ tiếp theo dưới cùng được tạo ra hai lần, v.v., cho đến cấp độ con của gốc, được tạo ra d lần. Vì

vậy, tổng số nút được tạo trong trường hợp xấu nhất là N(IDS)=(d)b + (d 1)b2 + ··· +

(1)bd ,

mang lại độ phức tạp về thời gian là O(bd)— tiệm cận về mặt triệu chứng giống như tìm kiếm theo chiều rộng.

Có một số chi phí bổ sung để tạo ra các cấp độ cao hơn nhiều lần, nhưng nó không lớn. Ví dụ: nếu b = 10 và

d = 5 thì các số là N(IDS) = 50 + 400 + 3, 000 + 20,

000 + 100, 000 = 123, 450 N(BFS) = 10 + 100 + 1, 000 + 10, 000 + 100, 000 =

111, 110 .

Nếu bạn thực sự lo lắng về việc lặp lại sự lặp lại, bạn có thể sử dụng phương pháp kết hợp chạy tìm kiếm

theo chiều rộng cho đến khi gần như toàn bộ bộ nhớ sẵn có được sử dụng hết, sau đó chạy sâu lặp lại từ tất

cả các nút ở biên giới. Nói chung, đào sâu lặp lại là phương pháp tìm kiếm không xác định được ưu tiên khi

không gian tìm kiếm lớn và độ sâu của lời giải không được biết.

Tìm kiếm sâu hơn lặp lại tương tự như tìm kiếm theo chiều rộng ở chỗ nó khám phá một lớp hoàn chỉnh

gồm các nút mới ở mỗi lần lặp trước khi chuyển sang lớp tiếp theo. Có vẻ đáng giá khi phát triển một phương

pháp lặp tương tự với tìm kiếm có chi phí thống nhất, kế thừa sự đảm bảo tối ưu của thuật toán sau trong

khi tránh được các yêu cầu về bộ nhớ của nó. Ý tưởng là sử dụng các giới hạn chi phí đường đi tăng dần thay

vì tăng giới hạn độ sâu. Thuật toán kết quả, được gọi là tìm kiếm kéo dài lặp, được khám phá trong Bài tập
LẶP LẠI
kéo dài 3.17. Thật không may, việc kéo dài lặp đi lặp lại lại phát sinh chi phí đáng kể so với tìm kiếm có chi phí
TÌM KIẾM

thống nhất.

3.4.6 Tìm kiếm hai chiều

Ý tưởng đằng sau tìm kiếm hai chiều là thực hiện hai tìm kiếm đồng thời—một tìm kiếm chuyển tiếp từ

trạng thái ban đầu và trạng thái còn lại lùi về phía mục tiêu—hy vọng rằng hai tìm kiếm gặp nhau ở giữa

(Hình 3.20). Động lực là bd/2 + bd/2 nhỏ hơn nhiều so với bd, hoặc trong hình, diện tích của hai vòng tròn

nhỏ nhỏ hơn diện tích của một vòng tròn lớn có tâm ở điểm bắt đầu và đạt đến mục tiêu.

Tìm kiếm hai chiều được thực hiện bằng cách thay thế kiểm tra mục tiêu bằng kiểm tra xem ranh giới

của hai tìm kiếm có giao nhau hay không; nếu họ làm vậy, một giải pháp đã được tìm thấy.

(Điều quan trọng là phải nhận ra rằng giải pháp đầu tiên được tìm thấy có thể không tối ưu, ngay cả khi cả

hai tìm kiếm đều theo chiều rộng; cần phải thực hiện một số tìm kiếm bổ sung để đảm bảo không có lối tắt

nào khác vượt qua khoảng cách.) việc kiểm tra có thể được thực hiện khi mỗi nút được tạo hoặc được chọn để

mở rộng và với bảng băm, sẽ mất thời gian không đổi. Ví dụ: nếu một bài toán có độ sâu lời giải d = 6 và

mỗi hướng chạy tìm kiếm theo chiều rộng một nút tại một thời điểm, thì trong trường hợp xấu nhất, hai tìm

kiếm gặp nhau khi chúng tạo ra tất cả các nút ở độ sâu 3. Đối với b = 10, điều này có nghĩa là tổng cộng

2.220 thế hệ nút, so với 1.111.110 của tìm kiếm theo chiều rộng tiêu chuẩn. Do đó, độ phức tạp về thời gian

của tìm kiếm hai chiều sử dụng tìm kiếm theo chiều rộng theo cả hai hướng là O(bd/2). Độ phức tạp của không

gian cũng là O(bd/2).

Chúng ta có thể giảm khoảng một nửa con số này nếu một trong hai tìm kiếm được thực hiện bằng cách lặp lại

sâu hơn, nhưng ít nhất một trong các đường biên phải được lưu trong bộ nhớ để có thể thực hiện kiểm tra

giao lộ. Yêu cầu về không gian này là điểm yếu lớn nhất của tìm kiếm hai chiều.
Machine Translated by Google

Mục 3.4. Chiến lược tìm kiếm không xác định 91

Mục tiêu
Bắt đầu

Hình 3.20 Sơ đồ về tìm kiếm hai chiều sắp thành công khi một

nhánh từ nút bắt đầu gặp một nhánh từ nút mục tiêu.

Việc giảm độ phức tạp về thời gian làm cho việc tìm kiếm hai chiều trở nên hấp dẫn, nhưng làm cách nào để chúng ta

TIỀN tìm kiếm ngược? Điều này không dễ dàng như bạn tưởng. Đặt tiền thân của trạng thái x là tất cả

những trạng thái có x là trạng thái kế tiếp. Tìm kiếm hai chiều yêu cầu một phương pháp tính toán

người tiền nhiệm. Khi tất cả các hành động trong không gian trạng thái đều có thể đảo ngược được thì các hành động trước đó của x là

chỉ là những người kế nhiệm của nó. Các trường hợp khác có thể đòi hỏi sự khéo léo đáng kể.

Hãy xem xét câu hỏi chúng ta muốn nói gì khi nói “mục tiêu” trong việc tìm kiếm “ngược từ

mục tiêu." Đối với câu đố 8 và tìm đường đi ở Romania, chỉ có một trạng thái mục tiêu, do đó

tìm kiếm lùi rất giống tìm kiếm tiến. Nếu có một số được liệt kê rõ ràng

trạng thái mục tiêu—ví dụ: hai trạng thái mục tiêu không có bụi bẩn trong Hình 3.3—sau đó chúng ta có thể xây dựng một

trạng thái mục tiêu giả mới có trạng thái mục tiêu trước đó đều là trạng thái mục tiêu thực tế. Nhưng nếu

mục tiêu là một mô tả trừu tượng, chẳng hạn như mục tiêu “không có nữ hoàng nào tấn công nữ hoàng khác” trong

vấn đề n-nữ hoàng thì tìm kiếm hai chiều rất khó sử dụng.

3.4.7 So sánh các chiến lược tìm kiếm không chính xác

Hình 3.21 so sánh các chiến lược tìm kiếm theo bốn tiêu chí đánh giá được nêu trong

Mục 3.3.2. Sự so sánh này dành cho các phiên bản tìm kiếm trên cây. Đối với tìm kiếm đồ thị, chính

sự khác biệt là việc tìm kiếm theo chiều sâu hoàn tất cho các không gian trạng thái hữu hạn và không gian và

độ phức tạp về thời gian bị giới hạn bởi kích thước của không gian trạng thái.

Chiều rộng- Đồng phục- Chiều sâu- Chiều sâu- Lặp đi lặp lại hai chiều
Tiêu chuẩn
Đầu tiên Trị giá Đầu tiên
Độ sâu hạn chế (nếu có)

Hoàn thành? vâng Vâng,b KHÔNG KHÔNG Vâng Vâng, d

Thời gian
O(bd) O(b1+C /) O(bm) O(b) O(bd) O(bd/2)

Không O(bd) O(b1+C /) O(bm) O(b) O(bd) O(bd/2)

gian tối ưu? Vâng C Đúng KHÔNG KHÔNG Vâng C Vâng, d

Hình 3.21 Đánh giá các chiến lược tìm kiếm trên cây. b là hệ số phân nhánh; d là độ sâu

giải pháp nông cạn nhất; m là độ sâu tối đa của cây tìm kiếm; l là giới hạn độ sâu.
b
Các cảnh báo chỉ số trên như sau: a đầy đủ nếu b hữu hạn; hoàn thành nếu chi phí bước ≥ cho
c
tích cực ; tối ưu nếu chi phí từng bước đều giống nhau; d nếu cả hai hướng đều sử dụng tìm kiếm theo chiều rộng.
Machine Translated by Google

92 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

3.5 CHIẾN LƯỢC TÌM KIẾM (HEURISTIC)

TÌM KIẾM CÓ THÔNG TIN Phần này trình bày cách một chiến lược tìm kiếm có hiểu biết —chiến lược sử dụng kiến thức cụ thể về vấn

đề ngoài định nghĩa của chính vấn đề—có thể tìm ra giải pháp hiệu quả hơn mức có thể.

một chiến lược thiếu hiểu biết.

TÌM KIẾM ĐẦU TIÊN TỐT NHẤT Cách tiếp cận chung mà chúng tôi xem xét được gọi là tìm kiếm tốt nhất đầu tiên. Tìm kiếm tốt nhất đầu tiên là một

thể hiện của thuật toán TREE-SEARCH hoặc GRAPH-SEARCH chung trong đó một nút được
SỰ ĐÁNH GIÁ
CHỨC NĂNG
được chọn để mở rộng dựa trên hàm đánh giá, f(n). Hàm đánh giá được hiểu là ước tính chi phí, do đó nút có đánh

giá thấp nhất sẽ được mở rộng trước tiên. Các

Việc triển khai tìm kiếm đồ thị tốt nhất đầu tiên giống hệt với tìm kiếm chi phí đồng nhất (Hình 3.14), ngoại

trừ việc sử dụng f thay vì g để sắp xếp hàng đợi ưu tiên.

Việc lựa chọn f xác định chiến lược tìm kiếm. (Ví dụ, như Bài tập 3.21 cho thấy,

tìm kiếm cây đầu tiên tốt nhất bao gồm tìm kiếm theo chiều sâu như một trường hợp đặc biệt.) Hầu hết các thuật toán đầu tiên tốt nhất
TỰ TÌM TÒI
CHỨC NĂNG
bao gồm như một thành phần của hàm fa heuristic, ký hiệu là h(n): h(n) = chi

phí ước tính của đường đi rẻ nhất từ trạng thái tại nút n đến trạng thái mục tiêu.

(Lưu ý rằng h(n) lấy một nút làm đầu vào, nhưng không giống như g(n), nó chỉ phụ thuộc vào trạng thái tại nút đó.

nút.) Ví dụ: ở Romania, người ta có thể ước tính chi phí của đường đi rẻ nhất từ Arad

đến Bucharest bằng khoảng cách đường thẳng từ Arad tới Bucharest.

Các hàm heuristic là dạng phổ biến nhất trong đó kiến thức bổ sung về

vấn đề được truyền vào thuật toán tìm kiếm. Chúng ta nghiên cứu phương pháp phỏng đoán sâu hơn ở Phần 3.6.

Hiện tại, chúng ta coi chúng là các hàm tùy ý, không âm, dành riêng cho bài toán, với một

ràng buộc: nếu n là nút mục tiêu thì h(n)=0. Phần còn lại của phần này bao gồm hai cách

sử dụng thông tin heuristic để hướng dẫn tìm kiếm.

3.5.1 Tìm kiếm tốt nhất đầu tiên tham lam

TUYỆT VỜI TỐT NHẤT- ĐẦU TIÊN

TÌM KIẾM
Tìm kiếm đầu tiên tốt nhất tham lam8 cố gắng mở rộng nút gần mục tiêu nhất, với lý do điều này có thể dẫn đến

giải pháp nhanh chóng. Vì vậy, nó đánh giá các nút bằng cách chỉ sử dụng

chức năng heuristic; nghĩa là f(n) = h(n).

Chúng ta hãy xem cách này hoạt động như thế nào đối với các vấn đề tìm đường ở Romania; chúng tôi sử dụng phương
ĐƯỜNG THẲNG
pháp phỏng đoán khoảng cách đường thẳng mà chúng tôi sẽ gọi là hSLD . Nếu mục tiêu là Bucharest thì chúng ta cần
KHOẢNG CÁCH

biết khoảng cách đường thẳng tới Bucharest như trên Hình 3.22. Ví dụ: hSLD (In(Arad)) = 366. Lưu ý rằng các giá

trị của hSLD không thể được tính từ

bản thân việc mô tả vấn đề. Hơn nữa, cần có một lượng kinh nghiệm nhất định để biết rằng

hSLD tương quan với khoảng cách thực tế trên đường và do đó là một phương pháp phỏng đoán hữu ích.

Hình 3.23 cho thấy tiến trình tìm kiếm tốt nhất đầu tiên tham lam bằng cách sử dụng hSLD để tìm đường đi

từ Arad đến Bucharest. Nút đầu tiên được mở rộng từ Arad sẽ là Sibiu vì nó

gần Bucharest hơn Zerind hoặc Timisoara. Nút tiếp theo được mở rộng sẽ

hãy là Fagaras vì nó gần nhất. Fagaras lần lượt tạo ra Bucharest, đó là mục tiêu. Vì

vấn đề cụ thể này, việc tìm kiếm đầu tiên tốt nhất bằng cách sử dụng hSLD sẽ tìm ra giải pháp mà chưa bao giờ

8 Ấn bản đầu tiên của chúng tôi gọi đây là cuộc tìm kiếm tham lam; các tác giả khác gọi nó là tìm kiếm tốt nhất đầu tiên. Tổng quát hơn của chúng tôi

việc sử dụng thuật ngữ sau theo Pearl (1984).


Machine Translated by Google

Mục 3.5. Chiến lược tìm kiếm có hiểu biết (Heuristic) 93

Arad 366 Mehadia 241


Bucharest Neamt 234
Craiova 0 Oradea 380
Drobeta 160 Pitesti 100
Eforie 242 Rimnicu Vilcea 193
Fagaras 161 Sibiu 253
giurgiu Timisoara 329
Hirsova 176 Urziceni 80
Iasi 77 Vaslui 199

Lugoj 151 226 244 Zerind 374

Hình 3.22 Giá trị của hSLD—khoảng cách đường thẳng tới Bucharest.

mở rộng một nút không nằm trên đường dẫn giải pháp; do đó, chi phí tìm kiếm của nó là tối thiểu. Tuy

nhiên, đó không phải là tối ưu: đường đi qua Sibiu và Fagaras đến Bucharest dài hơn 32 km so với đường

đi qua Rimnicu Vilcea và Pitesti. Điều này cho thấy lý do tại sao thuật toán được gọi là “tham lam”—ở

mỗi bước, nó cố gắng tiến gần đến mục tiêu nhất có thể.

Tìm kiếm cây đầu tiên tốt nhất tham lam cũng không đầy đủ ngay cả trong không gian trạng thái hữu

hạn, giống như tìm kiếm theo chiều sâu. Hãy xem xét vấn đề đi từ Iasi tới Fagaras. Các heuristic gợi ý

rằng Neamt nên được mở rộng trước tiên vì nó gần Fagaras nhất, nhưng lại là ngõ cụt. Giải pháp là trước

tiên hãy đến Vaslui—một bước thực sự cách xa mục tiêu theo phương pháp suy nghiệm—và sau đó tiếp tục đến

Urziceni, Bucharest và Fagaras. Tuy nhiên, thuật toán sẽ không bao giờ tìm ra giải pháp này vì việc mở

rộng Neamt sẽ đưa Iasi trở lại biên giới, Iasi gần Fagaras hơn Vaslui và do đó Iasi sẽ được mở rộng trở

lại, dẫn đến một vòng lặp vô hạn. (Phiên bản tìm kiếm đồ thị hoàn chỉnh trong không gian hữu hạn, nhưng

không phải trong không gian vô hạn.) Độ phức tạp về không gian và thời gian trong trường hợp xấu nhất

đối với phiên bản cây là O(bm), trong đó m là độ sâu tối đa của không gian tìm kiếm. Tuy nhiên, với chức

năng heuristic tốt, độ phức tạp có thể giảm đáng kể. Mức độ giảm phụ thuộc vào vấn đề cụ thể và chất

lượng của heuristic.

3.5.2 Tìm kiếm A*: Giảm thiểu tổng chi phí giải pháp ước tính

MỘT TÌM KIẾM Hình thức tìm kiếm đầu tiên tốt nhất được biết đến rộng rãi nhất được gọi là tìm kiếm A (phát âm là

“tìm kiếm A-star”). Nó đánh giá các nút bằng cách kết hợp g(n), chi phí để tiếp cận nút và h(n), chi phí

để đi từ nút đến mục tiêu:

f(n) = g(n) + h(n) .

Vì g(n) cung cấp chi phí đường đi từ nút bắt đầu đến nút n và h(n) là chi phí ước tính của đường đi rẻ

nhất từ n đến mục tiêu, nên chúng ta có

f(n) = chi phí ước tính của giải pháp rẻ nhất thông qua n .

Vì vậy, nếu chúng ta đang cố gắng tìm giải pháp rẻ nhất, điều hợp lý nên thử trước tiên là nút có giá

trị thấp nhất là g(n) + h(n). Hóa ra chiến lược này không chỉ hợp lý: miễn là hàm heuristic h(n) thỏa

mãn các điều kiện nhất định, tìm kiếm A vừa hoàn chỉnh vừa tối ưu. Thuật toán này giống hệt với UNIFORM-

COST-SEARCH ngoại trừ việc A sử dụng g + h thay vì g.


Machine Translated by Google

94 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

(a) Trạng thái ban đầu Arad

366

(b) Sau khi mở rộng Arad Arad

Sibiu Timisoara Zerind

253 329 374

(c) Sau khi mở rộng Sibiu Arad

Sibiu Timisoara Zerind

329 374

Arad Fagaras Oradea Rimnicu Vilcea

366 176 380 193

(d) Sau khi mở rộng Fagaras Arad

Sibiu Timisoara Zerind

329 374

Arad Fagaras Oradea Rimnicu Vilcea

366 380 193

Sibiu Bucharest

253 0

Hình 3.23 Các giai đoạn trong tìm kiếm cây đầu tiên tốt nhất tham lam cho Bucharest bằng đường thẳng

hSLD heuristic khoảng cách . Các nút được gắn nhãn với giá trị h của chúng.

Điều kiện tối ưu: Tính chấp nhận được và tính nhất quán

ĐƯỢC CHẤP NHẬN


TỰ TÌM TÒI Điều kiện đầu tiên chúng ta yêu cầu để đạt được sự tối ưu là h(n) là một heuristic có thể chấp nhận được. Một phương pháp

phỏng đoán có thể chấp nhận được là phương pháp không bao giờ đánh giá quá cao chi phí để đạt được mục tiêu. Bởi vì g(n)

là chi phí thực tế để đạt được n dọc theo đường dẫn hiện tại và f(n) = g(n) + h(n), chúng ta có

hậu quả ngay lập tức là f(n) không bao giờ đánh giá quá cao chi phí thực sự của một giải pháp dọc theo

đường đi hiện tại qua n.

Các phương pháp suy nghiệm có thể chấp nhận được về bản chất là lạc quan vì chúng cho rằng chi phí để giải quyết

vấn đề ít hơn thực tế. Một ví dụ rõ ràng về một phương pháp suy nghiệm có thể chấp nhận được là

khoảng cách đường thẳng hSLD mà chúng tôi đã sử dụng để đến Bucharest. Khoảng cách đường thẳng là

được chấp nhận vì đường đi ngắn nhất giữa hai điểm bất kỳ là một đường thẳng, do đó đường thẳng
Machine Translated by Google

Mục 3.5. Chiến lược tìm kiếm có hiểu biết (Heuristic) 95

dòng không thể được đánh giá quá cao. Trong Hình 3.24, chúng tôi trình bày tiến trình tìm kiếm cây A cho

Bucharest. Các giá trị của g được tính từ các chi phí bước trong Hình 3.2 và các giá trị của hSLD được cho trong

Hình 3.22. Đặc biệt lưu ý rằng Bucharest xuất hiện đầu tiên trên đường biên ở bước (e), nhưng nó không được chọn

để mở rộng vì chi phí f (450) của nó cao hơn chi phí f của Pitesti (417). Một cách khác để nói điều này là có

thể có một giải pháp thông qua Pitesti có chi phí thấp tới 417, vì vậy thuật toán sẽ không giải quyết được giải

pháp có chi phí 450.

TÍNH NHẤT QUÁN Điều kiện thứ hai, mạnh hơn một chút được gọi là tính nhất quán (hoặc đôi khi là tính đơn điệu) chỉ được

ĐƠN GIẢN yêu cầu đối với các ứng dụng của A để tìm kiếm đồ thị.9 Một heuristic h(n) là nhất quán nếu, với mọi nút n và

mọi phần kế tiếp n của n được tạo ra bởi bất kỳ hành động nào a, chi phí ước tính để đạt mục tiêu từ n không lớn

hơn chi phí từng bước để đạt được n cộng với chi phí ước tính để đạt mục tiêu từ n :

h(n) ≤ c(n, a, n ) + h(n ) .

TAM GIÁC
Đây là một dạng của bất đẳng thức tam giác tổng quát, trong đó mỗi cạnh của một tam giác không thể dài hơn tổng
BẤT BÌNH ĐẲNG

hai cạnh còn lại. Ở đây, tam giác được hình thành bởi n, n và mục tiêu Gn gần n nhất. Đối với một heuristic có ,

thể chấp nhận được, bất đẳng thức có ý nghĩa hoàn hảo: nếu có một tuyến đường từ n đến Gn qua n rẻ hơn h(n),

điều đó sẽ vi phạm tính chất h(n) là giới hạn dưới của chi phí cần đạt tới Gn.

Khá dễ dàng để chỉ ra (Bài tập 3.29) rằng mọi phương pháp suy nghiệm nhất quán cũng có thể được chấp nhận.

Do đó, tính nhất quán là một yêu cầu chặt chẽ hơn khả năng được chấp nhận, nhưng người ta phải làm việc khá chăm
chỉ để đưa ra các phương pháp phỏng đoán có thể chấp nhận được nhưng không nhất quán. Tất cả các phương pháp suy

nghiệm có thể chấp nhận được mà chúng ta thảo luận trong chương này cũng nhất quán. Ví dụ, hãy xem xét hSLD .

Chúng ta biết rằng bất đẳng thức tam giác tổng quát được thỏa mãn khi mỗi cạnh được đo bằng khoảng cách đường

thẳng và khoảng cách đường thẳng giữa n và n không lớn hơn c(n, a, n ).

Do đó, hSLD là một phương pháp phỏng đoán nhất quán.

Sự tối ưu của A*

Như chúng tôi đã đề cập trước đó, A có các đặc tính sau: phiên bản tìm kiếm cây của A là tối ưu nếu h(n) được

chấp nhận, trong khi phiên bản tìm kiếm đồ thị là tối ưu nếu h(n) nhất quán.

Chúng tôi trình bày tuyên bố thứ hai trong số hai tuyên bố này vì nó hữu ích hơn. Đối số về cơ bản phản

ánh đối số về tính tối ưu của tìm kiếm với chi phí đồng nhất, với g được thay thế bằng f—giống như trong chính

thuật toán A .

Bước đầu tiên là thiết lập những điều sau: nếu h(n) nhất quán thì các giá trị của f(n) dọc theo bất kỳ

đường dẫn nào đều không giảm. Chứng minh được suy ra trực tiếp từ định nghĩa về tính nhất quán. Giả sử n là người

kế thừa của n; thì g(n ) = g(n) + c(n, a, n ) đối với một hành động a nào đó, và chúng ta có

f(n ) = g(n ) + h(n ) = g(n) + c(n, a, n ) + h(n ) ≥ g(n) + h(n) = f(n) .

Bước tiếp theo là chứng minh rằng bất cứ khi nào A chọn nút n để mở rộng thì đường dẫn tối ưu đến nút đó đã

được tìm thấy. Nếu không phải như vậy thì sẽ phải có một nút biên giới n khác trên đường đi tối ưu từ nút bắt

đầu đến n, theo thuộc tính phân tách đồ thị của

9 Với một phương pháp phỏng đoán có thể chấp nhận được nhưng không nhất quán, A yêu cầu ghi sổ kế toán bổ sung để đảm bảo tính tối ưu.
Machine Translated by Google

96 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

(a) Trạng thái ban đầu Arad

366=0+366

(b) Sau khi mở rộng Arad Arad

Sibiu Timisoara Zerind

393=140+253 447=118+329 449=75+374

(c) Sau khi mở rộng Sibiu Arad

Sibiu Timisoara Zerind

447=118+329 449=75+374

Arad Fagaras Oradea Rimnicu Vilcea

646=280+366 415=239+176 671=291+380 413=220+193

(d) Sau khi mở rộng Rimnicu Vilcea Arad

Sibiu Timisoara Zerind

447=118+329 449=75+374

Arad Fagaras Oradea Rimnicu Vilcea

646=280+366 415=239+176 671=291+380

Craiova Pitesti Sibiu

526=366+160 553=300+253 417=317+100

(e) Sau khi mở rộng Fagaras Arad

Sibiu Timisoara Zerind

447=118+329 449=75+374

Arad Fagaras Oradea Rimnicu Vilcea

646=280+366 671=291+380

Sibiu Bucharest Craiova Pitesti Sibiu

591=338+253 450=450+0 526=366+160 417=317+100 553=300+253

(f) Sau khi mở rộng Pitesti Arad

Sibiu Timisoara Zerind

447=118+329 449=75+374

Arad Fagaras Oradea Rimnicu Vilcea

646=280+366 671=291+380

Sibiu Bucharest Craiova Pitesti Sibiu

591=338+253 450=450+0 526=366+160 553=300+253

Bucharest Craiova Rimnicu Vilcea

418=418+0 615=455+160 607=414+193

Hình 3.24 Các giai đoạn trong tìm kiếm A cho Bucharest. Các nút được gắn nhãn f = g + h. Các
Giá trị h là khoảng cách đường thẳng tới Bucharest lấy từ Hình 3.22.
Machine Translated by Google

Mục 3.5. Chiến lược tìm kiếm có hiểu biết (Heuristic) 97

N
Z

MỘT TÔI

380 S
F
V.
400
T R
L P

H
M bạn

B
420
D
E
C
G

Hình 3.25 Bản đồ Romania thể hiện các đường đồng mức tại f = 380, f = 400 và f = 420, với Arad là
trạng thái bắt đầu. Các nút bên trong một đường viền nhất định có chi phí f nhỏ hơn hoặc bằng giá
trị đường viền.

Hình 3.9; bởi vì f không giảm dọc theo bất kỳ đường đi nào, n sẽ có chi phí f thấp hơn n và sẽ được chọn
trước tiên.

Từ hai quan sát trước đó, có thể thấy rằng chuỗi các nút được mở rộng bởi A bằng cách sử dụng

GRAPH-SEARCH có thứ tự không giảm là f(n). Do đó, nút mục tiêu đầu tiên được chọn để mở rộng phải là một

giải pháp tối ưu vì f là chi phí thực sự cho các nút mục tiêu (có h = 0) và tất cả các nút mục tiêu sau

này ít nhất sẽ đắt bằng.

Thực tế là chi phí f không giảm dọc theo bất kỳ đường đi nào cũng có nghĩa là chúng ta có thể vẽ

VIỀN các đường viền trong không gian trạng thái, giống như các đường viền trong bản đồ địa hình. Hình 3.25

cho thấy một ví dụ. Bên trong đường viền có nhãn 400, tất cả các nút có f(n) nhỏ hơn hoặc bằng 400, v.v.

Sau đó, do A mở rộng nút biên có chi phí f thấp nhất, chúng ta có thể thấy rằng tìm kiếm A tách ra

khỏi nút bắt đầu, thêm các nút vào các dải đồng tâm có chi phí f tăng dần.

Với tìm kiếm chi phí đồng nhất ( tìm kiếm A sử dụng h(n)=0), các dải sẽ “tròn” xung quanh trạng

thái bắt đầu. Với phương pháp phỏng đoán chính xác hơn, các dải sẽ kéo dài về phía trạng thái mục tiêu

và trở nên tập trung hẹp hơn xung quanh con đường tối ưu. Nếu C là chi phí của đường đi giải pháp tối

ưu thì chúng ta có thể nói như sau:

• A mở rộng tất cả các nút có f(n) < C . •

A sau đó có thể mở rộng một số nút ngay trên “đường viền mục tiêu” (trong đó f(n) = C ) trước khi

chọn nút mục tiêu.

Tính đầy đủ yêu cầu chỉ có nhiều nút hữu hạn có chi phí nhỏ hơn hoặc bằng C , một điều kiện đúng nếu tất

cả chi phí bước vượt quá hữu hạn nào đó và nếu b là hữu hạn.

Lưu ý rằng A mở rộng không có nút nào có f(n) > C—ví dụ: Timisoara không được mở rộng trong Hình

3.24 mặc dù nó là con của gốc. Chúng ta nói rằng cây con bên dưới
Machine Translated by Google

98 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

CẮT TỈA Timisoara được cắt tỉa; vì hSLD được chấp nhận nên thuật toán có thể bỏ qua cây con này một cách an toàn trong khi vẫn

đảm bảo tính tối ưu. Khái niệm cắt tỉa—loại bỏ các khả năng khỏi việc xem xét mà không cần phải kiểm tra chúng—rất quan

trọng đối với nhiều lĩnh vực AI.

Một quan sát cuối cùng là trong số các thuật toán tối ưu thuộc loại này—các thuật toán mở rộng đường dẫn tìm kiếm

từ gốc và sử dụng cùng một thông tin phỏng đoán—A có hiệu quả tối ưu đối với bất kỳ phương pháp phỏng đoán nhất quán
TỐI ƯU
CÓ HIỆU QUẢ
nào. Nghĩa là, không có thuật toán tối ưu nào khác được đảm bảo để mở rộng ít nút hơn A (ngoại trừ có thể thông qua

việc phá vỡ ràng buộc giữa các nút có f(n) = C ). Điều này là do bất kỳ thuật toán nào không mở rộng tất cả các nút có

f(n) < C đều có nguy cơ thiếu giải pháp tối ưu.

Việc tìm kiếm A là hoàn chỉnh, tối ưu và hiệu quả tối ưu trong số tất cả các thuật toán như vậy là khá thỏa

đáng. Thật không may, điều đó không có nghĩa là A là câu trả lời cho mọi nhu cầu tìm kiếm của chúng ta. Điều đáng chú

ý là, đối với hầu hết các bài toán, số lượng trạng thái trong không gian tìm kiếm đường viền mục tiêu vẫn theo cấp số

nhân theo độ dài của lời giải. Các chi tiết phân tích nằm ngoài phạm vi của cuốn sách này, nhưng các kết quả cơ bản như

sau. Đối với các bài toán có chi phí bước không đổi, sự tăng trưởng trong thời gian chạy như một hàm của độ sâu giải

pháp tối ưu d được phân tích theo thuật ngữ LỖI TUYỆT ĐỐI của lỗi tuyệt đối hoặc lỗi tương đối của phương pháp phỏng

đoán. Sai số tuyệt đối là

SAI SỐ TƯƠNG ĐỐI được định nghĩa là Δ ≡ h h, trong đó h là chi phí thực tế để đi từ gốc đến đích và sai số tương đối được định

nghĩa là ≡ (h h)/h .

Kết quả về độ phức tạp phụ thuộc rất nhiều vào các giả định về không gian trạng thái. Mô hình đơn giản nhất được

nghiên cứu là không gian trạng thái có một mục tiêu duy nhất và về cơ bản là một cây có các hành động có thể đảo ngược.

(Câu đố 8 ô thỏa mãn giả định thứ nhất và thứ ba trong số các giả định này.)

Trong trường hợp này, độ phức tạp về thời gian của A là hàm mũ trong sai số tuyệt đối tối đa, nghĩa là O(bΔ). Đối với

chi phí bước không đổi, chúng ta có thể viết giá trị này là O(bd), trong đó d là độ sâu lời giải.

Đối với hầu hết tất cả các phương pháp phỏng đoán trong sử dụng thực tế, sai số tuyệt đối ít nhất tỷ lệ thuận với chi

phí đường đi h , do đó không đổi hoặc tăng lên và độ phức tạp về thời gian là hàm mũ theo d. Chúng ta cũng có thể thấy

tác động của một phương pháp phỏng đoán chính xác hơn: O(bd) = O((b)d), do đó hệ số phân nhánh hiệu quả (được định nghĩa

chính thức hơn trong phần tiếp theo) là b.

Khi không gian trạng thái có nhiều trạng thái mục tiêu—đặc biệt là các trạng thái mục tiêu gần tối ưu —quá trình

tìm kiếm có thể bị chệch khỏi đường dẫn tối ưu và sẽ có một chi phí bổ sung tỷ lệ thuận với số lượng mục tiêu có chi phí

nằm trong hệ số của chi phí tối ưu. Cuối cùng, trong trường hợp tổng quát của đồ thị, tình hình thậm chí còn tệ hơn. Có

thể có nhiều trạng thái theo cấp số nhân với f(n) < C ngay cả khi sai số tuyệt đối bị giới hạn bởi một hằng số. Ví dụ:

hãy xem xét một phiên bản của thế giới chân không trong đó tác nhân có thể dọn sạch bất kỳ hình vuông nào theo đơn giá

mà không cần phải đến thăm nó: trong trường hợp đó, các hình vuông có thể được làm sạch theo bất kỳ thứ tự nào. Với N ô

vuông bẩn ban đầu, có 2N trạng thái trong đó một số tập hợp con đã được làm sạch và tất cả chúng đều nằm trên đường giải

quyết tối ưu—và do đó thỏa mãn f(n) < C—ngay cả khi phương pháp phỏng đoán có lỗi bằng 1.

Sự phức tạp của A thường khiến việc cố gắng tìm giải pháp tối ưu là không thực tế.

Người ta có thể sử dụng các biến thể của A để tìm ra giải pháp dưới mức tối ưu một cách nhanh chóng hoặc đôi khi người

ta có thể thiết kế các phương pháp phỏng đoán chính xác hơn nhưng không được chấp nhận hoàn toàn. Trong mọi trường hợp,

việc sử dụng một phương pháp phỏng đoán tốt vẫn tiết kiệm được rất nhiều so với việc sử dụng một tìm kiếm thiếu thông tin.

Trong Phần 3.6, chúng ta xem xét vấn đề thiết kế các phương pháp phỏng đoán tốt.

Tuy nhiên, thời gian tính toán không phải là nhược điểm chính của A . Bởi vì nó giữ tất cả các nút được tạo

trong bộ nhớ (cũng như tất cả các thuật toán TÌM KIẾM ĐỒ HỌA ), nên A thường hết dung lượng trong thời gian dài
Machine Translated by Google

Mục 3.5. Chiến lược tìm kiếm có hiểu biết (Heuristic) 99

hàm RECURSIVE-BEST-FIRST-SEARCH(problem) trả về giải pháp hoặc trả về thất bại RBFS(problem,
MAKE-NODE(problem.INITIAL-STATE),∞)

hàm RBFS(vấn đề, nút, giới hạn f) trả về giải pháp hoặc lỗi và giới hạn chi phí f mới
nếu problem.GOAL-TEST(node.STATE) thì trả về SOLUTION(node) kế thừa [ ] cho
mỗi hành động

trong problem.ACTIONS(node.STATE) làm


thêm CHILD-NODE(problem, node, action) vào các phần tiếp theo nếu

các phần kế tiếp trống thì trả về lỗi, ∞ đối với


mỗi s trong phần kế tiếp thực hiện /* cập nhật f với giá trị từ tìm kiếm trước đó, nếu có

*/ sf max(sg + sh, node.f )) vòng


lặp làm
tốt nhất nút có giá trị f thấp nhất trong các
nút kế thừa nếu best.f > giới hạn f thì trả về lỗi,
best.f thay thế kết quả có giá trị f thấp thứ hai trong số các

nút kế tiếp, best.f RBFS( vấn đề, tốt nhất, tối thiểu (giới hạn f,
thay thế)) nếu kết quả = thất bại thì trả về kết quả

Hình 3.26 Thuật toán đệ quy tìm kiếm tốt nhất đầu tiên.

trước khi hết thời gian. Vì lý do này, A không thực tế đối với nhiều bài toán quy mô lớn. Tuy nhiên,

có những thuật toán khắc phục được vấn đề về không gian mà không phải hy sinh tính tối ưu hoặc tính đầy

đủ với chi phí nhỏ về thời gian thực hiện. Chúng ta sẽ thảo luận những điều này tiếp theo.

3.5.3 Tìm kiếm heuristic giới hạn bộ nhớ

Cách đơn giản nhất để giảm yêu cầu bộ nhớ cho A là điều chỉnh ý tưởng lặp sâu hơn cho phù hợp với bối
LẶP LẠI-
SÂU HƠN
cảnh tìm kiếm heuristic, dẫn đến thuật toán A (IDA ) lặp sâu hơn. Sự khác biệt chính giữa IDA và độ
MỘT

sâu lặp tiêu chuẩn là ngưỡng được sử dụng là chi phí f (g +h) chứ không phải độ sâu; tại mỗi lần lặp, giá

trị giới hạn là chi phí f nhỏ nhất của bất kỳ nút nào vượt quá giới hạn ở lần lặp trước đó. IDA có

tính thực tế đối với nhiều vấn đề về chi phí bước đơn vị và tránh được chi phí đáng kể liên quan đến việc

giữ hàng đợi các nút được sắp xếp. Thật không may, nó gặp phải những khó khăn tương tự với chi phí có

giá trị thực giống như phiên bản lặp của tìm kiếm chi phí thống nhất được mô tả trong Bài tập 3.17.

Phần này xem xét ngắn gọn hai thuật toán giới hạn bộ nhớ khác, được gọi là RBFS và MA .
đệ quy
TÌM KIẾM ĐẦU TIÊN TỐT NHẤT
Tìm kiếm đệ quy tốt nhất đầu tiên (RBFS) là một thuật toán đệ quy đơn giản cố gắng bắt chước hoạt

động của tìm kiếm tốt nhất đầu tiên tiêu chuẩn, nhưng chỉ sử dụng không gian tuyến tính. Thuật toán được

thể hiện ở hình 3.26. Cấu trúc của nó tương tự như tìm kiếm theo chiều sâu đệ quy, nhưng thay vì tiếp

tục vô tận theo đường dẫn hiện tại, nó sử dụng biến giới hạn f để theo dõi giá trị f của đường dẫn thay

thế tốt nhất có sẵn từ bất kỳ tổ tiên nào của hiện tại . nút. Nếu nút hiện tại vượt quá giới hạn này,
quá trình đệ quy sẽ quay trở lại đường dẫn thay thế. Khi quá trình đệ quy kết thúc, RBFS thay thế giá

trị f của mỗi nút dọc theo đường dẫn GIÁ TRỊ SAO LƯU bằng một giá trị dự phòng— giá trị f tốt nhất trong

các nút con của nó. Bằng cách này, RBFS ghi nhớ giá trị f của lá tốt nhất trong cây con bị lãng quên và do đó có thể quyết

định liệu nó có giá trị hay không.


Machine Translated by Google

100 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm


(a) Sau khi mở rộng Arad, Sibiu
Arad
và Rimnicu Vilcea 366

447

Sibiu Timisoara Zerind


393
447 449

415
Arad Fagaras Oradea Rimnicu Vilcea
413
646 415 671

Craiova Pitesti Sibiu


526 417 553


(b) Sau khi quay trở lại Sibiu và
Arad
mở rộng Fagaras 366

447
Sibiu Timisoara Zerind
393 449
447

417
Arad Fagaras Oradea Rimnicu Vilcea

646 415 671 413 417

Sibiu Bucharest
591 450


(c) Sau khi chuyển về Rimnicu Vilcea
và mở rộng Pitesti Arad
366

447
Sibiu Timisoara Zerind
393 447 449

447
Arad Fagaras Oradea Rimnicu Vilcea
417
646 415 450 671

447
Craiova Pitesti Sibiu
526 417 553

Bucharest Craiova Rimnicu Vilcea

418 615 607

Hình 3.27 Các giai đoạn trong tìm kiếm RBFS cho tuyến đường ngắn nhất tới Bucharest. giới hạn f

giá trị cho mỗi lệnh gọi đệ quy được hiển thị trên đầu mỗi nút hiện tại và mọi nút đều được gắn nhãn

với chi phí f của nó. (a) Con đường qua Rimnicu Vilcea được đi theo cho đến lá tốt nhất hiện tại (Pitesti)

có giá trị kém hơn đường dẫn thay thế tốt nhất (Fagaras). (b) Đệ quy thư giãn

và giá trị lá tốt nhất của cây con bị lãng quên (417) được sao lưu vào Rimnicu Vilcea; sau đó

Fagaras được mở rộng, cho thấy giá trị lá tốt nhất là 450. (c) Đệ quy thư giãn và

giá trị lá tốt nhất của cây con bị lãng quên (450) được sao lưu vào Fagaras; thì Rimnicu Vilcea là

được mở rộng. Lần này, vì con đường thay thế tốt nhất (qua Timisoara) tốn ít nhất 447,

việc mở rộng tiếp tục đến Bucharest.

mở rộng lại cây con vào thời điểm sau đó. Hình 3.27 cho thấy RBFS đến Bucharest như thế nào.
RBFS có phần hiệu quả hơn IDA nhưng vẫn gặp phải tình trạng tái tạo nút quá mức.
Trong ví dụ ở Hình 3.27, RBFS đi theo đường đi qua Rimnicu Vilcea, sau đó
Machine Translated by Google

Mục 3.5. Chiến lược tìm kiếm có hiểu biết (Heuristic) 101

“đổi ý” và thử Fagaras, rồi lại đổi ý. Những thay đổi trong suy nghĩ này xảy ra vì mỗi khi đường dẫn tốt

nhất hiện tại được mở rộng, giá trị f của nó có khả năng tăng lên—h thường ít lạc quan hơn đối với các

nút gần mục tiêu hơn. Khi điều này xảy ra, đường dẫn tốt thứ hai có thể trở thành đường dẫn tốt nhất, do

đó việc tìm kiếm phải quay lại để đi theo nó.

Mỗi lần thay đổi ý định tương ứng với một lần lặp của IDA và có thể yêu cầu mở rộng lại nhiều nút bị

lãng quên để tạo lại đường dẫn tốt nhất và mở rộng thêm một nút nữa.

Giống như tìm kiếm cây A , RBFS là thuật toán tối ưu nếu hàm heuristic h(n) được chấp nhận. Độ

phức tạp về không gian của nó là tuyến tính theo độ sâu của giải pháp tối ưu sâu nhất, nhưng độ phức tạp

về thời gian của nó khá khó mô tả: nó phụ thuộc cả vào độ chính xác của hàm heuristic và tần suất đường

dẫn tốt nhất thay đổi khi các nút được mở rộng.

IDA và RBFS gặp phải tình trạng sử dụng quá ít bộ nhớ. Giữa các lần lặp lại, IDA chỉ giữ lại

một số duy nhất: giới hạn chi phí f hiện tại. RBFS giữ lại nhiều thông tin hơn trong bộ nhớ, nhưng nó

chỉ sử dụng không gian tuyến tính: ngay cả khi có nhiều bộ nhớ hơn, RBFS không có cách nào để sử dụng nó.

Bởi vì họ quên hầu hết những gì họ đã làm, cả hai thuật toán cuối cùng có thể mở rộng lại các trạng thái

giống nhau nhiều lần. Hơn nữa, chúng phải chịu sự gia tăng theo cấp số nhân về độ phức tạp liên quan đến

các đường dẫn dư thừa trong đồ thị (xem Phần 3.3).

Do đó, có vẻ hợp lý khi sử dụng tất cả bộ nhớ có sẵn. Hai thuật toán thực hiện việc này là MA
MA* (A giới hạn bộ nhớ ) và SMA ( MA đơn giản hóa). SMA thì—à—đơn giản hơn nên chúng tôi sẽ mô tả nó.
SMA* SMA tiến hành giống như A , mở rộng lá tốt nhất cho đến khi bộ nhớ đầy.

Tại thời điểm này, nó không thể thêm nút mới vào cây tìm kiếm mà không bỏ nút cũ. SMA luôn loại bỏ nút

lá tệ nhất —nút có giá trị f cao nhất. Giống như RBFS, SMA sau đó sao lưu giá trị của nút bị quên vào

nút cha của nó. Bằng cách này, tổ tiên của cây con bị lãng quên sẽ biết chất lượng của đường đi tốt nhất

trong cây con đó. Với thông tin này, SMA chỉ tạo lại cây con khi tất cả các đường dẫn khác được hiển

thị trông kém hơn đường dẫn mà nó đã quên. Một cách khác để nói điều này là, nếu tất cả các nút con của

nút n bị lãng quên, thì chúng ta sẽ không biết đường nào để đi từ n, nhưng chúng ta vẫn sẽ biết được việc

đi đến bất kỳ đâu từ n sẽ đáng giá như thế nào.

Thuật toán hoàn chỉnh quá phức tạp để tái tạo ở đây10 nhưng có một điều tinh tế đáng được đề cập.

Chúng ta đã nói rằng SMA mở rộng lá tốt nhất và xóa lá xấu nhất. Điều gì sẽ xảy ra nếu tất cả các nút

lá có cùng giá trị f? Để tránh chọn cùng một nút để xóa và mở rộng, SMA mở rộng lá tốt nhất mới nhất

và xóa lá xấu nhất cũ nhất . Chúng trùng nhau khi chỉ có một lá, nhưng trong trường hợp đó, cây tìm kiếm

hiện tại phải là một đường dẫn duy nhất từ gốc tới lá để lấp đầy toàn bộ bộ nhớ. Nếu lá không phải là

nút mục tiêu thì ngay cả khi nó nằm trên đường giải pháp tối ưu, giải pháp đó cũng không thể truy cập

được bằng bộ nhớ khả dụng. Do đó, nút có thể bị loại bỏ chính xác như thể nó không có nút kế thừa.

SMA hoàn tất nếu có bất kỳ giải pháp nào có thể tiếp cận được—nghĩa là, nếu d, độ sâu của nút

mục tiêu nông nhất, nhỏ hơn kích thước bộ nhớ (được biểu thị bằng nút). Sẽ là tối ưu nếu có thể đạt được

bất kỳ giải pháp tối ưu nào; nếu không, nó sẽ trả về giải pháp tốt nhất có thể tiếp cận được. Trong điều

kiện thực tế, SMA là một lựa chọn khá mạnh mẽ để tìm giải pháp tối ưu, đặc biệt khi không gian trạng

thái là đồ thị, chi phí bước không đồng đều và việc tạo nút tốn kém so với chi phí duy trì đường biên và

tập khám phá.

10 Một bản phác thảo thô xuất hiện trong ấn bản đầu tiên của cuốn sách này.
Machine Translated by Google

102 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

Tuy nhiên, đối với những bài toán rất khó, thường xảy ra trường hợp SMA buộc phải chuyển đổi qua lại

liên tục giữa nhiều đường dẫn giải pháp ứng cử viên, chỉ một tập hợp con nhỏ trong số đó có thể vừa với bộ nhớ.

ĐẬP (Điều này tương tự như vấn đề đập vỡ trong hệ thống phân trang đĩa.) Sau đó, thời gian bổ sung cần thiết để tái

tạo lặp lại các nút giống nhau có nghĩa là các vấn đề mà trên thực tế có thể giải quyết được bằng A , với bộ

nhớ không giới hạn, sẽ trở nên khó giải quyết đối với SMA . Điều đó có nghĩa là, những hạn chế về bộ nhớ có

thể làm cho vấn đề trở nên khó giải quyết theo quan điểm về thời gian tính toán. Mặc dù hiện nay chưa có lý

thuyết nào giải thích được sự cân bằng giữa thời gian và trí nhớ nhưng có vẻ như đây là một vấn đề không thể

tránh khỏi. Cách duy nhất là bỏ yêu cầu tối ưu.

3.5.4 Học cách tìm kiếm tốt hơn

Chúng tôi đã trình bày một số chiến lược cố định—theo chiều rộng đầu tiên, tham lam tốt nhất trước, v.v.—được

thiết kế bởi các nhà khoa học máy tính. Đại lý có thể học cách tìm kiếm tốt hơn không? Câu trả lời là có, và
TRẠNG THÁI KIM LOẠI
KHÔNG GIAN
phương pháp này dựa trên một khái niệm quan trọng được gọi là không gian trạng thái siêu cấp.

Mỗi trạng thái trong không gian trạng thái cấp độ siêu dữ liệu ghi lại trạng thái bên trong (tính toán) của
TRẠNG THÁI CẤP ĐỐI TƯỢNG
KHÔNG GIAN
chương trình đang tìm kiếm trong không gian trạng thái cấp đối tượng , chẳng hạn như Romania. Ví dụ: trạng thái

bên trong của thuật toán A bao gồm cây tìm kiếm hiện tại. Mỗi hành động trong không gian trạng thái siêu cấp

độ là một bước tính toán làm thay đổi trạng thái bên trong; ví dụ: mỗi bước tính toán trong A sẽ mở rộng một

nút lá và thêm các nút kế tiếp của nó vào cây. Do đó, Hình 3.24, hiển thị một chuỗi các cây tìm kiếm ngày càng

lớn hơn, có thể được xem như mô tả một đường dẫn trong không gian trạng thái siêu cấp độ trong đó mỗi trạng

thái trên đường dẫn là một cây tìm kiếm cấp đối tượng.

Bây giờ, đường dẫn trong Hình 3.24 có năm bước, trong đó có một bước là mở rộng Fagaras, điều này không

đặc biệt hữu ích. Đối với những vấn đề khó hơn, sẽ có nhiều sai lầm như vậy và thuật toán học siêu cấp có thể
KIM LOẠI
HỌC HỎI
học hỏi từ những kinh nghiệm này để tránh khám phá các cây con không có triển vọng. Các kỹ thuật được sử dụng

cho kiểu học này được mô tả trong Chương 21. Mục tiêu của việc học là giảm thiểu tổng chi phí giải quyết vấn

đề, đánh đổi giữa chi phí tính toán và chi phí đường dẫn.

3.6 CHỨC NĂNG HEURISTIC

Trong phần này, chúng ta xem xét phương pháp phỏng đoán cho câu đố 8 chữ, nhằm làm sáng tỏ bản chất của phương

pháp phỏng đoán nói chung.

Câu đố số 8 là một trong những bài toán tìm kiếm heuristic sớm nhất. Như đã đề cập ở Phần 3.2, mục tiêu

của câu đố là trượt các ô theo chiều ngang hoặc chiều dọc vào chỗ trống cho đến khi cấu hình khớp với cấu hình

mục tiêu (Hình 3.28).

Chi phí giải pháp trung bình cho một trường hợp 8 câu đố được tạo ngẫu nhiên là khoảng 22 bước.

Hệ số phân nhánh là khoảng 3. (Khi ô trống ở giữa, có thể di chuyển bốn lần; khi nó ở một góc, hai; và khi nó

dọc theo một cạnh, là ba.) Điều này có nghĩa là một cây đầy đủ tìm kiếm để độ sâu 22 sẽ xem xét khoảng 322 ≈

3,1 × 1010 trạng thái.

Tìm kiếm biểu đồ sẽ giảm con số này xuống khoảng 170.000 vì chỉ có 9!/2 = 181, 440 trạng thái riêng biệt có thể

truy cập được. (Xem Bài tập 3.4.) Đây là một con số có thể quản lý được, nhưng
Machine Translated by Google

Mục 3.6. Hàm heuristic 103

7 2 4 1 2

5 6 3 4 5

số 8 3 1 6 7 số 8

Trạng thái bắt đầu Trạng thái mục tiêu

Hình 3.28 Một ví dụ điển hình của trò chơi xếp hình 8 ô. Giải pháp dài 26 bước.

con số tương ứng cho 15 câu đố là khoảng 1013, vì vậy thứ tự kinh doanh tiếp theo là tìm một hàm

heuristic tốt. Nếu muốn tìm lời giải ngắn nhất bằng cách sử dụng A , chúng ta cần một hàm heuristic

không bao giờ đánh giá quá cao số bước đi đến mục tiêu. Có một lịch sử lâu dài về những phương pháp

phỏng đoán như vậy đối với trò chơi 15 câu đố; đây là hai ứng cử viên thường được sử dụng:

• h1 = số ô bị đặt sai vị trí. Đối với Hình 3.28, tất cả tám ô đều nằm ngoài vị trí, do đó trạng

thái bắt đầu sẽ có h1 = 8. h1 là một phương pháp phỏng đoán có thể chấp nhận được vì rõ ràng

là bất kỳ ô nào bị lệch vị trí đều phải được di chuyển ít nhất một lần.

• h2 = tổng khoảng cách của các ô tính từ vị trí mục tiêu của chúng. Vì các ô không thể di chuyển

theo đường chéo nên khoảng cách chúng ta sẽ tính là tổng của khoảng cách theo chiều ngang và

chiều dọc. Điều này đôi khi được gọi là khoảng cách khối thành phố hoặc khoảng cách Manhattan.
THÀNH PHỐ MANHATTAN

KHOẢNG CÁCH h2 cũng được chấp nhận vì tất cả những động thái có thể làm là di chuyển một ô đến gần mục

tiêu hơn một bước. Các ô từ 1 đến 8 ở trạng thái bắt đầu cho khoảng cách Manhattan là

h2 = 3 + 1 + 2 + 2 + 2 + 3 + 3 + 2 = 18 .

Đúng như mong đợi, cả hai đều không đánh giá quá cao chi phí giải pháp thực sự là 26.

3.6.1 Ảnh hưởng của độ chính xác heuristic đến hiệu suất
HIỆU QUẢ
YẾU TỐ CHI NHÁNH Một cách để mô tả chất lượng của một phương pháp phỏng đoán là hệ số phân nhánh hiệu quả b . Nếu

tổng số nút do A tạo cho một bài toán cụ thể là N và độ sâu lời giải là d thì b là hệ số phân

nhánh mà một cây thống nhất có độ sâu d sẽ phải có để chứa N + 1 nút. Như vậy,

2 d .
N +1=1+ b + (b ) + ··· + (b )

Ví dụ: nếu A tìm thấy giải pháp ở độ sâu 5 bằng cách sử dụng 52 nút thì hệ số phân nhánh hiệu quả

là 1,92. Hệ số phân nhánh hiệu quả có thể khác nhau giữa các trường hợp bài toán, nhưng thông thường

nó khá ổn định đối với các bài toán đủ khó. (Sự tồn tại của hệ số phân nhánh hiệu quả rút ra từ kết

quả đã đề cập trước đó rằng số nút được mở rộng bởi A tăng theo cấp số nhân với độ sâu lời giải.)

Do đó, các phép đo thử nghiệm của b trên một tập hợp nhỏ các bài toán có thể cung cấp một hướng

dẫn tốt đến tính hữu dụng tổng thể của heuristic. Một heuristic được thiết kế tốt sẽ có giá trị b

gần bằng 1, cho phép giải quyết các vấn đề khá lớn với chi phí tính toán hợp lý.
Machine Translated by Google

104 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

Để kiểm tra các hàm heuristic h1 và h2, chúng tôi đã tạo ra 1200 vấn đề ngẫu nhiên với

độ dài giải pháp từ 2 đến 24 (100 cho mỗi số chẵn) và giải chúng bằng phép lặp

tìm kiếm sâu hơn và tìm kiếm cây A sử dụng cả h1 và h2. Hình 3.29 cho kết quả trung bình

số lượng nút được tạo bởi mỗi chiến lược và hệ số phân nhánh hiệu quả. Kết quả

gợi ý rằng h2 tốt hơn h1 và tốt hơn nhiều so với việc sử dụng tìm kiếm sâu hơn lặp đi lặp lại. Thậm chí

đối với các bài toán nhỏ với d = 12, A với h2 hiệu quả hơn 50.000 lần so với bài toán không được biết

tìm kiếm sâu hơn lặp đi lặp lại.

Chi phí tìm kiếm (các nút được tạo) Yếu tố phân nhánh hiệu quả

ID A (h1) A (h2) ID A (h1) A (h2)


d

2 10 6 6 2,45 1,79 1,79


4 112 13 12 2,87 1,48 1,45
6 680 20 18 2,73 1,34 1h30
số 8 6384 39 25 2,80 1,33 1,24
10 47127 93 39 2,79 1,38 1,22
12 3644035 227 73 2,78 1,42 1,24
14 – 539 113 – 1,44 1,23
16 – 1301 211 – 1,45 1,25
18 – 3056 363 – 1,46 1,26
20 – 7276 676 – 1,47 1,27
22 – 18094 1219 – 1,48 1,28
24 – 39135 1641 – 1,48 1,26

Hình 3.29 So sánh chi phí tìm kiếm và các yếu tố phân nhánh hiệu quả cho
Thuật toán LẶP-SÂU-TÌM KIẾM và A với h1, h2. Dữ liệu được tính trung bình trên
100 trường hợp của câu đố 8 cho mỗi độ dài lời giải khác nhau d.

Người ta có thể hỏi liệu h2 có luôn tốt hơn h1 hay không. Câu trả lời là “Về cơ bản là có”. Nó

Dễ dàng nhận thấy từ định nghĩa của hai phương pháp phỏng đoán rằng, với bất kỳ nút n nào, h2(n) ≥ h1(n).
THỐNG TRỊ Do đó chúng ta nói rằng h2 lấn át h1. Sự thống trị chuyển trực tiếp thành hiệu quả: A sử dụng

h2 sẽ không bao giờ mở rộng nhiều nút hơn A bằng cách sử dụng h1 (ngoại trừ một số nút có

f(n) = C ). Lập luận rất đơn giản. Hãy nhớ lại quan sát ở trang 97 rằng mọi nút

với f(n) < C chắc chắn sẽ được mở rộng. Điều này cũng giống như nói rằng mọi nút có

h(n) < C g(n) chắc chắn sẽ được mở rộng. Nhưng vì h2 ít nhất cũng lớn bằng h1 với mọi
các nút, mọi nút chắc chắn được mở rộng bằng tìm kiếm A với h2 cũng chắc chắn sẽ được mở rộng

với h1 và h1 cũng có thể khiến các nút khác được mở rộng. Do đó, nói chung là

tốt hơn nên sử dụng hàm heuristic có giá trị cao hơn, miễn là nó nhất quán và

thời gian tính toán cho heuristic không quá dài.

3.6.2 Tạo ra các phương pháp phỏng đoán có thể chấp nhận được từ các vấn đề thoải mái

Chúng ta đã thấy rằng cả h1 (gạch đặt sai vị trí) và h2 (khoảng cách Manhattan) đều khá tốt

phương pháp phỏng đoán cho câu đố 8 và h2 tốt hơn. Làm thế nào người ta có thể nghĩ ra h2? Là nó

Liệu máy tính có thể phát minh ra phương pháp phỏng đoán như vậy một cách máy móc không?

h1 và h2 là ước tính độ dài đường đi còn lại cho câu đố 8 ô, nhưng chúng cũng

độ dài đường đi hoàn toàn chính xác cho các phiên bản đơn giản của câu đố. Nếu các quy tắc của câu đố
Machine Translated by Google

Mục 3.6. Hàm heuristic 105

được thay đổi sao cho một ô có thể di chuyển đến bất cứ đâu thay vì chỉ đến ô vuông trống liền kề, thì h1 sẽ

đưa ra số bước chính xác trong lời giải ngắn nhất. Tương tự, nếu một ô có thể di chuyển một ô vuông theo bất

kỳ hướng nào, thậm chí lên một ô vuông đã chiếm, thì h2 sẽ đưa ra số bước chính xác trong giải pháp ngắn nhất.

Một bài toán có ít hạn chế hơn đối với các hành động được gọi là VẤN ĐỀ THƯ GIÃN. Đồ thị không gian trạng thái

của bài toán thoải mái là một siêu đồ thị của không gian trạng thái ban đầu vì việc loại bỏ các ràng buộc sẽ tạo ra các cạnh

được thêm vào trong đồ thị.

Bởi vì bài toán nới lỏng thêm các cạnh vào không gian trạng thái, nên bất kỳ giải pháp tối ưu nào trong

bài toán ban đầu, theo định nghĩa, cũng là một giải pháp trong bài toán nới lỏng; nhưng bài toán thoải mái hơn

có thể có lời giải tốt hơn nếu các cạnh được thêm vào mang lại những đường tắt. Do đó, chi phí của một giải

pháp tối ưu cho một bài toán thoải mái là một phương pháp phỏng đoán có thể chấp nhận được cho bài toán ban đầu.

Hơn nữa, vì heuristic dẫn xuất là chi phí chính xác cho bài toán thoải mái nên nó phải tuân theo bất đẳng thức

tam giác và do đó nhất quán (xem trang 95).

Nếu định nghĩa vấn đề được viết ra bằng ngôn ngữ hình thức thì có thể xây dựng được

tự động giải quyết các vấn đề.11 Ví dụ: nếu các hành động trong 8 câu đố được mô tả là

Một ô có thể di chuyển từ ô vuông A sang ô vuông B nếu

A nằm cạnh B theo chiều ngang hoặc chiều dọc và B trống,

chúng ta có thể tạo ra ba vấn đề thoải mái bằng cách loại bỏ một hoặc cả hai điều kiện:

(a) Một ô có thể di chuyển từ ô A sang ô B nếu A liền kề với B. (b) Một ô có thể

di chuyển từ ô A sang ô B nếu B trống. (c) Một viên gạch có thể di

chuyển từ ô vuông A đến ô vuông B.

Từ (a), chúng ta suy ra h2 (khoảng cách Manhattan). Lý do là h2 sẽ là điểm thích hợp nếu chúng ta lần lượt di

chuyển từng ô đến đích của nó. Heuristic rút ra từ (b) được thảo luận trong Bài tập 3.31. Từ (c), chúng ta có

thể rút ra h1 (các ô bị đặt sai vị trí) vì đó sẽ là điểm thích hợp nếu các ô có thể di chuyển đến đích dự định

trong một bước. Lưu ý rằng điều quan trọng là các bài toán thoải mái do kỹ thuật này tạo ra có thể được giải

về cơ bản mà không cần tìm kiếm, bởi vì các quy tắc thoải mái cho phép bài toán được phân tách thành tám bài

toán con độc lập. Nếu bài toán thoải mái khó giải thì việc thu được các giá trị của heuristic tương ứng sẽ rất

tốn kém.12

Một chương trình có tên ABSOLVER có thể tự động tạo ra các phương pháp phỏng đoán từ việc xác định vấn

đề bằng cách sử dụng phương pháp “vấn đề thoải mái” và nhiều kỹ thuật khác (Prieditis, 1993).

ABSOLVER đã tạo ra một phương pháp phỏng đoán mới cho trò chơi 8 câu đố tốt hơn bất kỳ phương pháp phỏng đoán

nào trước đó và đã tìm ra phương pháp phỏng đoán hữu ích đầu tiên cho câu đố Khối Rubik nổi tiếng.

Một vấn đề với việc tạo ra các hàm heuristic mới là người ta thường không tìm được một heuristic “rõ ràng là

tốt nhất”. Nếu một tập hợp các phương pháp phỏng đoán có thể chấp nhận được h1 ...hm có sẵn cho một bài toán và không

có phương pháp nào vượt trội hơn bất kỳ phương pháp suy nghiệm nào khác, thì chúng ta nên chọn phương pháp nào? Hóa

ra, chúng ta không cần phải lựa chọn. Chúng ta có thể có được điều tốt nhất trên thế giới bằng cách xác định

h(n) = max{h1(n),...,hm(n)} .

11 Trong Chương 8 và 10, chúng tôi mô tả các ngôn ngữ hình thức phù hợp cho nhiệm vụ này; với những mô tả hình thức có thể thao

tác được, việc xây dựng các bài toán thoải mái có thể được tự động hóa. Hiện tại, chúng tôi sử dụng tiếng Anh.

12 Lưu ý rằng có thể đạt được một phương pháp phỏng đoán hoàn hảo chỉ bằng cách cho phép h thực hiện tìm kiếm theo chiều rộng đầy

đủ “một cách lén lút”. Vì vậy, có sự cân bằng giữa độ chính xác và thời gian tính toán cho các hàm heuristic.
Machine Translated by Google

106 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

2 4 1 2

5 6 3 54 6

số 8 3 1 7 số 8

Trạng thái bắt đầu Trạng thái mục tiêu

Hình 3.30 Một bài toán con của trường hợp 8 câu đố ở Hình 3.28. Nhiệm vụ là
đặt các ô 1, 2, 3 và 4 vào đúng vị trí của chúng mà không phải lo lắng về điều gì sẽ xảy ra
những viên gạch khác.

Heuristic tổng hợp này sử dụng bất kỳ hàm nào chính xác nhất trên nút được đề cập.

Bởi vì các phương pháp phỏng đoán thành phần có thể chấp nhận được nên h có thể chấp nhận được; cũng dễ dàng chứng minh được điều đó

h là nhất quán. Hơn nữa, h thống trị tất cả các phương pháp phỏng đoán thành phần của nó.

3.6.3 Tạo các phương pháp phỏng đoán có thể chấp nhận được từ các bài toán con: Cơ sở dữ liệu mẫu

VẤN ĐỀ CON Các phương pháp phỏng đoán có thể chấp nhận được cũng có thể được rút ra từ chi phí giải quyết một bài toán con của một bài toán đã cho

vấn đề. Ví dụ, Hình 3.30 trình bày một bài toán con của trường hợp 8 câu đố ở Hình 3.28. Bài toán con liên quan

đến việc xếp các ô 1, 2, 3, 4 vào đúng vị trí của chúng. Rõ ràng,

chi phí của giải pháp tối ưu của bài toán con này là giới hạn dưới của chi phí của bài toán hoàn chỉnh. Nó hóa

ra còn chính xác hơn khoảng cách Manhattan trong một số trường hợp.

CƠ SỞ DỮ LIỆU MẪU Ý tưởng đằng sau cơ sở dữ liệu mẫu là lưu trữ các chi phí giải pháp chính xác này cho mọi trường hợp bài

toán con có thể xảy ra—trong ví dụ của chúng tôi, mọi cấu hình có thể có của bốn ô

và chỗ trống. (Vị trí của bốn ô còn lại không liên quan đến mục đích giải bài toán con, nhưng việc di chuyển

các ô đó sẽ được tính vào chi phí.) Sau đó, chúng tôi tính toán.

một hDB heuristic được chấp nhận cho từng trạng thái hoàn chỉnh gặp phải trong quá trình tìm kiếm chỉ bằng cách

tra cứu cấu hình bài toán con tương ứng trong cơ sở dữ liệu. Bản thân cơ sở dữ liệu là

được xây dựng bằng cách tìm kiếm ngược13 từ mục tiêu và ghi lại chi phí của từng mẫu mới gặp phải; chi phí của

việc tìm kiếm này được khấu hao trong nhiều trường hợp vấn đề tiếp theo.

Việc lựa chọn 1-2-3-4 khá tùy tiện; chúng ta cũng có thể xây dựng cơ sở dữ liệu cho 5-6-7-8,

cho 2-4-6-8, v.v. Mỗi cơ sở dữ liệu mang lại một phương pháp phỏng đoán có thể chấp nhận được và những phương pháp phỏng đoán này có thể

được kết hợp, như đã giải thích trước đó, bằng cách lấy giá trị tối đa. Một heuristic kết hợp của

loại này chính xác hơn nhiều so với khoảng cách Manhattan; số lượng nút được tạo

khi giải 15 câu đố ngẫu nhiên có thể giảm đi hệ số 1000.

Người ta có thể tự hỏi liệu các phương pháp phỏng đoán thu được từ cơ sở dữ liệu 1-2-3-4 và

5-6-7-8 có thể được thêm vào vì hai bài toán con dường như không trùng nhau. Liệu điều này có còn mang lại

một heuristic có thể chấp nhận được? Câu trả lời là không, bởi vì lời giải của bài toán con 1-2-3-4

và bài toán con 5-6-7-8 cho một trạng thái nhất định gần như chắc chắn sẽ có một số bước đi - đó là

13 Bằng cách làm việc ngược lại với mục tiêu, chi phí giải pháp chính xác cho từng trường hợp gặp phải sẽ được xác định ngay lập tức.

có sẵn. Đây là một ví dụ về lập trình động, chúng ta sẽ thảo luận sâu hơn trong Chương 17.
Machine Translated by Google

Mục 3.6. Hàm heuristic 107

khó có thể di chuyển 1-2-3-4 vào vị trí mà không chạm vào 5-6-7-8 và ngược lại. Nhưng nếu chúng ta không

tính những bước di chuyển đó thì sao? Nghĩa là, chúng ta không ghi lại tổng chi phí để giải bài toán

con 1-2-3-4 mà chỉ ghi lại số bước đi liên quan đến 1-2-3-4. Khi đó dễ dàng thấy rằng tổng của hai chi

phí vẫn là giới hạn dưới của chi phí để giải toàn bộ bài toán. Đây là ý tưởng đằng sau cơ sở dữ liệu
MẪU RÁC NHAU
CƠ SỞ DỮ LIỆU mẫu rời rạc. Với cơ sở dữ liệu như vậy, có thể giải 15 câu đố ngẫu nhiên trong vài mili giây—số lượng

nút được tạo ra giảm đi 10.000 lần so với việc sử dụng khoảng cách Manhattan. Đối với 24 câu đố, có thể

đạt được tốc độ khoảng một triệu.

Cơ sở dữ liệu mẫu rời rạc hoạt động cho các câu đố xếp ô trượt vì bài toán có thể được chia theo

cách mà mỗi lần di chuyển chỉ ảnh hưởng đến một bài toán con—vì mỗi lần chỉ có một ô được di chuyển.

Đối với một bài toán như Khối Rubik, kiểu chia nhỏ này rất khó vì mỗi lần di chuyển sẽ ảnh hưởng đến 8

hoặc 9 trong số 26 khối. Những cách tổng quát hơn để xác định phép tính cộng, các phương pháp phỏng

đoán có thể chấp nhận được đã được đề xuất áp dụng cho khối Rubik (Yang và cộng sự, 2008), nhưng chúng

không mang lại một phương pháp phỏng đoán tốt hơn phương pháp phỏng đoán không cộng tính tốt nhất cho bài toán.

3.6.4 Học heuristic từ kinh nghiệm

Hàm heuristic h(n) được cho là ước tính chi phí của giải pháp bắt đầu từ trạng thái tại nút n. Làm thế

nào một tác nhân có thể xây dựng một chức năng như vậy? Một giải pháp đã được đưa ra trong các phần

trước—đó là nghĩ ra các vấn đề thoải mái mà giải pháp tối ưu có thể được tìm thấy một cách dễ dàng. Một

giải pháp khác là rút kinh nghiệm. Ví dụ: “Kinh nghiệm” ở đây có nghĩa là giải được nhiều câu đố 8 câu.

Mỗi lời giải tối ưu cho một bài toán 8 câu đố cung cấp các ví dụ từ đó có thể học được h(n). Mỗi ví dụ

bao gồm một trạng thái từ lộ trình giải pháp và chi phí thực tế của giải pháp từ thời điểm đó. Từ

những ví dụ này, một thuật toán học có thể được sử dụng để xây dựng hàm h(n) có thể (nếu may mắn) dự

đoán chi phí giải pháp cho các trạng thái khác phát sinh trong quá trình tìm kiếm. Các kỹ thuật để thực

hiện điều này bằng cách sử dụng mạng lưới thần kinh, cây quyết định và các phương pháp khác được trình

bày trong Chương 18. (Các phương pháp học tăng cường được mô tả trong Chương 21 cũng có thể áp dụng

được.)
TÍNH NĂNG
Phương pháp học quy nạp hoạt động tốt nhất khi được cung cấp các đặc điểm của trạng thái có liên

quan đến việc dự đoán giá trị của trạng thái, thay vì chỉ mô tả trạng thái thô. Ví dụ: tính năng “số ô

đặt sai vị trí” có thể hữu ích trong việc dự đoán khoảng cách thực tế của một trạng thái đến mục tiêu.

Hãy gọi tính năng này là x1(n). Chúng tôi có thể lấy 100 cấu hình 8 câu đố được tạo ngẫu nhiên và thu

thập số liệu thống kê về chi phí giải pháp thực tế của chúng. Chúng ta có thể thấy rằng khi x1(n) bằng

5 thì chi phí giải pháp trung bình là khoảng 14, v.v. Với những dữ liệu này, giá trị của x1 có thể được

sử dụng để dự đoán h(n). Tất nhiên, chúng ta có thể sử dụng một số tính năng.

Đặc điểm thứ hai x2(n) có thể là “số cặp ô liền kề không liền kề ở trạng thái mục tiêu”. Nên kết hợp

x1(n) và x2(n) để dự đoán h(n) như thế nào? Một cách tiếp cận phổ biến là sử dụng kết hợp tuyến tính:

h(n) = c1x1(n) + c2x2(n) .

Các hằng số c1 và c2 được điều chỉnh để phù hợp nhất với dữ liệu thực tế về chi phí giải pháp.

Người ta mong đợi cả c1 và c2 đều dương vì các ô đặt sai vị trí và các cặp liền kề không chính xác làm

cho bài toán khó giải hơn. Lưu ý rằng phương pháp phỏng đoán này thỏa mãn điều kiện h(n)=0 đối với các

trạng thái mục tiêu, nhưng nó không nhất thiết phải được chấp nhận hoặc nhất quán.
Machine Translated by Google

108 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

3.7 TÓM TẮT

Chương này đã giới thiệu các phương pháp mà một tác nhân có thể sử dụng để chọn các hành động trong các môi trường xác

định, có thể quan sát được, tĩnh và hoàn toàn được biết đến. Trong những trường hợp như vậy, tác nhân có thể xây dựng

chuỗi hành động để đạt được mục tiêu của mình; quá trình này được gọi là tìm kiếm.

• Trước khi một tác nhân có thể bắt đầu tìm kiếm giải pháp, mục tiêu phải được xác định và vấn đề được xác định rõ

ràng phải được hình thành.

• Một bài toán bao gồm năm phần: trạng thái ban đầu, tập hợp các hành động, mô hình chuyển tiếp mô tả kết quả của

các hành động đó, hàm kiểm tra mục tiêu và hàm chi phí đường dẫn .

Môi trường của vấn đề được biểu diễn bằng một không gian trạng thái. Đường đi qua không gian trạng thái từ trạng

thái ban đầu đến trạng thái mục tiêu là một nghiệm.

• Các thuật toán tìm kiếm xử lý các trạng thái và hành động như nguyên tử: chúng không xem xét bất kỳ cấu trúc bên

trong nào mà chúng có thể sở hữu.

• Thuật toán TREE-SEARCH tổng quát xem xét tất cả các đường dẫn có thể để tìm ra giải pháp, trong khi thuật toán

TÌM KIẾM GRAPH tránh xem xét các đường dẫn dư thừa. • Các thuật toán tìm kiếm được đánh giá trên cơ sở

tính đầy đủ, tính tối ưu, độ phức tạp về thời gian và độ phức tạp về không gian. Độ phức tạp phụ thuộc vào b, hệ

số phân nhánh trong không gian trạng thái và d, độ sâu của nghiệm nông nhất.

• Các phương pháp tìm kiếm không chính xác chỉ có thể truy cập vào định nghĩa bài toán. Các thuật toán cơ bản như

sau:

– Tìm kiếm theo chiều rộng sẽ mở rộng các nút nông nhất trước; nó đã hoàn thiện, tối ưu

cho chi phí bước đơn vị, nhưng có độ phức tạp không gian theo cấp số nhân.

– Tìm kiếm chi phí đồng nhất mở rộng nút có chi phí đường đi thấp nhất, g(n) và tối ưu

đối với chi phí bước chung.

– Tìm kiếm theo chiều sâu sẽ mở rộng nút sâu nhất chưa được mở rộng trước. Nó không hoàn chỉnh cũng như

không tối ưu nhưng có độ phức tạp về không gian tuyến tính. Tìm kiếm giới hạn độ sâu thêm giới hạn độ sâu.

– Tìm kiếm sâu hơn lặp lại gọi tìm kiếm theo chiều sâu với giới hạn độ sâu tăng dần cho đến khi tìm thấy mục

tiêu. Nó hoàn chỉnh, tối ưu cho chi phí bước đơn vị, có độ phức tạp về thời gian tương đương với tìm kiếm

theo chiều rộng và có độ phức tạp về không gian tuyến tính.

– Tìm kiếm hai chiều có thể làm giảm đáng kể độ phức tạp về thời gian, nhưng không phải lúc nào cũng

có thể áp dụng được và có thể cần quá nhiều không gian.

• Các phương pháp tìm kiếm có hiểu biết có thể có quyền truy cập vào hàm heuristic h(n) ước tính
chi phí của một giải pháp từ n.

– Thuật toán tìm kiếm đầu tiên tốt nhất chung chọn một nút để mở rộng theo hàm đánh giá.

– Tìm kiếm đầu tiên tốt nhất tham lam mở rộng các nút với h(n) tối thiểu. Nó không tối ưu nhưng
thường có hiệu quả.
Machine Translated by Google

Ghi chú thư mục và lịch sử 109

– Tìm kiếm A mở rộng các nút có giá trị tối thiểu f(n) = g(n) + h(n). A là đầy đủ và tối

ưu, miễn là h(n) có thể chấp nhận được (đối với TÌM KIẾM CÂY) hoặc nhất quán (đối với TÌM

KIẾM HÌNH THỨC). Độ phức tạp về không gian của A vẫn còn rất hạn chế.

– RBFS (tìm kiếm đệ quy tốt nhất đầu tiên) và SMA (A giới hạn bộ nhớ đơn giản ) là các

thuật toán tìm kiếm tối ưu, mạnh mẽ sử dụng lượng bộ nhớ hạn chế; nếu có đủ thời gian, họ

có thể giải quyết những vấn đề mà A không thể giải quyết được vì đã hết

ký ức.

• Hiệu suất của các thuật toán tìm kiếm heuristic phụ thuộc vào chất lượng của hàm heuristic. Đôi

khi người ta có thể xây dựng các phương pháp phỏng đoán tốt bằng cách giảm bớt việc xác định vấn

đề, bằng cách lưu trữ chi phí giải pháp được tính toán trước cho các bài toán con trong cơ sở dữ

liệu mẫu hoặc bằng cách học hỏi từ kinh nghiệm với lớp vấn đề.

THƯ VIỆN VÀ LỊCH SỬ

Chủ đề tìm kiếm trong không gian trạng thái ít nhiều bắt nguồn từ hình thức hiện tại của nó trong những

năm đầu của AI. Công trình của Newell và Simon về Nhà lý thuyết logic (1957) và GPS (1961) đã dẫn đến

việc thiết lập các thuật toán tìm kiếm như vũ khí chính trong kho vũ khí của các nhà nghiên cứu AI những

năm 1960 và đưa việc giải quyết vấn đề trở thành nhiệm vụ kinh điển của AI. Công việc nghiên cứu hoạt

động của Richard Bellman (1957) cho thấy tầm quan trọng của chi phí đường dẫn cộng gộp trong việc đơn

giản hóa các thuật toán tối ưu hóa. Văn bản về Giải quyết vấn đề tự động của Nils Nilsson (1971) đã

thiết lập lĩnh vực này trên nền tảng lý thuyết vững chắc.

Hầu hết các bài toán tìm kiếm trong không gian trạng thái được phân tích trong chương này đều có

lịch sử lâu đời trong tài liệu và ít tầm thường hơn chúng ta tưởng. Vấn đề những người truyền giáo và

những kẻ ăn thịt người được sử dụng trong Bài tập 3.9 đã được Amarel (1968) phân tích chi tiết. Nó đã

được xem xét trước đó—trong AI của Simon và Newell (1961) và trong nghiên cứu hoạt động của Bellman và

Dreyfus (1962).

Câu đố 8 là một người anh em họ nhỏ hơn của câu đố 15, có lịch sử được Slocum và Sonneveld (2006)

kể lại chi tiết. Nhiều người cho rằng nó được phát minh bởi nhà thiết kế trò chơi nổi tiếng người Mỹ

Sam Loyd, dựa trên những tuyên bố của ông về hiệu ứng đó từ năm 1891 trở đi (Loyd, 1959). Trên thực tế,

nó được phát minh bởi Noyes Chapman, một giám đốc bưu điện ở Canastota, New York, vào giữa những năm

1870. (Chapman không thể cấp bằng sáng chế cho phát minh của mình vì bằng sáng chế chung bao gồm các

khối trượt có chữ cái, số hoặc hình ảnh đã được cấp cho Ernest Kinsey vào năm 1878.) Nó nhanh chóng thu

hút sự chú ý của công chúng và các nhà toán học (Johnson và Story, 1879; Tài, 1880). Các biên tập viên

của Tạp chí Toán học Hoa Kỳ cho biết: “Câu đố '15' trong vài tuần qua đã gây chú ý lớn trước công chúng

Mỹ và có thể nói là đã thu hút được sự chú ý của chín trên mười người thuộc cả hai giới và mọi giới.

lứa tuổi và điều kiện của cộng đồng.” Ratner và Warmuth (1986) đã chỉ ra rằng phiên bản tổng quát n × n

của bài toán 15 câu đố thuộc loại bài toán NP-đầy đủ.

Bài toán 8 quân hậu lần đầu tiên được xuất bản ẩn danh trên tạp chí cờ vua Schach của Đức vào

năm 1848; sau đó nó được cho là của Max Bezzel. Nó được tái bản vào năm 1850 và vào thời điểm đó đã thu
hút sự chú ý của nhà toán học lỗi lạc Carl Friedrich Gauss, người
Machine Translated by Google

110 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

cố gắng liệt kê tất cả các giải pháp có thể; ban đầu ông chỉ tìm được 72, nhưng cuối cùng ông đã tìm ra

đáp án đúng là 92, mặc dù Nauck đã công bố tất cả 92 nghiệm đầu tiên vào năm 1850.

Netto (1901) đã khái quát hóa vấn đề cho n quân hậu và Abramson và Yung (1989) đã tìm ra thuật toán O(n).

Mỗi vấn đề tìm kiếm trong thế giới thực được liệt kê trong chương này đều là chủ đề của rất nhiều

nỗ lực nghiên cứu. Các phương pháp lựa chọn chuyến bay tối ưu của hãng hàng không phần lớn vẫn là độc

quyền, nhưng Carl de Marcken (giao tiếp cá nhân) đã chỉ ra rằng việc định giá vé máy bay và các hạn chế

đã trở nên phức tạp đến mức vấn đề chọn chuyến bay tối ưu chính thức là không thể quyết định được . Bài

toán nhân viên bán hàng du lịch là một bài toán tổ hợp tiêu chuẩn trong lý thuyết khoa học máy tính

(Lawler và cộng sự, 1992). Karp (1972) đã chứng minh TSP là NP-hard, nhưng các phương pháp xấp xỉ heuristic

hiệu quả đã được phát triển (Lin và Kernighan, 1973). Arora (1998) đã nghĩ ra một sơ đồ gần đúng đa thức

đầy đủ cho các TSP Eu-clide. Các phương pháp bố trí VLSI được khảo sát bởi Shahookar và Mazumder (1991),

và nhiều bài viết tối ưu hóa bố cục xuất hiện trên các tạp chí VLSI. Các vấn đề về điều hướng và lắp ráp

robot được thảo luận trong Chương 25.

Các thuật toán tìm kiếm không chính xác để giải quyết vấn đề là chủ đề trọng tâm của khoa học máy

tính cổ điển (Horowitz và Sahni, 1978) và nghiên cứu hoạt động (Dreyfus, 1969). Tìm kiếm theo chiều rộng

được Moore (1959) xây dựng để giải quyết các mê cung. Phương pháp quy hoạch động (Bellman, 1957; Bellman

và Dreyfus, 1962), ghi lại một cách có hệ thống lời giải cho tất cả các bài toán con có độ dài tăng dần,

có thể được coi là một dạng tìm kiếm theo chiều rộng trên đồ thị. Thuật toán đường đi ngắn nhất hai điểm

của Dijkstra (1959) là nguồn gốc của tìm kiếm chi phí thống nhất. Những tác phẩm này cũng giới thiệu ý

tưởng về các tập hợp đã khám phá và biên giới (danh sách đóng và danh sách mở).

Một phiên bản đào sâu lặp đi lặp lại được thiết kế để sử dụng hiệu quả đồng hồ cờ vua lần đầu tiên

được sử dụng bởi Slate và Atkin (1977) trong chương trình chơi trò chơi CHESS 4.5. Thuật toán B của

Martelli (1977) bao gồm khía cạnh đào sâu lặp đi lặp lại và cũng chi phối hiệu suất trong trường hợp xấu

nhất của A với các phương pháp phỏng đoán có thể chấp nhận được nhưng không nhất quán. Kỹ thuật đào sâu

lặp đi lặp lại được đưa ra trong công trình của Korf (1985a). Tìm kiếm hai chiều được Pohl (1971 giới

thiệu) cũng có thể có hiệu quả trong một số trường hợp.

Việc sử dụng thông tin heuristic trong giải quyết vấn đề đã xuất hiện trong một bài báo đầu tiên

của Simon và Newell (1958), nhưng cụm từ “tìm kiếm heuristic” và việc sử dụng các hàm heuristic để ước

tính khoảng cách đến mục tiêu đã xuất hiện muộn hơn một chút (Newell và Ernst, 1965). ; Lâm, 1965).

Doran và Michie (1966) đã tiến hành nghiên cứu thực nghiệm sâu rộng về tìm kiếm heuristic. Mặc dù họ đã

phân tích độ dài đường dẫn và “sự thâm nhập” (tỷ lệ giữa độ dài đường dẫn trên tổng số nút được kiểm tra

cho đến nay), nhưng dường như họ đã bỏ qua thông tin được cung cấp bởi chi phí đường dẫn g(n). Thuật toán

A , kết hợp chi phí đường đi hiện tại vào tìm kiếm heuristic, được phát triển bởi Hart, Nilsson và

Raphael (1968), với một số chỉnh sửa sau đó (Hart và cộng sự, 1972). Dechter và Pearl (1985) đã chứng

minh hiệu quả tối ưu của A .

Bài báo A ban đầu đã giới thiệu điều kiện nhất quán trên các hàm heuristic. Điều kiện đơn điệu

được Pohl (1977) đưa ra như một sự thay thế đơn giản hơn, nhưng Pearl (1984) đã chỉ ra rằng hai điều kiện

này tương đương nhau.

Pohl (1977) đi tiên phong trong nghiên cứu mối quan hệ giữa sai số trong các hàm heuristic và độ

phức tạp về thời gian của A . Kết quả cơ bản thu được khi tìm kiếm cây theo bước đơn vị
Machine Translated by Google

Ghi chú thư mục và lịch sử 111

chi phí và một nút mục tiêu duy nhất (Pohl, 1977; Gaschnig, 1979; Huyn và cộng sự, 1980; Pearl, 1984) và

với nhiều nút mục tiêu (Dinh và cộng sự, 2007). “Hệ số phân nhánh hiệu quả” được Nilsson (1971) đề xuất như

một thước đo thực nghiệm về hiệu quả; nó tương đương với việc giả sử chi phí thời gian là O((b )d). Để tìm

kiếm cây được áp dụng cho biểu đồ, Korf et al. (2001) lập luận rằng chi phí thời gian được mô hình hóa tốt

hơn là O(bd k), trong đó k phụ thuộc vào độ chính xác heuristic; Tuy nhiên, phân tích này đã gây ra một số

tranh cãi. Đối với tìm kiếm đồ thị, Helmert và R¨oger (2008) lưu ý rằng một số vấn đề nổi tiếng chứa nhiều

nút theo cấp số nhân trên các đường dẫn lời giải tối ưu, ngụ ý độ phức tạp theo thời gian theo cấp số nhân

đối với A ngay cả với sai số tuyệt đối không đổi trong h.

Có nhiều biến thể của thuật toán A . Pohl (1973) đề xuất sử dụng trọng số động, sử dụng tổng có

trọng số fw(n) = wgg(n) + whh(n) của độ dài đường dẫn hiện tại và hàm heuristic làm hàm đánh giá, thay vì

tổng đơn giản f (n) = g(n)+ h(n) dùng trong A . Trọng số wg và wh được điều chỉnh linh hoạt khi quá trình

tìm kiếm diễn ra.

Thuật toán của Pohl có thể được chứng minh là có thể chấp nhận được - tức là đảm bảo tìm được giải pháp

trong phạm vi hệ số 1 + của giải pháp tối ưu, trong đó có tham số được cung cấp cho thuật toán. Thuộc tính

tương tự được thể hiện bằng thuật toán A (Pearl, 1984), thuật toán này có thể chọn bất kỳ nút nào từ

đường biên với điều kiện chi phí f của nó nằm trong hệ số 1 + của nút biên giới có chi phí f thấp nhất.
Việc lựa chọn có thể được thực hiện sao cho giảm thiểu chi phí tìm kiếm.

Các phiên bản hai chiều của A đã được nghiên cứu; sự kết hợp giữa A hai chiều và các điểm mốc đã

biết đã được sử dụng để tìm đường lái xe một cách hiệu quả cho dịch vụ bản đồ trực tuyến của Microsoft

(Goldberg và cộng sự, 2006). Sau khi lưu vào bộ nhớ đệm một tập hợp các đường dẫn giữa các điểm mốc, thuật

toán có thể tìm ra đường dẫn tối ưu giữa bất kỳ cặp điểm nào trong biểu đồ 24 triệu điểm của Hoa Kỳ, tìm

kiếm dưới 0,1% biểu đồ. Các cách tiếp cận khác đối với tìm kiếm hai chiều bao gồm tìm kiếm theo chiều rộng

đầu tiên ngược từ mục tiêu đến độ sâu cố định, sau đó là tìm kiếm IDA chuyển tiếp (Dillenburg và Nelson,

1994; Manzini, 1995).

A và các thuật toán tìm kiếm trong không gian trạng thái khác có liên quan chặt chẽ đến các kỹ

thuật phân nhánh và giới hạn được sử dụng rộng rãi trong nghiên cứu hoạt động (Lawler và Wood, 1966). Mối

quan hệ giữa tìm kiếm trong không gian trạng thái và nhánh và giới hạn đã được nghiên cứu sâu (Kumar và

Kanal, 1983; Nau và cộng sự, 1984; Kumar và cộng sự, 1988). Martelli và Monta-nari (1978) chứng minh mối

liên hệ giữa lập trình động (xem Chương 17) và một số loại tìm kiếm trong không gian trạng thái. Kumar và

Kanal (1988) cố gắng “sự thống nhất lớn” về tìm kiếm heuristic, lập trình động và các kỹ thuật phân nhánh

và giới hạn dưới cái tên CDP—“quy trình quyết định tổng hợp”.

Bởi vì máy tính vào cuối những năm 1950 và đầu những năm 1960 có bộ nhớ chính nhiều nhất là vài nghìn

từ nên tìm kiếm heuristic giới hạn bộ nhớ là một chủ đề nghiên cứu ban đầu. Graph Traverser (Doran và

Michie, 1966), một trong những chương trình tìm kiếm sớm nhất, cam kết với người vận hành sau khi tìm kiếm

tốt nhất trước tiên cho đến giới hạn bộ nhớ. IDA (Korf, 1985a, 1985b) là thuật toán tìm kiếm phỏng đoán

giới hạn bộ nhớ, tối ưu được sử dụng rộng rãi đầu tiên và một số lượng lớn các biến thể đã được phát triển.

Một phân tích về hiệu quả của IDA và những khó khăn của nó với các phương pháp phỏng đoán có giá trị thực

xuất hiện trong Patrick et al. (1992).

RBFS (Korf, 1993) thực sự phức tạp hơn một chút so với thuật toán được hiển thị trong Hình 3.26, gần

với thuật toán được phát triển độc lập được gọi là mở rộng lặp (Russell, 1992). RBFS sử dụng giới hạn dưới
LẶP LẠI
SỰ BÀNH TRƯỚNG cũng như giới hạn trên; hai thuật toán hoạt động giống hệt nhau với các phương pháp phỏng đoán có thể chấp

nhận được, nhưng RBFS mở rộng các nút theo phương pháp tốt nhất trước tiên.
Machine Translated by Google

112 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

đặt hàng ngay cả với một heuristic không thể chấp nhận được. Ý tưởng theo dõi đường đi thay thế tốt nhất đã xuất

hiện trước đó trong triển khai Prolog thanh lịch của A và trong thuật toán DTA của Bratko (1986) (Russell và

Wefald, 1991). Công việc thứ hai cũng thảo luận về không gian trạng thái siêu cấp và việc học siêu cấp.

Thuật toán MA xuất hiện trong Chakrabarti et al. (1989). SMA , hay MA đơn giản hóa, xuất hiện từ nỗ

lực triển khai MA làm thuật toán so sánh cho IE (Russell, 1992).

Kaindl và Khorsand (1994) đã áp dụng SMA để tạo ra thuật toán tìm kiếm hai chiều nhanh hơn đáng kể so với các

thuật toán trước đó. Korf và Zhang (2000) mô tả cách tiếp cận phân chia và chinh phục, còn Chu và Hansen (2002)

giới thiệu tìm kiếm đồ thị A giới hạn bộ nhớ và chiến lược chuyển sang tìm kiếm theo chiều rộng để tăng hiệu

quả sử dụng bộ nhớ (Zhou và Hansen, 2006). Korf (1995) khảo sát các kỹ thuật tìm kiếm giới hạn bộ nhớ.

Ý tưởng rằng các phương pháp phỏng đoán có thể chấp nhận được có thể bắt nguồn từ việc nới lỏng vấn đề

xuất hiện trong bài báo chuyên đề của Held và Karp (1970), những người đã sử dụng phương pháp phỏng đoán cây bao

trùm tối thiểu để giải TSP. (Xem Bài tập 3.30.)

Việc tự động hóa quá trình thư giãn đã được Priedi-tis (1993) thực hiện thành công, dựa trên nghiên cứu

trước đó của Mostow (mostow và Prieditis, 1989). Holte và Hernadvolgyi (2001) mô tả các bước gần đây hơn hướng

tới việc tự động hóa quy trình. Việc sử dụng cơ sở dữ liệu mẫu để rút ra các phương pháp phỏng đoán có thể chấp

nhận được là do Gasser (1995) và Culberson và Schaeffer (1996, 1998); cơ sở dữ liệu mẫu rời rạc được mô tả bởi

Korf và Felner (2002); một phương pháp tương tự sử dụng các mẫu biểu tượng là của Edelkamp (2009). Felner và cộng

sự. (2007) chỉ ra cách nén cơ sở dữ liệu mẫu để tiết kiệm dung lượng. Việc giải thích xác suất của phương pháp

phỏng đoán đã được Pearl (1984) và Hansson và Mayer (1989) nghiên cứu sâu.

Cho đến nay, nguồn toàn diện nhất về phương pháp phỏng đoán và các thuật toán tìm kiếm theo phương pháp

phỏng đoán là văn bản Heuristics của Pearl (1984) . Cuốn sách này cung cấp thông tin đặc biệt tốt về sự đa dạng

của các nhánh và biến thể của A , bao gồm các bằng chứng chặt chẽ về các tính chất hình thức của chúng.

Kanal và Kumar (1988) trình bày một tuyển tập các bài viết quan trọng về tìm kiếm heuristic, và Rayward-Smith et

al. (1996) đề cập đến các phương pháp tiếp cận từ Nghiên cứu Hoạt động. Các bài báo về các thuật toán tìm kiếm

mới – đáng chú ý là vẫn tiếp tục được khám phá – xuất hiện trên các tạp chí như Trí tuệ nhân tạo và Tạp chí của

ACM.
TÌM KIẾM SONG SONG
Chủ đề về các thuật toán tìm kiếm song song không được đề cập trong chương này, một phần vì nó đòi hỏi

phải thảo luận dài dòng về các kiến trúc máy tính song song. Tìm kiếm song song đã trở thành một chủ đề phổ biến

trong những năm 1990 trong cả AI và khoa học máy tính lý thuyết (Mahanti và Daniels, 1993; Grama và Kumar, 1995;

Crauser et al., 1998) và đang quay trở lại trong kỷ nguyên của kiến trúc cụm và đa lõi mới (Ralphs và cộng sự,

2004; Korf và Schultze, 2005).

Tầm quan trọng ngày càng tăng là các thuật toán tìm kiếm cho các đồ thị rất lớn yêu cầu lưu trữ trên đĩa (Korf,

2008).

BÀI TẬP

3.1 Giải thích tại sao việc xây dựng vấn đề phải tuân theo việc xây dựng mục tiêu.

3.2 Mục tiêu của bạn là điều hướng robot ra khỏi mê cung. Robot xuất phát ở trung tâm mê cung
Machine Translated by Google

Bài tập 113

hướng về phía bắc. Bạn có thể xoay robot quay mặt về hướng bắc, đông, nam hoặc tây. Bạn có thể hướng dẫn robot di

chuyển về phía trước một khoảng cách nhất định, mặc dù nó sẽ dừng lại trước khi va vào tường.

Một. Hãy hình thành bài toán này. Không gian trạng thái lớn bao nhiêu?

b. Khi định hướng trong mê cung, nơi duy nhất chúng ta cần rẽ là ở giao điểm của hai hoặc nhiều hành lang. Hãy

trình bày lại vấn đề này bằng cách sử dụng quan sát này. Không gian trạng thái bây giờ lớn đến mức nào?

c. Từ mỗi điểm trong mê cung, chúng ta có thể di chuyển theo bất kỳ hướng nào trong bốn hướng cho đến khi gặp

một bước ngoặt và đây là hành động duy nhất chúng ta cần làm. Tái hiện lại vấn đề bằng cách sử dụng những

hành động này. Bây giờ chúng ta có cần theo dõi hướng của robot không?

d. Trong mô tả ban đầu về vấn đề, chúng tôi đã trừu tượng hóa khỏi thế giới thực, hạn chế các hành động và loại

bỏ các chi tiết. Hãy liệt kê ba cách đơn giản hóa như vậy mà chúng tôi đã thực hiện.

3.3 Giả sử hai người bạn sống ở các thành phố khác nhau trên bản đồ, chẳng hạn như bản đồ Romania trong Hình 3.2.

Ở mỗi lượt, chúng ta có thể đồng thời di chuyển từng người bạn đến một thành phố lân cận trên bản đồ. Khoảng thời

gian cần thiết để di chuyển từ thành phố i đến hàng xóm j bằng khoảng cách d(i, j) giữa các thành phố, nhưng ở mỗi

lượt, người bạn đến trước phải đợi cho đến khi người kia đến (và gọi điện cho người đầu tiên). trên điện thoại di

động của mình) trước khi lượt tiếp theo có thể bắt đầu.

Chúng tôi muốn hai người bạn gặp nhau càng nhanh càng tốt.

Một. Viết công thức chi tiết cho bài toán tìm kiếm này. (Bạn sẽ thấy hữu ích khi xác định một số ký hiệu hình

thức ở đây.)

b. Gọi D(i, j) là khoảng cách đường thẳng giữa các thành phố i và j. Hàm heuristic nào sau đây được chấp nhận?

(i) D(i, j); (ii) 2 · D(i, j); (iii) D(i,j)/2.

c. Có bản đồ nào được kết nối hoàn toàn mà không có giải pháp nào tồn tại không? d. Có

bản đồ nào trong đó tất cả các giải pháp đều yêu cầu một người bạn đến thăm cùng một thành phố hai lần không?

3.4 Chứng minh rằng các trạng thái 8 câu đố được chia thành hai tập hợp rời nhau, sao cho bất kỳ trạng thái nào cũng có thể tiếp

cận được từ bất kỳ trạng thái nào khác trong cùng một tập hợp, trong khi không có trạng thái nào có thể tiếp cận được từ bất kỳ

trạng thái nào trong tập hợp kia. (Gợi ý: Xem Berlekamp và cộng sự (1982).) Hãy nghĩ ra một quy trình để quyết định tập hợp nào

đang ở trạng thái nhất định và giải thích tại sao điều này lại hữu ích cho việc tạo ra các trạng thái ngẫu nhiên.

3.5 Xét bài toán n-nữ hoàng sử dụng công thức tăng dần “hiệu quả” ở trang 72. Giải thích tại sao không gian trạng

thái có ít nhất √3 n! nêu rõ và ước tính n lớn nhất mà việc thăm dò toàn diện là khả thi. (Gợi ý: Tìm giới hạn dưới

của hệ số phân nhánh bằng cách xem xét số ô vuông tối đa mà quân hậu có thể tấn công trong bất kỳ cột nào.)

3.6 Đưa ra cách giải bài toán hoàn chỉnh cho mỗi câu sau. Chọn một công thức đủ chính xác để thực hiện.

Một. Chỉ sử dụng bốn màu, bạn phải tô màu bản đồ phẳng sao cho không có hai vùng liền kề nào có cùng màu. b.

Một con khỉ cao 3 feet đang ở trong một căn

phòng có vài quả chuối được treo trên trần nhà cao 8 feet. Anh ấy muốn lấy chuối. Căn phòng có hai chiếc thùng

cao 3 foot có thể xếp chồng lên nhau, có thể di chuyển được.
Machine Translated by Google

114 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

Hình 3.31 Cảnh có chướng ngại vật đa giác. S và G là trạng thái bắt đầu và mục tiêu.

c. Bạn có một chương trình xuất ra thông báo “bản ghi đầu vào bất hợp pháp” khi được cung cấp một tệp bản

ghi đầu vào nhất định. Bạn biết rằng việc xử lý từng bản ghi là độc lập với các bản ghi khác. Bạn muốn

khám phá hồ sơ nào là bất hợp pháp.

d. Bạn có ba chiếc bình có dung tích 12 gallon, 8 gallon và 3 gallon và một vòi nước.

Bạn có thể đổ đầy bình hoặc đổ chúng từ cái này sang cái khác hoặc đổ xuống đất. Bạn cần đo chính xác

một gallon.

3.7 Xét bài toán tìm đường đi ngắn nhất giữa hai điểm trên mặt phẳng có vật cản đa giác lồi như hình 3.31.

Đây là sự lý tưởng hóa vấn đề mà robot phải giải quyết để điều hướng trong môi trường đông đúc.

Một. Giả sử không gian trạng thái bao gồm tất cả các vị trí (x, y) trong mặt phẳng. Có bao nhiêu tiểu bang

có ở đó không? Có bao nhiêu con đường dẫn đến mục tiêu?

b. Giải thích ngắn gọn tại sao đường đi ngắn nhất từ một đỉnh đa giác đến bất kỳ đỉnh nào khác trong cảnh

phải bao gồm các đoạn thẳng nối một số đỉnh của đa giác.

Xác định một không gian trạng thái tốt ngay bây giờ. Không gian trạng thái này lớn đến mức nào?

c. Xác định các hàm cần thiết để thực hiện bài toán tìm kiếm, bao gồm hàm ACTIONS lấy một đỉnh làm đầu

vào và trả về một tập hợp các vectơ, mỗi vectơ ánh xạ đỉnh hiện tại tới một trong các đỉnh có thể đạt

được theo đường thẳng. (Đừng quên các lân cận trên cùng một đa giác.) Sử dụng khoảng cách đường thẳng

cho hàm heuristic.

d. Áp dụng một hoặc nhiều thuật toán trong chương này để giải quyết một loạt các vấn đề trong

tên miền và nhận xét về hiệu suất của chúng.

3.8 Ở trang 68, chúng tôi đã nói rằng chúng tôi sẽ không xem xét các vấn đề có chi phí đường đi âm. Trong bài

tập này, chúng ta khám phá quyết định này sâu hơn.

Một. Giả sử rằng các hành động có thể có chi phí âm lớn tùy ý; giải thích tại sao khả năng này sẽ buộc

bất kỳ thuật toán tối ưu nào phải khám phá toàn bộ không gian trạng thái.
Machine Translated by Google

Bài tập 115

b. Liệu có hữu ích không nếu chúng ta nhấn mạnh rằng chi phí từng bước phải lớn hơn hoặc bằng một giá trị âm nào đó?

hằng số c? Hãy xem xét cả cây và đồ thị. c. Giả sử

rằng một tập hợp các hành động tạo thành một vòng lặp trong không gian trạng thái sao cho việc thực hiện tập

hợp đó theo một thứ tự nào đó sẽ không dẫn đến thay đổi ròng nào đối với trạng thái. Nếu tất cả các hành

động này đều có chi phí âm thì điều này hàm ý điều gì về hành vi tối ưu cho một tác nhân trong môi

trường như vậy? d. Người ta có thể dễ dàng tưởng tượng ra những hành động có chi phí âm cao, ngay cả trong

các lĩnh vực như tìm đường. Ví dụ, một số đoạn đường có thể có phong cảnh đẹp đến mức vượt xa chi phí

thông thường về thời gian và nhiên liệu. Giải thích, bằng thuật ngữ chính xác, trong bối cảnh tìm kiếm

không gian trạng thái, tại sao con người không lái xe vòng quanh các vòng ngắm cảnh vô thời hạn và giải

thích cách xác định không gian trạng thái và các hành động tìm kiếm tuyến đường để các tác nhân nhân tạo

cũng có thể tránh vòng lặp.

đ. Bạn có thể nghĩ ra một miền thực tế trong đó chi phí bước có thể gây ra vòng lặp không?

3.9 Vấn đề những người truyền giáo và những kẻ ăn thịt người thường được phát biểu như sau. Ba nhà truyền giáo

và ba kẻ ăn thịt người ở một bên sông, cùng với một chiếc thuyền có thể chở một hoặc hai người. Tìm cách đưa mọi

người sang phía bên kia mà không bao giờ để lại một nhóm người truyền giáo ở một nơi đông hơn những kẻ ăn thịt

người ở nơi đó. Vấn đề này nổi tiếng trong AI vì nó là chủ đề của bài báo đầu tiên tiếp cận việc xây dựng vấn đề

từ quan điểm phân tích (Amarel, 1968).

Một. Hãy hình thành vấn đề một cách chính xác, chỉ thực hiện những khác biệt cần thiết để đảm bảo một

giải pháp hợp lệ. Vẽ sơ đồ không gian trạng thái đầy đủ.

b. Thực hiện và giải quyết vấn đề một cách tối ưu bằng thuật toán tìm kiếm thích hợp. Bạn có nên kiểm tra các

trạng thái lặp lại không? c. Bạn nghĩ tại sao

mọi người gặp khó khăn khi giải câu đố này, khi biết rằng không gian trạng thái

thật đơn giản?

3.10 Xác định bằng từ ngữ của bạn các thuật ngữ sau: trạng thái, không gian trạng thái, cây tìm kiếm, nút tìm

kiếm, mục tiêu, hành động, mô hình chuyển đổi và hệ số phân nhánh.

3.11 Sự khác biệt giữa trạng thái thế giới, mô tả trạng thái và nút tìm kiếm là gì?

Tại sao sự phân biệt này lại hữu ích?

3.12 Một hành động như Go(Sibiu) thực sự bao gồm một chuỗi dài các hành động chi tiết hơn: nổ máy xe, nhả phanh,

tăng tốc về phía trước, v.v. Việc có các hành động tổng hợp thuộc loại này giúp giảm số bước trong chuỗi giải

pháp , do đó làm giảm thời gian tìm kiếm.

Giả sử chúng ta đưa điều này đến mức cực kỳ hợp lý, bằng cách thực hiện các hành động siêu tổng hợp từ mọi chuỗi

hành động Go có thể có . Sau đó, mọi trường hợp vấn đề đều được giải quyết bằng một hành động siêu tổng hợp duy

nhất, chẳng hạn như Go(Sibiu)Go(Rimnicu Vilcea)Go(Pitesti)Go(Bucharest). Giải thích cách tìm kiếm sẽ hoạt động

trong công thức này. Đây có phải là cách tiếp cận thực tế để tăng tốc độ giải quyết vấn đề?

3.13 Chứng minh GRAPH-SEARCH thỏa mãn tính chất tách đồ thị minh họa ở hình 3.9. (Gợi ý: Bắt đầu bằng cách chỉ

ra rằng thuộc tính đúng ngay từ đầu, sau đó chỉ ra rằng nếu nó đúng trước khi lặp lại thuật toán thì nó giữ

nguyên sau đó.) Mô tả một thuật toán tìm kiếm vi phạm thuộc tính.
Machine Translated by Google

116 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

x 12
x 2 x 2

x 16

Hình 3.32 Các mảnh đường ray trong bộ đường ray bằng gỗ; mỗi cái được dán nhãn với số lượng
bản sao trong bộ. Lưu ý rằng các miếng cong và miếng “nĩa” (“công tắc” hoặc “điểm”) có thể
được lật lại để chúng có thể cong theo một trong hai hướng. Mỗi đường cong nghiêng 45 độ.

3.14 Điều nào sau đây đúng và điều nào sai? Giải thích câu trả lời của bạn.

Một. Tìm kiếm theo chiều sâu luôn mở rộng ít nhất nhiều nút như tìm kiếm A với một sự chấp nhận
heuristic.

b. h(n)=0 là một phương pháp phỏng đoán có thể chấp nhận được cho

trò chơi 8 câu đố. c. A không được sử dụng trong chế tạo robot vì nhận thức, trạng thái và hành

động là liên tục. d. Tìm kiếm theo chiều rộng hoàn tất ngay cả khi cho phép chi phí

bước bằng 0. đ. Giả sử rằng quân Xe có thể di chuyển trên bàn cờ với số lượng ô bất kỳ trên một đường thẳng,

theo chiều dọc hoặc chiều ngang, nhưng không thể nhảy qua các quân khác. Khoảng cách Manhattan là một

phương pháp phỏng đoán có thể chấp nhận được cho bài toán di chuyển quân xe từ ô A đến ô B với số lần di
chuyển nhỏ nhất.

3.15 Xét không gian trạng thái trong đó trạng thái bắt đầu là số 1 và mỗi trạng thái k có hai trạng thái kế
tiếp: số 2k và 2k + 1.

Một. Vẽ phần không gian trạng thái cho các trạng thái từ 1 đến 15.

b. Giả sử trạng thái mục tiêu là 11. Liệt kê thứ tự các nút sẽ được truy cập để tìm kiếm theo chiều rộng,

tìm kiếm giới hạn độ sâu với giới hạn 3 và tìm kiếm sâu hơn lặp lại. c. Tìm kiếm hai chiều

sẽ hoạt động tốt như thế nào đối với vấn đề này? Phân nhánh là gì
yếu tố theo từng hướng tìm kiếm hai chiều?

d. Câu trả lời cho câu (c) có gợi ý cách trình bày lại bài toán để cho phép bạn giải bài toán đi từ trạng

thái 1 đến trạng thái mục tiêu nhất định mà hầu như không cần tìm kiếm không? đ. Gọi hành động đi từ

k đến 2k Trái và hành động đi từ 2k + 1 Phải. Bạn có thể tìm ra thuật toán đưa ra giải pháp cho vấn đề này

mà không cần tìm kiếm gì không?

3.16 Một bộ đường ray bằng gỗ cơ bản bao gồm các mảnh như trong Hình 3.32. Nhiệm vụ là kết nối những mảnh này

thành một tuyến đường sắt không có đường ray chồng chéo và không có đầu lỏng lẻo để tàu có thể chạy xuống sàn.

Một. Giả sử các mảnh khớp với nhau một cách chính xác và không bị chùng xuống. Đưa ra công thức chính xác của

nhiệm vụ như một vấn đề tìm kiếm.

b. Xác định thuật toán tìm kiếm không phù hợp cho nhiệm vụ này và giải thích lựa chọn của bạn. c. Giải

thích tại sao việc loại bỏ bất kỳ một phần “cái nĩa” nào cũng khiến vấn đề không thể giải quyết được.
Machine Translated by Google

Bài tập 117

d. Đưa ra giới hạn trên cho tổng kích thước của không gian trạng thái được xác định theo công thức của bạn.

(Gợi ý: hãy nghĩ đến hệ số phân nhánh tối đa cho quá trình xây dựng và độ sâu tối đa, bỏ qua vấn đề

các mảnh chồng chéo và các đầu lỏng lẻo. Bắt đầu bằng cách giả vờ rằng mỗi mảnh là duy nhất.)

3.17 Trên trang 90, chúng tôi đã đề cập đến tìm kiếm kéo dài lặp, một dạng tương tự lặp của tìm kiếm chi phí

dạng đơn. Ý tưởng là sử dụng các giới hạn tăng dần về chi phí đường đi. Nếu một nút được tạo ra có chi phí

đường dẫn vượt quá giới hạn hiện tại thì nút đó sẽ bị loại bỏ ngay lập tức. Đối với mỗi lần lặp mới, giới

hạn được đặt thành chi phí đường dẫn thấp nhất của bất kỳ nút nào bị loại bỏ trong lần lặp trước đó.

Một. Chứng minh rằng thuật toán này là tối ưu cho chi phí đường đi

chung. b. Hãy xem xét một cây đồng nhất với hệ số phân nhánh b, độ sâu giải pháp d và chi phí bước đơn vị.

Việc kéo dài vòng lặp sẽ yêu cầu bao nhiêu lần lặp? c. Bây giờ

hãy xem xét chi phí bước được rút ra từ phạm vi liên tục [, 1], trong đó 0 << 1. Làm thế nào

nhiều lần lặp được yêu cầu trong trường hợp xấu nhất?

d. Triển khai thuật toán và áp dụng nó cho các trường hợp của bài toán 8 câu đố và bài toán về người bán

hàng du lịch. So sánh hiệu suất của thuật toán với tìm kiếm có chi phí thống nhất và nhận xét về kết

quả của bạn.

3.18 Mô tả một không gian trạng thái trong đó tìm kiếm sâu lặp lại hoạt động kém hơn nhiều so với tìm kiếm

theo chiều sâu (ví dụ: O(n2) so với O(n)).

3.19 Viết chương trình lấy hai URL của trang Web làm đầu vào và tìm đường dẫn liên kết từ trang này đến trang

kia. Chiến lược tìm kiếm phù hợp là gì? Tìm kiếm hai chiều có phải là một ý tưởng hay? Công cụ tìm kiếm có

thể được sử dụng để thực hiện chức năng tiền thân không?

3.20 Xét bài toán thế giới chân không được xác định trên Hình 2.2.

Một. Thuật toán nào được xác định trong chương này sẽ phù hợp cho vấn đề này?

Thuật toán nên sử dụng tìm kiếm cây hay tìm kiếm đồ thị?

b. Áp dụng thuật toán bạn đã chọn để tính toán chuỗi hành động tối ưu cho thế giới 3 × 3 có trạng thái ban

đầu có bụi bẩn ở ba ô vuông trên cùng và tác nhân ở trung tâm. c. Xây dựng một tác nhân tìm kiếm

cho thế giới chân không và đánh giá hiệu suất của nó trong một tập hợp các thế giới 3 × 3 với xác suất 0,2

của bụi bẩn trong mỗi ô vuông. Bao gồm chi phí tìm kiếm cũng như chi phí đường đi trong thước đo hiệu

suất, sử dụng tỷ giá hối đoái hợp lý. d. So sánh tác nhân tìm kiếm tốt nhất của bạn với

tác nhân phản xạ ngẫu nhiên đơn giản sẽ rất tệ nếu có bụi bẩn và mặt khác sẽ di chuyển ngẫu nhiên.

đ. Hãy xem điều gì sẽ xảy ra nếu thế giới được mở rộng lên n × n. Hiệu suất của tác nhân tìm kiếm và tác

nhân phản xạ thay đổi như thế nào theo n?

3.21 Hãy chứng minh mỗi phát biểu sau hoặc cho phản ví dụ:

Một. Tìm kiếm theo chiều rộng là trường hợp đặc biệt của tìm kiếm chi phí đồng đều.

b. Tìm kiếm theo chiều sâu là trường hợp đặc biệt của tìm kiếm cây tốt nhất đầu

tiên. c. Tìm kiếm chi phí đồng đều là trường hợp đặc biệt của tìm kiếm A .
Machine Translated by Google

118 Chương 3. Giải quyết vấn đề bằng cách tìm kiếm

3.22 So sánh hiệu suất của A và RBFS trên một tập hợp các bài toán được tạo ngẫu nhiên trong miền 8 câu đố

(với khoảng cách Manhattan) và TSP (với MST—xem Bài tập 3.30).

Thảo luận về kết quả của bạn. Điều gì xảy ra với hiệu suất của RBFS khi một số ngẫu nhiên nhỏ được thêm vào

các giá trị heuristic trong miền 8 câu đố?

3.23 Theo dõi hoạt động tìm kiếm A áp dụng cho bài toán đi đến Bucharest từ Lugoj bằng cách sử dụng heuristic

khoảng cách đường thẳng. Tức là hiển thị chuỗi các nút mà thuật toán sẽ xem xét và điểm f, g và h cho mỗi nút.

3.24 Nghĩ ra một không gian trạng thái trong đó A sử dụng GRAPH-SEARCH trả về một giải pháp dưới mức tối ưu

với hàm h(n) có thể chấp nhận được nhưng không nhất quán.
CON ĐƯỜNG HEURISTIC
Thuật toán 3.25 Thuật toán đường dẫn heuristic (Pohl, 1977) là tìm kiếm đầu tiên tốt nhất trong đó hàm đánh giá là f(n)

= (2 w)g(n) + wh(n). Với giá trị nào của w thì điều này hoàn thành?

Với giá trị nào thì nó là tối ưu, giả sử rằng h có thể chấp nhận được? Loại tìm kiếm này thực hiện với w = 0,

w = 1 và w = 2?

3.26 Hãy xem xét phiên bản không giới hạn của lưới 2D thông thường được hiển thị trong Hình 3.9. Trạng thái

bắt đầu là tại điểm gốc (0,0) và trạng thái mục tiêu là tại (x,

y). Một. Hệ số phân nhánh b trong không gian trạng thái này là

gì? b. Có bao nhiêu trạng thái riêng biệt ở độ sâu k (với k > 0)? c. Số

lượng nút tối đa được mở rộng bằng cách tìm kiếm cây theo chiều rộng là bao nhiêu? d. Số lượng

nút tối đa được mở rộng bằng tìm kiếm biểu đồ theo chiều rộng là bao nhiêu? đ. Là h = |u x| + |v

y| một heuristic có thể chấp nhận được cho trạng thái tại (u, v)? Giải thích. f. Có bao nhiêu

nút được mở rộng bằng tìm kiếm đồ thị A bằng h? g. Liệu h vẫn được chấp

nhận nếu một số liên kết bị xóa? h. Liệu h vẫn có thể được chấp

nhận nếu một số liên kết được thêm vào giữa các quốc gia không liền kề?

3,27 n xe chiếm các ô vuông (1, 1) đến (n, 1) (tức là hàng dưới cùng) của lưới n × n.

Các xe phải được di chuyển lên hàng trên nhưng theo thứ tự ngược lại; vì vậy xe i xuất phát ở (i, 1) phải kết

thúc ở (n i + 1, n). Ở mỗi bước thời gian, mỗi một trong số n phương tiện có thể di chuyển một ô vuông lên,

xuống, sang trái hoặc sang phải hoặc giữ nguyên; nhưng nếu một phương tiện vẫn đứng yên thì một phương tiện

liền kề khác (nhưng không nhiều hơn một) có thể nhảy qua phương tiện đó. Hai xe không thể chiếm cùng một ô vuông.

Một. Tính kích thước của không gian trạng thái theo hàm của n. b.

Tính hệ số phân nhánh theo hàm của n. c. Giả sử xe i đang ở

(xi, yi); viết một heuristic hi có thể chấp nhận được không cần thiết cho số lần di chuyển mà nó sẽ cần để

đến vị trí mục tiêu (n i + 1, n), giả sử không có phương tiện nào khác trên lưới.

d. Phương pháp phỏng đoán nào sau đây có thể được chấp nhận cho bài toán di chuyển tất cả n phương tiện

cle tới điểm đến của họ? Giải thích.


N
tôi = 1 CHÀO.

(i) (ii) max{h1,...,hn}.

(iii) phút{h1,...,hn}.
Machine Translated by Google

Bài tập 119

3.28 Phát minh ra hàm heuristic cho câu đố 8 đôi khi đánh giá quá cao và chỉ ra cách nó có thể dẫn đến giải

pháp dưới mức tối ưu cho một vấn đề cụ thể. (Bạn có thể sử dụng máy tính để trợ giúp nếu muốn.) Chứng minh

rằng nếu h không bao giờ đánh giá quá cao hơn c, thì A sử dụng h sẽ trả về một giải pháp có chi phí vượt quá

chi phí của giải pháp tối ưu không quá c.

3.29 Chứng minh rằng nếu một heuristic là nhất quán thì nó phải được chấp nhận. Xây dựng một heuristic có thể
chấp nhận được nhưng không nhất quán.

3.30 Bài toán nhân viên bán hàng du lịch (TSP) có thể được giải bằng phương pháp heuristic cây bao trùm tối

thiểu (MST), ước tính chi phí để hoàn thành một chuyến tham quan, với điều kiện là một phần chuyến tham quan

đã được xây dựng. Chi phí MST của một tập hợp các thành phố là tổng nhỏ nhất của chi phí liên kết của bất kỳ

cây nào kết nối tất cả các thành phố.

Một. Hãy chỉ ra cách thức suy nghiệm này có thể được bắt nguồn từ một phiên bản thoải mái của TSP.

b. Chứng minh rằng phương pháp heuristic MST chiếm ưu thế hơn khoảng cách

theo đường thẳng. c. Viết trình tạo vấn đề cho các trường hợp của TSP trong đó các thành phố được đại diện bởi

điểm ngẫu nhiên trong ô vuông đơn vị.

d. Tìm một thuật toán hiệu quả trong tài liệu để xây dựng MST và sử dụng nó với tìm kiếm đồ thị A để giải

các trường hợp của TSP.

3.31 Ở trang 105, chúng ta đã xác định độ giãn của câu đố 8 trong đó một ô có thể di chuyển từ hình vuông A

sang hình vuông B nếu B trống. Lời giải chính xác của vấn đề này xác định phương pháp heuristic của Gaschnig

(Gaschnig, 1979). Giải thích tại sao phương pháp phỏng đoán của Gaschnig ít nhất cũng chính xác bằng h1 (các

ô đặt sai vị trí) và chỉ ra các trường hợp nó chính xác hơn cả h1 và h2 (khoảng cách Manhattan). Giải thích

cách tính toán heuristic Gaschnig một cách hiệu quả.

3.32 Chúng tôi đã đưa ra hai phương pháp phỏng đoán đơn giản cho trò chơi 8 câu đố: khoảng cách Manhattan và

các ô đặt sai vị trí. Một số phương pháp phỏng đoán trong tài liệu có mục đích cải thiện vấn đề này—ví dụ,

xem Nils-son (1971), Mostow và Prieditis (1989), và Hansson et al. (1992). Kiểm tra những tuyên bố này bằng

cách triển khai các phương pháp phỏng đoán và so sánh hiệu suất của các thuật toán thu được.
Machine Translated by Google

4 SAU CỔ ĐIỂN

TÌM KIẾM

Trong đó chúng ta nới lỏng các giả định đơn giản hóa của chương trước, từ đó tiến gần hơn

đến thế giới thực.

Chương 3 đề cập đến một loại vấn đề duy nhất: các môi trường có thể quan sát được, xác định, đã biết

trong đó giải pháp là một chuỗi các hành động. Trong chương này, chúng ta xem xét điều gì sẽ xảy ra khi

những giả định này được nới lỏng. Chúng tôi bắt đầu với một trường hợp khá đơn giản: Phần 4.1 và 4.2 bao

gồm các thuật toán thực hiện tìm kiếm cục bộ thuần túy trong không gian trạng thái, đánh giá và sửa đổi

một hoặc nhiều trạng thái hiện tại thay vì khám phá một cách có hệ thống các đường dẫn từ trạng thái ban đầu.

Các thuật toán này phù hợp với các bài toán trong đó tất cả những gì quan trọng là trạng thái lời giải

chứ không phải chi phí để đạt được nó. Nhóm thuật toán tìm kiếm cục bộ bao gồm các phương pháp lấy cảm

hứng từ vật lý thống kê (ủ mô phỏng) và sinh học tiến hóa (thuật toán di truyền).

Sau đó, trong Phần 4.3–


4.4, chúng ta xem xét điều gì sẽ xảy ra khi chúng ta nới lỏng các giả định

về tính tất định và khả năng quan sát được. Ý tưởng chính là nếu một tác nhân không thể dự đoán chính

xác nhận thức nào sẽ nhận được thì nó sẽ cần xem xét phải làm gì trong từng tình huống ngẫu nhiên mà nhận

thức của nó có thể tiết lộ. Với khả năng quan sát một phần, tác nhân cũng sẽ cần theo dõi các trạng thái

mà nó có thể ở.

Cuối cùng, Phần 4.5 điều tra tìm kiếm trực tuyến, trong đó tác nhân phải đối mặt với một không

gian trạng thái ban đầu chưa được biết và phải được khám phá.

4.1 Thuật toán tìm kiếm cục bộ và các vấn đề tối ưu hóa

Các thuật toán tìm kiếm mà chúng ta đã thấy cho đến nay được thiết kế để khám phá không gian tìm kiếm

một cách có hệ thống. Tính hệ thống này đạt được bằng cách lưu giữ một hoặc nhiều đường dẫn trong bộ nhớ

và bằng cách ghi lại các lựa chọn thay thế đã được khám phá tại mỗi điểm dọc theo đường dẫn. Khi tìm ra

mục tiêu thì con đường đi đến mục tiêu đó cũng là giải pháp cho vấn đề. Tuy nhiên, trong nhiều vấn đề,

con đường dẫn đến mục tiêu là không liên quan. Ví dụ, trong bài toán 8 quân hậu (xem trang 71), điều

quan trọng là cấu hình cuối cùng của các quân hậu chứ không phải thứ tự chúng được thêm vào. Đặc tính

chung tương tự áp dụng cho nhiều ứng dụng quan trọng như hủy ký hiệu mạch tích hợp, bố trí nhà máy, lập

kế hoạch phân xưởng công việc, lập trình tự động, tối ưu hóa mạng viễn thông, định tuyến phương tiện và

quản lý danh mục đầu tư.

120
Machine Translated by Google

Mục 4.1. Các thuật toán tìm kiếm cục bộ và các vấn đề tối ưu hóa 121

Nếu đường đi tới mục tiêu không quan trọng, chúng ta có thể xem xét một lớp thuật toán khác, những
TÌM KIẾM ĐỊA PHƯƠNG thuật toán không hề quan tâm đến đường đi. Các thuật toán tìm kiếm cục bộ hoạt động bằng cách sử dụng
NÚT HIỆN TẠI một nút hiện tại (chứ không phải nhiều đường dẫn) và thường chỉ di chuyển đến các nút lân cận

của nút đó. Thông thường, các đường dẫn tìm kiếm sẽ không được giữ lại. Mặc dù địa phương

Các thuật toán tìm kiếm không mang tính hệ thống, chúng có hai ưu điểm chính: (1) chúng sử dụng rất ít

bộ nhớ—thường là một lượng không đổi; và (2) họ thường có thể tìm ra giải pháp hợp lý trong phạm vi rộng

hoặc không gian trạng thái vô hạn (liên tục) mà các thuật toán hệ thống không phù hợp.

Ngoài việc tìm kiếm mục tiêu, các thuật toán tìm kiếm cục bộ còn hữu ích trong việc giải quyết các
TỐI ƯU HÓA
VẤN ĐỀ
vấn đề tối ưu hóa thuần túy, trong đó mục đích là tìm trạng thái tốt nhất theo hàm mục tiêu. Nhiều vấn đề
KHÁCH QUAN
CHỨC NĂNG
tối ưu hóa không phù hợp với mô hình tìm kiếm “chuẩn” được giới thiệu ở Chương 3. Ví dụ, tự nhiên cung

cấp một hàm khách quan—sự phù hợp về sinh sản—mà

Sự tiến hóa theo thuyết Darwin có thể được coi là nỗ lực tối ưu hóa, nhưng không có “kiểm tra mục tiêu” và

không có "chi phí đường dẫn" cho vấn đề này.


KHÔNG GIAN TRẠNG THÁI

PHONG CẢNH
Để hiểu tìm kiếm cục bộ, chúng ta thấy hữu ích khi xem xét bối cảnh không gian trạng thái (như

trong Hình 4.1). Cảnh quan có cả “vị trí” (được xác định bởi trạng thái) và “độ cao” (được xác định

bởi giá trị của hàm chi phí heuristic hoặc hàm mục tiêu). Nếu độ cao tương ứng với
TỐI THIỂU TOÀN CẦU chi phí thì mục đích là tìm ra thung lũng thấp nhất— mức tối thiểu toàn cầu; nếu độ cao tương ứng
TỐI ĐA TOÀN CẦU đối với một hàm mục tiêu thì mục đích là tìm ra đỉnh cao nhất— mức cực đại toàn cục. (Bạn

có thể chuyển đổi từ cái này sang cái khác chỉ bằng cách chèn dấu trừ.) Thuật toán tìm kiếm cục bộ

khám phá cảnh quan này. Một thuật toán tìm kiếm cục bộ hoàn chỉnh luôn tìm thấy mục tiêu nếu có;

một thuật toán tối ưu luôn tìm thấy mức tối thiểu/tối đa toàn cầu.

hàm mục tiêu


tối đa toàn cầu

vai

tối đa địa phương

mức tối đa cục bộ “phẳng”

không gian trạng thái

hiện hành
tình trạng

Hình 4.1 Cảnh quan không gian trạng thái một chiều trong đó độ cao tương ứng với

hàm mục tiêu. Mục đích là tìm cực đại toàn cục. Sửa đổi tìm kiếm leo đồi

trạng thái hiện tại để cố gắng cải thiện nó, như được minh họa bằng mũi tên. Những đặc điểm địa hình đa dạng
được xác định trong văn bản.

You might also like