- •Лекции 8-9(Тема 5)
- •5.2. Понятие пространства состояний задачи. Примеры
- •5.3.Стратегии поиска в пространствах состояний
- •5.3.1. Поиск с возвратами
- •5.3.2. Поиск в глубину и итеративное углубление
- •5.3. 3. Поиск в ширину
- •5.4. Эвристический поиск по заданному критерию: основные понятия; алгоритм а*.
- •5.5.Сведение задач к подзадачам
- •5.5.1. Представление задач в виде графов and/or
- •5.5.2. Примеры представлений в виде графа and/or
- •13.2. Поиск в ширину;
5.5.2. Примеры представлений в виде графа and/or
Пример 5.5.1. Представление в виде графа AND/OR задачи поиска маршрута
Для задачи поиска кратчайшего маршрута (см. рис.5.13) граф AND/OR, который включает функцию стоимости, можно определить следующим образом.
Узлы OR имеют форму X-Z, а это означает, что нужно найти кратчайший маршрут от X до Z.
Узлы AND имеют такую форму:
X-Z via Y
а это означает — найти кратчайший маршрут от X до Z, при условии, что этот маршрут должен пройти через Y.
Узел X-Z является целевым узлом (простейшая задача), если X и Z на карте со единены непосредственно.
Стоимость каждого целевого узла X-Z представляет собой указанное дорожное расстояние между X и Z.
Стоимости всех других (нетерминальных) узлов равны 0.
Стоимость графа решения представляет собой сумму стоимостей всех узлов в графе решения (в данном случае это сумма стоимостей всех терминальных узлов). Для задачи, показанной на рис.5.13, начальным узлом является a-z. На рис. 5.17.показано дерево решения со стоимостью 9. Это дерево соответствует маршруту [a,b,d,f,i,z], который можно реконструировать из дерева решения, посетив все листья в этом дереве в последовательности слева направо.
Рис.5.17. Дерево решения с минимальной стоимостью для задачи поиска маршрута (см. рис.5.13.), оформленное в виде графа AND /OR
Пример 5.5.2. Задача с ханойской башней
Задача с ханойской башней (рис.5.18) является еще одним классическим примером эффективного применения схемы декомпозиции AND/OR. Для упрощения рассмотрим описанную ниже простую версию этой задачи, содержащую только три диска.
Даны три оси, 1, 2 и 3, и три диска, а, bи с (из них а — самый маленький и с — самый большой). Первоначально все диски нанизаны на ось 1. Задача состоит в том, чтобы перенести их все на ось 3. Разрешено переносить одновременно только один диск и нельзя класть диск большего диаметра на диск меньшего диаметра.
Рис.5.18. Задача с ханойской башней
Такую задачу можно рассматривать как задачу достижения следующего множества целей.
Диск а на оси 3.
Диск b на оси 3.
Диск с на оси 3.
К сожалению, эти цели не являются независимыми. Например, диск а можно немедленно нанизать на ось 3, достигнув первой цели. Но это помешает достижению двух других целей (если мы не откажемся от непосредственного достижения первой цели). К счастью, имеется удобный способ упорядочения процесса достижения этих целей, такой, что решение можно легко найти на основании этого упорядочения. Требуемую последовательность достижения всех целей можно определить с помощью следующих рассуждений: цели 3 (диск с на оси 3) достичь сложнее всего, поскольку для перемещения диска с необходимо преодолеть больше всего ограничений. Хорошая идея, которая часто оказывается продуктивной в подобных ситуациях, состоит в том, что вначале следует попытаться достичь самой сложной цели. В основе этого принципа лежит наблюдение, что если другие цели не являются такими труднодостижимыми (не связаны с преодолением таких ограничений, как самая трудная), то можно надеяться, что их удастся достичь без необходимости отмены результатов достижения этой самой трудной цели.
Таким образом, стратегия решения задачи, которая вытекает из этого принципа, состоит в следующем:
вначале достичь цели "диск с на оси 3"; затем достичь оставшихся целей.
Но первой из этих целей нельзя достичь немедленно: в начальной ситуации диск с невозможно переместить сразу же, поскольку на нем лежат еще два диска. Поэтому вначале подготовим этот ход и уточним нашу стратегию следующим образом.
Обеспечить перемещение с оси 1 на ось 3 диска с.
Перенести с оси 1 на ось 3 диск с.
Достичь оставшихся целей — диск а на оси 3 и диск b на оси 3.
Диск с можно перенести с оси 1 на ось 3, если оба оставшихся диска, а и b , нанизаны на ось 2. Поэтому наша первоначальная задача переноса с оси 1 на ось 3 дисков a, b и с сводится к трем перечисленным ниже подзадачам.
Чтобы переместить с оси 1 на ось 3 диски а, b и с, необходимо выполнить следующее.
Переместить с оси 1 на ось 2 диски а и b.
Переместить с оси 1 на ось 3 диск с.
Переместить с оси 2 на ось 3 диски а и b.
Задача 2 является тривиальной (решение состоит из одного хода). Две другие подзадачи можно решить независимо от задачи 2, поскольку диски а и b можно переносить независимо от положения диска с. Чтобы решить задачи 1 и 3, можно применить тот же принцип декомпозиции (на этот раз самой сложной является задача перемещения диска b). В соответствии с этим задача 1 сводится к трем перечисленным ниже тривиальным подзадачам.
Чтобы переместить с оси 1 на ось 2 диски а и Ь, необходимо выполнить следующее.
Переместить с оси 1 на ось 3 диск а.
Переместить с оси 1 на ось 2 диск b.
Переместить с оси 3 на ось 2 диск а.
В заключение отметим, что многие игры такие, например, как шахматы и шашки, могут быть естественным образом представленные в виде графов AND/OR. (см.1) .В 1.-3. можно найти описание процедур поиска на AND/OR графах с реализацией их на языке Пролог (см.1).
5.6.Упражнения.
Приведите примеры следующих графов:
1.1. Граф,имеющий петли и параллельные ребра;
1.2. Корневой граф, имеющий циклы;
1.3. Корневой ациклический граф, не являющийся деревом;
1.4. Граф- дерево, не являющееся корневым графом.
2. Выберите схему расположения пяти городов с указанием разметки ( расстояний между городами или стоимостей переездов из города в город) ; постройте пространство состояний для задачи коммивояжера с такой схемой городов; укажите путь в графе , представляющий решение задачи.
Представьте в пространстве состояний известную задачу о переправе через реку человека, волка, козы и капусты.
Пройдите «вручную» алгоритм с возвратами для выбранного Вами корневого графа на 15 вершинах, имеющего хотя бы один цикл.
Составьте программу на языке Турбо- Пролог , реализующую алгоритм поиска с возвратами на Вашем графе из п. 4.
Постройте дерево эвристического поиска для игры в «8» с начальными позициями
а). 1 3 4 б). 2 1 6
8 2 4 8
7 6 5 7 5 3 ,
используя оценочную функцию, определенную в п. ; предложите свой вариант оценочной функции и примените его в этой задаче.
Приведите пример задачи, допускающей естественную декомпозицию на подзадачи и укажите ее представление графом AND/OR.
Постройте граф состояний для задачи о ханойской пирамиде, представляя состояния упорядоченной тройкой чисел из набора
{1, 2,3}.
9. Постройте граф состояний для известной задачи о кувшинах: имеются два кувшина вместимостью 8 и 5 литров и бочка
с жидкостью. Как , использую только указанные емкости, отмерить 4л ?
10*. Из доски , содержащей 2n x 2n клеток вырезано по одной клетке из двух противолежащих (по диагонали) углов. Докажите, что теперь доску невозможно покрыть полностью фишками размером 1х2 так, чтобы они не высовывались за край доски и не накрывали друг друга.
Указание: Удалите из доски по одной клетке из двух ее противолежащих углов. Покажите, что теперь невозможно полностью покрыть эту искаженную доску фишками размером 1´2 так, чтобы они не высовывались за край доски и не накрывали друг друга. Рекомендуем рассмотреть сначала частные случаи доски: 2´2, 4´4, 8´8 и лишь потом перейти к общему случаю.
11*. На каком-нибудь процедурном языке программирования разработайте программу поиска решений в игре в «8».
12*. На языке Турбо-Пролог разработайте программу реализующую алгоритм решения задачи «Обезьяна и бананы».
13*. На каком-нибудь процедурном языке разработайте программу:
13.1. Поиск в глубину в пространстве состояний;
