1 GIẢI TOÁN BẰNG PHƯƠNG PHÁP TÌM KIẾM
1.1. Agent giải quyết bài toán
1.1.1. Mô tả
Bước đầu tiên trong việc giải quyết vấn đề là sự thiết lập mục tiêu, dựa trên ngữ cảnh hiện hành. Cùng với việc thiết lập mục tiêu, agent phải chú ý đến những nhân tố khác ảnh hưởng đến khả năng thu được mục tiêu.
Mục tiêu là tập hợp các trạng thái môi trường, mà chỉ ở những trạng thái đó mục tiêu mới được thoả mãn. Các hành động là nguyên nhân chuyển đổi giữa các trạng thái môi trường. Như vậy, rõ ràng là agent phải tìm ra những hành động đưa nó đến trạng thái mục tiêu. Nhưng trước khi làm điều này, agent phải sắp xếp lại các hành động và
các trạng thái cần xem xét, nhưng không đi vào hành động chi tiết ở mức thấp.
Theo sau bước thiết lập mục tiêu là bước xây dựng bài toán, đây là quá trình quyết định các hành động và mục tiêu nào cần xem xét.
1.1.2. Ví dụ
Ví dụ, agent muốn đi từ thành phố Arad đất nước Romania đến Bucharet bằng xe hơi. Vậy mục đích là đến Bucharet. Nhưng từ Arad ta chỉ có thể đến 3 thành phố là Sibiu, Timisoara và Zerind. Không có đường nào đến mục tiêu, và giả sử agent không quen thuộc các con đường ở Romaria. Do đó, agent không biết hành động nào là tốt nhất, nó không đủ tri thức
để biết trạng thái kết quả của mỗi hành động. Nếu không có thêm tri thức, chọn một con đường bất kỳđểđi.
Nhưng giả sử rằng agent có một bản đồ Romania, trên giấy hay trong bộ nhớ của nó. Bản đồ giúp agent biết được tình trạng có thể lâm vào nếu thực hiện hành động. Với bản đồ này, agent có thể quan sát các chuỗi trạng thái con của cuộc hành trình hoạch định qua mỗi thành phố, và tìm xem hành trình nào đến Bucharet. Với những lựa chọn chưa biết giá trị,
để biết phải làm gì, agent thử nghiệm các chuỗi hành động khác nhau đưa
đến các trạng thái đã biết giá trị, và sau đó lựa chọn chuỗi hành động tốt nhất, đây gọi là quá trình tìm kiếm.
1.1.3. Chương trình agent giải quyết bài toán đơn giảnThuật toán tìm kiếm lấy bài toán làm đầu vào và trả về giải pháp theo Thuật toán tìm kiếm lấy bài toán làm đầu vào và trả về giải pháp theo dạng chuỗi hành động. Khi một giải pháp được tìm thấy, các hành động trong đó được thực thi. Đây được gọi là quá trình thực thi. Như vậy, ta có một thiết kế đơn giản cho agent gồm 3 quá trình: thiết lập, tìm kiếm và thực thi. Thuật toán sau thể hiện agent giải quyết bài toán đơn giản. Sau
khi thiết lập mục tiêu và bài toán cần giải quyết, agent gọi hàm search để
giải bài toán. Khi giải pháp được thực thi, agent sẽ tìm mục tiêu mới.
Hai hàm CẬP NHẬT TRẠNG THÁI và THIẾT LẬP MỤC TIÊU được mô tả sau. Việc thực thi giải pháp thì dễ dàng đối với agent giải quyết bài toán đơn giản: hàm CHỌN HÀNH ĐỘNG chỉ lấy hành động đầu tiên trong chuỗi hành động, hàm HÀNH ĐỘNG CÒN LẠI trả về các hành
động còn lại
1.2. Thiết lập bài toán
Trước khi đi vào chi tiết sự thiết lập bài toán ta cần quan tâm đến những tri thức về hành động và trạng thái của agent. Những tri thức này phụ
thuộc vào mối liên hệ giữa agent và môi trường qua sự nhận thức và hành
động của nó.
functionAGENT GIẢI QUYẾT BÀI TOÁN ĐƠN GIẢN (p) trả về
hành động
inputs:p, tri thức
static:s, chuỗi hànhđộng, khởi tạo là rỗng
trạng thái, mô tảtrạng thái môi trường hiện hành
g, mục tiêu, khởiđầu là null
bài toán, sựmô tảbài toán
trạng thái– CẬP NHẬT TRẠNG THÁI(trạng thái,p)
ifsrỗngthen
g – THIẾT LẬP MỤC TIÊU(trạng thái)
bài toán– THIẾT LẬP BÀI TOÁN(trạng thái,g)
s– TÌM KIẾM(bài toán)
hành động– CHỌN HÀNH ĐỘNG(s,trạng thái)
s– HÀNH ĐỘNG CÒN LẠI(s,trạng thái)
returnhành động
Có 4 loại bài toán cơ bản khác nhau: bài toán trạng thái đơn, bài toán đa trạng thái, bài toán ngẫu nhiên và bài toán khảo sát. Mô tả cụ thể các loại bài toán được nói đến trong phần sau.
1.2.1. Các kiểu bài toán
Xét ví dụ, agent cần làm sạch môi trường. Giả sử môi trường chỉ có 2 vị
trí, mỗi vị trí có hoặc không có rác và agent có thể ở một trong hai vị trị
trí. Có 8 trạng thái có thể xảy ra. Với bài toán này, agent có 3 hành động: Qua trái, Qua phải và Nhặt. Giải sử hành động Nhặt có hiệu quả 100%. Mục tiêu là làm sạch tất cả rác. Tươngứng với trạng thái {7,8} . Hình 3.1 thể hiện bài toán này.
Hình 3.1. Bài toán agent làm sạch môi trường.
1.2.1.1. Bài toán trạng thái đơn
Đối với bài toán này, agent ở trong môi trường xác định và có thể truy cập được. Agent biết rõ mình đang ởđâu và cần làm gì. Agent tính toán
được trạng thái kết quả sau khi thực hiện chuỗi hành động. Cụ thể: Agent có bộ cảm biến và biết mìnhđangở trạng thái 5 và biết rằng sau chuỗi hành động [Qua phải,Nhặt] nó sẽ thu được trạng thái mục tiêu.
1.2.1.2. Bài toán đa trạng thái
Agent ở trong môi trường xác định nhưng không thể tiếp cận được. Agent biết mình phải làm gì nhưng không biết mình đang ở đâu. Trong môi trường này agent phải suy luận về tập trạng thái mà nó có thể gặp phải. Trường hợp này, agent không có cơ quan cảm biến. Nó chỉ biết trạng thái ban đầu là tập hợp {1,2,3,4,5,6,7,8}. Tuy tình trạng này là khó khăn, nhưng agent vẫn làm việc tốt. Agent tính được là sau khi thực thi hành
độngQua phảinó sẽở một trong các trạng thái {2,4,6,8}. Thực tế, agent có thể nhận thấy rằng chuỗi hành động [Qua phải,Nhặt,Qua trái,Nhặt]
đảm bảo tìm thấy trạng thái mục tiêu. 1.2.1.3. Bài toán ngẫu nhiên
Agent ở trong môi trường không xác định và cũng không thể truy cập
được. Để giải quyết bài toán này, agent phải tính toàn bộ cây hành động, không chỉ chuỗi hành động đơn giản. Mỗi nhánh trong cây là một trường hợp ngẫu nhiên có thể phát sinh. Môi trường tự nhiên là một bài toán ngẫu nhiên vì sự dự đoán chính xác các trạng thái trong môi trường là không khả thi. Ví dụ cụ thể của bài toán này như sau:
Giả sử agent tuân theo luật của Murphy là: hành động Nhặtđôi khi sẽ đặt rác lên tấm thảm nếu như tại đó không có rác. Ví dụ, nếu agent ở
trạng thái 4, thì sau hành động Nhặt nó sẽ ở một trong các trạng thái {2,4}.
Trong cây hành động, nếu agent đang ở một trong các vị trí {1,3}. Agent có thể đưa ra chuỗi hành động như sau [Nhặt,Qua phải,Nhặt]. Hành động Nhặt sẽ đặt agent vào một trong hai trạng thái {5,7} và hành
động Qua phải sẽ đặt vào một trong hai trạng thái {6,8}. Nếu agent ở
trạng thái 6 thì chuỗi hành động sẽ thành công, nếu ở trạng thái 8 thì kế
[Nhặt], agent ở một trong hai trạng thái {5,7} thì đôi khi kế hoạch cũng thành công, nhưng không phải lúc này cũng vậy. Đối với bài toán này, không thểđưa ra chuỗi hành động cốđịnh đảm bảo giải pháp thành công.
1.2.1.4. Bài toán khảo sát
Agent không biết không gian trạng thái của bài toán, không biết thông tin kết quả của hành động. Giống như đi từ nơi này đến nơi khác mà không có bản đồ. Đây là bài toán khó nhất đối với agent thông minh. Agent phải thử nghiệm và từ từ khám phá xem hành động của nó làm gì và sắp xếp các trạng thái đang tồn tại. Agent học bản đồ môi trường và sử dụng nó
để giải quyết bài toán.
1.2.2. Định nghĩa bài toán và giải pháp
Bài toán là tập hợp các thông tin agent sẽ dùng để quyết định xem sẽ làm gì. Những thành phần cơ bản của bài toán gồm trạng thái và hành động:
• Trạng thái ban đầu của agent.
• Tập hợp các hành động sẵn có của agent. Thuật ngữ toán tử được dùng để biểu diễn sự mô tả hành động theo trạng thái tìm kiếm bằng cách thực thi các hành động trong trạng thái cụ thể. Ví dụ, cho hàm S và trạng thái cụ thể x, S(x) trả về tập các trạng thái có thể tìm thấy từ x bởi bất cứ hành động đơn giản nào.
• Sự kiểm tra mục tiêu dùng để xác định xem trạng thái nào đó có phải là trạng thái mục tiêu không. Hay khi có tập các trạng thái mục tiêu rõ ràng, sự kiểm tra chỉ đơn giản xem agent có tìm ra một trong các trạng thái đó hay không. Nhưng đôi khi, mục tiêu được xác định bởi các thuộc tính trừu tượng, không phải tập các trạng thái được liệt kê rõ ràng.
• Hàm chi phí đường đi là hàm gán chi phí cho một con đường. Với chi phí cho một con đường là tổng chi phí của các hành động riêng rẽ dọc theo con đường. Ký hiệu của hàm chi phí đường đi làg. Với:
o Không gian trạng thái của bài toán là tập hợp tất cả các trạng thái có thể tìm thấy từ trạng thái ban đầu bởi bất kỳ chuỗi hành động nào.
o Đường đi trong không gian trạng thái là bất kỳ chuỗi hành động nào dẫn từ trạng thái này sang trạng thái khác.
o Chi phí đường đi chỉ ra giải pháp này phù hợp hơn giải pháp kia. Như vậy, trạng thái ban đầu, tập hợp các toán tử, sự kiểm tra mục tiêu và hàm chi phí đường đi định nghĩa bài toán. Ta có thể định nghĩa kiểu dữ
liệu trình bày các bài toán như sau:
Thể hiện của kiểu dữ liệu này sẽ là đầu vào cho thuật toán tìm kiếm của chúng ta. Đầu ra của thuật toán là một giải pháp, đó là đường đi từ trạng thái khởi đầu đến trạng thái thỏa mãn hàm kiểm tra mục tiêu.
1.2.3. Đo mức độ thực thi của việc giải toán 1.2.3.1. Các phương pháp đo độ thực thi Có ít nhất 3 cách đểđo tính hiệu quả của việc tìm kiếm.
a) Nó có tìm ra giải pháp trong tất cả các trường hợp hay không? b) Giải pháp tìm thấy có phải là giải pháp tốt không (chí phí đường đi
thấp)?
datatypeBÀI TOÁN
components:TRẠNG THÁI BAN ĐẦU, TẬP CÁC TOÁN TỬ, KIỂM TRA MỤC TIÊU, HÀM CHI PHÍ ĐƯỜNG ĐI
c) Chi phí tìm kiếm liên kết với thời gian và bộ nhớ yêu cầu để tìm ra giải pháp là gì?
Tổng chi phí tìm kiếm là tổng của chi phí đường đi và chi phí tìm kiếm. 1.2.3.2. Ví dụ
Ví dụ, bài toán tìm kiếm lộtrình từ Arad đến Bucharet.
− Chi phí đường đi có thể tươngứng với tổng số dặm của con đường.
− Chi phí tìm kiếm phụ thuộc vào từng tình huống. Trong môi trường tĩnh, chi phí tìm kiếm có thể bằng 0 bởi vìđộđo thực thi phụ thuộc vào thời gian. Ví dụ đi từ Arad đến Bucharet, môi trường là bán
động vì tính toán dài hơn, chi phí sẽ cao hơn. Trong trường hợp này, chi phí tìm kiếm biến đổi gần như xấp xỉ với thời gian tính toán (ít nhất là với lượng thời gian nhỏ).
Để tính tổng chi phí, ta phải cộng số dặm và mili giây. Điều này không dễ
vì ta không có tỉ lệ trao đổi chuẩn giữa hai đơn vị này. Agent phải biết cách quyết định, tài nguyên nào giành cho tìm kiếm và tài nguyên nào dành cho thực thi. Đối với những bài toán có không gian trạng thái rất nhỏ, ta dễ dàng tìm thấy những giải pháp với chi phí đường đi thấp nhất. Nhưng với không gian tìm kiếm lớn, bài toán phức tạp, rất khó khăn để
có được chi phí tốiưu cả hai mặt – agent có thể thu được giải pháp tốiưu nhưng phải tìm kiếm trong thời gian dài, hay agent có thể tìm kiếm trong thời gian ngắn và thu được giải pháp với chi phí đường đi lớn hơn.
1.2.4. Chọn trạng thái và hành động
Giả sử, xét bài toán “Lái xe từ Arad đến Bucharest sử dụng các con
đường trong bản đồ hình 3.2.” Không gian trạng thái tương ứng có 20 trạng thái, một trạng thái được định nghĩa bằng một vị trí duy nhất, xác
Hình 3.2 Bản đồđơn giản của Romaria
Bài toán được mô tả như sau:
1. trạng thái ban đầu: “ở Arad”
2. các toán tử: Arad →Zerind Arad→Sibiu
3. sự kiểm tra mục tiêu: “Đây có phải là Bucharet không?” hay x =
“at Bucharest”
4. chi phí đường đi: có thể là số dặm, cũng có thể là thời gian lưu thông. Nhưng bản đồ của chúng ta thì không xác định chúng, nên ta giả sử hàm chi phí đường đi sẽđo số bước phải đi qua.
5. giải pháp: chuỗi toán tử đi từ trạng thái ban đầu đến trạng thái mục tiêu.
Có rất nhiều giải pháp nhưng giải pháp đi qua Sibiu và Fagaras, có chi phí đường đi là 3 là giải pháp tốt nhất.
Môi trường thế giới thực rất phức tạp. Đối với cách tiếp cận giải quyết bài toán không gian trạng thái phải được mô tả trừu tượng. Đây gọi
là sự trừu tượng hoá. Quá trình này bỏ qua chi tiết của các trạng thái và hành động.
Cụ thể:
• Trạng thái trừu tượng: tập các trạng thái thực. Ví dụ: “at Arad”, “at Bucharest”. Bỏ qua các trạng thái môi trường khác như: trạm dừng kế tiếp bao xa, điều kiện đường đi, thời tiết, v.v…
• Toán tử trừu trượng: mô tả các hành động thực trong môi trượng. Ví dụ: “Arad → Zerind” bỏ qua việc đi đúng luật, tiêu thụ nhiên liệu, v.v…
• Giải pháp trừu tượng: tập các con đường trong thế giới thực. Việc thực thi những hành động trừu tượng trong giải pháp trừu tượng dễ
hơn so với bài toán gốc.
1.3. Tìm kiếm giải pháp
Việc tìm kiếm giải pháp được thực hiện bằng cách tìm qua không gian trạng thái. Ý tưởng là duy trì và mở rộng tập các chuỗi giải pháp cục bộ. Phần này trình bày cách tạo ra chuỗi giải pháp và cách lưu chúng trong những cấu trúc dữ liệu thích hợp.
1.3.1. Tạo các chuỗi hành động
Bản chất của việc tìm kiếm là: chọn một trạng thái và đặt những cái khác qua một bên cho lần sau khi lựa chọn đầu tiên này không đưa đến giải pháp. Với mỗi trạng thái được chọn, ta kiểm tra xem nó có phải là trạng thái mục tiêu không. Nếu không phải, xét tiếp những trạng thái mới được tạo ra từ trạng thái hiện hành bằng cách áp dụng các toán tử. Đây gọi là quá trình mở rộng trạng thái. Các quá trình lựa chọn, kiểm tra và mở rộng tiếp tục cho đến khi giải pháp được tìm thấy hoặc cho đến khi không còn
trạng thái nào để mở rộng nữa. Việc chọn trạng thái nào để mở rộng được xác định bởi giải pháp tìm kiếm.
Ví dụ để giải quyết bài toán từ Arad đến Bucharest, ta bắt đầu với trạng thái khởi đầu là Arad. Kiểm tra xem nó có phải là trạng thái mục tiêu không. Rõ ràng là không phải, điều này rất quan trọng để tránh gặp phải vấn đề là “bắt đầu từ Arad, đến Arad.” Vì đây không phải là trạng thái mục tiêu nên ta, nên ta phải khảo sát các trạng thái khác. Áp dụng các operator với trạng thái ở Arad, tạo ra tập các trạng thái mới “ở Sibiu”, “ở
Timisoara” và “ở Zerind”, vì có con đường trực tiếp từ Arad đến các thành phố này. Do có nhiều trạng thái để chọn, ta chọn một trạng thái và
để các trạng thái khác cho lần lựa chọn sau.
Giả sử chọn Zerind. Kiểm tra xem nó có phải là trạng thái mục tiêu không (trong trường hợp này là không), sau đó mở rộng nó “ở Arad” và “ở Oradea.” Bây giờ, có thể chọn một trong hai trạng thái, hoặc trở về
và chọn Sibiu hay Timisoara. Quá trình này tiếp tục cho đến khi tìm thấy giải pháp, Để dễ dàng cho quá trình tìm kiếm, ta xây dựng cây tìm kiếm (search tree) trong không gian trạng thái. Nút gốc của cây tìm kiếm gọi là nút tìm kiếm (search node) ứng với trạng thái ban đầu. Các nút lá
ứng với trạng thái không có kế thừa trong cây vì chúng chưa được mở
rộng, hoặc đã mở rộng rồi nhưng tạo ra tập rỗng. Ở mỗi bước thuật toán