Series: Mô hình hóa các câu đố logic
Phần: 3 / 91. Giới thiệu
Galaxies là một câu đố logic được mô tả như sau, cho một lưới các ô vuông với các chấm tượng trưng cho các ngôi sao, người chơi cần chia lưới thành các khu vực gọi là các thiên hà thỏa mãn các điều kiện sau:
- Lưới được phủ kín bởi các thiên hà
- Các thiên hà không chồng chéo lên nhau
- Mỗi thiên hà phải và chỉ chứa một ngôi sao ở giữa làm tâm
- Mỗi thiên hà phải đối xứng tâm qua ngôi sao ở giữa
Tham khảo: Wikipedia
Dưới đây là ví dụ cho một câu đố Galaxies cỡ 10×18 và lời giải

2. Mô hình hóa câu đố
- là số hàng của lưới
- là số cột của lưới
- là số lượng thiên hà (bằng số lượng ngôi sao trong lưới)
- là tập hợp các ô có tọa độ chứa tâm của thiên hà
- là tập hợp các ô có khả năng thuộc thiên hà
- là tập hợp tất cả đường đi từ ô đến trung tâm của thiên hà
Ví dụ, trong hình dưới đây, với là thiên hà chứa ngôi sao màu đen, khi đó là các ô nằm trong hình chữ nhật có viền màu xanh dương, là tập hợp các ô nằm trong vùng có viền màu đỏ và đường màu xanh lá là một đường đi từ ô màu cam đến tâm.

- là tập hợp tất cả các ô thuộc đường đi
- là số lượng ô thuộc đường đi
2.1. Biến quyết định
Với mỗi ô trên lưới và một thiên hà (), xây dựng biến thỏa mãn
2.2. Các ràng buộc
- Lưới được phủ kín bởi các thiên hà, các thiên hà không chồng chéo lên nhau. Hai điều kiện này tương đương với điều kiện sau, mỗi ô trên lưới phải và chỉ thuộc một thiên hà
- Mỗi thiên hà phải chứa tâm của nó
- Mỗi thiên hà phải đối xứng tâm qua tâm của nó
Trong đó là ô đối xứng của ô qua tâm của thiên hà
Chú ý: Các điều kiện trên đã đủ để giải một câu đố Galaxies cỡ nhỏ (7×7, 8×8, ...). Tuy nhiên khi giải một câu đố có cỡ lớn hơn (10×10 trở lên) ta sẽ gặp phải một vấn đề đó là thiên hà có thể bị chia thành nhiều mảnh nhỏ rời nhau.
-
Các ô trong một thiên hà phải kết nối với nhau. Điều kiện này tương đương với điều kiện sau, giữa 2 ô bất kỳ thuộc cùng một thiên hà phải tồn tại ít nhất 1 đường đi giữa chúng mà tất cả ô trên đường đi này cũng thuộc thiên hà đó.
Để tuyến tính hóa điều kiện này ta phải tạo thêm các biến trung gian với mỗi thiên hà , ô và mỗi đường đi thỏa mãn
Hay có thể hiểu biến bằng 1 nếu ô kết nối với tâm của thiên hà qua đường đi . Bằng phương pháp hình học ta biểu diễn các biến thông qua các biến bằng các điều kiện sau
Cuối cùng, điều kiện ban đầu sẽ được tuyến tính hóa như sau
-
Ngoài ra, để thu nhỏ không gian tìm kiếm của bài toán ta có thể thêm điều kiện, các ô không thuộc thì sẽ không thuộc thiên hà
2.3. Hàm mục tiêu
Bài toán này không có hàm mục tiêu, bởi vì ta không cần tối thiểu hóa hay tối đa hóa gì cả, việc cần làm chỉ là tìm ra một nghiệm chấp nhận được. Về mặt kỹ thuật, khi lập trình ta có thể để hàm mục tiêu là một hằng số (mình hay chọn số 0).
3. Kết luận
Điểm nhấn của câu đố này nằm ở 2 điều kiện cuối, mỗi điều kiện lại có một tác dụng khác nhau nhưng đều có một điểm chung là nếu không để ý kỹ ta rất có thể sẽ bỏ qua chúng. Để tránh trường hợp này ta cần suy nghĩ kỹ về bài toán đồng thời thử giải nhiều trường hợp khác nhau để phát hiện ra vấn đề (nếu có).
Tham khảo thêm các câu đố Galaxies và biến thể tại Krazydad. Code mô hình hóa Galaxies bằng python có tại Tung-hehe.
Happy modeling!


