1. Trang chủ
  2. » Luận Văn - Báo Cáo

Một số vấn đề toán học ẩn chứa trong trò chơi Sudoku

23 236 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 23
Dung lượng 521,75 KB

Nội dung

BỘ GIÁO DỤC VÀ ĐÀO TẠO VIỆN HÀN LÂM KHOA HỌC VÀ CÔNG NGHỆ VIỆT NAM HỌC VIỆN KHOA HỌC VÀ CÔNG NGHỆ - Nguyễn Thị Nga MỘT SỐ VẤN ĐỀ TOÁN HỌC ẨN CHỨA TRONG TRỊ CHƠI SUDOKU TĨM TẮT LUẬN VĂN THẠC SĨ: TỐN HỌC NGƯỜI HƯỚNG DẪN KHOA HỌC : Dr Lê Xuân Thanh Hà Nội – 2018 Chương GIỚI THIỆU Sudoku trò chơi tiếng, sáng tạo Howard Garns (2/3/1905 - 6/10/1989) - kiến trúc sư người Mỹ Luật chơi phổ biến Sudoku sau Cho lưới × vng, chia thành khối × vng Điền chữ số vào ô vuông cho thỏa mãn điều kiện sau: (1) ô lưới phải điền xác chữ số; (2) có chữ số từ đến điền vào lưới; (3) chữ số xuất xác lần cột, hàng, khối × Thơng thường, câu đố Suduko, số ô vuông điền trước, mục tiêu điền vào toàn vng lại cho thỏa mãn điều kiện nêu Các câu đố Sudoku có lời giải gọi câu đố Sudoku Hình 1.1 đưa ví dụ câu đố Sudoku tiêu chuẩn × lời giải cho câu đố 2 8 6 8 7 9 5 4 9 8 9 Hình 1.1: Câu đố Sudoku (trái) and lời giải (phải) Mặc dù có quy tắc đơn giản có nhiều vấn đề khơng tầm thường thách thức ẩn sau câu đố Sudoku Điều làm cho Sudoku không phổ biến sống hàng ngày mà thu hút quan tâm nhiều nhà toán học Trong [6], tác giả chứng minh kết không tầm thường là, câu đố Sudoku có cỡ × 9, số gợi ý cho trước phải 17 Về độ phức tạp tính tốn, [8] chứng minh việc giải câu đố Sudoku có kích thước chung n2 × n2 (với n ≥ 3) NP-đầy đủ Ngoài vấn đề lý thuyết này, việc xây dựng mơ hình tốn học hiệu việc tìm kiếm thuật tốn nhanh, xác để giải câu đố Sudoku chủ đề hấp dẫn Những điều kiện trò chơi Sudoku xuất nhiều tốn lập lịch Vì vậy, Sudoku khơng tốn điển hình nhiều chun ngành tốn học (chẳng hạn tổ hợp, độ phức tạp tính tốn, tối ưu tổ hợp) mà ví dụ quan trọng lĩnh vực quy hoạch toán học Mục tiêu luận văn nghiên cứu số vấn đề tốn học ẩn sau câu đố Sudoku Chúng tơi tập trung chủ yếu vào toán đếm số lượng Sudoku, xây dựng đánh giá hiệu số mơ hình quy hoạch tốn học cho việc giải câu đố Sudoku Chương thảo luận toán đếm số lượng Sudoku Trong Chương 3, chúng tơi trình bày hai mơ hình quy hoạch ngun tuyến tính để giải câu đố Sudoku Chương trình bày kết thực nghiệm số mơ hình đánh giá hiệu mơ hình Chương kết thúc luận văn với số kết luận đề xuất 3 Chương ĐẾM SỐ SUDOKU Gọi NS số lượng cách điền khác vào bảng Sudoku × Mục tiêu chương tính số NS Điều ngạc nhiên chưa có cơng thức tổ hợp cho việc tính tốn số Trong chương này, dựa vào ý tưởng [2, 4], chúng tơi trình bày phương pháp tính NS Để thuận tiện, ta gắn nhãn cho khối lưới Sudoku từ B1 to B9 Hình 2.1 B1 B2 B3 B4 B5 B6 B7 B8 B9 Hình 2.1: Gán nhãn khối lưới ô vuông Sudoku 2.1 Hoàn thiện khối B1 − B3 Chúng ta qui ước lưới Sudoku có dạng tắc khối B1 điền Hình 2.2 Giả sử S9 nhóm hốn vị tập hợp gồm chữ số {1, , 9} Ta 4 Hình 2.2: Khối tắc nói hai lưới điền đầy đủ lưới Sudoku G1 G2 tương đương G2 tạo từ G1 sau thực phép hoán vị f ∈ S9 , tức G2 = f (G1 ) Chú ý rằng, lưới Sudoku khơng tắc tương đương với lưới Sudoku tắc thơng qua phép hốn vị S9 Vì vậy, lưới Sudoku tắc tương đương với |S9 | = 9! lưới Sudoku thơng qua phép hốn vị S9 Kí hiệu NC số lưới Sudoku tắc, NS = NC × 9! Ta tập trung vào việc tính số NC lưới Sudoku dạng tắc Do dòng B1 (1, 2, 3), ta có trường hợp cho dòng khối B2 B3 Bảng 2.1 5 No Dòng đầu B2 Dòng đầu B3 {4, 5, 6} {7, 8, 9} {7, 8, 9} {4, 5, 6} {4, 5, 7} {6, 8, 9} {4, 5, 8} {6, 7, 9} {4, 5, 9} {6, 7, 8} {4, 6, 7} {5, 8, 9} {4, 6, 8} {5, 7, 9} {4, 6, 9} {5, 7, 8} {5, 6, 7} {4, 8, 9} 10 {5, 6, 8} {4, 7, 9} 11 {5, 6, 9} {4, 7, 8} 12 {6, 8, 9} {4, 5, 7} 13 {6, 7, 9} {4, 5, 8} 14 {6, 7, 8} {4, 5, 9} 15 {5, 8, 9} {4, 6, 7} 16 {5, 7, 9} {4, 6, 8} 17 {5, 7, 8} {4, 6, 9} 18 {4, 8, 9} {5, 6, 7} 19 {4, 7, 9} {5, 6, 8} 20 {4, 7, 8} {5, 6, 9} Bảng 2.1: Các khả điền vào dòng đầu khối B2 B3 Đối với trường hợp Bảng 2.1, khối B2 B3 hồn thành Hình 2.3 Vì {a, b, c} tương ứng với 3! = hoán vị phần tử, có hàng khối B2 , B3 , điều dẫn đến 66 cấu hình khác B2 , B3 Tương tự trường hợp thứ hai Bảng 2.1 {4, 5, 6} {7, 8, 9} {7, 8, 9} {1, 2, 3} {1, 2, 3} {4, 5, 6} Hình 2.3: Hồn thiện khối B1 − B3 trường hợp Đối với trường hợp thứ ba Bảng 2.1, khối B2 B3 hồn thành Hình 2.4 Ở đây, a, b, c thay cho 1, 2, Mỗi lựa chọn a ứng với lựa chọn cho {b, c} Mỗi cách điền vào hàng khối B2 B3 tương ứng với 3! = hốn vị cách điền, có hàng hai khối Do đó, Hình 2.4 tương ứng với × 66 cấu hình khác B2 , B3 Tương tự cho trường hợp lại Bảng 2.1) {4, 5, 7} {6, 8, 9} {8, 9, a} {7, b, c} {6, b, c} {4, 5, a} Hình 2.4: Hồn thiện khối B1 − B3 trường hợp thứ ba Do đó, số cách điền vào khối B2 − B3 lưới Sudoku tắc × 66 + 18 × × 66 = 2612736 Số cách điền vào ba khối B1 − B3 (trong B1 khơng thiết dạng tắc) 9! × 2612736 = 948109639680 2.2 Phương pháp heuristic Ta nhắc lại luật chơi Sudoku sau: (i) số từ to xuất xác lần B1 − B9 ; (ii) số từ to xuất xác lần dòng lưới Sudoku; (iii) số từ to xuất xác lần cột lưới Sudoku Ta có 9! cách để điền tất số 1, , vào khối Do ta có Nb = (9!)9 cách điền tất khối B1 to B9 thỏa mãn điều kiện (i) Từ phần 2.1 ta có 948109639680 cách điền ba khối B1 − B3 thỏa mãn (i) (ii) Tương tự với B4 − B6 , B7 − B9 Vì vậy, số cách để điền vào tất khối B1 − B9 thỏa mãn điều kiện (i) (ii) Nr = 9481096396803 Tức là, Nb khả điền vào khối B1 − B9 thỏa mãn (i), có Nr khả thỏa mãn thêm điều kiện (ii), chiếm tỉ lệ Nr 9481096396803 p= = Nb (9!)9 Lập luận tương tự, Nb khả điền vào khối B1 − B9 thỏa mãn (i), có Nr khả thỏa mãn thêm điều kiện (iii), chiếm tỉ lệ p Một lời giải Sudoku lưới Sudoku thỏa mãn nguyên tắc (i), (ii), (iii) Giả sử tính chất với dòng cột độc lập với nhau, tổng số lời giải Sudoku 9481096396803 Nb × p = (9!) × (9!)9 = 6657084616885512582463.488 ≈ 6.657 × 1021 Thực tế tính chất dòng (ii) tính chất cột (iii) khơng độc lập với nhau, số tính tốn khơng câu trả lời xác Trong phần tiếp theo, thấy số gần với câu trả lời xác (với chênh lệch 0.2%) 2.3 2.3.1 Phương pháp đếm xác Danh mục cách điền B2 − B3 theo thứ tự từ điển Ta phân loại tất 2612736 cách điền vào B2 − B3 (khi B1 dạng tắc) theo ngun tắc sau • Hai cấu hình B2 B3 nằm lớp chúng có số cách để hồn thành lưới Sudoku Cụ thể, ta xét phép biến đổi sau • Trong B2 , hốn đổi cột cho số điền hàng tăng dần Tương tự với B3 • Hốn đổi vị trí B2 B3 cần thiết để B2 đứng trước B3 theo thứ tự từ điển (đối với số điền hàng khối) Sau phép biến đổi này, B1 khơng dạng tắc, ta gán nhãn lại toàn lưới Sudoku để đưa B1 trở dạng tắc Đối với phép biến đổi thứ hai, cách hoàn thành lưới Sudoku từ giá trị cho trước B2 − B3 tương ứng với cách hoàn thành lưới Sudoku đổi lại thứ tự khối B3 − B2 (chỉ cần hoán đổi B5 B6 , hoán đổi B8 B9 ) Tương tự cho phép biến đổi thứ Có 3! cách để hoán vị cột khối B2 B3 , có cách hốn vị khối B2 B3 Do đó, xét cách điền B2 − B3 theo thứ tự từ điển nêu trên, ta có 2612736/(2 × 3! × 3!) = 36288 cách điền Ta lập danh mục 36288 cách điền 2.3.2 Đếm số Sudoku từ danh mục cách điền B2 − B3 Thuật toán cho ta phương pháp đếm số lưới Sudoku tắc từ danh mục từ điển cách điền vào B2 − B3 Algorithm Đếm số Sudoku tắc từ danh mục cách điền B2 − B3 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: Dữ liệu: Danh mục theo thứ tự từ điển B2 − B3 Khởi tạo: Tô màu tất cấu hình danh mục numberOfClass ← while danh mục cấu hình có màu Gọi α cấu hình danh mục có màu Tìm Cα lớp cấu hình danh mục mà tương đương với α Xóa màu cấu hình Cα numberOfClass ← numberOfClass + Tính nα số cách hồn thiện lưới Sudoku tắc từ cấu hình α B2 − B3 end while Sau thực Thuật toán 1, ta thu tập hợp C cấu hình B2 − B3 , cấu hình C đại diện lớp tương đương Số lưới Sudoku tắc tính nα |Cα | NC = 72 (2.1) α∈C Tìm lớp tương đương Cα cấu hình cụ thể danh mục Ta nhận thấy có bốn loại biến đổi áp dụng cho B1 −B3 mà không làm thay đổi số cách hoàn thành lưới Sudoku từ ba khối • Loại 1: hốn vị cột khối B1 , B2 , B3 • Loại 2: hoán vị khối B1 , B2 , B3 • Loại 3: hốn vị cột of B1 , B2 , B3 ( cho cấu hình thu khơng phá vỡ quy tắc Sudoku) • Loại 4: Gắn nhãn lại (tức áp dụng hoán vị f ∈ S9 đến cấu hình B1 − B3 ) Bắt đầu từ cấu hình chọn α B1 − B3 (với B1 dạng tắc) Chúng ta xem xét tất cấu hình B1 − B3 thu từ α việc áp dụng biến đổi thuộc loại 1-3 Sau với cấu hình thu được, áp dụng biến đổi loại để đưa khối B1 dạng tắc Hơn áp dụng biến đổi loại 1-2 để đưa khối B2 − B3 dạng thỏa mãn điều kiện thứ tự từ điển Nếu thực thành công hoạt động cấu hình thu cuối thuộc lớp lớp tương đương với α Hồn thiện lưới Sudoku từ cấu hình B1 − B3 tắc Trong bước Thuật tốn 1, cần tính số cách để hồn thành lưới Sudoku đầy đủ từ cầu hình chọn α khối B1 − B3 Về nguyên tắc, thử tất cách để điền khối lại B4 − B9 xem lưới Sudoku Tuy nhiên, đẩy nhanh trình nhận xét cột khối B4 and B7 theo thứ tự từ điển Chính xác hơn, cách hoán đổi ba hàng lưới, giả định mục cột B4 theo thứ tự số, tương tự cho B7 Chúng ta hoán đổi ba hàng ba hàng cuối lưới Sudoku để B4 đứng trước B7 theo thứ tự từ điển với cột chúng Với lập luận tương tự Section 2.3.1, điều giúp giảm bớt 72 lần số cấu hình cần xét Cụ thể hơn, gọi Dα tập hợp tất cấu hình B1 − B3 , B4 , B7 B1 − B3 cho sẵn cấu hình α, B4 , B7 theo thứ tự từ điển Đặt n∗α số cách để hoàn thành lưới Sudoku đầy đủ từ tất cấu hình Dα Ta có nα = 72n∗α (2.2) Với cấu hình Dα thử tất cách để điền vào khối lại B5 , B6 , B8 , B9 việc sử dụng ý tưởng thuật toán quay lui (backtracking algorithm) Cụ thể là, liệt kê tất khả điền chữ số vào khối lại Sau đó, khả này, liệt kê tất khả điền chữ số vào ô lại, tiếp tục Nếu số chữ số a, tìm thấy khả để điền chữ số a + vào 10 khối (để quy tắc Sudoku không bị vi phạm), bỏ qua khả xét việc điền số a, tiếp tục xét đến khả Thuật toán cài đặt ngơn ngữ lập trình C++ Kết thu sau thực thuật tốn trình bày Bảng 2.2 Cột liệt kê thứ tự lớp tương đương, cột thứ hai liệt kê ba chữ số điền ba ô cột lưới Sudoku Tương tự, cột 3, 4, 5, 6, bảng tương ứng liệt kê chữ số điền vào cột 5, 6, 7, 8, ba hàng lưới Sudoku Cột thứ tám số cấu hình tương đương |Cα | lớp Cột cuối số n∗α cách để hoàn thành lưới đầy đủ từ đại diện α lớp 11 No Col Col Col Col Col Col 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,4 1,2,6 1,2,6 1,4,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,7 3,5,8 3,5,8 3,5,8 3,5,8 3,5,8 3,5,8 3,5,8 3,5,9 3,5,9 3,5,9 3,5,9 3,6,9 3,6,9 3,6,9 3,6,9 3,7,9 3,4,8 3,7,8 2,5,8 6,8,9 6,8,9 6,8,9 6,8,9 6,8,9 6,8,9 6,8,9 6,8,9 6,8,9 6,8,9 6,8,9 6,8,9 6,8,9 6,8,9 6,8,9 6,8,9 6,8,9 6,8,9 6,8,9 6,8,9 6,8,9 6,8,9 6,8,9 6,8,9 6,8,9 6,7,9 6,7,9 6,7,9 6,7,9 6,7,9 6,7,9 6,7,9 6,7,8 6,7,8 6,7,8 6,7,8 5,7,8 5,7,8 5,7,8 5,7,8 5,6,8 5,7,9 4,5,9 3,6,9 1,2,5 1,2,5 1,2,5 1,2,5 1,2,6 1,2,6 1,2,6 1,2,6 1,2,6 1,2,7 1,2,7 1,2,8 1,2,8 1,2,8 1,3,5 1,3,5 1,3,6 1,3,8 1,3,8 1,4,5 1,4,5 1,4,6 1,4,7 1,4,8 1,5,6 1,2,5 1,2,6 1,2,7 1,3,7 1,4,7 1,4,7 1,5,6 1,2,7 1,2,7 1,4,7 1,4,7 1,2,5 1,2,7 1,3,5 1,4,7 1,4,6 1,3,5 1,4,7 1,4,7 3,6,7 3,6,8 3,6,9 3,7,8 3,4,8 3,4,9 3,5,7 3,5,8 3,5,9 3,4,8 3,5,8 3,4,7 3,5,7 3,6,9 2,6,9 2,7,8 2,5,9 2,6,7 2,6,9 2,6,9 2,7,8 2,3,9 2,6,9 2,6,9 2,3,9 3,6,8 3,4,8 3,5,8 2,6,9 2,5,8 2,6,9 2,3,7 3,5,6 3,5,9 2,5,8 2,6,8 3,6,9 3,6,9 2,6,7 2,5,8 2,3,9 2,4,9 2,5,8 2,5,8 4,8,9 4,7,9 4,7,8 4,6,9 5,7,9 5,7,8 4,8,9 4,7,9 4,7,8 5,6,9 4,6,9 5,6,9 4,6,9 4,5,7 4,7,8 4,6,9 4,7,8 4,5,9 4,5,7 3,7,8 3,6,9 5,7,8 3,5,8 3,5,7 4,7,8 4,7,9 5,7,9 4,6,9 4,5,8 3,6,9 3,7,8 4,8,9 4,8,9 4,6,8 3,6,9 3,5,9 4,7,8 4,5,8 4,8,9 3,6,9 5,7,8 6,7,8 3,6,9 3,6,9 Số cấu hình Số cách điền tương đương hồn thiện lớp lưới Sudoku (|Cα |) (n∗α ) 2484 97961464 2592 97539392 1296 98369440 1512 97910032 2808 96482296 684 97549160 1512 97287008 1944 97416016 2052 97477096 288 96807424 864 98119872 1188 98371664 648 98128064 2592 98733568 648 97455648 360 97372400 3240 97116296 540 95596592 756 97346960 324 97714592 432 97992064 756 98153104 864 98733184 108 98048704 756 96702240 516 98950072 576 97685328 432 98784768 324 98493856 72 100231616 216 99525184 252 96100688 288 96631520 864 97756224 216 99083712 432 98875264 216 102047904 144 101131392 324 96380896 108 102543168 12 99258880 20 94888576 24 97282720 108374976 Bảng 2.2: Kết nhận sau thực Thuật toán 12 Từ Bảng 2.2 công thức (2.1) - (2.2), ta thu số lượng cách điền vào bảng Sudoku cỡ × n∗α |Cα | = 6670903752021072936960 NS = 9! × 722 × α∈C 13 Chương MƠ HÌNH QUY HOẠCH NGUYÊN GIẢI SUDOKU Xuyên suốt chương này, ta xét câu đố Sudoku với cỡ n2 × n2 Ta trang bị hệ tọa độ cho câu đố Sudoku để tọa độ ô bên trái lưới (1, 1), ô cuối bên phải (n2 , n2 ) Ta đánh số n × n khối câu đố Sudoku từ trái qua phải từ xuống dưới, vậy, khối n × n bên trái đánh số 1, khối n × n bên phải đánh số n2 Ta kí hiệu N := {1, , n} S := {1, 2, , n2 } 3.1 Mơ hình quy hoạch nhị phân tuyến tính Ta sử dụng biến nhị phân sau xijk = if k điền vào ô (i, j) lưới, ngược lại Đặt G tập hợp thông tin ô điền sẵn lưới Sudoku, cụ thể G = {(i, j, k) | k điền ô (i, j)} 14 Ta thu mơ hình quy hoạch nhị phân tuyến tính cho tốn Sudoku sau (BLP ) · xijk (3.1) i,j,k∈S với điều kiên n xijk = ∀ (i, j, k) ∈ G (3.2) xijk = ∀ i ∈ S, j ∈ S (3.3) xijk = ∀ j ∈ S, k ∈ S (3.4) xijk = ∀ i ∈ S, k ∈ S (3.5) xijk = ∀ k ∈ S, p ∈ N, q ∈ N (3.6) xijk ∈ {0, 1} ∀ i ∈ S, j ∈ S, k ∈ S (3.7) k=1 n2 i=1 n2 nq j=1 np j=nq−n+1 i=np−n+1 Các ràng buộc (3.2) mô tả ô điền lưới Các ràng buộc (3.3) đảm bảo lưới điền xác giá trị k ∈ S Các ràng buộc (3.4) đảm bảo cột lưới, giá trị k ∈ S xuất xác lần Tương tự, ràng buộc (3.5) đảm bảo hàng lưới, giá trị k ∈ S xuất xác lần Mỗi cặp (p, q) ràng buộc (3.6) tương ứng với lưới n × n câu đố, ràng buộc chúng đảm bảo giá trị k ∈ S xuất xác lần khối 3.2 Mơ hình quy hoạch ngun Mơ hình sử dụng biến nguyên xij (i, j ∈ S) với giá trị S Giá trị xij mà điền vào ô (i, j) lưới Sudoku Đặt F tập số (i, j) ô vuông điền lưới Với ô (i, j) ∈ F , đặt g(i, j) giá trị mà cho bên Ta mơ hình tốn Sudoku mơ hình quy hoạch ngun (khơng tuyến tính) 15 sau (N LIP ) · xij (3.8) i,j∈S với điều kiện xij = g(i, j) |xij − xik | ≥ |xij − xkj | ≥ |xnp−n+i,nq−n+j − xnp−n+k,nq−n+l | ≥ xij ∈ S ∀ ∀ ∀ ∀ (i, j) ∈ F (3.9) i, j, k ∈ S, j < k (3.10) i, j, k ∈ S, i < k (3.11) p, q, i, j ∈ N, ni + j < nk + l (3.12) ∀ i, j ∈ S (3.13) Các ràng buộc (3.9) liệt kê ô điền lưới Các ràng buộc (3.13) đảm bảo biến sử dụng nguyên, ràng buộc (3.10) đảm bảo ô khác hàng lưới điền giá trị khác Khi đó, có |S| = n2 ô hàng lưới có |S| = n2 giá trị điền vào đó, ràng buộc (3.10) đảm bảo phần tử S xuất xác lần hàng lưới Tương tự, ràng buộc (3.11) đảm bảo phần tử S xuất lần cột lưới, ràng buộc (3.12) đảm bảo phần tử S xuất lần khối Tính khơng tuyến tính (N LIP ) dấu giá trị tuyệt đối vế trái ràng buộc (3.10)-(3.12) Ta cần tuyến tính hóa ràng buộc phi tuyến Lưu ý ràng buộc có dạng |y| ≥ 1, biết thêm y biến số nguyên |y| ≤ n2 − Để tuyến tính hóa ràng buộc này, ta sử dụng biến y+ = a+ = y if y > 0, if y ≤ 0, if y > 0, if y ≤ 0, y− = −y a− = Khi |y| = y + + y − , ràng buộc ≤ |y| ≤ n2 − 1, y ∈ Z if y ≥ 0, if y < 0, if y < 0, if y ≥ 16 tuyến tính hóa sau: y+ − y− y+ + y− a+ ≤ y + a− ≤ y − a+ + a− y+, y− a+ , a− =y ≥1 ≤ (n2 − 1)a+ ≤ (n2 − 1)a− =1 ∈Z ∈ {0, 1} 17 Chương THỬ NGHIỆM SỐ 4.1 4.1.1 Mơ hình ZIMPL Mơ hình ZIMPL cho (BLP ) Chúng sử dụng ZIMPL (xem [5]) để mô tả mơ hình (BLP ) Code Các kiện cho trước câu đố Sudoku nêu tệp liệu riêng biệt có tên “Clues.dat" Mỗi dòng tệp liệu thứ tự có dạng i, j, k với (i, j, k) ∈ S × S × S, nêu thơng tin k kiện điền sẵn vào ô (i, j) Code 1: Mơ hình ZIMPL cho (BLP ) # A ZIMPL model to solve Sudoku using binary variables # based on the formulation ( BLP ) # Copyright @ Nguyen Thi Nga # Parameter defining the size of Sudoku puzzle ( n ^2 x n ^2) param n := 3; 10 # Auxiliary sets s e t N := {1 n }; s e t S := {1 n * n }; 11 12 13 14 # Import Sudoku clues from input data file # G := {( i , j , k ) | k is already filled in the cell (i , j ) } s e t G := { read " Clues dat " as " " comment " # "}; 15 16 17 18 # Variables # x [i , j , k ] = if k is filled in the cell (i , j ) , # = otherwise 18 19 var x [ S * S * S ] binary ; 20 21 22 # # Modeling objective minimize objective : sum in S * S * S : * x [i , j , k ]; 23 24 # # Modeling constraints 25 26 27 28 29 # For the already - filled cells in the grid subto clues : f o r a l l in G x [i , j , k ] == 1; 30 31 32 33 34 # Each cell in the grid is filled by exactly one value of k in S subto cells : f o r a l l in S * S sum in S : x [i , j , k ] == 1; 35 36 37 38 39 40 # In each column of the grid , each value of k in S appears # exactly once subto columns : f o r a l l in S * S sum in S : x [i , j , k ] == 1; 41 42 43 44 45 # In each row of the grid , each value of k in S appears exactly # once subto rows : f o r a l l in S * S sum in S : x [i , j , k ] == 1; 46 47 48 49 50 51 # In each block of the grid , each value of k in S appears # exactly once subto blocks : f o r a l l

