Ngày 29 tháng XNUMX là Ngày giải đố quốc gia và để kỷ niệm, chúng tôi đã tạo một blog thú vị trình bày chi tiết cách giải Sudoku bằng trí tuệ nhân tạo (AI).
Giới thiệu
Trước lo lắng, Các Câu đố Sudoku đã là cơn thịnh nộ và nó vẫn còn rất phổ biến. Trong những năm gần đây, việc sử dụng tối ưu hóa phương pháp giải câu đố đã là một chủ đề nổi bật. Nhìn thấy “Giải câu đố Sudoku bằng cách sử dụng tính năng tối ưu hóa trong Arkieva".
Ở thời điểm hiện tại, việc sử dụng AI tập trung vào học máy, bao gồm nhiều phương pháp từ hồi quy Lasso đến học tăng cường. Việc sử dụng AI có tái hiện để giải quyết phức tạp lập kế hoạch những thách thức. Một phương pháp, tìm kiếm bằng quay lui, thường được sử dụng và hoàn hảo cho Sudoku.
Blog này sẽ cung cấp mô tả chi tiết về cách sử dụng phương pháp này để giải Sudoku. Hóa ra, “quay ngược” có thể được tìm thấy bên trong các công cụ tối ưu hóa và máy học, đồng thời là nền tảng của phương pháp phỏng đoán tiên tiến mà Arkieva sử dụng để lập lịch. Thuật toán được triển khai bằng “Ngôn ngữ lập trình mảng”, một ngôn ngữ lập trình hướng hàm để xử lý một tập hợp cấu trúc mảng phong phú.
Cơ bản về Sudoku
Từ Wikipedia: Sudoku là một trò chơi xếp số theo tổ hợp, dựa trên logic. Mục tiêu là lấp đầy lưới 9×9 bằng các chữ số sao cho mỗi cột, mỗi hàng và mỗi trong số chín lưới con 3×3 tạo thành lưới (còn được gọi là “hộp”, “khối”, “vùng”, hoặc “hình vuông phụ”) chứa tất cả các chữ số từ 1 đến 9. Bộ giải câu đố cung cấp một lưới đã hoàn thiện một phần, thường có một giải pháp duy nhất. Các câu đố hoàn chỉnh luôn là một loại hình vuông Latinh có thêm ràng buộc về nội dung của từng vùng riêng lẻ. Ví dụ: cùng một số nguyên không được xuất hiện hai lần trong cùng một hàng hoặc cột của bàn chơi 9×9 hoặc trong bất kỳ vùng nào trong chín vùng con 3×3 của bàn chơi 9×9.
Bảng 1 có một vấn đề ví dụ. Có 9 hàng và 9 cột tổng cộng là 81 ô. Mỗi ô được phép có một và chỉ một trong chín số nguyên từ 1 đến 9. Trong giải pháp ban đầu, một ô có một giá trị duy nhất – giá trị này cố định giá trị trong ô này thành giá trị đó hoặc ô trống, cho biết chúng ta cần để tìm giá trị cho ô này. Ô (1,1) có giá trị 2 và ô (6,5) có giá trị 6. Ô (1,2) và ô (2,3) trống và thuật toán sẽ tìm giá trị cho các ô này.
Sự phức tạp
Ngoài việc thuộc về một và chỉ một hàng và cột, một ô còn thuộc về một và chỉ một ô. Có 1 hộp và chúng được biểu thị bằng màu trong Bảng 9. Bảng 1 sử dụng một số nguyên duy nhất từ 2 đến 1 để xác định từng hộp hoặc lưới. Các ô có giá trị hàng (9, 1 hoặc 2) và giá trị cột (3, 1 hoặc 2) thuộc ô 3. Ô 1 là giá trị hàng (6, 4, 5) và giá trị cột (6, 7) , 8). Id hộp được xác định theo công thức BOX_ID = {9x(sàn((ROW_ID-3) /1)} + trần (COL_ID/3), đối với ô (3), 5,7 = 6x(sàn(3-5) ))/1) + trần (3/8)= 3×3 + 1 = 3+3.
Trái tim của câu đố
Để tìm một giá trị nguyên từ 1 đến 9 cho mỗi ô chưa biết sao cho các số nguyên từ 1 đến 9 được sử dụng một lần và chỉ một lần cho mỗi cột, mỗi hàng và mỗi hộp.
Hãy nhìn vào ô (1,3) trống. Hàng 1 đã có giá trị 2 và 7. Những giá trị này không được phép trong ô này. Cột 3 đã có giá trị 3, 5,6, 7,9. Những điều này không được phép. Ô 1 (màu vàng) có các giá trị 2, 3 và 8. Không được phép. Các giá trị sau không được phép (2,7); (3, 5, 6, 7, 9); (2, 3, 8). Các giá trị duy nhất không được phép là (2, 3, 5, 6, 7, 8, 9). Các giá trị ứng cử viên duy nhất là (1,4).
Một cách tiếp cận giải pháp là tạm thời gán 1 cho ô (1,3) và sau đó cố gắng tìm các giá trị ứng viên cho một ô khác.
Giải pháp quay lui: Các thành phần khởi động
Cấu trúc mảng
Nơi bắt đầu là quyết định cấu trúc mảng để lưu trữ bài toán nguồn và hỗ trợ tìm kiếm. Bảng 3 có cấu trúc mảng này. Cột 1 là id số nguyên duy nhất cho mỗi ô. Các giá trị nằm trong khoảng từ 1 đến 81. Cột 2 là ID hàng của ô. Cột 3 là cột ID của ô. Cột 4 là id hộp. Cột 5 là giá trị trong ô. Quan sát một ô không có giá trị được cho giá trị XNUMX thay vì trống hoặc null. Điều này giữ cho đây là một “mảng chỉ số nguyên” – vượt trội hơn nhiều về hiệu suất.
Trong APL, mảng này sẽ được lưu trữ trong mảng 2 chiều có hình dạng là 81 x 5. Giả sử các phần tử của Bảng 3 được lưu trữ trong biến MAT. Các chức năng ví dụ là:
Lệnh MAT[1 2 3;]lấy 3 hàng đầu tiên của MAT
1 1 1 1 2
2 1 2 1 0
3 1 3 1 0
MAT[1 2 3; 4 5] bảo vệ hàng 1, 2, 3 và chỉ cột 4 và 5
1
1
1
(MAT[;5]=0)/MAT[;1] tìm thấy tất cả các ô cần giá trị.
ĐÈN BẢNG 3
Kiểm tra độ chính xác: Bản sao
Trước khi bắt đầu tìm kiếm, điều quan trọng là phải kiểm tra sự tỉnh táo! Đó là giải pháp khởi đầu khả thi. Khả thi đối với Sudoku là hiện tại có các bản sao ở bất kỳ hàng, cột hoặc hộp nào không. Giải pháp khởi đầu hiện tại, ví dụ, 1 là khả thi. Bảng 4 có một ví dụ trong đó giải pháp ban đầu có các bản sao. Hàng 1 có hai giá trị 2. Vùng 1 có hai giá trị 2. Hàm “SANITY_DUPE” xử lý logic này.
Kiểm tra độ chính xác: Tùy chọn cho các ô không có giá trị
Một thông tin rất hữu ích sẽ là tất cả các giá trị có thể có của một ô không có giá trị. Nếu không có ứng cử viên thì câu đố này không thể giải được. Một ô không thể nhận giá trị đã được hàng xóm của nó xác nhận. Sử dụng Bảng 1 cho Ô (1,3,'1' – 1 cuối cùng này là boxid), các hàng xóm của nó là hàng 1, cột 3 và hộp 1. Hàng 1 có các giá trị (2,7); cột 3 có các giá trị (3,5,6,7,9); hộp 1 có các giá trị (2,3,8). Ô (1,3.1) không thể lấy các giá trị sau (2,3,5,6,7,8,9). Các tùy chọn duy nhất cho ô (1,3,1) là (1,4). Đối với ô (4,1,2), các giá trị 1, 2, 3, 5, 6, 7, 9 đã được sử dụng ở hàng 4, cột 1 và/hoặc hộp 4. Các giá trị ứng cử viên duy nhất là (4,8) . Chú thích “SANITY_CAND” xử lý logic này.
Bảng 5 cho thấy các ứng viên, ví dụ, 1 khi bắt đầu quá trình tìm kiếm. Nếu một ô đã được gán một giá trị trong điều kiện bắt đầu (Bảng 1), thì giá trị này sẽ được lặp lại và hiển thị bằng màu đỏ. Nếu ô cần giá trị chỉ có một tùy chọn thì ô này sẽ hiển thị màu trắng. Ô (8,7,9) có giá trị duy nhất 7 màu trắng. (2,5,8,4,3) được yêu cầu bởi cột hàng xóm 7. (1, 2, 9) ở hàng 8. (3,2,6) ở ô 9. Chỉ có giá trị 7 là không được xác nhận.
Kiểm tra sự tỉnh táo: Tìm kiếm xung đột
Thông tin xác định tất cả các tùy chọn cho các ô cần giá trị (được đăng trong Bảng 4), cho phép chúng tôi xác định xung đột trước khi bắt đầu quá trình tìm kiếm. Xung đột xảy ra khi hai ô cần giá trị chỉ có một ứng cử viên, giá trị ứng cử viên giống nhau và hai ô là lân cận. Từ Bảng 4, chúng ta biết ô duy nhất cần giá trị và chỉ có một ứng cử viên là ô (8,7,9). Ví dụ 1, không có xung đột.
Điều gì sẽ là một cuộc xung đột? Nếu giá trị duy nhất có thể có cho ô (3,7,3) là 7 (thay vì 1, 6, 7) thì có xung đột. Ô (8,7) và ô (3,7) là hàng xóm – cùng một cột. Tuy nhiên, nếu giá trị duy nhất có thể có cho ô (4,9,2) là 7 (thay vì 1, 2, 7) thì đây sẽ không phải là xung đột. Những tế bào này không phải là hàng xóm.
Tóm tắt kiểm tra vệ sinh
- Nếu có sự trùng lặp thì giải pháp ban đầu là không khả thi.
- Nếu một ô cần giá trị nhưng không có bất kỳ ứng cử viên nào thì không có giải pháp khả thi nào cho câu đố này. Danh sách các giá trị ứng viên cho mỗi ô có thể được sử dụng để giảm không gian tìm kiếm – cho cả việc quay lui và tối ưu hóa.
- Khả năng tìm ra xung đột xác định câu đố không khả thi – không có lời giải – nếu không có quá trình tìm kiếm. Ngoài ra, nó còn xác định các “ô có vấn đề”.
Giải pháp quay lui: Quá trình tìm kiếm
Với cấu trúc dữ liệu cốt lõi và việc kiểm tra độ tỉnh táo được áp dụng, chúng tôi chuyển sự chú ý sang quá trình tìm kiếm. Chủ đề lặp lại một lần nữa là đưa các cấu trúc dữ liệu vào đúng vị trí để hỗ trợ tìm kiếm.
Theo dõi tìm kiếm
Mảng Tracker theo dõi các nhiệm vụ đã thực hiện
- Col 1 là bộ đếm
- Col 2 là số lượng tùy chọn có sẵn để gán cho ô này
- 1 có nghĩa là có 1 tùy chọn, 2 có nghĩa là có hai tùy chọn, v.v.
- 0 có nghĩa là – không có tùy chọn nào hoặc đặt lại về 0 (không có giá trị được chỉ định) và quay lại
- Col 3 là ô được gán số chỉ mục giá trị (1 đến 81)
- Col 4 là giá trị được gán cho ô trong lịch sử track
- Giá trị 9999 có nghĩa là ô này là nơi tìm thấy ngõ cụt
- Giá trị của một số nguyên từ 1 đến 9 là giá trị được gán cho ô này tại thời điểm này trong quá trình tìm kiếm.
- Giá trị 0 có nghĩa là ô này cần được gán
Mảng theo dõi được sử dụng để hỗ trợ quá trình tìm kiếm. Mảng THEO DÕI có cấu trúc tương tự như trình theo dõi nhưng giữ lại lịch sử của toàn bộ quá trình tìm kiếm. Bảng 6 có một phần TRACKHIST chẳng hạn 1. Nó sẽ được giải thích chi tiết hơn ở phần sau.
Ngoài ra, mảng PAV (một vectơ của một vectơ), theo dõi các Giá trị được gán trước đó cho ô này. Điều này đảm bảo chúng tôi không xem lại giải pháp thất bại – tương tự như những gì được thực hiện trong TABU.
Có một quy trình ghi nhật ký tùy chọn trong đó quy trình tìm kiếm ghi lại từng bước.
Bắt đầu tìm kiếm
Sau khi hoàn tất việc kiểm tra sổ sách và tính tỉnh táo, giờ đây chúng ta có thể bắt đầu quá trình tìm kiếm. Các bước là:
- Có ô nào còn lại cần giá trị không? - nếu không thì chúng ta xong việc rồi.
- Đối với mỗi ô cần một giá trị, hãy tìm tất cả các tùy chọn ứng viên cho từng ô. Bảng 4 có các giá trị này khi bắt đầu quá trình giải. Tại mỗi lần lặp, thông số này được cập nhật để phù hợp với các giá trị được gán cho các ô.
- Đánh giá các lựa chọn theo thứ tự này.
- Nếu một ô có ZERO tùy chọn thì hãy thực hiện quay lui
- Tìm tất cả các ô có một tùy chọn, chọn một trong các ô này, thực hiện phép gán này,
- và cập nhật bảng theo dõi, giải pháp hiện tại và PAV.
- Nếu tất cả các ô có nhiều tùy chọn, hãy chọn một ô và một giá trị rồi cập nhật
- và cập nhật bảng theo dõi, giải pháp hiện tại và PAV
Chúng tôi sẽ sử dụng Bảng 6 là một phần lịch sử của quy trình giải pháp (được gọi là TRACKHIST) để minh họa từng bước.
Trong lần lặp đầu tiên (CTR=1), ô 70 (hàng 8, cột 7, ô 9) được chọn để gán giá trị. Chỉ có ứng cử viên (7) và giá trị này được gán cho ô 70. Ngoài ra, giá trị 7 được thêm vào vectơ của các giá trị được gán trước đó (PAV) cho ô 70.
Trong lần lặp thứ hai, ô 30 được gán giá trị 1. Ô này có hai giá trị ứng cử viên. Giá trị ứng viên nhỏ nhất được gán cho ô (chỉ là một quy tắc tùy ý để dễ theo dõi logic).
Quá trình xác định ô cần giá trị và gán giá trị hoạt động tốt cho đến lần lặp (CTR) 20. Ô 9 cần giá trị, nhưng số lượng ứng viên là ZERO. Có hai lựa chọn:
- Không có giải pháp cho câu đố này.
- Chúng tôi hoàn tác (quay lại) một số nhiệm vụ và đi theo một con đường khác.
Chúng tôi đã tìm kiếm nhiệm vụ ô gần nhất với điều này, nơi có nhiều tùy chọn. Trong ví dụ này, điều này xảy ra ở lần lặp 18, trong đó ô 5 được gán giá trị 3, nhưng có hai giá trị ứng viên cho ô 5 – giá trị 3 và 8.
Giữa ô 5 (CTR = 18) và ô 9 (CTR = 20), ô 8 được gán giá trị 4 (CTR=19). Chúng tôi đưa các ô 8 và 5 trở lại danh sách “cần một giá trị”. Điều này được ghi lại trong mục nhập CTR=20 thứ hai và thứ ba, trong đó giá trị được đặt thành 0. Giá trị 3 được giữ trong vectơ PAV cho ô 5. Đó là công cụ tìm kiếm không thể gán giá trị 3 cho ô 5.
Công cụ tìm kiếm khởi động lại để xác định giá trị cho ô 5 (với 3 không còn là tùy chọn) và gán giá trị 8 cho ô 5 (CTR=21). Nó tiếp tục cho đến khi tất cả các ô đều có giá trị hoặc có một ô không có tùy chọn và không có đường quay lui. Giải pháp được đưa ra trong Bảng 7.
Hãy quan sát, khi có nhiều hơn một ứng cử viên cho một ô, đây là cơ hội để xử lý song song.
So sánh với giải pháp tối ưu hóa MILP
Ở cấp độ bề ngoài, cách thể hiện câu đố Sudoku rất khác biệt. Cách tiếp cận AI sử dụng số nguyên và theo bất kỳ biện pháp nào cũng là cách trình bày chặt chẽ và trực quan hơn. Ngoài ra, công cụ kiểm tra độ tỉnh táo còn cung cấp thông tin hữu ích để tạo ra công thức mạnh mẽ hơn. Sự biểu diễn MILP là vô tận nhị phân (0/1). Tuy nhiên, các nhị phân là những biểu diễn mạnh mẽ dựa trên sức mạnh của các bộ giải MILP hiện đại.
Tuy nhiên, bên trong, bộ giải MILP không giữ lại các nhị phân mà sử dụng phương pháp mảng thưa thớt để loại bỏ việc lưu trữ tất cả các số 1980. Ngoài ra, các thuật toán giải nhị phân chỉ xuất hiện vào những năm 1990 và 1983. Bài báo năm XNUMX của Crowder, Johnson và Padberg báo cáo về một trong những giải pháp thực tế đầu tiên về tối ưu hóa với nhị phân. Họ lưu ý tầm quan trọng của việc xử lý trước thông minh cũng như các phương pháp phân nhánh và ràng buộc là rất quan trọng đối với một giải pháp thành công.
Sự bùng nổ gần đây của việc sử dụng lập trình và phần mềm ràng buộc như người giải địa phương đã làm rõ tầm quan trọng của việc sử dụng các phương pháp AI với các phương pháp tối ưu hóa ban đầu như quy hoạch tuyến tính và bình phương tối thiểu.
- Phân phối nội dung và PR được hỗ trợ bởi SEO. Được khuếch đại ngay hôm nay.
- PlatoData.Network Vertical Generative Ai. Trao quyền cho chính mình. Truy cập Tại đây.
- PlatoAiStream. Thông minh Web3. Kiến thức khuếch đại. Truy cập Tại đây.
- Trung tâmESG. Than đá, công nghệ sạch, Năng lượng, Môi trường Hệ mặt trời, Quản lý chất thải. Truy cập Tại đây.
- PlatoSức khỏe. Tình báo thử nghiệm lâm sàng và công nghệ sinh học. Truy cập Tại đây.
- nguồn: https://blog.arkieva.com/an-artificial-intelligence-based-solution-to-sudoku/?utm_source=rss&utm_medium=rss&utm_campaign=an-artificial-intelligence-based-solution-to-sudoku
- : có
- :là
- :không phải
- :Ở đâu
- $ LÊN
- 1
- 20
- 29
- 30
- 31
- 600
- 7
- 70
- 8
- 9
- a
- có khả năng
- chứa
- thêm
- Ngoài ra
- thêm vào
- Ngoài ra
- tiên tiến
- một lần nữa
- AI
- thuật toán
- thuật toán
- Tất cả
- cho phép
- Đã
- Ngoài ra
- luôn luôn
- đàn bà gan dạ
- an
- và
- Một
- bất kì
- xuất hiện
- phương pháp tiếp cận
- tùy ý
- LÀ
- KHU VỰC
- Mảng
- nhân tạo
- trí tuệ nhân tạo
- Trí tuệ nhân tạo (AI)
- AS
- giao
- đảm đương
- At
- sự chú ý
- có sẵn
- trở lại
- BE
- được
- trước
- thuộc
- thuộc
- giữa
- trống
- Blog
- bảng
- cả hai
- ràng buộc
- Hộp
- hộp
- Chi nhánh
- nhưng
- by
- gọi là
- CAN
- ứng cử viên
- ứng cử viên
- không thể
- bị bắt
- Trần nhà
- Celebration
- pin
- Tế bào
- thách thức
- cơ hội
- kiểm tra
- kiểm tra
- tuyên bố
- trong sáng
- màu sắc
- Cột
- Cột
- thông thường
- Hoàn thành
- phức tạp
- điều kiện
- xung đột
- xung đột
- chứa
- nội dung
- liên tiếp
- Trung tâm
- nền tảng
- tạo ra
- quan trọng
- Current
- dữ liệu
- ngày
- chết
- quyết định
- Mô tả
- chi tiết
- chi tiết
- chi tiết
- xác định
- khác nhau
- chữ số
- do
- làm
- có ưu thế
- thực hiện
- dont
- đột ngột
- bản sao
- mỗi
- dễ dàng
- hay
- các yếu tố
- loại bỏ
- xuất hiện
- cho phép
- bao trùm
- cuối
- Endless
- Động cơ
- Động cơ
- đảm bảo
- Toàn bộ
- vv
- ví dụ
- Giải thích
- vụ nổ
- thất bại
- xa
- khả thi
- điền
- Tìm kiếm
- tìm thấy
- cuối
- Tên
- nhất định
- tập trung
- theo
- tiếp theo
- Trong
- công thức
- xây dựng
- tìm thấy
- từ
- vui vẻ
- chức năng
- chức năng
- nhận được
- được
- lưới
- có
- Xử lý
- Có
- Trái Tim
- hữu ích
- lịch sử
- Độ đáng tin của
- Hướng dẫn
- Tuy nhiên
- HTML
- HTTPS
- ID
- xác định
- xác định
- xác định
- if
- minh họa
- thực hiện
- tầm quan trọng
- in
- Bao gồm
- chỉ số
- chỉ ra
- chỉ ra
- hệ thống riêng biệt,
- thông tin
- thông báo
- trong
- thay vì
- Viện
- Sự thông minh
- nội bộ
- trực quan
- IT
- sự lặp lại
- ITS
- Johnson
- jpg
- chỉ
- Giữ
- giữ
- Biết
- Ngôn ngữ
- Họ
- một lát sau
- Tiếng Latin
- học tập
- ít nhất
- trái
- Cấp
- tuyến tính
- Danh sách
- đăng nhập
- logic
- còn
- Xem
- nhìn
- tìm kiếm
- máy
- học máy
- thực hiện
- làm cho
- max-width
- Có thể..
- có nghĩa
- đo
- phương pháp
- phương pháp
- hiện đại
- chi tiết
- quốc dân
- Cần
- nhu cầu
- người hàng xóm
- chín
- Không
- ghi
- tại
- con số
- Mục tiêu
- tuân theo
- xảy ra
- of
- on
- hàng loạt
- ONE
- có thể
- tối ưu hóa
- Tùy chọn
- Các lựa chọn
- or
- gọi món
- nguyên
- vfoXNUMXfipXNUMXhfpiXNUMXufhpiXNUMXuf
- ra
- Giấy
- Song song
- một phần
- con đường
- hoàn hảo
- hiệu suất
- mảnh
- Nơi
- plato
- Thông tin dữ liệu Plato
- PlatoDữ liệu
- chơi
- Điểm
- Phổ biến
- có thể
- đăng
- mạnh mẽ
- Thực tế
- trước đây
- Vấn đề
- quá trình
- xử lý
- Lập trình
- cho
- cung cấp
- đặt
- câu đố
- Câu đố
- Rage
- phạm vi
- gần đây
- định kỳ
- đỏ
- giảm
- vùng
- hồi quy
- học tăng cường
- lặp đi lặp lại
- Báo cáo
- đại diện
- HÀNG
- Quy tắc
- tương tự
- lập kế hoạch
- Tìm kiếm
- công cụ tìm kiếm
- Thứ hai
- Phần
- Bảo đảm
- xem
- chọn
- chọn
- định
- Hình dạng
- thể hiện
- Chương trình
- tương tự
- duy nhất
- So
- Phần mềm
- giải pháp
- Giải pháp
- động SOLVE
- một số
- nguồn
- Không gian
- vuông
- hình vuông
- Bắt đầu
- Bắt đầu
- bắt đầu
- Bước
- Các bước
- Vẫn còn
- hàng
- lưu trữ
- sức mạnh
- mạnh mẽ hơn
- cấu trúc
- cấu trúc
- thành công
- như vậy
- cao
- hỗ trợ
- Bề mặt
- bàn
- giải quyết
- Hãy
- hơn
- việc này
- Sản phẩm
- Nguồn
- chủ đề
- sau đó
- Đó
- Kia là
- họ
- Thứ ba
- điều này
- chặt chẽ hơn
- thời gian
- đến
- Tổng số:
- theo dõi
- Theo dõi
- thử
- XOAY
- biến
- Hai lần
- hai
- kiểu
- thường
- độc đáo
- không xác định
- cho đến khi
- Cập nhật
- cập nhật
- us
- sử dụng
- đã sử dụng
- sử dụng
- sử dụng
- giá trị
- Các giá trị
- biến
- rất
- là
- we
- là
- Điều gì
- Là gì
- khi nào
- cái nào
- trắng
- rộng
- Phạm vi rộng
- Wikipedia
- sẽ
- với
- không có
- công trinh
- sẽ
- năm
- màu vàng
- zephyrnet
- không