Top Banner
СУДОКУ Алгоритмы решения судоку
25

Алгоритмы решения Судоку

May 22, 2015

Download

Documents

21 апреля 2009
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Алгоритмы решения Судоку

СУДОКУ

Алгоритмы решения судоку

Page 2: Алгоритмы решения Судоку

Задачи удовлетворения ограничений

• Любая задача удовлетворения ограничений(Constraint Satisfaction Problem - CSP) определена с помощью:

– множествa переменных X1 , X2,…,Xn.

– множества ограничений C1,C2,…,Cm.

• Каждая переменная Xi имеет непустую область определения Di возможных значений.

• Состояние задачи определяется путём присваивания значений некоторым или всем этим переменным.

Page 3: Алгоритмы решения Судоку

Задачи удовлетворения ограничений

• Присваивание, которое не нарушает никаких ограничений называется совместимым, или допустимым присваиванием.

• Полным называется такое присваивание , в котором участвует каждая переменная, а решением задачи CSP является полное присваивание, которое удовлетворяет всем ограничениям.

• Визуально задачи CSP удобно представлять в виде графа ограничений.

Page 4: Алгоритмы решения Судоку

Задачи удовлетворения ограничений

• Узлы графа соответствуют переменным задачи, а дуги- ограничениям.

Page 5: Алгоритмы решения Судоку

Формулировка задачи судоку

• Судоку представляет собой поле, 9х9 клеток. Таким образом всего имеется 81 клетка(ячейка), в каждую из которых вписывается цифра.

• Можно выделить следующие элементы поля:– 9 строк– 9 столбцов– 9 маленьких полей размером 3х3 (box)

Для удобства пронумеруем строки, столбцы и box, начиная с левого верхнего угла.

К каждой ячейке будем обращаться

“c(номер_строки ; номер_столбца )”, т.е. например c(1;1)-левая верхняя клетка.

Page 6: Алгоритмы решения Судоку

Формулировка задачи судоку

Page 7: Алгоритмы решения Судоку

Формулировка задачи судоку

• Примеры судоку

Page 8: Алгоритмы решения Судоку

Формулировка задачи судоку

• Задачу составления судоку можно разбить на 2 подпункта:– Составление ответа ( то есть поля 9х9, заполненного числами в

соответствии с правилами);

– Выбор чисел, которые будут видны решающему судоку;

Page 9: Алгоритмы решения Судоку

Формулировка задачи судоку

• Инкрементная формулировка задачи:– Начальное состояние;– Функция определения преемника;– Проверка цели;– Стоимость пути;

Решение задачи – это полное присваивание и поэтому должно находиться на глубине n-m, где n – количество всех переменных ( n=81 ), а m – количество переменных, значения которым присвоены в самом начале.

Page 10: Алгоритмы решения Судоку

Формулировка задачи судоку

• Судоку - задача CSP простейшего вида, т.к. все переменные дискретные и имеют конечные области определения.

• Количество возможных полных присваиваний измеряется величиной O(dn-m), где d-максимальный размер области определения любой переменной.

• Невозможность поиска в ширину:

• n!*dn ветвей.

• Не учитывается коммутативность.

Page 11: Алгоритмы решения Судоку

Алгоритмы решения судоку

• Применяются различные вариации поиска в глубину.

• Поиск в глубину с возвратами: поиск в глубину, в котором каждый раз выбираются значения для одной переменной и выполняется возврат, если больше не остаётся допустимых значений, которые можно было бы присвоить переменной.

• Минусы: неинформированный алгоритм , поэтому низкая производительность .

• В простом варианте этот алгоритм не подходит.

Page 12: Алгоритмы решения Судоку

Алгоритмы решения судоку

• Поиск в глубину может быть усовершенствован при ответе на следующие вопросы:– Какой переменной должно быть присвоено значение в

следующую очередь и в каком порядке необходимо пытаться присваивать эти значения?

– Как влияют текущие присваивания значений переменным на другие переменные с неприсвоенными значениями?

– Если какой-то путь оказался неудачным, позволяет ли поиск избежать повторения этой неудачи при прохождении последующих путей?

Page 13: Алгоритмы решения Судоку

Алгоритмы решения судоку

• Варианты выбора переменных, значение которым присваивается на текущем этапе:

– Эвристика с минимальным количеством оставшихся значений(Minimum Remaining Values - MRV);

