Tải bản đầy đủ (.docx) (13 trang)

Trí tuệ nhân tạo Đề tài người lái đò

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (228.67 KB, 13 trang )

MỤC LỤC

Lời nói đầu
Trí tuệ nhân tạo là “khả năng suy luận và thực hiện các hành động” của
các thiết bị, máy móc tương tự như bộ não con người. Thuật ngữ này được dùng
để nói đến máy tính có mục đích khơng nhất định, ngành khoa học nghiên cứu lý
thuyết và các ứng dụng của trí tuệ nhân tạo. Đây là một ngành trọng yếu của tin
học, liên quan đến cách cư xử, sự học hỏi và khả năng thích ứng thơng minh của
máy móc. Trí tuệ nhân tạo trở thành mơn học với mục đích chính là cung cấp lời
giải cho các vấn đề của cuộc sống thực tế. Ngày nay, các ứng dụng trí tuệ nhân
tạo rất đa dạng và phong phú, áp dụng cho nhiều lĩnh vực, hiện nay đã có điều
khiển tự động, robot, các hệ dịch tư động các ngôn ngữ tự nhiên, các hệ nhân
dạng, trò chơi điện tử,…
Cùng với sự phát triển của xã hội, việc di chuyển cả về con người, hàng
hóa và thơng tin,... càng ngày càng gia tăng. Cùng với sự gia tăng đó thì u cầu
1


cực tiểu về chi phí, khoảng cách, thời gian,.. cũng trở lên quan trọng hơn. Theo
lý thuyết đồ thị đó là bài tốn tìm đường đi ngắn nhất giữa các đỉnh của 1 đồ thị.
Chẳng hạn bài tốn tìm đường đi ngắn nhất giữa các thành phố, Bài tốn tìm
tuyến xe buýt từ địa điểm này đến địa điểm kia sao cho tiết kiệm chi phí nhất,...
Bài tốn tìm đường đi ngắn nhất càng trở nên cấp thiết và quan trọng đối với cả
hiện tại và tương lai. Do sự quan trọng và cấp thiết của bài tốn tìm đường đi
ngắn nhất nên đã có nhiều nhà tốn học đã đưa ra nhiều thuật toán để giải và
được vận dụng vào để giải quyết nhiều bài toán thực tế. Trong số các thuật tốn
được đưa ra thì nhóm chúng em chọn nghiên cứu và trình bày đề tài: “Người lái
đị”.

I. Cơ sở lý thuyết
1. Tìm kiếm theo chiều rộng (Breadth First Search)


Giải thuật tìm kiếm theo chiều rộng là giải thuật tìm kiếm trong đồ thị,
trong đó việc tìm kiếm chỉ bao gồm 2 thao tác: cho trước một đỉnh của đồ thị;
thêm các đỉnh kề với đỉnh vừa cho vào danh sách có thể hướng tới tiếp theo.

Quy tắc:
2


-

Duyệt tiếp tới đỉnh liền kề mà chưa được duyệt. Đánh dấu đỉnh mà đã
được duyệt. Hiển thị đỉnh đó và đẩy vào trong một hàng đợi (queue).

-

Nếu khơng tìm thấy đỉnh liền kề, thì xóa đỉnh đầu tiên trong hàng đợi.

-

Lặp lại quy tắc 1 và quy tắc 2 cho tới khi hàng đợi là trống (empty)

2. Tìm kiếm theo chiều sâu (Depth First Search)
Giải thuật tìm kiếm theo chiều sâu cịn được gọi là giải thuật tìm kiếm ưu
tiên chiều sâu, là giải thuật duyệt hoặc tìm kiếm trên một cây hoặc một đồ thị và
sử dụng stack (ngăn xếp) để ghi nhớ đỉnh liền kề để bắt đầu việc tìm kiếm khi
khơng gặp được đỉnh liền kề trong bất kỳ vòng lặp nào.
Giải thuật tiếp tục cho tới khi gặp được đỉnh cần tìm hoặc một nút khơng có
con. Khi đó giải thuật quay lui về đỉnh vừa mới tìm kiếm ở bước trước.

Quy tắc:

-

Duyệt tiếp tới đỉnh liền kề mà chưa được duyệt. Đánh dấu đỉnh mà đã
được duyệt. Hiển thị đỉnh đó và đẩy vào trong một ngăn xếp (stack).

3


-

Nếu khơng tìm thấy đỉnh liền kề, thì lấy một đỉnh từ trong ngăn xếp
(thao tác pop up). (Giải thuật sẽ lấy tất cả các đỉnh từ trong ngăn xếp mà
khơng có các đỉnh liền kề nào).

-

Lặp lại quy tắc 1 và quy tắc 2 cho tới khi ngăn xếp là trống (empty).

3. Thuật toán quay lui (Backtracking)
Quay lui là một kĩ thuật thiết kế giải thuật dựa trên đệ quy. Ý tưởng của
quay lui là tìm lời giải từng bước, mỗi bước chọn một trong số các lựa chọn khả
dĩ và đệ quy. Người đầu tiên đề ra thuật ngữ này (backtrack) là nhà toán học
người Mỹ D.H. Lehmer vào những năm 1950.
Tư tưởng: Dùng để giải bài toán liệt kê các cấu hình. Mỗi cấu hình được
xây dựng bằng từng phần tử. Mỗi phần tử lại được chọn bằng cách thử tất cả các
khả năng.
Các bước trong việc liệt kê cấu hình dạng X[1…n]:
- Xét tất cả các giá trị X[1] có thể nhận, thử X[1] nhận các giá trị đó. Với
mỗi giá trị của X[1] ta sẽ:
- Xét tất cả giá trị X[2] có thể nhận, lại thử X[2] cho các giá trị đó. Với mỗi

