Dự án môn Tối ưu hóa (Optimization). Dự án này tập trung vào việc mô hình hóa bài toán giải đố logic Kakuro dưới dạng một bài toán Quy hoạch tuyến tính nguyên hỗn hợp (MILP - Mixed Integer Linear Programming) và sử dụng bộ giải Gurobi để tìm nghiệm chính xác.
Trường Đại học Khoa học Tự nhiên, ĐHQGHN - Khoa Toán - Cơ - Tin học
| Thành viên | MSSV | Lớp |
|---|---|---|
| Đinh Bảo Triết (Leader) | 23000164 | K68A2 Toán Tin |
| Đỗ Minh Hoàng | 23000121 | K68A2 Toán Tin |
| Ninh Trung Kiên | 23000130 | K68A2 Toán Tin |
Kakuro là một trò chơi logic số học trên lưới ô vuông, trong đó:
- Ô trắng: Cần điền các số từ 1 đến 9.
- Ô gợi ý: Chứa tổng mục tiêu của một hàng hoặc một cột liền kề.
- Luật chơi: Tổng các số điền vào phải bằng giá trị gợi ý và không có số nào lặp lại trong cùng một nhóm tổng.
Thay vì giải bằng thuật toán quay lui (Backtracking) truyền thống, dự án này tiếp cận dưới góc độ Mô hình hóa Toán học (Mathematical Modeling), chuyển đổi các luật chơi thành các phương trình và bất phương trình tuyến tính. Đây là một bài toán khả thi (Feasibility Problem) không có hàm mục tiêu.
Kakuro-Puzzle-Optimization/
├── data/ # Các file đề bài Kakuro kích thước lớn và ảnh mẫu
├── docs/ # Slide báo cáo dự án (.pdf)
├── result/ # Các hình ảnh kết quả giải đố đã kết xuất (.png)
├── source.py # Mã nguồn chính: Xây dựng mô hình MILP và giao diện
└── README.md # Tài liệu hướng dẫn dự án
Mô hình sử dụng biến quyết định nhị phân
Hệ thống ràng buộc cốt lõi (Constraints):
- Ràng buộc điền số: Mỗi ô trắng chứa đúng một số từ 1 đến 9.
-
Ràng buộc tổng: Tổng các giá trị trong một nhóm
$G$ bằng đúng giá trị gợi ý$T_G$ .
- Ràng buộc duy nhất: Không có số nào xuất hiện quá 1 lần trong cùng một nhóm.
Mô hình giải quyết cực kỳ hiệu quả với bộ giải Gurobi. Thuật toán tự động tìm ra nghiệm tối ưu (Optimal) ngay cả với các bảng kích thước rất lớn.
(Ảnh bảng Kakuro mẫu và kết quả giải đố được tự động vẽ bằng thư viện Matplotlib)
Bạn cần cài đặt các thư viện sau:
pip install gurobipy matplotlib
Vì Gurobi là một bộ giải thương mại mạnh mẽ, mã nguồn này yêu cầu phải có giấy phép (License) hợp lệ để chạy:
- Truy cập Trang chủ Gurobi và tạo một tài khoản bằng email trường đại học (
@hus.edu.vn). - Vào mục Academic License, xin cấp một giấy phép miễn phí.
- Copy đoạn mã kích hoạt (có dạng
grbgetkey xxxxxxxx-...). - Mở Terminal (Command Prompt) trên máy tính, dán lệnh đó vào và nhấn Enter để cài đặt giấy phép.
Chạy trực tiếp file mã nguồn để xem Gurobi tối ưu hóa và xuất kết quả:
python source.py
- H. Simonis, Kakuro as a Constraint Problem, ResearchGate, 2008.
- Tài liệu học tập môn Tối ưu hóa - Trường Đại học Khoa học Tự nhiên, ĐHQGHN.

