Upload
-
View
567
Download
0
Embed Size (px)
DESCRIPTION
21 апреля 2009
Citation preview
СУДОКУ
Алгоритмы решения судоку
Задачи удовлетворения ограничений
• Любая задача удовлетворения ограничений(Constraint Satisfaction Problem - CSP) определена с помощью:
– множествa переменных X1 , X2,…,Xn.
– множества ограничений C1,C2,…,Cm.
• Каждая переменная Xi имеет непустую область определения Di возможных значений.
• Состояние задачи определяется путём присваивания значений некоторым или всем этим переменным.
Задачи удовлетворения ограничений
• Присваивание, которое не нарушает никаких ограничений называется совместимым, или допустимым присваиванием.
• Полным называется такое присваивание , в котором участвует каждая переменная, а решением задачи CSP является полное присваивание, которое удовлетворяет всем ограничениям.
• Визуально задачи CSP удобно представлять в виде графа ограничений.
Задачи удовлетворения ограничений
• Узлы графа соответствуют переменным задачи, а дуги- ограничениям.
Формулировка задачи судоку
• Судоку представляет собой поле, 9х9 клеток. Таким образом всего имеется 81 клетка(ячейка), в каждую из которых вписывается цифра.
• Можно выделить следующие элементы поля:– 9 строк– 9 столбцов– 9 маленьких полей размером 3х3 (box)
Для удобства пронумеруем строки, столбцы и box, начиная с левого верхнего угла.
К каждой ячейке будем обращаться
“c(номер_строки ; номер_столбца )”, т.е. например c(1;1)-левая верхняя клетка.
Формулировка задачи судоку
Формулировка задачи судоку
• Примеры судоку
Формулировка задачи судоку
• Задачу составления судоку можно разбить на 2 подпункта:– Составление ответа ( то есть поля 9х9, заполненного числами в
соответствии с правилами);
– Выбор чисел, которые будут видны решающему судоку;
Формулировка задачи судоку
• Инкрементная формулировка задачи:– Начальное состояние;– Функция определения преемника;– Проверка цели;– Стоимость пути;
Решение задачи – это полное присваивание и поэтому должно находиться на глубине n-m, где n – количество всех переменных ( n=81 ), а m – количество переменных, значения которым присвоены в самом начале.
Формулировка задачи судоку
• Судоку - задача CSP простейшего вида, т.к. все переменные дискретные и имеют конечные области определения.
• Количество возможных полных присваиваний измеряется величиной O(dn-m), где d-максимальный размер области определения любой переменной.
• Невозможность поиска в ширину:
• n!*dn ветвей.
• Не учитывается коммутативность.
Алгоритмы решения судоку
• Применяются различные вариации поиска в глубину.
• Поиск в глубину с возвратами: поиск в глубину, в котором каждый раз выбираются значения для одной переменной и выполняется возврат, если больше не остаётся допустимых значений, которые можно было бы присвоить переменной.
• Минусы: неинформированный алгоритм , поэтому низкая производительность .
• В простом варианте этот алгоритм не подходит.
Алгоритмы решения судоку
• Поиск в глубину может быть усовершенствован при ответе на следующие вопросы:– Какой переменной должно быть присвоено значение в
следующую очередь и в каком порядке необходимо пытаться присваивать эти значения?
– Как влияют текущие присваивания значений переменным на другие переменные с неприсвоенными значениями?
– Если какой-то путь оказался неудачным, позволяет ли поиск избежать повторения этой неудачи при прохождении последующих путей?
Алгоритмы решения судоку
• Варианты выбора переменных, значение которым присваивается на текущем этапе:
– Эвристика с минимальным количеством оставшихся значений(Minimum Remaining Values - MRV);
– Степенная эвристика;
MRV повышает производительность в 300-3000 раз, причём возможно удерживать значение стоимости вычисления эвристической функции в приемлемых рамках.
Алгоритмы решения судоку
• Первый шаг применения MRV для судоку.
Алгоритмы решения судоку
• Возможно рассматривать ограничения до начала поиска:
• Предварительная проверка.
• Используется в качестве этапа распространения ограничения после каждого присваивания во время поиска(Метод поддержки совместимости дуг-Maintaining Arc Consistency-MAC)
Алгоритмы решения судоку
• Виды поиска:– Хронологический поиск с возвратами;– Метод обратного перехода;
Конфликтное множество для переменной X-множество переменных с ранее присвоенными значениями, которые связаны с X ограничениями.
Обратный переход позволяет вернуться в правильную точку дерева поиска, но не предотвращает возможности возникновения таких же ошибок в другой ветви того же дерева.
Алгоритмы решения судоку
• J.F.Crook
• Покрывающее множество: Покрывающее множество – это композиция m цифр из множества {1,2,…,9}, где 2<=m<=9, и m ячеек, таких что в этих ячейках могут находиться только цифры из выбранных m цифр.
• Обозначается покрывающее множество :
• { [n1,n2,…,nm] , [c(i1,j1) , c(i2,j2) , c(im,jm)] }
Алгоритмы решения судоку
• Теорема 1 (Теорема о захвате). Пусть X - покрывающее множество в раскраске судоку.
• Тогда при вписывании любого числа из X в ячейку, не входящую в X, получится вариант, который не приведёт к верному ответу.
• Теорема 2 (О спрятанных парах). Всегда существует такое покрывающее множество , которое превращает спрятанную пару в покрывающее множество.
Алгоритмы решения судоку
• Применение покрывающих множеств
Алгоритмы решения судоку
• Алгоритм:• Выбираем числа, которые встречаются в задаче с
большей вероятностью. Далее выбираем box в котором отсутствует это число и с помощью предыдущих 2-х теорем пытаемся определить единственный возможный вариант пары
• { [это_число] [ ячейка ] }.
• Повторяем, пока решение полностью не получено.
Пример решения судоку
Пример решения судоку
Пример решения судоку
• Очевидные подстановки: 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). Дальше тривиально.
Пример решения судоку
Итоги
• Алгоритмы хороши, но даже последний не позволяет избежать перебора.
• Исследование задач, решаемых только перебором.
• Создание самой задачи.