Giới thiệu bài toán

Một phần của tài liệu lập trình ràng buộc với bài toán n quân hậu (Trang 28)

Bài toán tám quân hậu đƣợc phát biểu nhƣ sau: “Đặt 8 quân hậu trên bàn cờ kích thƣớc 8×8 sao cho không có quân hậu nào có thể "ăn" đƣợc quân hậu khác, nghĩa là không có hai quân nào đứng trên cùng hàng, hoặc cùng cột hoặc cùng đƣờng chéo. Màu của các quân hậu không có ý nghĩa trong bài toán này”.

Theo quy tắc cờ vua, các bƣớc đi của một quân hậu là:

Hình 3.1: Những bước đi của quân hậu có thể có

Từ đó, ta có thể mô hình hóa bài toán nhƣ hình vẽ sau:

Hình 3.2: Mô hình ban đầu của bài toán tám quân hậu

x x x x x x x x x x x x x x x x x x x x x x x x x x x Q Q

Ta đặt quân hậu Q đứng vị trí đã chọn nhƣ hình vẽ trên thì theo yêu cầu bài toán dấu “X” là vị trí quân hậu không đƣợc đi, nghĩa là các quân hậu tiếp theo phải đƣợc chọn ở các vị trí không nằm trên đƣờng dọc, đƣờng ngang, đƣờng chéo của các quân hậu trƣớc. Từ đó, với bài toán tám quân hậu thì ngƣời ta đã tìm ra 92 lời giải khác nhau. Một trong những lời giải này là:

Hình 3.3: Một trong những lời giải bài toán tám quân hậu

Bài toán chƣa dừng lại ở đó. Chúng ta có đƣợc bài toán tối ƣu tổng quát hơn là bài toán n-quân hậu đƣợc phát biểu: “Đặt n quân hậu trên bàn cờ kích thƣớc n×n sao cho không có quân hậu nào có thể "ăn" đƣợc quân hậu khác, nghĩa là không có hai quân nào đứng trên cùng hàng, hoặc cùng cột hoặc cùng đƣờng chéo. Màu của các quân hậu không có ý nghĩa trong bài toán này”.

Bài toán giống nhƣ một trò chơi, tuy nhiên đáng ngạc nhiên là có một số ứng dụng thực tế cho các vấn đề nhƣ cách tổ chức lƣu trữ bộ nhớ song song, kiểm tra các mạch tích hợp lớn, kiểm soát tắc ngẽn giao thông, ngăn chặn deadlock. Vấn đề này cũng đƣợc ứng dụng trong nhiều vấn đề thực tế mà các nghiệm liên quan đến hoán vị. Một trong những vấn đề nhƣ vậy là bài toán ngƣời du lịch (travelling salesperson problem). Điểm hấp dẫn của bài toán n-quân hậu là nó dễ dàng mô tả nhƣng lại không dễ để giải nó một cách hiệu quả.

Q Q Q Q Q Q Q Q

Về mặt thuật toán, nếu tách riêng bài toán này thì nó không thực sự quá quan trọng. Tuy nhiên, bài toán thƣờng đƣợc coi nhƣ là một phép thử cho các phƣơng pháp tối ƣu – có rất nhiều các giải pháp cho vấn đề này trên trang web, nhƣng chỉ có một số ít cho lời giải trong thời gian ngắn. Cũng chính vì sự lý thú của bài toán mà trong ngành khoa học máy tính nó đƣợc nghiên cứu rất đa dạng với nhiều thuật toán kỹ thuật tìm kiếm đƣợc sử dụng để tăng tốc cho bài toán: tìm kiếm quay lui (backtracking), nhánh cận (Branch and Bound), tìm kiếm theo chiều sâu với Heuristic, thuật toán tiến hóa, …Hơn thế, trong khi giải bài toán này, ngƣời ta còn gặp một loạt các vấn đề đã đƣợc toán học quan tâm từ lâu nhƣ hình vuông kỳ ảo (magic squares), hình vuông Latin (Latin squares), …

Có khoảng 320 bài viết về bài toán n-quân hậu, điều này đủ nói lên sự thu hút rất lớn của bài toán tƣởng nhƣ nhỏ này.

Cũng trong quá trình giải bài toán ngƣời ta thấy rằng trong tất cả các nghiệm của bài toán có rất nhiều nghiệm “thừa” (có thể suy ra từ các nghiệm khác bằng các phép đối xứng, quay hay kết hợp cả hai), chính vì vậy ngƣời ta tìm cách loại bỏ nó để tăng hiệu quả chƣơng trình (vấn đề này chúng ta sẽ trở lại ở phần tiếp theo).

Một phần của tài liệu lập trình ràng buộc với bài toán n quân hậu (Trang 28)