giá trị X[2] lại xét khả năng giá trị của X[3]…tiếp tục như vậy cho tới bước:
-…
- Xét tất cả các giá trị X[n] có thể nhận, thử cho X[n] nhận lần lượt giá trị
đó.
- Thơng báo cấu hình tìm được.
Bản chất của quay lui là một quá trình tìm kiếm theo chiều sâu (DepthFirst Search)
Mơ tả thuật tốn:

4


II. Giải quyết bài toán
1. Phát biểu bài toán
Một người nơng dân muốn đi qua sơng với một con sói, một con dê và một
cái bắp cải. Ơng có một chiếc thuyền nhỏ và nó chỉ có thể chở theo ông ta cùng
một trong ba thứ (sói hoặc dê hoặc bắp cải).
Nếu để sói và dê ở lại bờ, sói sẽ ăn thịt dê. Nếu để dê với bắp cải ở lại bờ,
dê sẽ ăn bắp cải. Hãy tìm ra cách vận chuyển giúp người nơng dân có thể mang
được cả 3 qua sơng.

2. Giải quyết bài tốn
Đây là một nhiệm vụ đưa ra trạng thái ban đầu, trạng thái cuối cùng và một
5


bộ quy tắc, một nhiệm vụ sẽ bắt đầu từ trạng thái ban đầu và cố gắng đạt đến
trạng thái cuối cùng bằng cách đi qua một số trạng thái trung gian. Một tập hợp
các trạng thái liên kết với nhau như vậy có thể được biểu diễn bằng đồ thị không
gian trạng thái.
Sử dụng ‘n’, ‘b’, ‘d’, ‘s’ để lần lượt biểu thị người nông dân, bắp cải, con

dê, con sói và sử dụng ‘|’ để tách sơng nơi bên trái của dấu ‘|’ biểu thị bờ tây (bờ
trái) và bên phải của ‘|’ biểu thị bờ đông (bên phải).
Ban đầu tất cả chúng đều ở bờ tây của con sơng, được biểu thị là ‘nbds |’
như hình bên dưới. Chúng ta có thể giải câu đố bằng cách tìm ra những động
thái có thể và hợp lệ là gì, sử dụng tìm kiếm theo chiều rộng (Breadth First
Search) hoặc tìm kiếm theo chiều sâu (Depth First Search), khơng gian trạng
thái được hiển thị bên dưới.

6




Tìm kiếm theo chiều sâu (Depth First Search)

Hoặc có khả năng quay lui (Backtracking)

7




Tìm kiếm theo chiều rộng (Breadth First Search)

8


III. Cài đặt, demo chương trình
1. Cài đặt
-


Đầu vào ban đầu nơng dân, bắp cải, dê, sói là false (ở bờ trái).
printPath(): hàm pop stack đến khi stack rỗng và in ra kết quả.
step(boolean farmer, boolean wolf, boolean goat, boolean cabbage): hàm
trả về stack sau khi push,pop. Nếu nông dân, bắp cài, dê, sói là true (ở bờ

-

phải) thì gọi hàm printPath() và kết thúc chương trình.
isSafe(boolean farmer, boolean wolf, boolean goat, boolean cabbage):
hàm kiểm tra hợp lệ của các tham số đầu vào, nếu dê ở gần bắp cải mà
khơng có nơng dân và dê ở gần sói mà khơng có nơng dân hàm trả về sai

-

(return false). Ngược lại trả về đúng (return true).
Input: false, false, false, false.
Output: true, true, true, true.

Code bằng ngôn ngữ Java:

9


10


2. Kết quả

IV. Kết luận đánh giá

1. Các vấn đề gặp phải
Trong trường hợp xấu nhất độ phức tạp của quay lui vẫn là cấp số mũ. Vì
nó mắc phải các nhược điểm sau:
-

Rơi vào trình trạng “thrashing”: quá trình tìm kiếm cứ gặp phải bế tắc với cùng

-

một nguyên nhân.
Thực hiện các công việc dư thừa: Mỗi lần chúng ta quay lui, chúng ta cần phải

-

đánh giá lại lời giải trong khi đơi lúc điều đó khơng cần thiết.
Khơng sớm phát hiện được các khả năng bị bế tắc trong tương lai. Quay lui
chuẩn, khơng có cơ chế nhìn về tương lai để nhận biết được nhánh tìm kiếm sẽ
11


đi vào bế tắc.

2. Đánh giá
Việc quay lui là thử tất cả các tổ hợp để tìm được một lời giải. Thế mạnh
của phương pháp này là nhiều cài đặt tránh được việc phải thử nhiều trường hợp
chưa hoàn chỉnh.
Đây là một thuật tốn đơn giản, nhưng nó chứng tỏ rằng đơi khi bạn cần
quay lại trạng thái trước đó và đánh giá lại quyết định trước đó để giải quyết một
vấn đề.


Tài liệu tham khảo
Websites :
[1] Website : www.slideshare.net
[2] Website : www.stackoverflow.com
[3] Website : www.123docz.net
[4] Website : www.youtube.com
12


[5]Website :a/p/thuat-toan-quay-lui-backtracking-bJzKmLbD59N

13



×