Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Edge(e, d, 9)

Edge(b, d, 0).

Edge(c, d, 12).

Edge(a, b, 3).

Edge(a,c,8).

Clauses

Ucs(string,wlist,way).

Placeone(way,wlist,wlist).

Place(wlist,wlist,wlist).

Prolong(way,way).

Min_path(string,string,slist).

Member(string,slist).

E(string,string,integer).

Edge(string,string,integer).

Predicates

Domains

Постановка 8.

Path(_, _, G, Мax_path, Мax_cost),

Path(A, В, G, Мin_path, Мin_cost),

Постановка 7.

Not(member(X, Р1)),

Incident(X, Y, С_XY, G),

Постановка 6.

Member(edge(Y, X, С_XY), E).

Path1(A, P1, C1, G, Р, С)

Path(А, Z, G, Р, С)

Not (member(В, P)).

Not (top(В, G)),

Path(_, _, G, P),

Member(edge(Y, X), E).

Incident(X, Y, G)

 

означає, що в графі G існує дуга, яка веде з вершини Х у вершину Y. Визначення цього відношення залежить від форми подання графа. Якщо G представлений парою множин (вершин і ребер)

G = g(V, E),

то

incident(X, Y, g(V, E)):-

member(edge(X, Y), E);

 

пошук Гамільтонова циклу

 

Є класичною задачею на графах щодо пошуку ациклічного шляху крізь всі вершини графа. Рішення цієї задачі з використанням відношення path визначають так:

 

gamilt(G, P):-

alltop(P, G).

 

alltop(P, G):-

 

Тут top(В, G) означає: В - вершина графа G.

 

Вартість шляху

Кожному шляху можна приписати вартість, яка є сумою вартостей дуг шляху. Якщо дуги не помічені (не зважені, їм не приписані вартості), тоді маємо задачу довжини шляху.

Щоб відношення path і path1 могли працювати із вартостями, їх модифікують, додаючи аргумент:

 

Тут С – вартість шляху Р, a C1 - вартість шляху Р1. У відношенні incident теж додано аргумент – вартість дуги:

 

incident(X, Y, С_XY, g(V, E)):-

member(edge(X, Y, С_XY), E);

 

Побудова шляху з обчисленням його вартості на графі G, заданому явно.

 

path(А, Z, G, Р, С):-

path1(A, [Z], 0, G, Р, С).

 

path1(A, [А | Р1], С, G, [А | Р1], С).

path1(A, [Y | Р1], С1, G, Р, С):-

С2 іs С1 + С_XY,

path1(A, [X, Y | Р1], С2, G, Р, С).

Побудова шляху мінімальної вартості на графі G, заданому явно.

Шлях мінімальної вартості між вершинами A та B графа G можна побудувати, задавши для попередньої програми запит

 

not(path(A, В, G, _, С), С< Мin_cost)

 

Аналогічно, серед всіх шляхів між вершинами графа можна знайти шлях максимальної вартості, задавши ціль

 

not(path(_, _, G, _, С), С> Мax_cost)

 

Зауваження: ці визначення пошуку мінімальних і максимальних шляхів гранично неефективні, оскільки засновані на перегляді всіх можливих шляхів, і тому не підходять для великих графів.

Побудова на графі G, заданому неявно, мінімального min_path(Х,Y,L) за вартістю ребер шляху L між вершинами Х та Y.

slist=string*

l=slist*

way=w(integer,slist) %Зберігає вартість шляху і шлях

wlist=way*

e(A,B,C):-edge(A,B,C);edge(B,A,C). %граф не є орграф

min_path(A,B,P):-ucs(A,[w(0,[B])],w(_,P)).

ucs(A,[w(C,[A|Tail])|_],w(C,[A|Tail])):-!. %пошук

згідно вагової функції

ucs(A,[Path|Tail],R):-

findall(Z,prolong(Path,Z),NewPathes),!,

place(NewPathes,Tail,New),ucs(A,New,R).
ucs(A,[_|Tail],R):-ucs(A,Tail,R).

prolong(w(C,[X|T]),w(C1,[Y,X|T])):- % подовження

шляху

e(X,Y,E),not(member(Y,T)),C1=C+E.

place([],L,L). %нові шляхи розміщує згідно їхньої ваги

place([X|T],L,R):-placeone(X,L,L1),place(T,L1,R).

placeone(w(C,P),[w(C1,P1)|Tail],[w(C,P),w(C1,P1)|Tail]):-

C<=C1,!.

placeone(X,[H|Tail],[H|NewTail]):-

<== предыдущая лекция | следующая лекция ==>
Path1(А, Р1, G, Р) | Постановка 11
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 281; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.