– Степенная эвристика;

MRV повышает производительность в 300-3000 раз, причём возможно удерживать значение стоимости вычисления эвристической функции в приемлемых рамках.

Page 14: Алгоритмы решения Судоку

Алгоритмы решения судоку

• Первый шаг применения MRV для судоку.

Page 15: Алгоритмы решения Судоку

Алгоритмы решения судоку

• Возможно рассматривать ограничения до начала поиска:

• Предварительная проверка.

• Используется в качестве этапа распространения ограничения после каждого присваивания во время поиска(Метод поддержки совместимости дуг-Maintaining Arc Consistency-MAC)

Page 16: Алгоритмы решения Судоку

Алгоритмы решения судоку

• Виды поиска:– Хронологический поиск с возвратами;– Метод обратного перехода;

Конфликтное множество для переменной X-множество переменных с ранее присвоенными значениями, которые связаны с X ограничениями.

Обратный переход позволяет вернуться в правильную точку дерева поиска, но не предотвращает возможности возникновения таких же ошибок в другой ветви того же дерева.

Page 17: Алгоритмы решения Судоку

Алгоритмы решения судоку

• J.F.Crook

• Покрывающее множество: Покрывающее множество – это композиция m цифр из множества {1,2,…,9}, где 2<=m<=9, и m ячеек, таких что в этих ячейках могут находиться только цифры из выбранных m цифр.

• Обозначается покрывающее множество :

• { [n1,n2,…,nm] , [c(i1,j1) , c(i2,j2) , c(im,jm)] }

Page 18: Алгоритмы решения Судоку

Алгоритмы решения судоку

• Теорема 1 (Теорема о захвате). Пусть X - покрывающее множество в раскраске судоку.

• Тогда при вписывании любого числа из X в ячейку, не входящую в X, получится вариант, который не приведёт к верному ответу.

• Теорема 2 (О спрятанных парах). Всегда существует такое покрывающее множество , которое превращает спрятанную пару в покрывающее множество.

Page 19: Алгоритмы решения Судоку

Алгоритмы решения судоку

• Применение покрывающих множеств

Page 20: Алгоритмы решения Судоку

Алгоритмы решения судоку

• Алгоритм:• Выбираем числа, которые встречаются в задаче с

большей вероятностью. Далее выбираем box в котором отсутствует это число и с помощью предыдущих 2-х теорем пытаемся определить единственный возможный вариант пары

• { [это_число] [ ячейка ] }.

• Повторяем, пока решение полностью не получено.

Page 21: Алгоритмы решения Судоку

Пример решения судоку

Page 22: Алгоритмы решения Судоку

Пример решения судоку

Page 23: Алгоритмы решения Судоку

Пример решения судоку

• Очевидные подстановки: 1 в c(2,3) ; 9 в с(2,6).• Выделяется покрывающая тройка:• {[1,2,6],[c(1,7),c(1,9),c(2,9)]} результат: 8 в c(1,8).• Покрывающая четвёрка в 9 столбце : 7 в c(5,9). • Далее очевидные 5 в с(4,7) ; 3 в с(2,7) ; 5 в с(3,8).• Покрывающая тройка: { [2,3,6] , [c(3,4), c(8,4), c(9,4)] }:• даёт покрывающую пару [1,9] в 4 столбце и 5 box, однако

пока не трогаем.Пара { [2,8] , [c(3,3), c(4,3)] } в 3 столбце: даёт • четвёрку в box 7 : { [3,4,5,9] ,[c(7,1), c(7,2), c(8,3), c(9,3)] } ; • пару { [3,4], [c(8,3),c(8,8)] } в 8 строке;• пару { [2,7], [c(9,1), c(9,2)] } в 9 строке и пару• { [2,6], [c(8,4), c(8,6)] } в 8 строке и box 8. В результате 7 в с(8,7) ;• 8 в с(8,1) ; 3 в с(9,4). Пара { [4,5], [c(9,3), c(9,5)] } даёт • 6 в с(9,7) и 9 в с(9,8). Дальше тривиально.

Page 24: Алгоритмы решения Судоку

Пример решения судоку

Page 25: Алгоритмы решения Судоку

Итоги

• Алгоритмы хороши, но даже последний не позволяет избежать перебора.

• Исследование задач, решаемых только перебором.

• Создание самой задачи.