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

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

  • Upload
    -

  • View
    567

  • Download
    0

Embed Size (px)

DESCRIPTION

21 апреля 2009

Citation preview

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: Алгоритмы решения Судоку

Итоги

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

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

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