Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2docx-1.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
2.27 Mб
Скачать

30. Решение задач методом поиска в пространстве состояний. Пример. Принципы подбора алгоритма поиска пути в зависимости от задачи.

Задача: Имеется пр-во сост. – набор ситуаций. Из кажд.сост. путем каких-то действий можно перейти в др. Требуется из некот. нач. сост. достичь зад-го конечного сост. Представим граф, вершины - состояния. Путь из нач.сост. в конечное – набор сост-й, кот.необх-мо пройти для решения задачи. 1. К корню дерева (Sн) применяются опера-торы gi из мн-ва G (их м.б. несколько). Получ.при этом вершины образуют 1ый урове-нь новых вершин. 2. Каждая из вновь получ.вершин проверяется, не явл-ся ли она це-левой. Если нет, то процесс прод-ся по отн-ию к каждой из них. Образ-ся 2й уровень вершин. Если к к-л вершине никакой оператор из G не применим, она становится тер-минальной. 3. Когда целевая верш. найдена, в обратном напр-и просматриваются указатели дуг и выделяется путь реш-я.//Возникает проблема - в каком порядке верш. будут порождаться и анализир-ся: 1.вершины раскр-ся в том же порядке, в кот. поро-ждаются - поиск в ширину; 2) на кажд.шаге 1й раскр-ся верш., кот.была построена последней - в глубину.//В них расположение целевой верш. не влияет на порядок раск-рытия, поэтому их часто наз-ют процессами слепого перебора; 3.если есть некот. доп. (эвристич-я) информация, кот.позволяет делать суждения о хар-ре графа пр-ва сост-й и расположения цели, то такой метод построения графа наз-ся эвристическим. Ex.8 лунок с шарами:bbbb_www->www_bbbb,шар можно передвигать в сос.с ним пустую л, либо в пуст, нах-ся за ближ.шаром, ч можно двигать только вправо, б – только влево.

move(A,B) :- append(Begin, ["b","w","_"|Tail],A), append(Begin, ["_","w","b"|Tail],B).

move(A,B) :- append(Begin, ["_","b","w"|Tail],A), append(Begin, ["w","b","_"|Tail],B).

move(A,B) :- append(Begin, ["b","_"|Tail],A), append(Begin, ["_","b"|Tail],B).

move(A,B) :- append(Begin, ["_","w"|Tail],A), append(Begin, ["w","_"|Tail],B).

prolong([Tmp|Tail],[New,Tmp|Tail]) :- move(Tmp,New), not(member(New,[Tmp|Tail])).

dpth([Finish|Tail],Finish,[Finish|Tail]).

dpth(TempWay,Finish,Way) :- prolong(TempWay,NewWay), dpth(NewWay,Finish,Way).

search_dpth(Start,Finish) :- dpth([Start],Finish,Way), show_answer(Way).

show_answer([_]) :- !. show_answer([A,B|Tail]) :- show_answer([B|Tail]),nl,write(B).

int(1). int(N) :- int(M), N is M+1.

search_id(Start,Fin):-int(Level),(Level>19,!;id([Start],Fin,Way,Level),show_answer(Way)).

id([Finish|Tail],Finish,[Finish|Tail],0).

id(TempWay,Finish,Way,N) :- N>0, prolong(TempWay,NewWay),

N1 is N-1, id(NewWay,Finish,Way,N1).

search_bdth(Start,Finish) :-bdth([[Start]],Finish,Way), show_answer(Way).

bdth([[Finish|Tail]|_],Finish,[Finish|Tail]).

bdth([TempWay|OtherWays],Finish,Way) :- findall(W,prolong(TempWay,W),Ways),

append(OtherWays,Ways,NewWays), bdth(NewWays,Finish,Way).

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]