Kyubyong/sudoku
Kyubyong/sudoku has 867 GitHub stars and 132 forks. Star changes are not measured yet. Last checked 2026-11-14 11:55 UTC. Last push 2023-02-17.
Measured star growth
- in 24h
- Collecting history
- in 7 days
- Collecting history
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
About
Can Neural Networks Crack Sudoku?
Machine LearningREADME.md
OriginalCan Convolutional Neural Networks Crack Sudoku Puzzles?
Sudoku is a popular number puzzle that requires you to fill blanks in a 9X9 grid with digits so that each column, each row, and each of the nine 3×3 subgrids contains all of the digits from 1 to 9. There have been various approaches to solving that, including computational ones. In this project, I show that simple convolutional neural networks have the potential to crack Sudoku without any rule-based postprocessing.
Requirements
- NumPy >= 1.11.1
- TensorFlow == 1.1
Background
- To see what Sudoku is, check the wikipedia
- To investigate this task comprehensively, read through McGuire et al. 2013.
Dataset
- 1M games were generated using
generate_sudoku.pyfor training. I've uploaded them on the Kaggle dataset storage. They are available here. - 30 authentic games were collected from http://1sudoku.com.
Model description
- 10 blocks of convolution layers of kernel size 3.
File description
generate_sudoku.pycreate sudoku games. You don't have to run this. Instead, download pre-generated games.hyperparams.pyincludes all adjustable hyper parameters.data_load.pyloads data and put them in queues so multiple mini-bach data are generated in parallel.modules.pycontains some wrapper functions.train.pyis for training.test.pyis for test.
Training
- STEP 1. Download and extract training data.
- STEP 2. Run
python train.py. Or download the pretrained file.
Test
- Run
python test.py.
Evaluation Metric
Accuracy is defined as
Number of blanks where the prediction matched the solution / Number of blanks.
Results
After a couple of hours of training, the training curve seems to reach the optimum.
I use a simple trick in inference. Instead of cracking the whole blanks all at once, I fill in a single blank where the prediction is the most probable among the all predictions. As can be seen below, my model scored 0.86 in accuracy. Details are available in the `results` folder.| Level | Accuracy (#correct/#blanks=acc.) |
|---|---|
| Easy | 47/47 = 1.00 |
| Easy | 45/45 = 1.00 |
| Easy | 47/47 = 1.00 |
| Easy | 45/45 = 1.00 |
| Easy | 47/47 = 1.00 |
| Easy | 46/46 = 1.00 |
| Medium | 33/53 = 0.62 |
| Medium | 55/55 = 1.00 |
| Medium | 55/55 = 1.00 |
| Medium | 53/53 = 1.00 |
| Medium | 33/52 = 0.63 |
| Medium | 51/56 = 0.91 |
| Hard | 29/56 = 0.52 |
| Hard | 55/55 = 1.00 |
| Hard | 27/55 = 0.49 |
| Hard | 57/57 = 1.00 |
| Hard | 35/55 = 0.64 |
| Hard | 15/56 = 0.27 |
| Expert | 56/56 = 1.00 |
| Expert | 55/55 = 1.00 |
| Expert | 54/54 = 1.00 |
| Expert | 55/55 = 1.00 |
| Expert | 17/55 = 0.31 |
| Expert | 54/54 = 1.00 |
| Evil | 50/50 = 1.00 |
| Evil | 50/50 = 1.00 |
| Evil | 49/49 = 1.00 |
| Evil | 28/53 = 0.53 |
| Evil | 51/51 = 1.00 |
| Evil | 51/51 = 1.00 |
| Total Accuracy | 1345/1568 = 0.86 |
References
If you use this code for research, please cite:
@misc{sudoku2018,
author = {Park, Kyubyong},
title = {Can Convolutional Neural Networks Crack Sudoku Puzzles?},
year = {2018},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/Kyubyong/sudoku}}
}
Papers that referenced this repository
Explore related projects
tensorflow/tensorflow
An Open Source Machine Learning Framework for Everyone
201,595 starshuggingface/transformers
🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.
168,963 starsAUTOMATIC1111/stable-diffusion-webui
Stable Diffusion web UI
165,311 starsComfy-Org/ComfyUI
The most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface. The fastest local inference engine in the world.
146,774 stars