in N * N * S sum in N * N : x [ n *p - n +i , n *q - n +j , k ] == 1; 4.1.2 Mơ hình ZIMPL cho (N LIP ) Mơ hình (N LIP ) mơ tả ZIMPL Code Code 2: Mơ hình ZIMPL cho (N LIP ) # A ZIMPL model to solve Sudoku using integer variables # based on the formulation ( NILP ) # Copyright @ Nguyen Thi Nga 19 # Parameter defining the size of Sudoku puzzle ( n ^2 x n ^2) param n := 3; 10 # Auxiliary sets s e t N := {1 n }; s e t S := {1 n * n }; 11 12 # # Import Sudoku clues from input data file 13 14 15 # F is the set of cells with clues s e t F := { read " Clues dat " as " " comment " # "}; 16 17 18 # given (i , j ) is the clue given in cell (i , j ) param given [ F ] := read " Clues dat " as " n " comment " # "; 19 20 21 22 # # Variables # x [i , j ] = the value filled in cell (i , j ) var x [ S * S ] i n t e g e r >= = 1; 39 40 41 42 43 44 # Different cells in the same column of the grid have different # assigned values subto columns : f o r a l l in S * S * S with i < k vabs ( x [i , j ] - x [k , j ]) >= 1; 45 46 # Different cells in the same block of the grid have different 20 47 48 49 50 51 # assigned values subto blocks : f o r a l l

