Алгоритм Дейкстри. Дейкстра (Edsger Wybe Dijkstra, 1930–2002) розробив класичний алгоритм обходу графів із зв’язками, що мають різні вагові коефіцієнти

 

Дейкстра (Edsger Wybe Dijkstra, 1930–2002) розробив класичний алгоритм обходу графів із зв’язками, що мають різні вагові коефіцієнти. На кожному кроці алгоритм шукає не оброблений раніше вузол, найближчий до початкового, обробляє його «сусудів» і встановлює їх відстані від початкового. Такий підхід має деякі переваги перед методом «пошуку в ширину». По-перше, враховується відстань від одного вузла до іншого, а по-друге, поновлюється інформація про відстань до розглядуваного вузла, якщо кращу траєкторію було знайдено. Реалізація алгоритму Дейкстри відрізняється від методу «пошуку в ширину» тільки тим, що замість черги FIFO використовують пріоритетну чергу, в якій спершу обробляється вузол, який має найкращу «вартість» у розумінні відстані від початкового вузла. Результат роботи алгоритму подано на рис. 9.6.

 


 

 

Рис. 9.6. Алгоритм Дейкстри

 

Не зважаючи на те, що алгоритм Дейкстри успішно вирішує проблему оцінювання оптимальності вибраного шляху, розрахувати напрямок на ціль все ще неможливо.

 

9.6. «Зірка пошукових алгоритмів» – А*

 

Найбільш успішним із усіх алгоритмів пошуку оптимальних шляхів обходу перешкод є алгоритм A* (вимовляється як «ей-стар»). Евристичний пошук оцінює кожен вузол пропорційно до ефективності траєкторії, що проходить через нього. Типова формула для оцінювання рейтингу вузла має такий вигляд:

 

f (n)= g (n)+ h(n),

 

де f(n) – рейтинг ефективності, що присвоюється вузлу n; g(n) – найбільш ефективна «вартість» шляху з початкового вузла в даний; h(n) – евристична оцінка «вартості» прямування з даного вузла в цільовий.

 

Наведемо реалізацію алгоритму A*. functionAStarSearch : Boolean;var

 

n, n’, s : node;

 

Open : priorityqueue; Closed : list;

 


Begin

 

s.parent := nil; // s is a node for the start

 

s.g := 0; // s is the start node

 

s.h := GoalDistEstimate( s ); s.f = s.g + s.h;

 

push s on Open

 

whileOpen is not emptydo begin

pop node n from Open

 

ifn is a goal nodethen begin

construct path

 

result := true; // success

exit;

 

End;

 

foreach successor n’ of ndo begin

newg := n.g + cost(n,n’);

 

if(n’ is in Open or Closed)andn’.g <= newg

then continue;

 

n’.parent := n; n’.g := newg;

 

n’.h := GoadDistEstimate( n’ ); n’.f := n’.g + n’.h;

 

ifn’ is in Closedthenremove n’ from Closed;if

n’ is not in Openthenpush n' on Open;

 

end;

 

push n on Closed

end;

 

result := false; // no path found

End

 

 


Алгоритм A* має декілька цікавих властивостей:

 

– він гарантовано знаходить найкоротший (оптимальний) шлях, якщо евристична оцінка h(n) прийнятна у тому розумінні, що вона ніколи не більша від істинної відстані до цілі;

– кількість обчислень евристичної функції мінімальна. Це означає, що ніякий інший алгоритм, що використовує ту ж саму функцію h(n),не обробить менше вузлів,ніж алгоритмA*.

 

Приклад роботи алгоритму A* для розглянутої задачі подано на рис. 9.7.

 

Рис. 9.7. Результат роботи алгоритмуA*

 

9.7. Різні форми задання простору пошуку

 

Було показано роботу алгоритмів з дискретними картами, зображуваних у вигляді двовимірного прямокутного масиву даних. Але у реальних застосуваннях таке подання не завжди відповідає дійсності. Однак є декілька способів перетворення простору пошуку до вигляду, придатного для пошукових алгоритмів.

 

Дуже часто блокуючі рух об’єкти у просторі пошуку можуть бути задані у векторному вигляді, як показано на рис. 9.8, а. Розглянемо способи подання інформації про об’єкти у вигляді, придатному для пошукових алгоритмів.

 

 









Дата добавления: 2015-08-26; просмотров: 576;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.