You are on page 1of 8

IDA* là một thuật toán tìm kiếm đường đẫn và đi qua đồ thị có thể tìm thấy đường dẫn

ngắn nhất
giữa một nút bắt đầu được chỉ định và bất kỳ thành viên nào của một tập hợp các nút mục tiêu trong
biểu đồ có trọng số. IDA* sử dụng bộ nhớ của nó thấp hơn so với A*, nhưng không giống như các cách
tìm kiếm thông thường, nó tập trung vào việc khám phá các nút hứa hẹn nhất và do đó không đi đến
cùng độ sâu của cây tìm kiếm. Không giống như A*,IDA* không sử dụng lập trình động và do đó thường
khám phá cùng một nút nhiều lần.

IDA* làm mọi thứ mà A* làm, nó các đặc điểm tối ưu của A* để tìm đường đi ngắn nhất nhưng nó sử
dụng bộ nhớ ít hơn A*.

Ưu điểm:

+ Nó sẽ luôn tìm thấy giải pháp tối ưu với điều kiện giải pháp đó tồn tại.

+ Heuristic là không cần thieetst, nó được sử dụng để tăng tốc quá trình.

+ Các heuristic khác nhau có thể được tích hợp vào thuật toán mà không thay đổi mã cơ bản.

+ Cho phí của mỗi lần di chuyển có thể được điều chỉnh thành các thuật toán dễ dàng như
heuristic

+ Sử dụng ít bộ nhớ hơn rất nhiều làm tăng tuyến tính vì nó không lưu trữ và quên sau khi nó
đạt đến một độ sâu nhất định và bắt đầu lại.

Nhược điểm:

+ Không theo dõi các nút đã truy cập.

+ Tốn nhiều thời gian hơn do lặp lại việc khám phá các nút đã được khám phá.

Working:
Đặc trưng của thuật toán IDA* là nó không theo dõi từng nút đã truy cập. Nó chủ yếu giống thuật toán
A*, sự khác biệt duy nhất là thay vì đạt đến cùng độ sâu của mỗi nhánh, nó quyết định độ sâu bằng cách
dùng điểm f được gọi là ‘Ngưỡng’ tăng lên khi đạt đến một nút có điểm f lớn hơn và thuật toán bắt đầu
lại với độ sâu mới.

Vì vậy, chúng ta sử dụng một vòng lặp vô hạn là cơ sở mà hàm được gọi là đệ quy, khi hàm trở về từ
ngưỡng nó bắt đầu từ đầu thông qua vòng lặp vô hạn này trong đó hàm được gọi ban đầu và ngưỡng
được tăng lên sau mỗi lần trả về.

Điểm f là gì?

f điểm số là không có gì ngoài tổng chi phí để đạt được nút đó và giá trị heuristic của nút đó.

Đối với bất kỳ nút cho nào, điểm f được định nghĩa là:

f(x)=h(x)+g(x)

trong đó g(x) là chi phí của nút đó, h(x) là heuristic được tính toán của nút đó và x là nút hiện tại.
G score(cost) là gì?

g điểm được định nghĩa là tổng điểm g của nút mẹ và chi phí để đi đến nút đó từ cha mẹ của nó.

g(x)=g(x.parent)+chi phí(x.parent,x)

Đây là ví dụ về cách hoạt độg của IDA*:Đâ

Đây là Mã giả của thuật toán IDA*:


RECURSIVE BEST FIRST SEARCH
Tìm kiếm đệ quy đầu tiên hoặc RBFS, là một thuật toán trí tuệ nhân tạo thuộc về heuristic

thuật toán tìm kiếm. Nó mở rộng các nút theo thứ tự tốt nhất. Nó sử dụng thông tin cụ thể của vấn đề
về môi trường để xác định mức độ ưu tiên của một nút hơn nút kia.

RBFS tương tự như một triển khai đệ quy của tìm kiếm theo chiều sâu, với sự khác biệt là nó sử dụng

điều kiện đặc biệt để bẻ khóa ngược đảm bảo rằng các nút được mở rộng theo thứ tự tốt nhất. Nó hoạt
động bởi duy trì trên ngăn xếp đệ quy, đường dẫn hoàn chỉnh đến nút hiện tại đang được mở rộng, cũng
như tất cả ngay lập tức anh chị em của các nút trên đường dẫn đó, cùng với chi phí của nút tốt nhất
trong cây con được khám phá bên dưới mỗi anh chị em.

Bất cứ khi nào chi phí của nút hiện tại vượt quá chi phí của một số nút khác trong phần đã mở rộng
trước đó của cây, thuật toán sao lưu với tổ tiên chung sâu nhất của chúng và tiếp tục tìm kiếm theo
đường dẫn mới.

RBFS khám phá không gian tìm kiếm bằng cách coi nó như một cái cây. Ví dụ về không gian tìm kiếm với
chi phí

bằng độ sâu được thể hiện trong Hình 1.

