Đối với bài toán n-quân hậu, một nút p là dữ liệu n trong đó pilà số cột của quân hậu đặt ở hàng thứ i, hoặc trong trƣờng hợp quân hậu nằm trong hàng thứ i nhƣng chƣa đƣợc thiết lập, pi = * . E.g., tƣơng ứng với bàn cờ thứ nhất đƣợc thể hiện trong hình 3.11 là p = (1, 5, 2, 6, 3, 7, 4). Nhƣ bài toán ngƣời chơi gôn, nó có thể thực hiện dựa trên những xem xét đối xứng.
Hình 3.11: 6 nghiệm duy nhất cho bài toán 7-quân hậu
Trong bài toán n-quân hậu này, chúng tôi sử dụng mô hình theo tiêu chuẩn: - Mỗi cột i = 1, …, n thì đƣợc đại diện bởi một biến số nguyên xi.
Gán xi = j tƣơng ứng với cách đặt quân hậu ở hàng thứ i và cột j. - Bổ sung thêm biến số nguyên yi và wi với i = 1, …, n dùng để
kiểm tra đƣờng chéo trên bàn cờ, chúng tôi đƣa ra những ràng buộc: yi xi i và wi x - ii .
- Miền giá trị của x, y, w là: x(1, ..., ),n y(1,..., 2 ), w (n n,..., )n
Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q
- Tất cả ràng buộc của x, y, w phải đảm bảo rằng không có hai quân hậu nào có thể ăn nhau.
Ngƣợc lại với thuật toán mà chúng tôi phát triển ở đây là sử dụng cắt tỉa đối xứng. Một ràng buộc đƣợc đƣa ra bởi mô hình theo dõi trong suốt quá trình tìm kiếm, chúng tôi lan truyền biến thay vì bó hẹp chúng lại và hạn chế số lƣợng gọi lan truyền thông thƣờng.
3.4. Cài đặt chƣơng trình
3.5. Kết quả
Minh họa với 8 quân hậu :
PHẦN IV KẾT LUẬN
Bài toán n-quân hậu là bài toán tổ hợp khó, để giải quyết cần có những thuật toán thật phù hợp. Nhƣ đã tìm hiểu thì có hai cách giải quyết bằng cách tiếp cận truyền thống: một là thực hiện thủ công thì thuật toán sẽ giải bài toán một cách chính xác trong lập trình truyền thống và hai là mô hình bài toán dùng thuật toán có sẵn cho lớp các ràng buộc số học cụ thể. Hai cách tiếp cận này đều còn những hạn chế rõ rệt, cách thứ nhất còn hạn chế về chi phí lớn khi thiết kế và không dễ biến đổi khi bài toán thay đổi còn cách tiếp cận thứ hai thì hạn chế về việc diễn tả một cách hiệu quả các ràng buộc. Khi đó ngôn ngữ lập trình ràng buộc hiện đại có thể khắc phục đƣợc những điểm yếu này bằng cách cung cấp một lập trình dựa trên việc giải những ràng buộc một cách tinh vi nhất.
Chúng ta đều biết rằng mọi bài toán đều có những ràng buộc, công việc của ngƣời lập trình là phải tìm ra giá trị của các biến sao cho phải thỏa mãn các ràng buộc đó. Lập trình ràng buộc càng tỏ rõ hiệu quả trong những bài toán mà yêu cầu ràng buộc mang tính mềm dẻo. Và càng ngày lập trình ràng buộc càng thể hiện rõ vai trò mạnh mẽ của mình trong việc giải những bài toán liên quan đến những thực tế cuộc sống, càng ngày ứng dụng của nó càng trở nên phong phú.
Chính vì thế, để giải quyết những bài toán thỏa mãn ràng buộc thì đòi hỏi ngƣời lập trình trang bị những kiến thức toàn diện về mặt lý thuyết lẫn kỹ năng phân tích. Đối với sinh viên nhƣ tôi thì vẫn chƣa đạt đến những trình độ này nên luận văn mà tôi thực hiện vẫn còn gặp nhiều khó khăn.
Trong bài luận văn mà tôi hoàn thành cơ bản đã thực hiện đƣợc:
- Đƣa ra những kiến thức cô đọng nhất trong CSPs: những định nghĩa cùng với những tính chất quan trọng cho CSPs
- Giới thiệu và trình bày một cách hệ thống phù hợp với các tiêu chí cho việc giải bài toán n-quân hậu, các phƣơng pháp khác nhau đã lần lƣợt đƣa ra để so sánh ƣu nhƣợc điểm của mỗi phƣơng pháp khi áp dụng cho bài toán.
- Cài đặt và chạy chƣơng trình theo thuật toán đệ quy quay lui
Bài luận văn của tôi cũng đã tạo tiền đề và mong muốn cho những nghiên cứu trong tƣơng lai.
Vì thời gian có hạn và sự hiểu biết còn khiêm tốn, bên cạnh đó việ c tra cứu tài liệu nƣớc ngoài còn hạn chế nên không thể tránh khỏi những sai sót. Vì vậy rất mong đƣợc sự góp ý, xây dựng chân thành của thầy cô cùng các bạn để bản thân rút ra những kinh nghiệm và củng cố thêm kiến thức ngày càng hoàn thiện.
Cuối cùng tôi xin chân thành cảm ơn sự hƣớng dẫn tận tình của thầy Nguyễn Thanh Tuấn cùng sự giúp đỡ của các bạn giúp tôi hoàn thành tốt bài Luận văn này.
Đà Nẵng, ngày 10 tháng 05 năm 2012 Sinh viên thực hiện
TÀI LIỆU THAM KHẢO
Tiếng Việt
1. Nguyễn Văn Hậu, luận văn thạc sỹ: Lập trình ràng buộc với bài toán ngƣời chơi gôn.
Tiếng Anh
1. Cohen D., Jeavons P., Jefferson C., Karen E. P. and Smith B. (2005) “Symmetry Definitions for Constraint Programming”, Proceeding of Principles and Practice of Constraint Programming - CP 2005. Constraint Programming online, http://www.cp-online.org/
2. Flener P., Frisch A., Hnich B., Kiziltan Z., Miguel I., Walsh T. (2002), “Breaking row and column symmetry in matrix models”, Proceeding of Principles and Practice of Constraint Programming - CP 2002.
3. Gent I.P., and Smith B. (2000), “Symmetry breaking during search in contraint programming”, W. Horn, editor, EACI’2000.
4. Harvey W. (2001), “Symmetry Breaking and the Social Golfer Problem”,
Proceedings of SymCon-01: Symmetry in Constraints.
5. Kiziltan Z. (2004), “Symmetry Breaking Ordering Constraints”, PhD thesis, Department of Information Science, Uppsala University.
6. Marriott K., and Stuckey P.J. (1998), Programming with Constraints: An Introduction, MIT Press.
7. Sellmann M., and Van Hentenryck P. (2005), “Structural symmetry breaking”, Proceeding of IJCAI'05 workshop on Modelling and Solving Problems with Constraints.
8. Puget J.F. (2005), “Breaking symmetries in all different problems”,