Chương V ĐIỀU KHIỂN VÀ CÀI ĐẶT TÌM KIẾM TRONG KHÔNG GIAN TRẠNG THÁI Nội dung chính: Trong chương này, các kỹ thuật sâu hơn cho việc cài đặt các thuật toán tìm kiếm sẽ được trình bày một
Trang 1Chương V
ĐIỀU KHIỂN VÀ CÀI ĐẶT TÌM KIẾM TRONG KHÔNG GIAN TRẠNG THÁI
Nội dung chính: Trong chương này, các kỹ thuật sâu hơn cho việc cài đặt các thuật toán
tìm kiếm sẽ được trình bày một cách chi tiết Trước hết là tìm kiếm đệ quy (recursive search)
– một phương pháp thực hiện tìm kiếm sâu kèm theo lần ngược với cách thức tự nhiên và
ngắn gọn Tìm kiếm đệ quy được tăng cường nhờ sử dụng sự hợp nhất (unification) để tìm
kiếm các không gian trạng thái do các biểu thức của phép tính vị từ sinh ra Sự kết hợp này
cho ta thuật toán tìm kiếm hướng mẫu (pattern – directed search) Phần tiếp theo trong nội dung chương V giới thiệu mô hình hệ sinh (production system) – một cấu trúc tổng quát để
giải các bài toán hướng mẫu, nó được sử dụng khá nhiều không những để mô hình hóa việc giải quyết các vấn đề của con người, mà còn để xây dựng các hệ chuyên gia và những ứng dụng Trí tuệ nhân tạo khác Cuối cùng, một cách giải bài toán trí tuệ nhân tạo khác cũng
được đề cập đến – kiến trúc bảng đen (blackboard architecture)
Mục tiêu cần đạt : Sau chương này, sinh viên có thể :
¾ Vận dụng thuật toán tìm kiếm đệ quy kết hợp lần ngược trên không gian trạng thái
¾ Hiểu thuật toán hướng mẫu khi thực hiện việc tìm kiếm trong không gian trạng thái
¾ Vận dụng hệ sinh cho một bài toán
¾ Hiểu các ưu điểm của hệ sinh
¾ Hiểu các ứng dụng kiến trúc bảng đen trong GQVĐ
Kiến thức tiên quyết : Lý thuyết đồ thị, Các thuật toán tìm kiếm trên đồ thị, Lý thuyết trò chơi, …
Tài liệu tham khảo :
[1] George F Luger, William A Stubblefield – Albuquerque – Artificial Intelligence – Wesley Publishing Company, Inc – 1997 (Chapter 4)
[2] Bùi Xuân Toại – Trương Gia Việt (Biên dịch) – Trí tuệ nhân tạo – Các cấu trúc
và chiến lược giải quyết vấn đề - NXB Thống kê, 2000 (Phần II)
[3] Recursion: http://cs-people.bu.edu/dbuzan/cs112/lab5/lab5.html
[4] Blackboard Architecture: http://www.nb.net/~javadoug/bb.htm
Trang 2I TÌM KIẾM DỰA TRÊN CƠ SỞ ĐỆ QUI
I.1 Tìm kiếm đệ quy
Một chuyển đổi trực tiếp của thuật toán tìm kiếm sâu thành dạng đệ quy sẽ minh họa cho sự tương đương của đệ quy và lặp lại đơn giản Thuật toán này sử dụng các biến toàn cục closed
và open để duy trì danh sách các trạng thái:
Function Depthsearch; % open và closed toàn cục Begin
If open rỗng then trả lời (thất bại);
Trạng thái hiện hành := phần tử đầu tiên của open;
If trạng thái hiện hành là trạng thái đích
then trả lời (thành công) Else
Open := open - phần tử đầu tiên của open;
Closed := closed + trạng thái hiện hành;
For mỗi trạng thái con của trạng thái hiện hành do
If chưa có trong closed hay open % xây dựng ngăn xếp
then bổ sung con đó vào đầu danh sách open
end;
End;
Tìm kiếm sâu như vừa được trình bày sẽ không sử dụng hết sức mạnh của phép đệ quy Nó vẫn còn khả năng đơn giản hóa thủ tục bằng cách sử dụng chính phép đệ quy (thay gì một danh sách open) để sắp xếp các trạng thái trong không gian trạng thái Trong phiên bản này của thuật toán, một danh sách closed toàn cục sẽ được dùng để phát hiện các trạng thái lặp lại, còn danh sách open thì tiềm ẩn trong các mẩu tin hoạt động của môi trường đệ quy
Function Depthsearch (trạng thái hiện hành); % closed toàn cục Begin
If trạng thái hiện hành là trạng thái đích then
trả lời (thành công);
For mỗi trạng thái hiện hành có con chưa được kiểm tra do
Con := con chưa được kiểm tra kế tiếp;
If con không phải là thành viên của closed then if depthsearch (con) = thành công then trả lời (thành công);
Trả lời (thất bại);
Thay vì phát sinh tất cả các con của một trạng thái và đưa chúng vào danh sách open, thuật toán này phát sinh mỗi lần một con và tìm kiếm theo phép đệ quy các nút cháu của từng con
đó trước khi phát sinh các anh em của nó Thuật toán này sẽ gán một thứ tự cho các bước
Trang 3phát sinh trạng thái Trong tìm kiếm theo đệ quy đối với một trạng thái con, nếu có một con nào đó của trạng thái này là đích, thuật toán đệ quy sẽ trả lời thành công và bỏ qua tất cả các trạng thái anh em Ngược lại, các trạng thái anh em kế tiếp được phát sinh Cứ như vậy thuật toán sẽ tìm kiếm toàn bộ đồ thị lần lượt theo từng độ sâu một
Thuật toán đệ quy cho phép bỏ qua danh sách open trong suốt quá trình thực hiện Cơ chế
mà một ngôn ngữ lập trình sử dụng để cài đặt đệ quy là dùng mẩu tin hoạt động (activation
record) cho từng lần gọi đệ quy Quá trình lần ngược sẽ tác động khi tất cả các con cháu của một trạng thái không phải là đích, làm cho bước đệ quy đó thất bại Việc thực hiện đệ quy cho phép lập trình viên thu hẹp tầm nhìn của họ vào một trạng thái duy nhất cùng với các con của nó thay vì phải duy trì một danh sách open gồm nhiều trạng thái
Tìm kiếm trong không gian trạng thái là một quá trình đệ quy Để tìm đường đi từ trạng thái hiện hành đến đích, bạn chuyển đến một trạng thái con và thực hiện phép đệ quy Nếu trạng thái con đó không dẫn đến đích, bạn thử lần lượt các trạng thái anh em của nó Phép đệ quy
sẽ chia một bài toán lớn và khó (tìm kiếm khắp không gian) thành các bài toán nhỏ và đơn giản hơn (phát sinh các con của một trạng thái) và áp dụng chiến lược đệ quy cho từng bài toán nhỏ đó Quá trình cứ tiếp tục như vậy cho đến khi phát hiện được đích hoặc hết không gian
I.2 Tìm kiếm hướng mẫu (Pattern – directed search)
Trong phần này chúng ta sẽ áp dụng tìm kiếm đệ quy vào không gian các suy diễn logic, kết quả sẽ là một thủ tục tìm kiếm tổng quát dùng cho phép tính vị từ
Giả sử cần phải viết một thuật toán để xác định xem một biểu thức phép tính vị từ cho trước
có phải là kết quả logic của môt tập các khẳng định nào đó hay không Thuật toán này phải tìm một trình tự suy diễn tạo nên biểu thức đích Thuật toán sẽ đề nghị một tìm kiếm hướng mục tiêu với câu hỏi ban đầu tạo nên đích và các modus ponens xác định các chuyển tiếp giữa các trạng thái Cho trước một đích, thuật toán sẽ dùng phương pháp đồng nhất để chọn các phép kéo theo có kết luận phù hợp với đích đó Sau khi đồng nhất đích với kết luận của phép kéo theo và đã áp dụng các thay thế vừa suy ra được, tiền đề của phép kéo theo sẽ trở
thành một đích mới gọi là đích phụ (subgoal) Sau đó thuật toán sẽ thực hiện đệ quy đối với
đích phụ này Nếu đích phụ phù hợp với một sự kiện trong cơ sở tri thức, cuộc tìm kiếm kết thúc Chuỗi suy diễn dẫn từ đích ban đầu đến các sự kiện cho trước sẽ chứng minh đích xuất phát là đúng
Phiên bản hoàn chỉnh của thuật toán tìm kiếm hướng mẫu có thể trả lời một tập các đồng nhất thỏa mãn từng đích phụ là:
Trang 4Function pattern_search(current_goal);
Begin
If current_goal ∈ closed then return fail
else Thêm current_goal vào closed;
while còn dữ kiện hoặc luật đồng nhất do
begin case
current_goal đồng nhất với dữ kiện:
return tập phép thế;
current goal là ¬p:
pattern_search(p);
if pattern_search thất bại then return {}
else return fail
current_goal đồng nhất với kết luận của luật (q → p):
begin
áp dụng phép thế đồng nhất mục tiêu vào tiền đề (q);
pattern_search (q);
if pattern_search thành công
then return hợp của tập phép thế của p và q;
else return fail;
end;
current_goal có dạng (p1∧ p2 …):
for mỗi thành phần pi do begin
pattern_search(p i );
if pattern_search thất bại then return fail;
else áp dụng các phép thế vào các pi còn lại;
end;
if pattern_search thành công cho tất cả các pi
then return hợp của các tập phép thế;
else return fail;
end;
current_goal có dạng (p1∨ p2…):
repeat cho mỗi pi
pattern_search(p i );
until không còn thành phần pi nào hoặc thành công;
if pattern_search thành công then return {phép thế};
else return fail;
end;
return fail;
End;
Trang 5II HỆ THỐNG LUẬT SINH (HỆ SINH –
PRODUCTION SYSTEM)
II.1 Định nghĩa hệ sinh
Hệ sinh là một mô hình tính toán quan trọng trong trí tuệ nhân tạo về cả hai mặt: thực hiện các thuật toán tìm kiếm và mô hình hóa việc giải các bài toán của con người
Một hệ sinh được định nghĩa bởi:
1 Tập luật sinh (Production rules): Mỗi luật sinh có dạng condition → action (điều
kiện → hành động) Phần điều kiện của luật là một mẫu cho biết khi nào thì có thể áp
dụng luật Phần hành động quy định các bước giải toán tương ứng điều kiện
2 Bộ nhớ làm việc (Working memory): Chứa một mô tả về trạng thái hiện thời của
bài toán trong quá trình suy luận Mô tả này là một mẫu sẽ được đối sánh với phần điều kiện của một luật sinh để chọn ra bước giải thích hợp Khi phần điều kiện của luật phù hợp với nội dung trong bộ nhớ làm việc, hành động phát sinh từ điều kiện đó
sẽ được thực hiện làm thay đổi nội dung bộ nhớ làm việc
3 Chu trình nhận dạng - hành động (Recognize – act cycle) : Là cấu trúc điều khiển
của hệ sinh
Cấu trúc điều khiển của một hệ sinh khá đơn giản: Bộ nhớ làm việc được khởi đầu với mô tả của bài toán Trạng thái hiện hành của việc giải bài toán được duy trì dưới dạng một tập các mẫu trong bộ nhớ làm việc Các mẫu này được đối sánh với phần điều kiện của các luật sinh,
các luật có điều kiện phù hợp với mẫu trong bộ nhớ làm việc được gọi là tập luật tranh chấp
(conflict set) Sau đó một trong các luật sinh này sẽ được chọn và được kích hoạt Để kích hoạt một luật, phần hành động của nó được thục hiện và làm thay đổi nội dung bộ nhớ làm việc Chu trình điều khiển sẽ lặp lại với nội dung đã được thay đổi trong bộ nhớ làm việc Quá trình này kết thúc khi nội dung của bộ nhớ làm việc không còn phù hợp với điều kiện của luật nào nữa
Một quá trình giải quyết tranh chấp (conflict resolution) sẽ chọn một luật từ tập luật tranh
chấp để kích hoạt Chiến lược giải quyết tranh chấp có thể rất đơn giản như chọn luật đầu tiên có điều kiện phù hợp hoặc có thể dựa vào các heuristic chọn luật phức tạp Đây là một khâu quan trọng để các hệ sinh có thể đưa khả năng điều khiển heuristic vào một thuật toán tìm kiếm
Một sơ đồ của hệ sinh được mô tả như hình sau:
Trang 6Tập luật sinh (production rules)
Bộ nhớ làm việc (Working memory ) ĐỐI SÁNH
Tập luật tranh chấp (Conflict Set)
GIẢI QUYẾT TRANH CHẤP
THỰC THI luật kích họat (rule fired)
Chu trình nhận dạng – hành động
Thay đổi
Hình 5.1 – Cấu trúc hệ sinh
Thí dụ 5.1: Một chương trình hệ sinh đơn giản dùng để sắp xếp một dãy các chữ cái a,b,c
theo thứ tự từ điển Trong ví dụ này, một luật sinh sẽ được áp dụng nếu điều kiện của nó phù hợp với một phần của dãy chữ cái trong bộ nhớ làm việc Khi một luật được kích hoạt, phần dãy phù hợp với điều kiện luật này được thay thế bởi dãy ở phần hành động của luật đó
Tập luật sinh
Bước Bộ nhớ làm việc Tập luật
tranh chấp
Luật kích hoạt
Dừng
Hình 5.2 – Các bước thực hiện của một hệ sinh đơn giản
Trang 7II.2 Một số ví dụ về hệ sinh
Thí dụ 5.2: Bài toán trò đố 8 ô
Không gian tìm kiếm do trò đố 8 ô sinh ra vừa đủ phức tạp để khảo sát và cũng vừa đủ nhỏ
để có thể theo dõi, cho nên ta thường hay sử dụng nó để minh họa cho các chiến lược tìm kiếm khác nhau như tìm kiếm sâu, tìm kiếm rộng, cũng như các chiến lược tìm kiếm heuristic Nó cũng thích hợp với việc giải bằng hệ sinh Các nước đi hợp lệ được trình bày như các luật trong hình Trong trường hợp trạng thái bắt đầu và trạng thái đích của trò chơi được xác định, chúng ta có khả năng áp dụng một hệ sinh cho không gian tìm kiếm của bài toán
Trạng thái
bắt đầu:
Trạng thái kết thúc:
Trạng thái kết thúc trong bộ nhớ làm việc → Dừng
Ô trống không ở cạnh trái → Chuyển ô trống sang trái
Tập luật sinh:
Ô trống không ở cạnh đỉnh → Chuyển ô trống lên
Ô trống không ở cạnh phải → Chuyển ô trống sang phải
Ô trống không ở cạnh đái → Chuyển ô trống xuống
Bộ nhớ làm việc chứa trạnh thái bắt đầu và trạng thái kết thúc
Cơ chế kiểm soát
1 Thử mỗi luật sinh theo thứ tự
2 Không cho phép vòng lập
3 Dừng khi tìm thấy trạng thái kết thúc
Hình 5.3 – Trò đố 8 ô dưới dạng một hệ sinh
Thí dụ 5.3: Bài toán đường đi quân mã (Knight’s tour problem)
Bài toán đường đi quân mã trên bàn cờ vua cũng có thể được giải bằng cách sử dụng hệ sinh Mỗi nước đi sẽ được biểu diễn bằng một luật mà phần điều kiện của nó là vị trí của quân cờ tại một ô và phần hành động của nó là vị trí hợp lệ sau khi di chuyển quân cờ Mười sáu luật sinh sẽ biểu diễn cho tất cả các nước đi hợp lệ của quân cờ Khởi đầu, bộ nhớ làm việc chứa trạng thái bàn cờ hiện tại và trạng thái đích Vòng lặp điều khiển sẽ áp dụng các luật cho đến khi trạng thái hiện tại giống trạng thái đích rồi dừng lại Một chiến lược giải quyết tranh chấp
sẽ kích hoạt luật đầu tiên và không tạo vòng lặp Vì quá trình tìm kiếm có thể dẫn đến những kết thúc chết nên chu trình điều khiển cho phép lần ngược
Trang 8Hình 5.4 – Giải pháp hệ sinh cho bài toán đường đi quân mã
Bước
Bộ nhớ làm việc
Ô hiện thời Ô đi đến
Tập luật tranh chấp
Dừng
Luật kích hoạt
Các bước đi hợp lệ của
quân mã
9
8
7
6
5
4
3
2
1
Đánh số các ô trong
Di chuyển đến ô 2 Quân mã ở ô 9
15
Di chuyển đến ô 1 Quân mã ở ô 8
14
Di chuyển đến ô 9 Quân mã ở ô 4
7
Di chuyển đến ô 3 Quân mã ở ô 4
8
Di chuyển đến ô 1 Quân mã ở ô 6
9
Di chuyển đến ô 7 Quân mã ở ô 6
10
Di chuyển đến ô 2 Quân mã ở ô 7
11
Di chuyển đến ô 6 Quân mã ở ô 7
12
Di chuyển đến ô 3 Quân mã ở ô 8
13
Di chuyển đến ô 9 Quân mã ở ô 2
3
Di chuyển đến ô 6 Quân mã ở ô 1
2
Di chuyển đến ô 8 Quân mã ở ô 1
1
Di chuyển đến ô 7 Quân mã ở ô 2
4
Di chu
ỘNG
yển đến ô 8 Quân mã ở ô 3
6
Di chu Quân mã ở ô 3
Trang 9II.3 Điều khiển tìm kiếm trong các hệ sinh
Mô hình hệ sinh cho chúng ta có nhiều cơ hội để bổ sung điều khiển heuristic cho một thuật toán tìm kiếm Những cơ hội đó có thể áp dụng khi chọn chiến lược tìm kiếm hướng dữ liệu hay tìm kiếm hướng mục tiêu, trong cấu trúc các luật hoặc khi chọn chiến lược giải quyết tranh chấp
II.3.1 Điều khiển chọn chiến lược tìm kiếm hướng dữ liệu (suy diễn tiến) hay
tìm kiếm hướng mục tiêu (suy diễn lùi)
Tìm kiếm hướng dữ liệu bắt đầu với một mô tả bài toán (như một tập các tiền đề logic, các triệu chứng của người bệnh, hay một khối dữ liệu cần suy diễn ) rồi suy ra các kiến thức mới từ dữ liệu đó Quá trình này được thực hiện bằng cách áp dụng các luật suy diễn, các nước đi hợp lệ trong một trò chơi hoặc các thao tác sinh ra trạng thái khác vào mô tả hiện hành của bài toán, đồng thời đưa thêm các kết quả vào mô tả bài toán Quá trình này tiếp tục cho đến khi tiếp cận một mục tiêu
Tập luật sinh Quá trình thực hiện
Bước Bộ nhớ làm việc Tập luật
tranh chấp
Luật kích họat
Dừng
Không gian suy diễn
Hướng suy diễ n
Hình 5.5 – Tìm kiếm hướng dữ liệu trong một hệ sinh
Mô tả của quá trình suy luận hướng mục tiêu này nhấn mạnh sự gần giống của nó với mô hình hệ sinh của việc tính toán Trạng thái hiện tại của bài toán được đưa vào bộ nhớ làm việc Chu trình nhận dạng – hành động sẽ đối sánh trạng thái hiện tại với tập luật sinh (theo thứ tự) Khi các dữ liệu này phù hợp với phần điều kiện của một trong các luật sinh đó, phần hành động của luật sinh sẽ bổ sung thêm (bằng cách thay đổi bộ nhớ làm việc) một thông tin mới vào trạng thái hiện tại của bài toán
Trang 10Vì tất cả các luật sinh đều có dạng CODITION→ ACTION Khi CONDITION phù hợp với một số phần nào đó trong bộ nhớ làm việc, ACTION sẽ được thực hiện
Hình trên trình bày quá trình tìm kiếm hướng dữ liệu đơn giản dựa vào một tập các luật sinh được biểu diễn dưới dạng phép kéo theo của phép tính mệnh đề Chiến lược giải quyết tranh chấp đơn giản là chọn luật vừa mới được kích hoạt Theo ràng buộc này, luật đầu tiên sẽ được chọn Quá trình thực hiện sẽ dừng lại khi tiếp cận một mục tiêu Hình này cũng giới thiệu trình tự các luật kích hoạt và trạng thái bộ nhớ làm việc trong quá trình thực hiện cùng với đồ thị của không gian tìm kiếm
Ta cũng có thể áp dụng tìm kiếm hướng mục tiêu trong các hệ sinh Để thực hiện điều này, mục tiêu được đưa vào bộ nhớ làm việc và được đối sánh với phần ACTION của các luật sinh (bằng phép hợp nhất chẳng hạn) và phần CODITION cuả luật sẽ được bổ sung vào bộ nhớ làm việc và trở thành các mục tiêu mới của quá trình tìm kiếm Quá trình này cứ tiếp tục cho đến khi một sự kiện được tìm thấy, thường là trong mô tả ban đầu của bài toán Quá trình tìm kiếm sẽ dừng lại khi các CODITION của tất cả các luật sinh được kích hoạt đều là đúng Hình sau là một ví dụ về suy luận hướng mục tiêu Cần chú ý rằng ta sẽ dừng lại khi các CODITION của tất cả các luật sinh được kích hoạt đều là đúng Tìm kiếm hướng mục tiêu sẽ kích hoạt loạt luật sinh khác và tiến hành quá trình tìm kiếm trên không gian khác so với kiểu hướng dữ liệu
Không gian suy diễn
Hướng suy diễn
Dừng
Hình 5.6 – Tìm kiếm hướng mục tiêu trong một hệ sinh