in N * N f o r a l l in N * N * N * N with n * i + j < n * k + l vabs ( x [ n *p - n +i , n *q - n + j ] - x [ n *p - n +k , n *q - n + l ]) >= 1; 4.2 Thử nghiệm số Chúng chọn 10 liệu câu đố Sudoku cỡ 9×9 từ ứng dụng Sudoku phiên 4.0.3 (bản quyền DotFinger Games) Google Play Mỗi liệu bao gồm 10 câu đố Sudoku có số lượng kiện điền sẵn Chúng sử dụng SCIP (xem [1]) giải mơ hình nhận từ liệu Tất thử nghiệm thực máy tính có cấu hình Dual Core × 2.20 GHz GB RAM Bảng 4.1 ghi lại thời gian chạy trung bình SCIP 10 câu đố liệu, tương ứng với mơ hình (BLP ) (N LIP ) Từ bảng này, ta nhận thấy mơ hình (BLP ) thực hiệu việc giải nhanh chóng câu đố Sudoku (trong vòng giây) Sự hiệu (BLP ) độc lập với mức độ khó câu đố Sudoku (số lượng kiện cho trước lưới Sudoku) Hiệu mơ hình (N LIP ) phụ thuộc vào mức độ khó câu đố Sudoku, khơng cạnh tranh với mơ hình (BLP ) Số lượng kiện (BLP ) (N LIP ) 17 0.066 469.968 18 0.078 244.203 19 0.068 220.08 20 0.078 182.422 21 0.116 207.19 22 0.057 169.933 23 0.049 110.296 24 0.073 103.989 25 0.05 54.813 26 0.063 74.841 Bảng 4.1: Hiệu thời gian chạy chương trình SCIP theo đơn vị giây mơ hình (BLP ) (N LIP ) 21 Chương KẾT LUẬN Luận văn trình bày số vấn đề tốn học ẩn chứa câu đố Sudoku Chương luận văn thảo luận toán đếm số lượng cách điền khác vào lưới Sudoku có kích thước × Một phương pháp heuristic cho thấy số khoảng 6657084616885512582463.488 với độ xác xấp xỉ 0.2% Một phương pháp xác với trợ giúp máy tính cho thấy số lượng cách điền vào lưới Sudoku xác 6670903752021072936960 Chương trình bày hai mơ hình quy hoạch ngun cho tốn giải Sudoku có kích thước n2 × n2 Một mơ hình sử dụng biến nhị phân với ba số Mơ hình lại dựa kỹ thuật tuyến tính hóa ràng buộc hai biến ngun khác nhau, sử dụng biến nguyên với hai số Chương trình bày hai mơ hình ZIMPL cho mơ hình quy hoạch tốn học đề xuất Chương Thực nghiệm số câu đố Sudoku có kích thước × cho thấy mơ hình sử dụng biến nhị phân ba số hiệu thời gian giải mô hình, khơng phụ thuộc số lượng kiện cho trước câu đố Sudoku Trong thời gian tới, dự định nghiên cứu số biến thể Sudoku, quan tâm đến vấn đề làm để tạo câu đố Sudoku 22 Tài liệu tham khảo [1] T Achterberg Constraint Integer Programming PhD Dissertation, Technische Universităat Berlin, 2007 [2] B Felgenhauer and F Jarvis Mathematics of Sudoku I Technical report, January 25, 2006 [3] H Garns Number Place Dell Pencil Puzzles and Word Games, 16:6, 1979 [4] K Y Lin Number of Sudokus Journal of Recreational Mathematics, 33(2):120–124, 2004 [5] T Koch Rapid Mathematical Programming PhD Dissertation, Technische Universităat Berlin, 2004 [6] G McGuire, B Tugemann, and G Civario There Is No 16-Clue Sudoku: Solving the Sudoku Minimum Number of Clues Problem via Hitting Set Enumeration Experimental Mathematics, 23(2):190–217, 2014 [7] A Schrijver Theory of Linear and Integer Programming John Wiley and Sons, 1998 [8] T Yato and T Seta Complexity and Completeness of Finding Another Solution and Its Application to Puzzles IEICE TRANSACTIONS on Fundamentals of Electronics, Communications and Computer Sciences, E86-A(5), 1052–1060, 2003 ... văn trình bày số vấn đề toán học ẩn chứa câu đố Sudoku Chương luận văn thảo luận toán đếm số lượng cách điền khác vào lưới Sudoku có kích thước × Một phương pháp heuristic cho thấy số khoảng 6657084616885512582463.488... chuyên ngành toán học (chẳng hạn tổ hợp, độ phức tạp tính tốn, tối ưu tổ hợp) mà ví dụ quan trọng lĩnh vực quy hoạch toán học Mục tiêu luận văn nghiên cứu số vấn đề toán học ẩn sau câu đố Sudoku Chúng... tập trung chủ yếu vào toán đếm số lượng Sudoku, xây dựng đánh giá hiệu số mơ hình quy hoạch tốn học cho việc giải câu đố Sudoku Chương thảo luận toán đếm số lượng Sudoku Trong Chương 3, chúng

Ngày đăng: 13/07/2019, 12:01

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w