Trong phần này chúng ta sẽ tìm hiểu một số phương pháp giải quyết vấn đề và áp dụng vào giải các bài toán đã nêu ở chương mở đầu... Trong chương này, chúng ta tìm cách đưa vấn đề về bài
Trang 1Muïc luïc
Trang 23 Thuật giải A0* 34
2 Phương pháp giải quyết vấn đề tổng quát (GPS) 50
CHƯƠNG 6 SUY LUẬN VỚI THÔNG TIN KHÔNG CHẮC CHẮN 79
Trang 3CHƯƠNG 7 BIỂU DIỄN TRI THỨC 97
2.2 Biểu diễn mối quan hệ Instance và isa 101
2.3 Bộ nhớ kết hợp (biểu diễn tri thức mô phỏng hệ thần kinh) 129
Trang 42 Tổng quan về thu nhận tri thức 136
Trang 51.4 Các kiểu đối tượng 177
3 Xây dựng hệ chuyên gia đơn giản bằng prolog 203
Lời nói đầu
Ngày nay, hầu hết các lĩnh vực đều có sự tham gia của máy tính Trong một số lĩnh vực, vai trò của máy tính là rất quan trọng Thế nhưng, vẫn còn đó nhiều công việc, dù giản đơn, dù nguy hiểm, dù nhàm chán, con người vẫn cứ phải đảm nhiệm
Liệu có thể xây dựng những hệ có khả năng hành động như con người, suy
Trang 6nghĩ như con người Những hệ như vậy sẽ làm thay con người nhiều việc,
cũng như hỗ trợ con người một cách hiệu quả; để con người tập trung vào
những hoạt động mang tính sáng tạo
Trí tuệ nhân tạo (AI – Artificial Intelligence) là một nhánh của công nghệ
thông tin nghiên cứu các phương pháp xây dựng trí tuệ cho máy Tài liệu
này giới thiệu cho sinh viên những khía cạnh cơ sở quan trọng của AI Tài
liệu gồm 10 chương được chia làm 4 phần chính Chương 1 giới thiệu về AI
Phần 1, gồm các chương 2, 3 và 4, giới thiệu các phương pháp giải quyết
vấn đề Phần 2, gồm các chương 5 và 6, giới thiệu các phương pháp suy
luận, các phương pháp xử lý thông tin không chắc chắn Phần 3, gồm các
chương 7, 8 và 9, giới thiệu các phương pháp biểu diễn và thu nhận tri
thức Phần 4, gồm chương 10 và hai phụ lục, giới thiệu một số chủ đề như
mạng neuron nhân tạo, thuật toán di truyền, xử lý ràng buộc; cũng giới
thiệu về prolog và thử giải quyết một số tình huống
Dù rất cố gắng, tài liệu được viết ra không khỏi có thiếu sót Rất mong sự
góp ý của bạn đọc để lần tái bản sau được tốt hơn
Nhân dịp này tôi xin chân thành cảm ơn Ban chủ nhiệm khoa Công nghệ
thông tin trường Đại học Kỹ thuật Công nghệ đã tạo điều kiện cho tôi
hoàn thành tài liệu này
Mọi ý kiến đóng góp xin gởi về hvduc@hcm.vnn.vn Xin chân thành cảm
ơn
TpHCM, Tháng 07/2006
Trang 7Chương 1
Mở đầu
Mục tiêu của AI là xây dựng những hệ thống suy nghĩ và hành động như con người Khi ấy hệ thống sẽ được gọi là thông minh Nó phải có khả năng giải quyết vấn đề như con người khi đứng trước những tình huống tương tự
1 Hệ thống thông minh
1.1 Kiểm soát tình huống và lựa chọn
Xét hệ giải phương trình bậc hai Yêu cầu hệ giải những phương trình sau:
1) x2 – 3x – 4 = 0 2) x2 – 4x + 3 = 0 3) x2 – 4x + 4 = 0
4) x2 – 4 = 0 5) x2 + 1 = 0 6) x2 – 4x + 5 = 0
Với hệ có những trả lời bất ngờ, chẳng hạn với
Phương trình thứ 1: Vì a – b + c = 0, ta có x 1 = -1 và x 2 = -c/a = 4;
Phương trình thứ 2: Vì a + b + c = 0, ta có x 1 = 1 và x 2 = c/a = 3;
Phương trình thứ 3: Biến đổi thành (x – 2) 2 = 0, ta có x 1 = x 2 = 2;
Trang 8Phương trình thứ 4: Biến đổi thành (x – 2)(x + 2) = 0, ta có x 1 = 2, x 2
= -2
Phương trình thứ 5: Vì x 2 + 1 > 0, phương trình vô nghiệm;
Phương trình thứ 6: Vì Δ = -4<0, phương trình vô nghiệm
Và ta có thể cho rằng hệ là thông minh
1.2 Học
Xét một trò chương trình chơi cờ vua đơn giản Với những ván cờ đầu tiên, chúng ta thua nó và ta nghĩ nó là thông minh Cho đến khi ta tìm được một cách thắng và phát hiện thấy dù thua, nó vẫn cứ thực hiện những
nước đi cũ Thế là ta thất vọng, vì nó chơi quá máy móc, chương trình
chẳng còn tí gì là thông minh Nếu như nó có khả năng rút ra kinh
nghiệm từ những ván cờ thua thì lại khác Tức hệ đã có khả năng học
Trở lại hệ giải phương trình bậc hai Ta lại yêu cầu hệ giải phương trình
x2 – x + 6 = 0
Ta chờ đợi hệ giải như sau:
Tìm thấy x = 3 là nghiệm, suy ra x 1 = 3, x 2 = -2
Tuy nhiên hệ không biết cách giải này Ta sẽ dạy hệ tri thức sau: thử xem
x có là nghiệm với x = -3, -2, -1, 0, 1, 2, 3 Rồi yêu cầu hệ giải lại Và hệ giải như sau:
Tìm thấy x = -2 là nghiệm, suy ra x 1 = -2, x 2 = 3
Bây giờ yêu cầu hệ giải phương trình 1 ở trên
x2 – 3x – 4 = 0 Có khả năng hệ sẽ giải khác với cách giải cũ
Tìm thấy x = -1 là nghiệm, suy ra x 1 = -1, x 2 = 4
Trang 9nghiệm của phương trình f(x) = 0 thì nghiệm của nó gồm a và các nghiệm của phương trình g(x) = 0, trong đó f(x) = (x – a)g(x)
Bây giờ ta cung cấp cho hệ một nghiệm x = 1 Lúc này hệ có thể giải như sau:
Vì 1 là nghiệm, biến đổi x 3 – 2x 2 – x + 2 = (x – 1)(x 2 – x – 2)
Phương trình x 2 – x – 2 = 0 có a – b + c = 0 nên có hai nghiệm là 1 và 2
Vậy phương trình có 3 nghiệm: x 1 = -1, x 2 = 1, x 3 = 2
Muốn sử dụng được tri thức chương trình phải có khả năng nhận biết các
sự kiện, các mối liên hệ và suy luận Rõ ràng một hệ giải phương trình bậc
hai như vậy xứng đáng được gọi là thông minh
2 Giới thiệu trí tuệ nhân tạo
2.1 Một số ví dụ
• Ta thấy từ đỉnh N có thể đi đến đỉnh C, T hoặc D
Nên chọn đỉnh nào? lý do? Có khả năng thu được đường đi tối ưu
không?
Giả sử ta chọn đỉnh C, và từ C có thể đi đến đỉnh D
Trang 10• Có nên đi tiếp và chọn D hay quay lui để chọn T hoặc D?
• Dù ta có chọn phương án nào đi nữa thì cũng phải giải thích được là vì
sao?
• Rõ ràng ta cần một chiến lược lựa chọn mà ta gọi là suy diễn Chẳng
hạn nếu suy diễn theo hướng ưu tiên khoảng cách ngắn nhất (toàn cục
trên tất cả các nhánh) thì đường đi tìm thấy sẽ là N→ T→ L Còn nếu
suy diễn tham lam (cục bộ tại đỉnh chọn) thì đường đi tìm thấy sẽ là
N→ C→ D→ L
Ví dụ 1.2
Chứng minh mệnh đề (⎤ a+⎤ b+c) ( ⎤ b+⎤ c+d) a b → d
Nếu cách giải quyết là tương tự như ở ví dụ 1 thì cái gì đóng vai trò đỉnh? Hơn nữa từ đỉnh hiện hành ta có thể đi đến các đỉnh nào? Làm sao phát
sinh ra các đỉnh mới?
Thử áp dụng phương pháp chứng minh phản chứng cho ví dụ này Thay vì chứng minh α → β ta đi chứng minh α ⎤ β → 0 Như vậy mệnh đề trên là tương đương với
(⎤a+⎤b+c) (⎤b+⎤c+d) a b⎤d → 0
Khác với ví dụ 1, ở đây ta phải sử dụng tri thức Với tri thức ( α + ⎤ β ) β →
α, ta coi như là từ 2 đỉnh α + ⎤ β và β phát sinh ra đỉnh mới α Như vậy
đỉnh ở đây là biểu thức và luật dẫn là cơ chế phát sinh ra đỉnh mới Bắt
đầu suy diễn với các đỉnh (⎤ a+⎤ b+c), ( ⎤ b+⎤ c+d), a, b và ⎤ d
• Từ 2 đỉnh (⎤ a+⎤ b+c) và a sinh ra đỉnh ⎤ b+c
Trang 11• Rồi từ ⎤ b+⎤ c+d và b cho ta ⎤ c+d
• Cứ như vậy cho đến đích (goal) cuối là đỉnh rỗng ∅
• Các đỉnh ở đây ta gọi là sự kiện Các tri thức dùng để phát sinh đỉnh
mới như ( α + ⎤ β ) β → α ta gọi là luật Và một lần nữa, câu hỏi “chiến
lược phát sinh là gì?” Lại được đặt ra Trong tình huống này, nếu lựa
chọn phương án phát sinh tất cả các đỉnh sau mỗi bước sẽ dễ dẫn đến tình trạng bùng nổ tổ hợp, là tình trạng mà chúng ta không hề mong muốn Ta không chờ đợi một thuật toán giúp giải các bài toán như thế này mà chỉ hy vọng có thêm những tri thức giúp tránh tình trạng bùng
nổ tồi tệ nói trên Các tri thức như vậy được gọi là các heuristic
Ví dụ 1.3
Trò chơi tic-tac-toe (giống trò chơi caro quen thuộc nhưng giới hạn trên
bảng 3×3) Mỗi đối thủ có 3 quân, nhiệm vụ của họ là xếp cho 3 quân thẳng hàng đồng thời ngăn cản đối phương thực hiện nhiệm vụ Trò chơi
được chia làm 2 giai đoạn Giai đoạn đặt quân giống với trò chơi caro, giai
đoạn di chuyển quân chỉ được phép dịch chuyển quân sang ô trống lân cận
(dùng lân cận 4)
Trò chơi được bắt đầu với bảng rỗng
Trang 12• Người thứ 1 sẽ chọn nước đi nào trong số 3 nước đi sau để đặt quân?
X
phải chăng nên suy diễn theo hướng ưu tiên số đường mở khả dĩ? Nếu
vậy thì phương án cuối sẽ là phương án được chọn Thật ra, ta biết là
với các trò chơi loại này, người chơi cần phải tính sâu hơn trước khi có
quyết định
• Quả vậy, những suy diễn ban đầu có thể không còn chính xác nữa khi
người đi chịu khó đánh giá thêm các thế biến ở các mức sâu hơn Ngoài
ra, trong ví dụ này ta còn quan sát thấy sự kém tường minh của đích
Ví dụ 1.4
Chứng minh biểu thức R(⎤ P → Q) = (Q+P)R bằng cách áp dụng các luật
như giao hoán ab = ba, a+b=b+a; kết hợp (ab)c = a(bc), (a+b)+c = a+(b+c)
v v
Làm cách nào có thể áp dụng một luật? Muốn áp dụng luật, chẳng hạn, a+b = b+a lên (Q+P)R trước tiên cần nhận diện (đối sánh) Q là a và P là b
và thu được kết quả (P+Q)R
• Như vậy bằng cách đối sánh một bộ phận hoặc toàn thể các sự kiện ta
tìm thấy các luật có thể áp dụng được Áp dụng các luật này sẽ cho ta
kết quả mới là các sự kiện được phát sinh Quá trình suy diễn ở đây có
thể đi theo hướng làm giảm dần sự khác biệt giữa kết quả tìm được và đích
2.2 Khái niệm
(a) Trí tuệ nhân tạo là gì
Các ví dụ nêu trên đưa ra cho chúng ta một số khái niệm mới, tạo tình huống dẫn chúng ta đi tìm hiểu một nhánh thú vị của khoa học máy tính đó là ngành trí tuệ nhân tạo
Những khái niệm mới được giới thiệu ở đây là:
Trang 13tương tự Nó có khả năng nhận biết các sự kiện, các mệnh đề, các mối liên hệ và suy luận Tuy nhiên, khi nghiên cứu cấu trúc bên trong, các nhà
nghiên cứu trí tuệ nhân tạo vẫn muốn xây dựng hệ có suy nghĩ giống người Đi vào chi tiết các chương trình như vậy hướng đến các tiêu chí sau:
1 Có suy nghĩ giống con người – liên quan đến mô hình hoá nhận thức
2 Có suy nghĩ hợp lý – liên quan đến logic hình thức
3 Có hành vi giống con người – liên quan đến thí nghiệm Turing
4 Có hành vi hợp lý – liên quan đến luật
(b) Cơ sở của trí tuệ nhân tạo
Trí tuệ nhân tạo được phát triển dựa trên:
1 Triết học (từ năm 428 trước công nguyên đến nay): với hầu hết các ý
tưởng quan trọng của AI;
2 Toán học (từ năm 800): bao gồm tính toán, logic và xác suất;
3 Tâm lý học (từ năm 1879): bao gồm nhận thức và hành vi;
4 Công nghệ máy tính (từ năm 1940);
Trang 145 Ngôn ngữ học (từ năm 1957)
(c) Một số lĩnh vực trí tuệ nhân tạo
1 Hệ chuyên gia chứa thông tin về một lĩnh vực nhất định và nếu được
phỏng vấn sẽ trả lời như một chuyên gia;
2 Xử lý ngôn ngữ tự nhiên;
1 Các phương pháp giải quyết vấn đề
2 Các kỹ thuật biểu diễn tri thức
3 Cách suy diễn và thu nhận tri thức trong mỗi loại biểu diễn
4 Tìm hiểu ngôn ngữ Prolog
2.3 Hệ cơ sở tri thức
(a) Cơ sở tri thức
Như chúng ta đã thấy, một hệ muốn hoạt động hiệu quả phải sử dụng được tri thức Tri thức phải được tổ chức tốt để có thể sử dụng Hệ sử dụng tri thức để đưa ra các sự kiện mới Thành phần đưa ra các sự kiện mới được gọi là mô tơ suy diễn
Định nghĩa 1.2
1 Tri thức là hiểu biết
2 Cơ sở tri thức là tri thức được mã hoá thành sự kiện, luật, heuristic,
thủ tục
Các vấn đề liên quan đến mã hoá tri thức là
Trang 151 Tổ chức tri thức là chìa khoá để truy xuất được hiệu quả Tuy nhiên
việc biểu diễn tri thức phụ thuộc bài toán và phương pháp suy diễn
2 Thu nhận tri thức là một trong những khó khăn lớn nhất Máy phải tự
học và tự cải thiện
(b) Hệ cơ sở tri thức
Định nghĩa 1.3
Hệ cơ sở tri thức là một hệ phần mềm phức tạp giúp thu nhận tri thức và giải quyết các bài toán liên quan đến các lĩnh vực AI
Nó có các thành phần như
1 Bộ thu nạp
2 Bộ giải thích
3 Bộ giao diện xử lý ngôn ngữ tự nhiên
4 Cơ sở tri thức
5 Mô tơ suy diễn
6 Cơ sở dữ liệu
3 Một số bài toán
Các bài toán sau dùng để minh họa cho việc khảo sát các mục tiêu đặt ra
Trang 16Tháp Hà Nội Chuyển chồng đĩa (xếp như cái tháp) từ cọc A sang cọc C có
sử dụng cọc trung gian B
Bài toán 10
Có 3 tu sĩ và 3 kẻ ăn thịt ngưòi cần sang sông Chỉ cần số lượng áp đảo là những kẻ ăn thịt người sẽ làm thịt các tu sĩ Làm thế nào đưa họ sang sông nếu đò chở tối đa được 2?
Bài toán 11
Trò chơi Puzzle 8 số: Di chuyển các số vào ô trống đưa bàn cờ về một
trạng thái cho trước, chẳng hạn
Bài toán 12
Tính tích phân bất định
Trang 17Bài toán 13
Con khỉ và nải chuối Có 1 con khỉ, 1 nải chuối, 1 cái ghế và 1 chiếc gậy
Nải chuối treo trên trần nhà Làm thế nào để con khỉ lấy được nải chuối?
Bài toán 14
Hệ thức lượng trong tam giác Chẳng hạn cho tam giác ABC, biết góc A
cạnh b và đường cao ha hãy chỉ ra quá trình tính cạnh c
BÀI TẬP
Bài tập 1.1
Xây dựng hệ giải phương trình bậc hai có khả năng
1 Kiểm soát tình huống và lựa chọn;
2 Học được những tình huống mới;
3 Giải được phương trình bậc 3 khi cho trước một nghiệm
Bài tập 1.2
Với bài toán được cho trong ví dụ 1, hãy cho biết đường đi tìm thấy là gì nếu suy diễn:
1 Theo chiều sâu;
2 Theo chiều rộng
Bài tập 1.3
Giải bài toán được cho trong ví dụ 2
1 Tiếp tục phần dỡ dang;
2 Thêm ít nhất một tri thức rồi mới giải
Bài tập 1.4
Xét trò chơi tic-tac-toe được cho trong ví dụ 3, tìm một cách đi để người đi trước luôn thắng Bạn giải bằng tìm kiếm hay có sử dụng tri thức riêng? Tri thức đó là gì, nếu có?
Trang 18GIẢI QUYẾT VẤN ĐỀ
Cuộc sống là một chuỗi các vấn đề mà
chúng ta cần giải quyết (Socrates)
Có một thời kỳ dài trong quá khứ, các nhà
khoa học đều cho rằng: “mọi vấn đề đều có
Trang 19thể được biểu diễn dưới dạng một bài toán” Descartes đã từng phát biểu “tất cả mọi bài toán đều có thể quy về bài toán đại số, từ đó việc giải bài toán chỉ là vấn đề của giải phương trình” David Hilbert cũng
đã từng đặt ra câu hỏi: “liệu có tồn tại một
phương pháp cho phép giải quyết mọi loại vấn đề không?”
Dưới góc nhìn khoa học, vấn đề thường
được thể hiện dưới dạng một bài toán
Trong phần này chúng ta sẽ tìm hiểu một số phương pháp giải quyết vấn đề và áp dụng vào giải các bài toán đã nêu ở chương mở đầu
Trang 20Chương 2
Giải quyết vấn đề bằng tìm kiếm
1 Khái niệm
1.1 Không gian trạng thái
Thường thì chúng ta nhận biết các đối tượng thông qua một tập các thuộc tính nào đó mà chúng ta sẽ gọi là biểu diễn hay mô hình Các giá trị cụ thể của nhữõng thuộc tính này cho phép chúng ta xác định được trạng thái của đối tượng Vì chúng ta chỉ làm việc chủ yếu trên các biểu diễn nên chúng ta sẽ coi trạng thái của đối tượng chính là tập các giá trị này Các giá trị này sẽ bị thay đổi dưới tác động của một tập các thao tác nào đó Ví
du,ï tình trạng bệnh của bệnh nhân được xác định qua một số kết quả xét nghiệm, và việc uống thuốc sẽ làm tình trạng bệnh đạt đến một trạng thái tốt hơn; cũng vậy khả năng làm việc của nhân viên được xác định qua một số tiêu chí nào đó, và việc đào tạo sẽ làm khả năng làm việc đạt đến một
trạng thái hiệu quả hơn
Với đối tượng, việc xác định trạng thái của nó cũng như việc xác định tập
các thao tác làm thay đổi trạng thái của nó là những bài toán cơ bản quan
trọng
Trong trí tuệ nhân tạo chúng ta sẽ biểu diễn vấn đề bằng các cấu trúc rời rạc như ma trận, đồ thị, … Qua đó mà vấn đề được chuyển thành những bài toán cụ thể Trong chương này, chúng ta tìm cách đưa vấn đề về bài toán tìm kiếm trong không gian trạng thái Cấu trúc đồ thị được dùng và bài toán là tìm đường đi ngắn nhất Chúng ta sẽ xây dựng các cây tìm kiếm và trong nhiều trường hợp cây này là loại cây AND/OR
Định nghĩa 2.1
Trạng thái là một biểu diễn của vấn đề Phép biến đổi chuyển vấn đề từ
trạng thái này sang trạng thái khác Tập các trạng thái cùng với các phép
biến đổi trên chúng tạo thành không gian trạng thái
Trang 21Ví dụ 2.1
Một vấn đề thực tế nào đó có thể đưa về việc giải phương trình sau
5x2 – 4x – 9 = 0 Thực hiện các phép biến đổi tương đương
5x2 – 4x – 9 = 0
⇔ 5x2 – 4x – (5 + 4) = 0
⇔ 5x2 – 4x – 5 – 4 = 0 …
⇔ (x+1) (5x – 9) = 0
Với biểu diễn sau cùng này xem như vấn đề đã được giải quyết
Khi không gian trạng thái là hữu hạn chúng ta có thể mô hình nó bởi các cấu trúc rời rạc như ma trận, đồ thị, …
Ví dụ 2.2
Trong trò chơi Puzzle 8 số có thể xem một cách sắp xếp 9 số từ 0 đến 8 trong bảng 3×3 là một trạng thái Mỗi thao tác dịch chuyển đúng luật (đổi chỗ số 0 và một số kề với nó) là một phép biến đổi
∫ x2 +1e x dx
Trang 22… ∫x2e x dx ∫e x dx
1.2 Tìm kiếm trên không gian trạng thái
Không gian trạng thái tự nó không có cơ chế tìm kiếm Tập các thao tác
giúp chúng ta xây dựng một không gian tìm kiếm, nghĩa là trang bị một
cấu trúc cho không gian trạng thái
Tuy nhiên, không gian tìm kiếm thường là rất lớn, do đó chúng ta sẽ phát
triển một cây tìm kiếm cho đến khi tìm thấy lời giải cho bài toán
(a) Bài toán tìm đường đi
Trang 23tìm thấy đường đi ngắn nhất là a → b → d → e (là đường nét đôi) với tổng
khoảng cách bằng 6
Ở đây mỗi nút lá xác định một đường đi, các số gắn với nút lá cho biết
khoảng cách của đường đi tương ứng Theo đó chúng ta có tất cả 9 đường đi
(tập phương án) và một đường đi ngắn nhất (phương án tối ưu)
(b) Bài toán tìm cây lời giải
Ví dụ 2.5
Cho tam giác ABC, biết đường cao ha và hai góc A, C Hãy tính cạnh c dựa
vào các công thức A + B + C = π, ha = csinB, hb = csinA và hc = asinB
Giải: Chúng ta sẽ không xây dựng trực tiếp đồ thị mà chỉ mô tả các đồ thị
con; qua đó sẽ xây dựng cây tìm kiếm
Trang 24và tìm thấy cây lời giải tối ưu có chiều cao thấp nhất Khác với cây thông
thường, mỗi nút lá của cây AND/OR không xác định được cây lời giải
2 Các nguyên lý tìm kiếm
2.1 Các nguyên lý cơ bản
(a) Nguyên lý mê cung
Một đỉnh không được phép xuất hiện 2 lần trên một đường đi Nguyên lý
này nhằm bảo đảm không xuất hiện chu trình trong quá trình tìm kiếm
(b) Nguyên lý vét cạn (nguyên lý Edison)
Không được loại bỏ bất kỳ một đường đi nào Nguyên lý này nhằm bảo
đảm luôn tìm thấy lời giải nếu nó tồn tại
(c) Nguyên lý quay lui
Nguyên lý này nhằm bảo đảm cho nguyên lý vét cạn vì trong quá trình
tìm kiếm chúng ta chỉ có thể xem xét từng đỉnh một Khi ấy quá trình tìm
kiếm giống như quá trình duyệt cây và nhất thiết phải biết quay lui
Trang 25Ví dụ 2.7
Khi xây dựng cây tìm kiếm: ở ví dụ 4 chúng ta đã dùng nguyên lý mê cung
và nguyên lý vét cạn; ở ví dụ 6 chúng ta đã dùng nguyên lý vét cạn; còn ở
ví dụ 5 chúng ta đã dùng nguyên lý quay lui
Việc lựa chọn một trình tự để phát triển cây là hết sức quan trọng, ngoài
ra cần phải loại bỏ những đỉnh mà việc xét nó là không cần thiết Thuật
toán Dijkstra là một minh họa cho điều này Nó chỉ giữ lại những đỉnh cần
thiết và ưu tiên xét các đỉnh có tổng khoảng cách bé nhất
c (5) e5
(6)
Ở đây, đường đứt nét là nhánh bị tỉa và chỉ số trên là thứ tự mở rộng cây
2.2 Các nguyên lý thử sai
Các hình minh họa sau đây đều sử dụng bài toán cho ở ví dụ 4 Cây tìm
kiếm được phát triển theo nguyên lý mê cung và nguyên lý quay lui (và do
đó nguyên lý vét cạn, xảy ra trong trường hợp xấu nhất khi bài toán
không có lời giải hoặc khi phải vét cạn cây tìm kiếm mới thấy lời giải)
(a) Nguyên lý lựa chọn theo chiều sâu
a1
Trang 26(c) Nguyên lý lựa chọn sâu dần
Chiều sâu tối đa là 3, trước khi duyệt theo chiều rộng
(d) Nguyên lý ngẫu nhiên
Nhằm tránh phải xử lý một số lượng quá lớn các trạng thái, đỉnh sẽ được
chọn một cách ngẫu nhiên Cách chọn ngẫu nhiên tuỳ thuộc vào một số
điều kiện cụ thể của bài toán
Trang 272.3 Các nguyên lý heuristic
Thuật giải là khái niệm mở rộng của thuật toán Nó được mở rộng dựa
trên việc mở rộng hai đặc trưng của thuật toán là tính xác định và tính
đúng
Trong số các thuật giải thì thuật giải heuristic cho phép tìm lời giải dễ
dàng và nhanh chóng, thường thì nó tìm ra được lời giải tốt (nhưng không
chắc là tốt nhất, tuy nhiên cách thể hiện của nó lại rất tự nhiên và gần
gũi với cách suy nghĩ và hành động của con người)
Định nghĩa 2.2
Heuristic là những thông tin giúp việc định hướng tập trung xung quanh
đường đi tối ưu Hàm heuristic là những hàm đánh giá giúp việc lựa chọn
hướng đến đường đi tối ưu
(a) Nguyên lý tối ưu cục bộ (nguyên lý greedy)
Lấy tiêu chuẩn tối ưu toàn cục làm tiêu chuẩn chọn lựa trong phạm vi cục
Trang 28(9)
(b) Nguyên lý hướng đích
So sánh trạng thái hiện tại đang xem xét với trạng thái cần đạt đến làm tiêu chuẩn lựa chọn
Trang 29(c) Nguyên lý nhánh cận
Phân hoạch không gian trạng thái Với mỗi lớp tương đương, dùng một ước
lượng so sánh với một ngưỡng cho trước để quyết định có loại bỏ hay
không Nhờ đó chúng ta có thể tỉa nhánh hiệu quả, chỉ giữ những trạng
thái cho phép dẫn đến lời giải tốt nhất
Ví dụ 2.11
Khi xây dựng cây tìm kiếm, có thể xem tại mỗi bước phát triển là một
bước phân hoạch mịn hơn Vẫn dùng ví dụ 4, để ý chiều dài ngắn nhất của
một cạnh nối với e là 3, bổ sung nhận xét này vào tổng khoảng cách ta có
một đánh giá và nhờ đó phát triển cây tìm kiếm như sau:
Kết quả tìm được đường đi ngắn nhất nhanh hơn nhiều so với thuật toán
Dijsktra Những nhát cắt này sẽ rất hiệu quả khi làm việc trên một không
gian tìm kiếm rộng lớn
(d) Nguyên lý sắp thứ tự
Sắp xếp không gian trạng thái theo một cấu trúc hợp lý
Ví dụ 2.12
Một sắp xếp hợp lý có thể tìm được đường đi ngắn nhất chỉ với thủ tục tìm
kiếm theo chiều sâu đơn giản
Trang 30a
d c e
e (6) c
2.4 Cài đặt các nguyên lý
Quan sát quá trình phát triển cây tìm kiếm ta thấy vấn đề nằm ở chỗ
1 Thứ tự tháo các đỉnh tức là quản lý được các nút lá
2 Trường hợp nếu yêu cầu mỗi đỉnh xuất hiện trên cây không quá 1 lần
ta cần quản lý các đỉnh không là lá
3 Phải có cơ chế kiểm tra sự xuất hiện chu trình
Chúng ta sẽ giao nhiệm vụ quản lý các nút lá cho một đối tượng được gọi
là open; quản lý các nút không phải nút lá cho một đối tượng được gọi là
close Đồng thời mỗi đỉnh trên cây phải tham chiếu được đến đỉnh cha của
nó Đối tượng open có vai trò chủ yếu trong việc chọn đỉnh tiếp theo đồng
thời phối hợp với close và đỉnh hiện tại để quyết định có lưu trạng thái
mới hay không
Thông qua open và close ta cài đặt các nguyên lý tìm kiếm như sau:
Các nguyên lý cơ bản
1 Nguyên lý quay lui và nguyên lý vét cạn: open phải lưu tất cả các khả
năng khi tháo một nút;
2 Nguyên lý mê cung: open phải lần theo các tham chiếu để bảo đảm các
đỉnh mới không làm xuất hiện chu trình;
Các nguyên lý thử sai
3 Nguyên lý lựa chọn theo chiều sâu: open hành xử như một ngăn xếp;
4 Nguyên lý lựa chọn theo chiều rộng: open hành xử như một hàng đợi;
5 Nguyên lý lựa chọn sâu dần: open hành xử như ngăn xếp hoặc hàng đợi
Trang 31phụ thuộc vào chiều sâu đã đạt mức giới hạn hay chưa;
6 Nguyên lý ngẫu nhiên: open được trang bị một cơ chế chọn ngẫu nhiên;
Các nguyên lý heuristic
7 Nguyên lý greedy: open hành xử như một ngăn xếp và các nút phát
sinh khi tháo một đỉnh phải được sắp xếp (tức là phải được xử lý qua một hàng đợi ưu tiên);
8 Nguyên lý hướng đích: hệ được trang bị một thủ tục so sánh cho phép
đánh giá sự gần nhau giữa các trạng thái;
9 Nguyên lý nhánh cận: hệ được trang bị một thủ tục đánh giá; close được
trang bị thủ tục và open hành xử như một hàng đợi ưu tiên;
10 Nguyên lý thứ tự: open được trang bị một thủ tục sắp xếp phù hợp
3 Aùp dụng
3.1 Cài đặt thuật giải
Mục này chỉ đưa ra hai thuật giải: trường hợp tổng quát và một trường hợp riêng quan trọng (tìm kiếm leo đồi) Các thuật giải quan trọng khác sẽ được trình bày ở các chương sau
(a) Tổng quát
Cơ bản ta sẽ sử dụng 2 danh sách
• Danh sách mở Open, chứa các trạng thái sẽ được xem xét và
• Danh sách đóng Close, chứa các trạng thái đãõ được xem xét
Thêm một số đối tượng khác
• Trạng thái bắt đầu s
• Trạng thái kết thúc g
• Trạng thái đang xét n
• Danh sách B(n) chứa các trạng thái được biến đổi từ trạng thái n
Các bước cơ bản của các thuật toán tìm kiếm được trình bày như sau:
Trang 32Thuật giải tìm kiếm trên không gian trạng thái
Chúng ta sẽ đánh giá tính hiệu quả của mỗi thuật toán qua hai thước đo
• Tốc độ tìm thấy lời giải và
• Độ tốt của lời giải
(b) Tìm kiếm leo đồi
Cài đặt cụ thể nguyên lý greedy và nguyên lý mê cung Chúng ta coi open là một ngăn xếp; bổ sung một hàng đợi ưu tiên q; cung cấp cho đối tượng
đỉnh của cây một thao tác truy ngược exists() nhằm kiểm tra xem một
trạng thái là đã có mặt trong một đỉnh tiền bối nào đó hay không
Thuật giải 1: Tìm kiếm leo đồi
2.5 for m = q.Retrieve() do Open.Store(m)
3 return false
Trang 33chú ý sau khi tô một đỉnh ta tháo nó ra khỏi đồ thị và tính lại bậc, ngoài
ra khi chọn màu để tô không được để hai đỉnh kề nhau có cùng màu
3.2 Giải quyết vấn đề
Trước hết biểu diễn vấn đề như là bài toán tìm kiếm trong không gian trạng thái, rồi xác định xem đây là bài toán tìm đường đi hay tìm cây lời giải Sau đó áp dụng các nguyên lý tìm kiếm, phát triển cây và thực hiện tìm kiếm
Ví dụ 2.14
Có 3 tu sĩ đến thuyết giáo tại một bộ tộc ăn thịt người Họ gặp 3 thổ dân thuộc bộ tộc này tại bờ một con sông Taị đó chỉ có một chiếc thuyền nhỏ chở tối đa được 2 người Tất cả đều muốn sang sông Hãy tìm một giải
Trang 34pháp đưa cả 3 tu sĩ và 3 kẻ ăn thịt người cùng qua sông được an toàn, biết rằng nếu số lượng những kẻ ăn thịt người nhiều hơn số tu sĩ, chúng sẽ ăn thịt họ
Giải:
Bước 1: biểu diễn
1 Ký hiệu (a, b, t) nghĩa là ở bờ bên này có a tu sĩ, b thổ dân và t cho biết có thuyền hay không
2 Thao tác hợp lệ chuyển (a, b, k) → (a’, b’, 1 – k) là thao tác thỏa:
a’ + b’ nhiều hơn a + b từ 1 đến 2 nếu k = 0 a’ + b’ ít hơn a + b từ 1 đến 2 nếu k = 1 b’ = a’ nếu a’ bằng 1 hoặc 2
Minh họa một trường hợp:
(2, 2, 0)
Và bài toán là tìm đường đi từ (3, 3, 1) đến (0, 0, 0)
Bước 2: Phát triển cây tìm kiếm theo chiều sâu có sử dụng các nguyên lý
cơ bản và nguyên lý nhánh cận
Trang 351 Tìm theo chiều sâu
2 Tìm theo chiều rộng
3 Tìm sâu dần với chiều sâu tối đa là 3
4 Tìm đường đi ngắn nhất bằng vét cạn
5 Tìm đường đi ngắn nhất bằng Dijkstra
6 Tìm đường đi ngắn nhất dùng nguyên lý nhánh cận với nhận xét khoảng cách nhỏ nhất của các cung nối với L là 10 đơn vị khoảng cách
7 Tìm đường đi ngắn nhất bằng cách loại bỏ những nhánh không chứa lời giải tối ưu (nguyên lý vét cạn thông minh)
8 Tìm đường đi ngắn nhất dùng nguyên lý hướng đích và nguyên lý tham
Trang 36lam với hàm heuristic h(n) đánh giá khoảng cách từ n đến L như sau:
ONE đặt giá trị của thanh ghi là 1
DOUBLE nhân đôi nội dung thanh ghi
ADD cộng 1 vào nội dung thanh ghi
SUB trừ 1 khỏi nội dung thanh ghi
DIV chia giá trị của thanh ghi cho 3
Bốn chỉ thị đầu áp dụng khi giá trị của thanh ghi không chia hết cho 3, chỉ thị DIV áp dụng khi giá trị của thanh ghi chia hết cho 3 Giả sử nội dung của thanh ghi là 4, làm thế nào đặt 9 vào nội dung thanh ghi? Dùng bất kỳ một giải thuật nào đã học thực hiện công việc trên (hướng dẫn : dùng
thuật giải tìm kiếm)
Bài tập 2.5
Dùng hai đồng hồ cát, trong đó một chiếc đo 4 giây và chiếc còn lại đo 7 giây Chỉ ra cách đo khoảng thời gian 9 giây Yêu cầu phát biểu luật, bài toán và trình bày cách giải quyết
Bài tập 2.6
Cho mê cung (hình) Bài toán là tìm đường đi từ A đến Z
Trang 371 Mô tả trạng thái (sự kiện), phép biến đổi (luật);
2 Xây dựng cây tìm kiếm giải bài toán trên
Trang 38Chương 3
Tìm kiếm với heuristic
Trong chương trước ta đã dùng open để cài đặt các nguyên lý tìm kiếm
Vai trò chủ yếu và quan trọng của open là chọn đỉnh tiếp theo trong quá
trình tìm kiếm Với bài toán tìm đường đi, mỗi đỉnh mà open lưu giữ chính là một lời giải đi qua đỉnh này; do đó open đủ sức hoàn thành nhiệm vụ khi mà nó quản lý được toàn bộ các lời giải Tuy nhiên với bài toán tìm cây lời giải, mỗi đỉnh mà open lưu giữ không thể xác định được lời giải đi qua đỉnh này; cho nên open phải phối hợp với đỉnh gốc của cây tìm kiếm mới có thể xác định được toàn bộ các cây lời giải
Chương này giới thiệu lớp thuật giải hiệu quả áp dụng các nguyên lý heuristic bằng cách xây dựng một hàm heuristic đánh giá trạng thái đang xét với trạng thái cần đạt đến (nguyên lý hướng đích) Chúng được cài đặt trên hai cấu trúc cây, cây của lý thuyết đồ thị và cây AND/OR, tuỳ theo từng loại bài toán, tìm đường đi ngắn nhất hay tìm cây lời giải tối ưu
1 Khái niệm
Một lời giải tối ưu làm cực tiểu (cực đại) một hàm mục tiêu nào đó Giả sử tồn tại lời giải tối ưu Gọi f là giá trị cực tiểu đạt được tại lời giải tối ưu này và f(n) là giá trị của lời giải tốt nhất có chứa đỉnh n Những thông tin
ta có được trong quá trình tìm kiếm đến đỉnh n chưa cho phép chúng ta xác định được f(n); chúng ta cần có thêm những thông tin về mối liên quan giữa n và đích đến Những thông tin này có được từ các ước lượng hợp lý, từ những tri thức trước đó cũng như những kinh nghiệm sẵn có của các chuyên gia Để làm rõ tiếp cận này ta xét bài toán tìm đường đi ngắn từ a đến z trên đồ thị G
Định nghĩa 3.1
Xét đỉnh n trên G sao cho có đường đi từ a đến z thông qua n, định nghĩa:
1 g(n) là độ dài đường đi ngắn nhất từ a đến n
Trang 392 h(n) là độ dài đường đi ngắn nhất từ n đến z
Khi ấy f(n) = g(n) + h(n) là độ đường đi ngắn nhất từ a đến z có đi qua n
Hơn nữa f = f(a) = h(a) = g(z) Thuật toán Dijkstra tìm cách tính g(n) cho
đến khi tính được g(z) và kết luận tìm được đường đi tối ưu Một ước lượng
h ≤ h giúp sử dụng nguyên lý nhánh cận trong tìm kiếm với tốc độ rất
Trang 403 Với hÂ3 = 4, ta không có hÂ3(n) ≤ h(n), nên không thể áp dụng nguyên lý
nhánh cận (trừ phi muốn xây dựng một thuật giải thay vì thuật toán)
2 Thuật giải A*
Tiếp cận này áp dụng cho bài toán tìm đường đi ngắn nhất trên đồ thị
Một cách chính xác đây là một lớp các thuật giải phụ thuộc vào ước lượng
h của hàm heuristic h Độ tốt của lời giải tùy thuộc vào độ chính xác của
ước lượng
Thuật giải A* dùng hàm f  = g + h làm ước lượng cho hàm tổng khoảng
cách f Nó dùng f Âlàm tiêu chuẩn lựa chọn Cụ thể, chiến lược của nó là ưu
tiên chọn đỉnh có f  bé
Thuật giải được trình bày sau đây có cài đặt cơ chế tỉa nhánh
Thuật giải 2: Thuật giải A*
1 Đặt nút bắt đầu vào Open
2 Trong lúc Open khác rỗng thực hiện
2.1 Chọn nút n trong Open có f  bé nhất, lấy nó ra
2.2 Nếu n là đích thì kết thúc thành công
2.3 Đặt n vào Close
2.4 Với mỗi n’ con của n
2.4.1 Tính f  cho n’
2.4.2 Nếu n’ chưa có trong Open cũng như Close thì đặt nó vào