Một số thuật toán nhằm rút gọn thuật toán

Một phần của tài liệu Luận văn: Lập trình ràng buộc với bài toán người chơi gôn docx (Trang 41 - 42)

Như chúng ta đã giải thích ở chương 2, rút gọn bài toán là quá trình loại bỏ những giá trị và làm chặt ràng buộc trong CSP mà không loại bỏ nghiệm. Ý tưởng cơ bản là chúng ta loại bỏ những giá trị hay những nhãn kết hợp dư thừa, những thành phần không xuất hiện trong nghiệm. Sau đó, chúng ta tiếp tục xét đến ràng buộc trên tập biến S và tập các nhãn kết hợp hợp lệ trong S. Như vậy chúng ta đã rút gọn CSP ban đầu thành một bài toán tương đương- bài toán có chung bộ nghiệm với bài toán ban đầu- với hy vọng là dễ giải hơn. Mặc dù việc rút gọn bài toán rất hiếm khi đạt được nghiệm, tuy nhiên nó giúp cho việc giải CSP dễ dàng hơn rất nhiều. Nó có thể dùng trong quá trình tiền xử lý, tức là nó có thể được dùng trước khi bất kỳ kỹ thuật nào khác được áp dụng. Nó cũng có thể được dùng trong thời gian tìm kiếm – bằng cách cắt một số không gian tìm kiếm sau khi mỗi nhãn đã được hoàn tất. Đôi khi chúng ta có thể giảm được một lượng đáng kể không gian tìm kiếm nhờ việc rút gọn bài toán.

Chúng ta có thể tổng quát khi áp dụng rút gọn với việc tìm kiếm sẽ đạt được những điều sau:

41

Vì cỡ của không gian tìm kiếm được đo bằng tích của toàn bộ cỡ của miền biến trong bài toán, rút gọn bài toán có thể giảm không gian tìm kiếm bằng cách giảm cỡ của miền biến.

(2) Tránh tìm kiếm lặp lại các nhánh cây thừa

Những giá trị và nhãn kết hợp thừa được thể hiện trên các nhánh và các

nhánh(path) mà sẽ dẫn đến vô nghiệm. Điều này có thể được loại bỏ

bằng việc rút gọn bài toán. (3) Nhận ra các bài toán vô nghiệm

Nếu thuật toán rút gọn bài toán trả về một CSP mà có ít nhất một miền rỗng, khi đó có thể kết luận rằng bài toán đó là vô nghiệm mà không phải làm gì nữa.

Và từ đó có các thuật toán thực thi áp dụng để loại bỏ giá trị dư thừa từ các miền, và một số các nhãn kết hợp từ các ràng buộc như thuật toán đưa CSPs về chuẩn dạng: NC (Node-consistent), AC(arc-consistent), DAC (Directional arc-consistent), PC (Path-consistent), DPC (Directional path-consistent) là vô cùng quan trọng.

Một phần của tài liệu Luận văn: Lập trình ràng buộc với bài toán người chơi gôn docx (Trang 41 - 42)