Представление задач в пространстве состояний и методы поиска решений

advertisement
Представление задач в пространстве состояний и методы поиска решений
Структуры данных для поиска в пространстве состояний
Граф — это множество вершин и дуг между ними. В размеченном графе для
каждой вершины задается одна или несколько меток, которые позволяют отличить одну вершину графа от другой. На графе пространства состояний эти метки
идентифицируют состояния в процессе решения задачи.
Граф называется ориентированным, если каждой дуге приписано
определенное направление.
Путь на графе – это последовательность дуг, соединяющих вершины.
Дерево – это граф, в котором существует единственный путь между любыми
двумя вершинами (следовательно, пути в дереве не содержат петель и
циклов).
Представление задач в пространстве состояний
В пространстве состояний вершины графа соответствуют состояниям решения
частных задач, а дуги — этапам решения задачи. Одно или несколько
начальных состояний, соответствующих исходной информации поставленной
задачи, образуют корень дерева. Граф также включает одно или несколько
целевых условий, которые соответствуют решениям исходной задачи. Поиск в
пространстве состояний характеризует решение задачи как процесс
нахождения пути решения от исходного состояния к целевому.
Определим представление задачи в пространстве состояний:
Пространство состояний представляется четвёркой [N,A,S,GD], где
N – множество вершин графа или состояний в процессе решения задачи;
A – множество дуг между вершинами, соответствующих шагам в процессе
решения задачи;
S – непустое множество начальных состояний задачи;
GD – непустое множество целевых состояний, которые могут описываться
одним из следующих способов:
1. Измеряемыми свойствами состояний, встречающихся в процессе поиска.
2. Свойствами путей, возникающих в процессе поиска (например,
стоимостью перемещения по дугам пути).
Допустимый путь – это путь из вершины множества S в вершину из множества
GD.
Дуги в пространстве состояний соответствуют шагам процесса решения, а пути
представляют решения на различной стадии завершения. Путь является целью
поиска. Он начинается из исходного состояния и продолжается до тех пор, пока
не будет достигнуто условие цели.
1
Задача алгоритма поиска состоит в нахождении допустимого пути в
пространстве состояний. Алгоритмы поиска должны направлять пути от
начальной вершины к целевой, поскольку именно они содержат цепочку
операций, ведущую к решению задачи.
При создании алгоритма поиска на графе возникает проблема определения
оптимального пути, т.к. целевые состояния могут быть достигнуты разными
путями.
Стратегии поиска в пространстве состояний
Поиск на основе данных и от цели
Поиск в пространстве состояний можно вести в двух направлениях, от исходных
данных задачи к цели и в обратном направлении от цели к исходным данным.
При поиске на основе данных (поиск, управляемый данными), который иногда
называют прямой цепочкой, исследователь начинает процесс решения задачи,
анализируя ее условие, а затем применяет допустимые ходы или правила
изменения состояния. В процессе поиска правила применяются к известным
фактам для получения новых фактов, которые, в свою очередь, используются
для генерации новых фактов. Этот процесс продолжается до тех пор, пока, если
повезет, не будет достигнута цель.
Возможен и альтернативный подход (поиск от цели, или обратная цепочка).
Рассматривается цель, которую необходимо достичь, и анализируются правила
или допустимые ходы, ведущие к цели, и определяются условия их
применения. Эти условия становятся новыми целями, или подцелями, поиска.
Поиск продолжается в обратном направлении от достигнутых подцелей до тех
пор, пока не будут достигнуты исходные данные задачи. Таким образом,
определяется путь от данных к цели, который на самом деле строится в
обратном направлении.
В обоих случаях поиск ведется по одному и тому же графу пространства
состояний, но порядок и число состояний в процессе поиска может
различаться. Выбор зависит от структуры решаемой задачи.
Процесс поиска от цели рекомендован в следующих случаях:
1. Цель поиска (или гипотеза) явно присутствует в постановке задачи или
может быть легко сформулирована.
2. Имеется большое число правил, которые на основе полученных фактов
позволяют генерировать возрастающее число заключений или целей.
3. Исходные данные не приводятся в задаче, но подразумевается, что они
должны быть известны решателю.
2
Таким образом, при поиске от цели подходящие правила применяются для
исключения неперспективных ветвей поиска.
Поиск на основе данных применим к решению задачи в следующих случаях:
1. Все или большинство исходных данных заданы в постановке задачи.
2. Существует большое число потенциальных целей, но всего лишь
несколько способов применения фактов и представления информации о
конкретном примере задачи.
3. Сформировать цель или гипотезы очень трудно.
При поиске на основе данных знания и ограничения, заложенные в исходной
постановке задачи, используются для нахождения пути к решению.
Методы поиска решений в пространстве состояний
Поиск с возвратами (backtracking) — это метод систематической проверки
различных путей в пространстве состояний.
Поиск с возвратами запускается из начального состояния и следует по некоторому пути, пока не достигнет цели либо не упрется в тупик. Если цель
достигнута поиск завершается (выдается путь к цели). Если же поиск привел в
тупиковую вершину, то выполняется возврат в ближайшую из пройденных
вершин и исследуются все ее вершины потомки (дочерние вершины). В
результате будет достигнута цель, либо исследовано все пространство
состояний.
Методы поиска решений в пространстве состояний начнем рассматривать с
простой задачи о миссионерах и людоедах.
Три миссионера и три людоеда находятся на левом берегу реки и им нужно
переправиться на правый берег, однако у них имеется только одна лодка, в
которую могут сесть лишь 2 человека. Поэтому необходимо определить план,
соблюдая который и курсируя несколько раз туда и обратно, можно
переправить всех шестерых. Однако если на любом берегу реки число
миссионеров будет меньше, чем число людоедов, то миссионеры будут
съедены. Решения принимают миссионеры, людоеды их выполняют.
Основой метода являются следующие этапы.
1. Определяется конечное число состояний, одно из состояний принимается
за начальное и одно или несколько состояний определяются как искомое
(конечное). Обозначим состояние S тройкой S=(x,y,z), где x и y - число
миссионеров и людоедов на левом берегу, z= {L,R} - положение лодки на
3
левом (L) или правом (R) берегах. Итак, начальное состояние S0=(3,3, L ) и
конечное состояние Sk=(0,0, R ).
2. Заданы правила перехода между группами состояний. Введем понятие
действия M:[u, v]w, где u - число миссионеров в лодке, v - число
людоедов в лодке, w - направление движения лодки (R или L).
3. Для каждого состояния заданы определенные условия допустимости
(оценки) состояний: x y; 3-x 3-y; u+v 2.
4. После этого из текущего (исходного) состояния строятся переходы в
новые состояния (рис. 1). Два новых состояния следует сразу же
вычеркнуть, так как они ведут к нарушению условий допустимости
(миссионеры будут съедены).
5. При каждом переходе в новое состояние производится оценка на
допустимость состояний и если при использовании правила перехода для
текущего состояния получается недопустимое состояние, то
производится возврат к тому предыдущему состоянию, из которого было
достигнуто это текущее состояние (бэктрекинг).
В рассмотренном примере поиска решений число состояний невелико, поэтому
перебор всех возможных состояний не вызывает затруднений. Однако при
значительном числе состояний время поиска возрастает экспоненциально, и в
этом случае могут помочь алгоритмы эвристического поиска, которые
обладают высокой вероятностью правильного выбора решения.
4
Рис. 1. Переходы из исходного состояния
5
Алгоритмы поиска в пространстве состояний
Поиск в глубину и в ширину
Поиск в глубину (DFS, depth-first search) представляет собой классический
гибкий алгоритм, который применяется для решения задач обработки графов и
поиска в пространстве состояний (поиск с возвратами – backtracking).
Возможны две реализации этого базового алгоритма: одна в виде рекурсивной
процедуры, другая — с использованием явно заданного стека (стека
магазинного типа), использующего правило LIFO (Last In First Out — последним
пришел, первым обслужен), которое характеризует работу стека магазинного
типа.
Стратегия поиска в глубину такова: идти «вглубь», пока это возможно (есть
нерассмотренные исходящие ребра), и возвращаться и искать другой путь,
когда таких ребер нет. Работа алгоритма продолжается пока не обнаружены
все вершины, достижимые из исходной.
Замена стека, используемого в поиске в глубину очередью FIFO (First In First
Out — первым пришел, первым обслужен) приводит к другому классическому
алгоритму — к алгоритму поиска в ширину (BFS, breath-first search), который
используется для решения задач обработки графов, связанных с нахождением
кратчайших путей.
Поиск в ширину — один из базисных алгоритмов, составляющий основу многих
других алгоритмов (например, алгоритма Дейкстры поиска кратчайших путей в
графе).
Алгоритм поиска в ширину обходит все достижимые вершины из начальной
(вершины в порядке возрастания от начальной). Словом идем «вширь», а не
«вглубь» (сначала просматривая все соседние вершины, затем соседей соседей
и т.д.).
Алгоритм наискорейшего спуска по дереву решений
Алгоритм рассмотрим на примере задачи о коммивояжере. Торговец должен
побывать в каждом из 5 городов, обозначенных на карте.
6
Задача состоит в том, чтобы, начиная с города А, найти минимальный путь,
проходящий через все остальные города только один раз и приводящий
обратно в А. Идея метода исключительно проста - из каждого города идем в
ближайший, где мы еще не были.
Такой алгоритм поиска решения получил название алгоритма наискорейшего
спуска (в некоторых случаях - наискорейшего подъема).
Эвристический поиск. Алгоритм оценочных (штрафных) функций
Грамотно подобранные оценочные функции (в некоторых источниках –
штрафные функции) могут значительно сократить полный перебор и привести к
решению достаточно быстро в сложных задачах.
В задаче о людоедах и миссионерах в качестве самой простой целевой
функции при выборе очередного состояния можно взять число людоедов и
миссионеров, находящихся "не на месте" по сравнению с их расположением в
описании целевого состояния. Например, значение этой функции f=x+y для
исходного состояния f0=6, а значение для целевого состояния f1=0.
Эвристические процедуры поиска на графе стремятся к тому, чтобы
минимизировать некоторую комбинацию стоимости пути к цели и стоимости
поиска. Для задачи о людоедах введем оценочную функцию:
f(n) = d(n) + w(n)
где d(n) - глубина вершины n на дереве поиска и w(n) - число находящихся не
на нужном месте миссионеров и людоедов. Эвристика заключается в выборе
минимального значения f(n). Определяющим в эвристических процедурах
является выбор оценочной функции.
7
Рассмотрим вопрос о сравнительных характеристиках оценочных целевых
функций на примере функций для игры в "8" ("пятнашки"). Игра в "8"
заключается в нахождении минимального числа перестановок при переходе из
исходного состояния в конечное (терминальное, целевое).
2 8 3 1 2 3
1 6 4 8 * 4
7 * 5 7 6 5
Рассмотрим две оценочные функции:
h1(n) = Q(n)
h2(n) = P(n) + 3S(n),
где Q(n) - число фишек не на месте; P(n) - сумма расстояний каждой фишки от
места в ее целевой вершине; S(n) - учет последовательности нецентральных
фишек (штраф +2 если за фишкой стоит не та, которая должна быть по порядку;
штраф +1 за фишку в центре; штраф 0 в остальных случаях).
Оценочная
функция h
h 1 S0
S1
h 2 S0
S1
Стоимость
(длина) пути
L
5
>18
5
18
Сравнение оценочных функций
Число вершин,
Трудоемкость
открытых при
вычислений,
нахождении пути N
необходимых для
подсчета h S
13
8
100-8! (=40320)
11
8*2+8+1+1
43
Примечания
Поиск в
ширину
Поиск в
глубину
На основе сравнения этих двух оценочных функций можно сделать выводы.
 Основу алгоритма поиска составляет выбор пути с минимальной оценочной
функцией.
 Поиск в ширину, который дает функция h1, гарантирует, что какой-либо путь
к цели будет найден.
 Поиск в глубину управляется эвристической компонентой 3S(n) в функции h2
и при удачном выборе оценочной функции позволяет найти решение по
кратчайшему пути (по минимальному числу раскрываемых вершин).
 Эффективность поиска возрастает, если при небольших глубинах он
направляется в основном в глубь, а при возрастании глубины он больше
похож на поиск вширь. Эффективность поиска можно определить как
E=K/L*N*S, где K и S (трудоемкость) - зависят от оценочной функции, L длина пути, N - число вершин, открытых при нахождении пути. Если
договориться, что для оптимального пути E=1, то K=L0*N0*S0.
8
Download