Với quá trình phát triển của khoa học kỹ thuật và công nghệ thì ngành công nghệ thông tin đóng vai trò quan trọng trong việc giải quyết các vấn đề khó khăn trong công việc như: kế toán,
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
-BÁO CÁO MÔN TRÍ TUỆ NHÂN TẠO CHỦ ĐỀ NGHIÊN CỨU: BÀI TOÁN NGƯỜI ĐƯA THƯ Giáo viên hướng dẫn: giảng viên: Lê Thị Thủy
Lớp: KTPM01 Khóa: K14
Thành viên nhóm:
- Bùi Khôi Nguyên_2019601721
Hà Nội, năm 2022
Trang 2MỤC LỤC
MỤC LỤC 2
LỜI MỞ ĐẦU 3
Chương I: Giới thiệu đề tài 4
1 Khái niệm thuật toán Heuristic 4
2 Khái niệm về nguyên lý tham lam 4
3 Mô tả bài toán người đưa thư 5
a) Lý do chọn bài toán 5
b) Phát biểu bài toán 5
c) Cách giải bài toán 6
d) Vẽ không gian trạng thái của bài toán 6
e) Thuật toán 7
Chương II: Kết quả nghiên cứu 9
1 Yêu cầu bài toán 9
2 Cài đặt thuật toán 9
3 Kết quả 14
4 Đánh giá thuật toán 16
TÀI LIỆU THAM KHẢO 17
Trang 3LỜI MỞ ĐẦU
Ngày nay cùng với sự phát triển về khoa học và kỹ thuật là sự phát triển mạnh mẽ của nền công nghệ thông tin Trong quá trình công nghiệp hóa và hiện đại hóa đất nước thì công nghệ thông tin là không thể thiếu Cùng với nó là sự ra đời của các ngành khoa học phục vụ cho lợi ích và nhu cầu của con người Với quá trình phát triển của khoa học kỹ thuật và công nghệ thì ngành công nghệ thông tin đóng vai trò quan trọng trong việc giải quyết các vấn đề khó khăn trong công việc như: kế toán, quản lý nhân sự, điều khiển tự động hóa, …
Trên thế giới cũng như ở Việt Nam, công nghệ thông tin đã trở thành một ngày công nghiệp mũi nhọn, nó là một ngày khoa học kỹ thuật không thể thiếu trong việc áp dụng vào các hoạt động xã hội và khoa học Nền công nghiệp hiện nay mang tính chất tự động hóa cao kèm theo đó là sự đòi hỏi về việc ứng dụng công nghệ thông tin cho lĩnh vực này Vậy để có thể đáp ứng tốt những yêu cầu của ngày càng cao hơn trong lĩnh vực tự động hóa người ta đã tiến hành lập trình cho những cỗ máy, những người máy
có thể tư duy như con người nhằm giảm bớt các gánh nặng công việc Việc ứng dụng trí tuệ nhân tạo đã tạo ra một cuộc cách mạng lớn trong việc tìm hiểu
và chinh phục những điều mà con người không dám mơ tới Đó là những robot thông minh, những cỗ máy thông minh có thể thay thế con người làm việc trong những môi trường khắc nghiệt hay chinh phục không gian bao la Và bên cạnh đó là việc ứng dụng
những thành tựu đó vào lĩnh vực giải trí của con người Đó là những con vật robot, những trò chơi Đó là những ứng dụng lớn lao của trí tuệ nhân tạo vào của sống của con người.
Trong bài tập lớn này chúng em tìm hiểu thuật toán tham lam áp dụng cho bài toán người đưa thư Đây là một chương trình nhỏ có thể nó chưa được hoàn thiện nhưng quan trọng hơn đó là giúp mọi người hiểu được vai trò của việc ứng dụng trí tuệ nhân tạo trong cuộc sống Mặc dù rất cố gắng để hoàn thành công việc, xong thời gian có hạn và kiến thức còn thiếu nên nếu có sai sót chúng em mong các thầy cô bỏ qua cho chúng em ạ!
Chúng em xin cảm ơn!
Trang 4Chương I: Giới thiệu đề tài
1 Khái niệm thuật toán Heuristic
- Heuristic là nhưng tri thức rút ra từ những kinh nghiệm, trực giác của con người
- Heuristic có thể đúng hoặc sai
- Heuristic thường được sử dụng trong trường hợp:
▪ Vấn đề có thể không có nghiệm chính xác do các mệnh đề không phát biểu chặt chẽ hay thiếu dữ liệu để khẳng định kết quả
▪ Vấn đề có nghiệm chính xác nhưng chi phí tính toán để tìm nghiệm quá lớn (bùng nổ tổ hợp)
- Heuristic là mở rộng khái niệm thuật toán và có đặc điểm:
▪ Thường tìm lời giải tốt nhưng không tốt nhất
▪ Nhanh chóng tìm ra kết quả hơn so với thuật toán vì vậy chi phí thấp hơn
▪ Thường thể hiện khá tự nhiên, gần gũi với cách suy nghĩ và hành động của con người
- Heuristic dựa trên 2 nguyên lý cơ bản:
▪ Nguyên lý vét cạn thông minh
▪ Nguyên lý tham lam
2 Khái niệm về nguyên lý tham lam
Lấy tiêu chuẩn tối ưu trên phạm vi toàn cục của bài toán để làm tiêu chuẩn lựa chọn hành động cho phạm vi cục bộ của từng bước trong quá trình tìm kiếm lời giải
Trang 53 Mô tả bài toán người đưa thư
a) Lý do chọn bài toán
- Bài toán “Người đưa thư” là một bài toán hay, thực tế, nó được áp dụng rất lớn
trong thực tế để giải quyết các vấn đề phức tạp trong cuộc sống, chẳng hạn như
“Tìm kiếm lộ trình thu gom rác tối ưu trên địa bàn TP Hà Nội”,
b) Phát biểu bài toán
Bài toán: Người đưa thư phải đi đưa qua 5 thành phố, để tiết kiệm thời gian đi
đưa thư trong một địa phương Người đưa thư phải đi qua tất cả các điểm cần phát thư rồi trở về vị trí ban đầu với đường đi ngắn nhất
Chuyển bài toán về dạng toán đồ thị
Bài toán có thể phát biểu lại như sau: Giả sử có một đồ thị có trọng số dương, tìm đường đi ngắn nhất qua tất cả các đỉnh của đồ thị rồi trở về đỉnh ban đầu, trừ đỉnh ban đầu các đỉnh còn lại chỉ được đi qua một lần duy nhất Theo kinh nghiệm của con người trong thực tế thì khi ta đi trên những đoạn đường ngắn nhất thì cuối cùng ta sẽ có một hành trình ngắn nhất sử dụng nguyên lý tham lam
Trang 6c) Cách giải bài toán
- Xuất phát từ đỉnh 1 thì ta thấy trọng số từ đỉnh 1 tới tất cả các đỉnh còn lại là
=> Ta thấy trọng số (đường đi) từ đỉnh 1 đến đỉnh 2 là nhỏ nhất => ta chọn đường đi 1 -> 2
- Tiếp theo ta chọn đường đi từ đỉnh 2 cho đến các đỉnh còn lại (trừ đỉnh gốc)
=> Ta thấy trọng số (đường đi) từ đỉnh 2 đến đỉnh 5 là nhỏ nhất => ta chọn đường đi 2 -> 5
- Tiếp theo, chọn đường đi từ đỉnh 5 đến 2 đỉnh còn lại
=> Ta thấy trọng số (đường đi) từ đỉnh 5 đến đỉnh 3 là nhỏ nhất => ta chọn đường đi 5 -> 3
- Đường đi còn lại là 3 -> 4 -> 1
- Vậy ta có đường đi là 1 -> 2 -> 5 -> 3 -> 4 -> 1 và tổng đường đi là 14
d) Vẽ không gian trạng thái của bài toán
- Trạng thái đầu: {1}
Trang 7- Trạng thái cuối: {1}
e) Thuật toán
Bước 1: //Khởi đầu
a Đặt Tour = {};
b Cost = 0;
c V = U; //V là đỉnh hiện tại đang thăm
Bước 2: //Thăm tất cả các thành phố
a for (k=1; k<=n; k++) b.qua bước 3
Bước 3: //Chọn cung kế tiếp
a Đặt (V, W) là cung có chi phí nhỏ nhất từ V đến các đỉnh W chưa đến;
b Tour = Tour {(V, W)};
c Cost = Cost(V, W);
d Đỉnh W được gán nhãn đã đến
e Đặt V = W //Gán để xét bước kế tiếp
Trang 8Bước 4: //Hoàn thành
a Tour = Tour {(V,U)}
b Cost = Cost(V, U)
1 U = 1
2 Tour = {}
a Cost = 0
b V = 1
c W {2, 3, 4, 5} d W = 2 //vì qua 2 có chi phí nhỏ nhất
3 Tour = Tour {(1,2)} = {(1,2)}
e Cost = Cost + Cost(1,2) = 0+1 = 1
f V = 2
g W {3, 4, 5} -> W = 5
4 Tour = Tour {(2,5)} = {(1,2),(2,5)}
e Cost = Cost + Cost(2,5) = 1+3 = 4
f V = 5
g W {3, 4} -> W = 3
5 Tour = Tour {(5,3)} = {(1,2),(2,5),(5,3)}
e Cost = Cost + Cost(5,3) = 4+2 = 6
f V = 3
g W {4} -> W = 4
6 Tour = Tour {(3,4)} = {(1,2),(2,5),(5,3),(3,4)}
e Cost = Cost + Cost(3,4) = 6+1 = 7
f V = 4
g W {4} -> W = 4
7 Tour = Tour {(4,1)} = {(1,2),(2,5),(5,3),(3,4),(4,1)}
e Cost = Cost + Cost(4,1) = 7+7 = 14 8
Trang 98 Kết thúc
Kết quả: 1 – 2 – 5 – 3 – 4 – 1 Chương II: Kết quả nghiên cứu
1 Yêu cầu bài toán
- Ta chuyển đồ thị về dạng ma trận sau:
- Chương trình được viết trong môi trường devC++
- Input: ma trận như hình bên
- Output: đường đi của thuật giải Heuristic, và chi phí của đường đi đó
2 Cài đặt thuật toán
Bước 1: Khởi tạo
- Các giá trị cần khởi tạo:
+ n: số đỉnh của đồ thị
+ graph: mảng 2 chiều lưu trữ đồ thị
+ tourList: mảng 1 chiều lưu trữ đường đi theo giải thuật Heuristic
+ costList: mảng 1 chiều lưu trữ chi phí đường đi của giải thuật
+ u: Đỉnh đầu tiên xuất phát
- Để khởi tạo mảng graph để lưu trữ đồ thị, ta có thể chọn một trong hai cách sau:
+ Cách 1: Sử dụng file lưu trữ đồ thị đã được chuẩn bị trước
Trang 10+ Cách 2: Tự nhập đồ thị khi chạy chương trình
Bước 2: Tạo các hàm cần thiết
- Hàm checkDinh (int n, int *tourList, int x): Kiểm tra đỉnh đang duyệt có trùng với đỉnh đã duyệt trên ma trận không
+) n: số đỉnh của đồ thị
+) tourList: lưu trữ đường đi theo giải thuật Heuristic
+) x: đỉnh cần kiểm tra
Trang 11- Hàm timCanhMin (int **g, int n, int v, int *tourList, int &minDinh, int
&minCost): Hàm tìm đỉnh kế tiếp theo thuật giải Heuristic (tìm đường đi tối ưu nhất)
+ graph: mảng 2 chiều lưu trữ đồ thị
+ n: số đỉnh của đồ thị
+ v: đỉnh hiện tại đang xét
+ tourList: lưu trữ đường đi theo giải thuật Heuristic
+ minDinh: trả về kết quả là đỉnh tiếp theo mà từ đỉnh đang xét đến đỉnh này có chi phí đường đi ít nhất
+ minCost: trả về kết quả là chi phí ít nhất từ đỉnh đang xét đến đỉnh tiếp theo
Trang 12- Hàm greedy_algorithm (int **g, int n, int u, int *tourList, int *costList): Hàm thực hiện thuật toán
+ graph: mảng 2 chiều lưu trữ đồ thị
+ n: số đỉnh của đồ thị
+ u: đỉnh bắt đầu
+ tourList: mảng 1 chiều lưu trữ đường đi theo giải thuật Heuristic
+ costList: mảng 1 chiều lưu trữ chi phí đường đi của giải thuật
Trang 143 Kết quả
Trang 164 Đánh giá thuật toán
- Ưu điểm: Thuật giải Heuristic cho bài toán người đưa thư có độ phức tạp
O(n2) tốt hơn rất nhiều so với thuật toán tối ưu (có độ phức tạp O(n!))
- Nhược điểm: thuật giải có những hạn chế, chưa cho ra lời giải chính xác
- Kết luận: Thuật giải Heuristic cho bài toán người đưa thư tuy chưa đưa ra được lời giải chính xác cho bài toán, nhưng nó cho ra một lời giải có thể chấp nhận
được với độ phức tạp thấp hơn nhiều so với thuật toán tối ưu.
Trang 17TÀI LIỆU THAM KHẢO
1 ThS.Trần Hùng Cường; ThS.Nguyễn Phương Nga - Giáo trình Trí Tuệ Nhân
Tạo – Trường Đại học Công nghiệp Hà Nội
2 Trần Hùng Cường_Giáo trình – slide TRÍ TUỆ NHÂN TẠO (Artificial Intellegence – AI)
3 Geogre F Luger, William A Stubblefield – Albuquerque – Artifical Intelligence – Wesley Pubblishing Conpany, Inc – 1997 (Chapter 1)
4 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 1)