Hình 2 cho thấy trình tự các bước RBFS thực hiện khi khám phá cây này. Hình 2a cho thấy lệnh gọi trên
gốc và thế hệ con cái của nó. Vì cả hai con đều có chất lượng như nhau, nên kiểm tra bên trái (con đầu
tiên) trước, với giới hạn 2 tức là tối thiểu của cha mẹ và anh chị em tốt nhất của nó (Hình 2b). Vì cả hai
con cháu của nó đều vượt quá mức ràng buộc, thuật toán lùi lại và bắt đầu kiểm tra cây con bên phải,
nhưng nó lưu trữ chi phí tối thiểu của nút phá vỡ ràng buộc trong cây con bên trái (Hình 2c). Hình 2d và
2e cho thấy sự mở rộng của cây con bên phải, trong khi Hình 2f cung cấp thông tin chi tiết khi thuật toán
trả về từ cây con bên phải, cập nhật giá trị được lưu trữ của nó thành 4 và bắt đầu tái tạo cây con bên
trái. Vì cây con bên trái đã được khám phá với chi phí là 3, nên bây giờ có thể an toàn để di chuyển đến
giới hạn đó theo cách thứ nhất theo chiều sâu (Hình 2g) và tiếp tục từ đó theo cách tốt nhất một lần nữa
(Hình.2h và 2j).
RBFS được gọi với hai đối số: một nút để mở rộng và một giới hạn trên về chi phí của cây con của nút.

Thuật toán RBFS hoạt động bằng cách theo dõi giới hạn trên. Giới hạn trên này cho phép thuật toán

chọn những con đường tốt hơn và có thể tiếp tục vô thời hạn trên con đường hiện tại. Giới hạn này theo
dõi giá trị f của đường dẫn thay thế tốt nhất hiện có ở bất kỳ dạng tổ tiên nào của nút hiện tại. Nếu nút
hiện tại vượt quá giới hạn này, thì đệ quy sẽ quay trở lại đường dẫn thay thế và RBFS thay thế giá trị f
của lá tốt nhất.

RBFS là tìm kiếm ưu tiên nhất chạy trong không gian tuyến tính đối với độ sâu tìm kiếm tối đa,

không phụ thuộc vào hàm chi phí được sử dụng. Ngay cả với hàm chi phí có thể chấp nhận được, RBFS
tạo ra ít nút hơn so với IDA *, và nói chung là cao hơn IDA *, ngoại trừ một sự gia tăng nhỏ trong chi phí
mỗi lần tạo nút.

RBFS sử dụng tất cả bộ nhớ có sẵn. Điều này đạt được bởi giữ các nút đã tạo trong bộ nhớ và cắt bớt
một số trong số chúng khi bộ nhớ hết.

2.1 Nghiên cứu hiện tại


Tìm kiếm đệ quy đầu tiên tốt nhất hoặc RBFS là một thuật toán tìm kiếm heuristic chung để mở rộng các
nút biên giới theo thứ tự tốt nhất, nhưng tiết kiệm bộ nhớ bằng cách xác định nút tiếp theo để mở rộng
bằng cách sử dụng tính năng bẻ khóa ngược dựa trên ngăn xếp thay vì chọn từ danh sách Mở.

RBFS thuật toán được gọi với nút gốc và nút mục tiêu là các tham số của nó cộng với tham số giới hạn,
cung cấp cho chúng ta giới hạn trên về chi phí f của các nút trong đường dẫn đã chọn. Trong thuật toán
RBFS, nút gốc đầu tiên được so sánh với nút mục tiêu và nếu nút gốc khớp với nút mục tiêu thì thuật
toán trở lại với mục tiêu thành công. Tuy nhiên, nếu không tìm thấy kết quả phù hợp thì nút gốc được
mở rộng bằng cách sử dụng ExpandNode chức năng. Chức năng cơ bản của hàm ExpandNode cùng với
mã giả của nó cũng được giải thích bên dưới
Độ phức tạp bộ nhớ của RBFS là O (db), trong đó d là độ sâu của tìm kiếm và b là phân nhánh

hệ số. Thay vì tiếp tục đi xuống đường dẫn hiện tại càng xa càng tốt, như trong tìm kiếm theo chiều sâu
thông thường, RBFS theo dõi chi phí f của đường dẫn thay thế tốt nhất có sẵn từ bất kỳ tổ tiên nào của
nút hiện tại, đó là được truyền như một đối số cho hàm đệ quy.

Thuộc tính :

i.Measurable quality: Thuộc tính này có nghĩa là chất lượng của giải pháp mà một thuật toán bất cứ lúc
nào lợi nhuận, nên có thể đo lường được và thể hiện theo một cách nào đó.

ii. Mono-tonicity: Thuộc tính này có nghĩa là chất lượng của giải pháp mà một thuật toán trả về bất cứ
lúc nào,

sẽ tăng lên khi thời gian tính toán và chất lượng đầu vào tăng lên.

iii.Consistency: Theo thuộc tính này, chất lượng của giải pháp của một thuật toán bất cứ lúc nào được
kết nối

với thời gian tính toán mà nó có và chất lượng của đầu vào.
iv. interrupt-ability: Thuộc tính này có nghĩa là để một thuật toán được khai báo bất cứ lúc nào chúng ta
có thể

để ngăn chặn nó bất cứ lúc nào và nó sẽ cung cấp cho chúng tôi một số giải pháp. RBFS của chúng tôi
được triển khai bất cứ lúc nào

thuật toán có thể dừng bất cứ lúc nào và nó sẽ trả về một giải pháp bất cứ khi nào nó dừng lại.

v. Preempt-ability: Theo thuộc tính này, thuật toán có thể dừng bất cứ lúc nào và cũng có thể

khởi động lại một lần nữa với chi phí tối thiểu.

Source: IDA-Star(IDA*) Algorithm in general « Insight into programming algorithms (wordpress.com)

Comparative Study of RBFS & ARBFS Algorithm (slideshare.net)

You might also like