Giới thiệu về tìm kiếm tia Beam Search:Tìm kiếm tia Beam Search là thuật toán tìm kiếm heuristic mà ở đó nó sẽ khai phá một đồ thị bằng cách tìm ra node khả quan, tối ưu nhất trong một d
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HCMKHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO GIỮA KÌ
TÊN HỌC PHẦN: TRÍ TUỆ NHÂN TẠO
Tên đề tài: Local beam searchNhóm: số 4
Họ tên thành viên:
Nguyễn Hoàn Thảo - 21133081 (Nhóm trưởng)Nguyễn Anh Tuấn - 21133113
Trang 2Mục lục
1 Giới thiệu về tìm kiếm tia: Define Beam Search ……… 32 Thuật toán tìm kiếm tia: Beam Search Algorithm ………43 Ví dụ về tìm kiếm tia: Beam Search Example ……… 54 Lợi ích và bất cập của việc tìm kiếm tia: Pros and Cons of Beam
Trang 31 Giới thiệu về tìm kiếm tia (Beam Search):
Tìm kiếm tia (Beam Search) là thuật toán tìm kiếm heuristic mà ở đó nó sẽ khai phá một đồ thị bằng cách tìm ra node khả quan, tối ưu nhất trong một danh sách các
node được giới hạn Tìm kiếm tia là sự cải tiến của BeFS (Best-First Search) mà ở
đó nó tốn ít dung lượng bộ nhớ hơn.
Tìm kiếm đầu tiên tốt nhất (Best-First Search) tìm kiếm tất cả các node khả thi
để đi đến được mục tiêu Trong khi đó, tìm kiếm tia chỉ tìm một số lượt node nhất
định và giữ những node này làm ứng cử viên để tìm tới đích – giống với tìm kiếm
tham lam (Greedy Best-First Search).
Tìm kiếm tia sử dụng breadth-first search (tìm kiếm theo chiều rộng) để xây
dựng nên cây tìm kiếm của mình Tại mỗi tầng của cây tìm kiếm, nó sẽ truy mọi nút biên và sắp xếp chúng theo chiều tăng dần của giá trị heuristic Tuy nhiên, khác với
Best-First Search, nó sẽ chỉ giữ lại một số lượng nút biên xác định trước – được gọi
là Beam Width (W) – và chỉ những nút được giữ lại này sẽ được mở rộng tiếp.Chỉ số W càng lớn thì sẽ có ít nhánh bị bỏ đi – với W = thì sẽ không có nhánh nàobị loại bỏ và thuật toán bây giờ sẽ thành breadth-first search (tìm kiếm theo chiều
rộng), còn với W = 1 thì nó sẽ trở thành thuật toán tìm kiếm tham lam (GreedyBest-First Search) Chỉ số W sẽ giới hạn dung lượng bộ nhớ cần để thực hiện việc
tìm kiếm Tìm kiếm tia không phải là giải pháp tối ưu vì không có gì đảm bảo được việc nó sẽ tìm ra được đường đi tốt nhất cũng như việc nhánh chứa nút mục tiêu có thể sẽ bị loại bỏ.
Nói tóm lại, tìm kiếm tia trả về cho ta giá trị đầu tiên tìm thấy Một khi nó đã tìm đạt đến độ sâu tối đa thì nó sẽ đánh giá các giải pháp và trả về giải pháp với độ khả thi cao nhất.
Trang 42 Thuật toán tìm kiếm tia (Beam Search Algorithm):
1 Khởi tạo 2 danh sách trên 2 Thêm nút khởi đầu vào OpenList 3 Chạy vòng lặp:
a Nếu OpenList rỗng trả về kết quả.
Trang 5b Chọn nút có thích hợp nhất và bỏ nút đó từ OpenList qua ClosedList c Nếu nút là mục tiêu trả về path.
d Tìm các nút lân cận nút đó.
e Nếu những nút lân cận không xuất hiện trong OpenList và ClosedList thì ta thêm vào OpenList để chờ duyệt Nếu nó đã có trong OpenList thì ta so sánh chi phí giữa quãng đường cũ và mới, nếu nó nhỏ hơn thì ta thay thế nó.
f Nếu số lượng node trong OpenList > Beam Width ( thì ta chọn ra node thích
Ứng dụng của Tìm kiếm tia (Beam Search):
Một trong những ứng dụng phổ biến nhất của tìm kiếm tia đó là việc máy dịch (machine translation) trong mô hình Encoder và Decoder Khi dịch ngôn ngữ này sang ngôn ngữ khác, trước hết ta mã hóa một chuỗi các từ đó từ ngôn ngữ nguồn và sau đó giải mã thành một chuỗi các từ trong
ngôn ngữ đích Trong quá trình giải mã,
Trang 6đối với mỗi từ trong chuỗi, có thể có nhiều tùy chọn khác nhau và đó là lúc mà tìm kiếm tia đi vào hoạt động.
Sau đây là một ví dụ đơn giản về ứng dụng của tìm kiếm tia trong giai đoạn giả mã với chỉ số heuristic là xác suất một từ (cụm từ) có thể có trong văn bản được dịch (W = 3)
4 Lợi ích và bất cập của việc tìm kiếm tia:
Ưu điểm:
- Tốc độ (Speed): Tìm kiếm theo tia là thuật toán tương đối nhanh để tìm chuỗi từ
hoặc hành động có khả năng nhất so với các thuật toán khác như tìm kiếm toàn diện (exhaustive search).
- Độ chính xác (Accuracy): Tìm kiếm tia thường tạo ra kết quả đầu ra chất lượng cao
bằng cách cắt bớt không gian tìm kiếm và tập trung vào các ứng cử viên triển vọng nhất.
- Tính linh hoạt (Flexibility): Tìm kiếm tia có thể được sửa đổi để phù hợp với các
trường hợp sử dụng khác nhau, bằng cách điều chỉnh độ rộng tia hoặc kết hợp các kinh nghiệm khác.
Nhược điểm:
- Tối ưu cục bộ (Local Optima): Tìm kiếm tia có thể bị kẹt trong tối ưu cục bộ,
nghĩa là nó có thể không tìm thấy chuỗi từ hoặc hành động tối ưu, đặc biệt trong trường hợp chuỗi khả dĩ nhất không rõ ràng.
- Đầu ra không đầy đủ (Incomplete Output): Tìm kiếm tia chỉ trả về một chuỗi
đầu ra duy nhất, có thể không phải lúc nào cũng là chuỗi tốt nhất.
- Chiều rộng tia (Beam Width): Chọn đúng chiều rộng tia có thể là một thách thức,
quá hẹp và bạn có thể bỏ lỡ các ứng cử viên tốt, quá rộng và cuối cùng bạn có thể khám phá quá nhiều ứng cử viên kém chất lượng.
- Thiếu tính đa dạng (Lack of Diversity): Tìm kiếm tia thường tạo ra các chuỗi đầu
ra quá giống nhau, đây có thể là một vấn đề trong trường hợp mong muốn có nhiều đầu ra khác nhau.
Trang 7Ví dụ về việc không tối ưu:
Bước 1: OPEN= {A}Bước 2: OPEN= {B, C}Bước 3: OPEN= {C, E}Bước 4: OPEN= {F, E}Bước 5: OPEN= {G, E}
Bước 6: Tìm được mục tiêu {G}, Dừng lại
=> Tóm lại, tìm kiếm theo tia là một thuật toán hữu ích có thể được sử dụng để tìm chuỗi từ hoặc hành động có khả năng xảy ra nhất theo cách tương đối hiệu quả Tuy nhiên, nó có những hạn chế như tối ưu cục bộ và thiếu tính đa dạng, đồng thời yêu cầu điều chỉnh cẩn thận để đạt được kết quả tốt nhất.
5 Độ phức tạp của tìm kiếm tia: (Time and Space Complexity of Beam Search)
Độ phức tạp về thời gian và không gian của tìm kiếm tia phụ thuộc vào một số yếu tố, bao gồm:
- Kích thước của không gian tìm kiếm (Size of the search space): Độ phức tạp về thời gian và không gian của tìm kiếm theo tia tăng theo kích thước của không gian tìm kiếm Nói chung, không gian tìm kiếm càng lớn thì yêu cầu tìm kiếm tia thời gian và không gian càng nhiều
Trang 8- Độ rộng tia (Beam width): Độ phức tạp về thời gian và không gian của tìm
kiếm tia cũng phụ thuộc vào độ rộng tia Chiều rộng tia lớn hơn thường dẫn đến kết quả tốt hơn nhưng cũng đòi hỏi nhiều thời gian và không gian hơn.
- Hệ số phân nhánh (Branching factor): Hệ số phân nhánh của không gian tìm kiếm cũng ảnh hưởng đến độ phức tạp về thời gian và không gian của tìm kiếm tia Hệ số phân nhánh cao hơn có nghĩa là có nhiều hành động khả thi hơn để thực hiện ở mỗi bước, điều này làm tăng độ phức tạp về thời gian và không gian.
=>Nói chung, độ phức tạp về thời gian của tìm kiếm tia là O(b^d), trong đó b là hệ số phân nhánh và d là độ sâu của không gian tìm kiếm Điều này có nghĩa là thời gian cần thiết để thực hiện tìm kiếm theo tia tăng theo cấp số nhân với độ sâu của không gian tìm kiếm.
*Độ phức tạp không gian của tìm kiếm tia cũng là O(b^d) trong trường hợp xấu
nhất Điều này là do tìm kiếm tia cần theo dõi các ứng viên hiện tại ở mỗi bước và số lượng ứng viên có thể tăng theo cấp số nhân với độ sâu của không gian tìm kiếm.
**Tuy nhiên, trên thực tế, độ phức tạp về thời gian và không gian thực tế của việc tìm kiếm tia có thể thấp hơn so với trường hợp xấu nhất, tùy thuộc vào vấn đề cụ thể đang được giải quyết và độ rộng tia được chọn.
6 Các biến thể của tìm kiếm tia: (Variants of Beam Search)
Có một số biến thể của tìm kiếm theo tia có thể được sử dụng để cải thiện hiệu suất của nó, một số trong số đó là:
- Tìm kiếm tia có truy vết ngược (beam search results in limited discrepancybacktracking - BULB): Thuật toán này cũng giống như thuật toán tìm kiếm tia bình
thường khi chúng sẽ trả về một kết quả khả thi, nhưng nếu kết quả đó chưa hiệu quả thì chúng sẽ truy ngược lại (backtrack) để tìm ra kết quả tốt nhất.
- Local beam search: Trong phạm vi tìm kiếm cục bộ thì tìm kiếm tia (beamsearch) sẽ được coi là tìm kiếm tia cục bộ, với thuật toán giống hệt với thuật toán tìm
kiếm tia Nó cũng chọn ra 1 chỉ số W và ở mỗi tầng của cây tìm kiếm, nó sẽ chọn ra W nhánh để tiếp tục công việc tìm kiếm cho tới khi tìm được mục tiêu.
- Tìm kiếm tia ngẫu nhiên (stochastic beam search): Thuật toán này cũng giống
với thuật toán tìm kiếm tia nhưng vì tìm kiếm tia hay bị kẹt lại trong miền cục bộ nên thay vì giữ nguyên giá trị W từ đầu đến cuối thì nó sẽ chọn chỉ số W tiếp theo theo cách ngẫu nhiên, với xác suất phụ thuộc vào đánh giá heuristic của các trạng thái.
=> Nhìn chung, việc lựa chọn biến thể phụ thuộc vào nhiệm vụ cụ thể và chất lượng đầu ra mong muốn, tính đa dạng và hiệu quả tính toán.
Trang 97.Câu hỏi tại lớp và Bài tập về nhà: a Câu hỏi tại lớp:
1 Trong local beam search, beam width là gì?
A Số lượng các nút con của một nút trong cây tìm kiếm B Số lượng các trạng thái được lưu trữ trong bộ nhớ tạm thời C Số lượng các trạng thái được tạo ra trong mỗi vòng lặp của thuật toán D Số lượng các trạng thái được duyệt trong mỗi vòng lặp của thuật toán.
2 Trong local beam search, số lượng trạng thái được xem xét tại mỗi bước là:
a) 1
b) Nhiều hơn 1 c) Không giới hạn
3 Điều gì xảy ra khi beam width bằng 1 trong local beam search?
A Thuật toán tìm kiếm nhanh hơn B Thuật toán tìm kiếm chính xác hơn.
C Thuật toán trở thành thuật toán tìm kiếm tham lam.
D Thuật toán tìm kiếm có thể tìm kiếm được giải pháp tối ưu hơn.
4 Điều gì xảy ra khi beam width tăng trong local beam search?
A Thuật toán tìm kiếm nhanh hơn B Thuật toán tìm kiếm chính xác hơn.
C Thuật toán tìm kiếm có khả năng rơi vào bẫy cục bộ ( tối ưu cục bộ) cao hơn D Thuật toán tìm kiếm có thể tìm kiếm được giải pháp tối ưu hơn.
→ Giải thích: Nhiều trạng thái (states) được kiểm tra đồng thời (explored
simultaneously), tăng beam width có thể giúp thuật toán tìm kiếm khám phá một phần lớn hơn của không gian tìm kiếm, nhưng đồng thời cũng tăng khả năng bị mắc kẹt trong điểm tối ưu cục bộ (Local Optimal) Vì beam width lớn hơn có nghĩa là có nhiều trạng thái được xem xét ở mỗi bước, điều chỉnh các con đường tìm kiếm dựa trên các giải pháp tốt nhất dẫn đến bị mắc kẹt trong các giải pháp tối ưu cục bộ và không thể đi đến giải pháp tối ưu toàn cục Do đó, việc tăng beam width không làm cho thuật toán tìm kiếm nhanh hơn hoặc chính xác hơn, mà tăng nguy cơ bị mắc kẹt trong một giải pháp phụ thuộc vào điểm tối ưu cục bộ.
Trang 10b Bài tập về nhà:
Bài 1: Bài toán người đi giao hàng - Traveling Salesman Problem – TSP
Có một người giao hàng cần đi giao hàng tại n thành phố Anh ta xuất phát từ một thành phố nào đó, đi qua các thành phố khác để giao hàng và trở về thành phố ban đầu Mỗi thành phố chỉ đến một lần, và khoảng cách từ một thành phố đến các thành phố khác đã được biết trước Hãy tìm một chu trình (một đường đi khép kín thỏa mãn điều kiện trên) sao cho tổng độ dài các cạnh là nhỏ nhất.
Định nghĩa bài toán gồm các phương thức sau:
1 show
Kế thừa từ lớp bài toán
Xuất ra ma trận chi phí đường đi và vị trí bắt đầu
2 init
Khởi tạo đối tượng TSP với n thành phố và ngẫu nhiên tạo ma trận chi phí di chuyển giữa các thành phố cùng với vị
trí bắt đầu.
3 goal
Kế thừa từ lớp bài toán Hiển thị con đường tốt nhất và chi phí để đi đường đó.
4 Randomize_state
Kế thừa từ lớp bài toán Tạo ra mảng ngẫu nhiên (rand) n*n , mỗi phần tử A[i][j] là chi phí đi từ thành phố i đến j Và
1 vị trí bắt đầu ngẫu nhiên (start_city)
5 cost Kế thừa từ lớp bài toán Trả về tổng chi phí (đường đi) củahành trình đang đi
6 check Kế thừa từ lớp bài toán Kiểm tra xem hành trình đang xétcó phải là tối ưu nhất 7 Generate
_sol_path cách thêm một thành phố vào cuối các con đường hiện tại.Kế thừa từ lớp bài toán Sinh ra các con đường mới bằng 8 K_best_sol Kế thừa từ lớp bài toán Chọn k con đường tốt nhất từ
danh sách paths.
Sau đó, định nghĩa lớp tác tử sử dụng phương pháp local beam search để giải quyết bài toán trên.
Bài 2: Cho trước một tập các công việc (jobs) và một tập các máy (machines),
mỗi công việc có thời gian thực hiện khác nhau trên từng máy Yêu cầu tìm phân bố công việc trên các máy sao cho tổng thời gian thực hiện trên mỗi máy là nhất quán và là thấp nhất
Đầu vào của bài toán bao gồm:
Trang 11Một ma trận C có kích thước m x n, trong đó m là số lượng máy và n là số lượng công việc Giá trị C[i,j] là thời gian thực hiện công việc j trên máy i.
Một số nguyên k là số lượng trạng thái con tối ưu được duy trì trong thuật toán Local Beam Search.
Một số nguyên max_iter là số lần sinh ra trạng thái mới để cập nhật trạng thái hiện tại trong thuật toán Local Beam Search.
Đầu ra của bài toán là:
Một phân bố tối ưu của các công việc trên các máy, sao cho tổng thời gian thực hiện trên mỗi máy là nhất quán và là thấp nhất.
Định nghĩa bài toán gồm các phương thức sau:
1 init (self, n,m, w)
Kế thừa từ lớp bài toán Khởi tạo lớp với các đối số w: ma trận trọng số kích thước nxm mô tả trọng số của
mỗi công việc đối với từng máy chủ.
2 randomize_state
Tạo ra một ma trận m*n với giá trị ngẫu nhiên trong khoảng từ 0 đến 100 Trong đó, m là số lượng máy và n là
số lượng công việc Tạo ngẫu nhiên k (có thể cho k từ 2->10)
3 cost
Kế thừa từ lớp bài toán Tính toán giá trị chi phí của một trạng thái bất kỳ, bao gồm tổng trọng số của tất cả các
công việc trên các máy chủ.
4 generate_neighbours
Kế thừa từ lớp bài toán Phương thức tạo ra các trạng thái mới bằng cách hoán đổi các công việc giữa các máy chủ
trong trạng thái hiện tại.
Ví dụ, nếu trạng thái hiện tại là [1, 2, 3, 4, 5] thì hàm generate_neighbour có thể tạo ra các trạng thái mới như [1, 3, 2, 4, 5], [2, 1, 3, 4, 5], [1, 2, 4, 3, 5], vv Tổng quát hơn, hàm này tạo ra một trạng thái mới bằng cách hoán đổi vị trí của hai phần tử bất kỳ trong trạng thái hiện tại.
5 goal được trạng thái tối ưu, hiển thị kết quả tìm được với giá trịKế thừa từ lớp bài toán Phương thức được gọi khi tìm chi phí tương ứng.
6 get_best_states Kế thừa từ lớp bài toán Chọn ra k trạng thái tốt nhất trong danh sách trạng thái được cung cấp, dựa trên giá trị chi phí
Trang 12tính được từ phương thức calculate_cost() 7 Generate_sol_path cách thêm một thành phố vào cuối các con đường hiện tại.Kế thừa từ lớp bài toán Sinh ra các con đường mới bằng 8 K_best_sol Kế thừa từ lớp bài toán Chọn k con đường tốt nhất từ
danh sách paths.