Алгоритм пошуку A*

Алгоритм пошуку A*
КласАлгоритми пошуку, Алгоритми на графах
Структура данихграф
Найгірша швидкодія
Оптимальнийтак

Алгоритм пошуку А* («А зірочка» або англ. «A star») — належить до евристичних алгоритмів пошуку. Використовується для пошуку найкоротшого шляху між двома вершинами графу з додатніми вагами ребер. Описаний 1968 р. Пітером Хартом, Нільсом Нільсоном та Бертрамом Рафаелєм.

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

Ідея алгоритму

Алгоритм А* спершу відвідує ті вершини, які ймовірно ведуть до найкоротшого шляху до мети. Аби розпізнати такі вершини, кожній відомій вершині співставляється значення , яке дорівнює довжині найкоротшого шляху від початкової вершини до кінцевої, який пролягає через обрану вершину. Вершини з найменшим значенням обираються в першу чергу.

Функція для вершини визначається так:

де:

  • функція, значення якої дорівнюють вартості шляху від початкової вершини до ,
  • евристична функція, оцінює вартість шляху від вершини до кінцевої.

Використана евристика не повинна давати завищену оцінку вартості шляху. Прикладом оцінки може служити пряма лінія: загальний шлях не може бути коротшим за пряму лінію.

Принцип дії

Ілюстрація пошуку A* на прикладі задачі планування шляху. Порожні сині кола — відомі вершини, зірочки — повністю досліджені вершини. Колір вершин означає відстань — червоні близько, зелені далеко. Алгоритм спочатку пробує дійти до цілі навпростець, а наткнувшись на перешкоду досліджує альтернативні шляхи використовуючи відомі вершини.

Алгоритм ділить вершини на три класи:

  • невідомі вершини: ці вершини ще не були знайдені. Ще не відомий шлях до них. На початку роботи алгоритму всі вершини, окрім початкової, належать до класу невідомих.
  • відомі вершини (OpenList): вже відомий (можливо не оптимальний) шлях до цих вершин. Всі відомі вершини разом зі значеннями зберігаються в списку. З цього списку вибираються, в першу чергу, найперспективніші вершини. Конкретна реалізація цього списку має суттєвий вплив на швидкодію алгоритму, і зазвичай має вигляд черги з пріоритетом (наприклад, бінарна купа). На початку роботи алгоритму до відомих вершин належить лише початкова вершина.
  • повністю досліджені вершини (ClosedList): до цих вершин вже відомий найкоротший шлях. Повністю досліджені вершини додаються до так званого замкненого списку, аби запобігти багаторазовому дослідженню вже досліджених вершин. Список повністю досліджених вершин на початку роботи алгоритму порожній.

Кожна відома або повністю досліджена вершина має вказівник на попередні вершини. Завдяки цьому вказівникові, можна пройти шляхом від цієї до початкової вершини.

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

Алгоритм зупиняється, коли кінцева вершина потрапляє до списку повністю досліджених вершин. Знайдений шлях відтворюється за допомогою вказівників на попередню вершину. Якщо список відомих вершин порожніє, то розв'язку задачі не існує й алгоритм припиняє пошук.

Відтворений за зворотніми вказівниками знайдений шлях починається з кінцевої вершини та прямує до початкової. Аби одразу отримати шлях в правильному напрямі, з початкової вершини до кінцевої, в умовах задачі треба переставити місцями початок та кінець. Якщо шукати шлях починаючи з кінцевої вершини, відтворений список починатиметься з початкової вершини й прямуватиме до кінцевої.

Алгоритм пошуку А* можна представити у вигляді псевдокоду:

program a-star
    // Ініціалізація списку відомих вершин, список досліджених порожній
    // (f-значення початкової вершини відсутнє)
    openlist.enqueue(startknote, 0)
    // цей шлях буде пройдений доки:
    // - буде знайдено оптимальний розв'язок або
    // - встановлено, що розв'язків не існує
    repeat
        // Вилучити вершину з найменшим f-значенням
        currentNode := openlist.removeMin()
        // Досягнута кінцева вершина?
        if currentNode == endknote then
            return PathFound
        // Якщо кінцева вершина не досягнута: додати суміжні
        // до поточної вершини в список відомих
        expandNode(currentNode)
        // поточна вершина вже повністю досліджена
        closedlist.add(currentNode)
    until openlist.isEmpty()
    // список відомих порожній, розв'язків не існує
    return NoPathFound
end

// перевіряє суміжні вершини та додає до списку відомих якщо:
// - суміжні вершини зустрічаються вперше або
// - знайдений кращий шлях до цієї вершини
function expandNode(currentNode)
    foreach successor of currentNode
        // пропустити, якщо вершина вже є списку досліджених
        if closedlist.contains(successor) then
            continue
        // обчислити значення g нового шляху: 
        // значення g попередньої вершини + вартість щойно пройденого ребра
        tentative_g = g(currentNode) + c(currentNode, successor)
        // якщо суміжна вершина вже в списку відомих,
        //  але знайдений шлях не кращий за вже відомий - пропустити
        if openlist.contains(successor) and tentative_g >= g[successor] then
            continue
        // встановити вказівник на попередню вершину та зберегти g
        successor.predecessor := currentNode
        g[successor] = tentative_g
        // оновити значення f вершини у списку відомих
        // або додати вершину до списку відомих
        f := tentative_g + h(successor)
        if openlist.contains(successor) then
            openlist.decreaseKey(successor, f)
        else
            openlist.enqueue(successor, f)
    end
end

Застосування

Алгоритм пошуку А* знаходить оптимальний шлях між двома вершинами в графі. В залежності від функції вартості, яка задає кожному ребру його «вагу», оптимальність може означати найкоротший, найшвидший або навіть найпростіший шлях. Теоретично, алгоритм може розв'язувати всі задачі, які можна представити у вигляді задачі пошуку оптимального шляху на графі. Обмеження алгоритму А* описані в розділі Недоліки.

Алгоритм A* використовується як для планування шляхів, так і в комп'ютерних іграх. Для планування шляхів, як евристична функція використовується лінійна відстань до цілі, оскільки згідно з нерівністю трикутника вона дає оптимальні оцінки. Також алгоритм А* використовується в іграх, в яких необхідно досягти наперед заданий стан, наприклад, в задачі про вісім ферзів, або в п'ятнашках. Евристикою може слугувати, наприклад, кількість невірно пересунутих камінців.

Евристичні функції

Існує два види евристичних функцій, які використовують в алгоритмі А*: припустимі та монотонні. Монотонні евристики також припустимі. Монотонність є сильнішою характеристикою припустимості. Зазвичай, використовують монотонні евристичні функції. Наприклад, пряма відстань між двома містами монотонна.

Припустима евристика

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

Монотонні евристики

Монотонна евристика має відповідати двом умовам:

  • не переоцінювати вартість (аби бути припустимою).
  • для кожної вершини та суміжної до неї вершини має виконуватись нерівність . Тут значить фактичну вартість шляху з до .

Другу умову також називають нерівністю трикутника.

Наприклад, евклідову відстань можна використовувати як монотонну евристику.

Властивості

Алгоритм А* має такі властивості:

  • припустимість: якщо розв'язок існує, він буде знайдений.
  • оптимальність: знайдений розв'язок завжди оптимальний. Якщо розв'язків декілька, буде знайдений один з них (в залежності від деталей реалізації алгоритму).
  • ефективність: не існує алгоритмів, які знаходять розв'язок швидше із застосуванням тієї ж евристичної функції (точніше: А* розкриває мінімальну кількість вершин.).

Часова складність

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

  • Точність евристичної функції: Якщо евристика не монотонна, час роботи алгоритму буде експоненційним, оскільки вершини можуть переглядатись кількаразово Чим точніша оцінка вартості, тим менше вершин буде досліджено.
  • Реалізація списків відомих та досліджених вершин: Найбільш витратними операціями в алгоритмі є операції додавання, вилучення та зміни елементів в списках відомих та досліджених вершин. На їхню швидкодію істотно впливають конкретні реалізації цих структур даних.

Нехай  — множина вершин в графі, інформація про вершини та ребра доступна до початку роботи алгоритму; використана евристична функціїя — монотонна. Список відомих вершин реалізований як бінарна купа, список досліджених — як масив. Тоді алгоритм А* має квадратичний час роботи в найгіршому випадку:

Функція openlist.decreaseKey може бути оптимізована. Якщо кожна вершина зберігатиме вказівник на відповідний об'єкт в купі, то час роботи функції зменшиться з лінійного до логарифмічного, а загальний час роботи алгоритму — до лінійно-логарифмічного:

Недоліки

Основним недоліком алгоритму А* є потреба в пам'яті для збереження всіх відомих та досліджених вершин. Через це алгортим А* непридатний для багатьох задач. Наприклад, повний граф ходів для гри П'ятнашки має вершин.

Альтернативні алгоритми

Алгоритм пошуку А* може бути замінений алгоритмом Дейкстри або жадібним алгоритмом. Алгоритм Дейкстри не використовує евристичних функцій і обирає наступну вершину в залежності від поточної вартості шляху. Натомість, жадібний алгоритм обирає наступну вершину лише на основі оцінки можливого маршруту через неї. Тому алгоритм Дейкстри можна застосовувати для пошуку шляху коли кінцева вершина невідома (наприклад, пошук заправочної станції), і використання евристичної функції неможливе.

Деякі алгоритми намагаються уникнути потреби у великих обсягах пам'яті. Серед них:

  • IDA* (A* з ітеративним заглибленям), варіант ітеративного пошуку в глибину;
  • RBFS (рекурсивний пошук за найкращим збігом, англ. Recursive Best-First Search), вимагає лінійну кількість пам'яті в залежності від довжини розв'язку
  • MA* (A* з обмеженням пам'яті), SMA* (Simplified MA*), використовують лише наперед виділений обсяг пам'яті.

Ці алгоритми обмежують потребу в пам'яті за рахунок швидкодії. За деяких обставин, не обов'язково зберігати всі вершини в пам'яті. Погані вершини можуть бути забуті і згодом можуть бути наново відтворені. При використанні монотонної евристики та за умови наявності достатньої кількості пам'яті, ці алгоритми оптимальні. При надто суворих обмеженнях пам'яті, оптимальний розв'язок може бути не знайдений.

Алгоритм пошуку D* (динамічний А*) є вдосконаленням алгоритму А*. Цей алгоритм враховує інформацію про структуру графа.

Серед інших алгоритмів можна назвати алгоритм Беллмана-Форда (дозволяє ребра з від'ємними вагами) або алгоритм Флойда-Воршала (знаходить найкоротший шлях між всіма парами вершин).

Література

Див. також

Посилання

Read other articles:

Christian feast day This article is about the feast celebrating the baptism of Christ. For other uses, see Baptism of Jesus (disambiguation). Baptism of Christ fresco by Giotto di Bondone, c. 1305 (Cappella Scrovegni, Padua, Italy) The Feast of the Baptism of the Lord, or Theophany, is the feast day commemorating the baptism of Jesus in the Jordan River by John the Baptist. Originally the baptism of Christ was celebrated on Epiphany, which commemorates the coming of the Magi, the baptism of C...

 

Cincau hitam Platostoma palustre TaksonomiDivisiTracheophytaSubdivisiSpermatophytesKladAngiospermaeKladmesangiospermsKladeudicotsKladcore eudicotsKladasteridsKladlamiidsOrdoLamialesFamiliLamiaceaeSubfamiliNepetoideaeTribusOcimeaeGenusPlatostomaSpesiesPlatostoma palustre A.J.Paton, 1997 Tata namaBasionimMesona palustris (en) Sinonim taksonMesona chinensis (en) Mesona palustris (en) Platostoma chinense (en) DistribusiEndemikIndonesia lbs Cincau hitam (Platostoma palustre) adalah spesies tanaman...

 

American college basketball season 1986–87 Wright State Raiders men's basketballRecord20-8 ( )Head coachRalph Underhill (9th season)Assistant coaches Jim Brown Bob Grote John Ross Home arenaWSU PE BuildingSeasons← 1985–861987–88 → The 1986–87 Wright State Raiders men's basketball team represented Wright State University in the 1986–87 NCAA NCAA Division II men's basketball season led by head coach Ralph Underhill. Season summary The Wright State Raide...

This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Military history of Iceland – news · newspapers · books · scholar · JSTOR (June 2008) (Learn how and when to remove this template message) This is a brief overview of historical warfare and recent developments in Iceland. Iceland has never participated in a ful...

 

f1 Karte mit allen Koordinaten: OSM | WikiMap In der Liste der Kulturdenkmale in Innenstadt (Görlitz), R–Z sind sämtliche Kulturdenkmale der Görlitzer Innenstadt verzeichnet, die bis Oktober 2017 vom Landesamt für Denkmalpflege Sachsen erfasst wurden (ohne archäologische Kulturdenkmale) und deren Straßenname mit den entsprechenden Anfangsbuchstaben beginnt. Die Anmerkungen sind zu beachten. Diese Liste ist eine Teilliste der Liste der Kulturdenkmale in Görlitz. Inhaltsverzeichni...

 

Dolj County Județul DoljProvinsi Lambang kebesaranCountry RumaniaDevelopment region1Sud-VestHistoric regionOlteniaCapital cityCraiovaPemerintahan • JenisCounty Board • President of the County BoardIon Prioteasa • Prefect2Silviu DumitruLuas • Total5.562 km2 (2,148 sq mi)Peringkat7th in RomaniaPopulasi (2011[1]) • Total660.544 • Peringkat7th in Romania • Kepadatan89/km2 (230/sq&...

Village in Sipoo, Finland Söderkulla Church Söderkulla (Swedish pronunciation: [ˈsøːdərˌkulːɑ]; literally meaning the south hill) is a village in the southern part of the Sipoo municipality in Uusimaa, Finland. It is located along the Regional road 170 and the Porvoo Highway (E18), and about 10 kilometres (6.2 mi) north of Söderkulla is Nikkilä, the administrative center of Sipoo. The distance to the center of Helsinki from Söderkulla is about 30 kilometres (19 m...

 

Франсуа Боніварфр. François Bonivard Народився 1493[1]СейсельПомер 1570[1]Женева, Женева, ШвейцаріяКраїна Республіка ЖеневаДіяльність політик, історикЗнання мов середньофранцузька і французька[1]Членство Council of Two HundreddПосада prieur commendataired[2]Конфесія протестант...

 

Nama ini menggunakan cara penamaan Spanyol: nama keluarga pertama atau paternalnya adalah Ortega dan nama keluarga kedua atau maternalnya adalah Saavedra. Daniel OrtegaOrtega pada 2014Presiden Nikaragua ke-34PetahanaMulai menjabat 10 Januari 2007Wakil PresidenJaime Morales Carazo (2007–2012)Omar Halleslevens (2012–2017)Rosario Murillo(2017–sekarang)PendahuluEnrique BolañosMasa jabatan18 Juli 1979 – 25 April 1990Wakil PresidenSergio Ramírez Mercado (1985–1990)...

Antoni Kiliński Antoni KilińskiAntoni Kiliński Nascimento 20 de outubro de 1909 Morte 6 de maio de 1989Varsóvia Sepultamento Cemitério Militar de Powązki Cidadania Polónia Alma mater Universidade de Tecnologia de Varsóvia Ocupação professor universitário, cientista de computação, engenheiro Prêmios Prêmio Pioneiro da Computação (1996)Honorary badge "For Merits for Warsaw"Silver Medal of Merit for National DefenceMedalha de Bronze de Mérito pela Defesa NacionalMedal f...

 

The Queensland War Council (1915–1932) was established by the Queensland Government to co-ordinate Queensland's assistance to World War I soldiers and their dependents. History The Queensland Government established the Queensland War Council on 25 September 1915. Its role was to co-ordinate the funding and initiatives for employment and settlement of returned soldiers, and for assistance to the families of those killed.[1] Specifically, there was a concern that without a co-ordinati...

 

Artykuł 53°11′48.5″N 22°8′12.3″E - błąd 4 m WD 53°12'11"N, 22°7'59"E - błąd 2054 m Odległość 4 m Elżbiecin wieś Państwo  Polska Województwo  podlaskie Powiat łomżyński Gmina Piątnica Liczba ludności (2020) 252[1] Strefa numeracyjna 86 Kod pocztowy 18-421[2] Tablice rejestracyjne BLM SIMC 0403554[3] Położenie na mapie gminy PiątnicaElżbiecin Położenie na mapie PolskiElżbiecin Położenie na mapie województwa podlaskiegoElżbie...

2004 video by Atomic KittenThe Greatest Hits Live at Wembley ArenaVideo by Atomic KittenReleased19 April 2004Recorded29 February 2004GenrePopLength~145:00LabelEMIDirectorMike CockayneAtomic Kitten chronology Be with Us(2003) The Greatest Hits Live at Wembley Arena(2004) The Greatest Hits Live at Wembley Arena is a compilation DVD by Atomic Kitten containing the group's concert at Wembley Arena, Wembley Park, which was given at 29 February 2004 and directed by Mike Cockayne. The DVD al...

 

Населённый пункт Населённый пункт (н.п.), селение[1], населённое место[2] — населённое людьми место (поселение), первичная единица расселения людей в пределах одного застроенного жильём земельного участка. В зависимости от размеров и других характеристик выд...

 

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Januari 2023. Sekak Bangka dapat mengacu pada beberapa hal berikut: Suku Sekak Bangka Bahasa Sekak Bangka Halaman-halaman lainnya Semua halaman dengan kata Sekak Bangka Semua halaman dengan judul mengandung kata Sekak Bangka Halaman disambiguasi ini berisi arti...

Gambaran seniman tentang satu kemungkinan kenampakan sebuah planet yang dapat dihuni. Warna kemerahan adalah vegetasi.[1] Planet super laik huni adalah sebuah jenis eksoplanet atau eksobulan hipotetis yang mungkin lebih cocok daripada Bumi untuk kemunculan dan evolusi kehidupan. Konsep tersebut diperkenalkan pada 2014 oleh René Heller dan John Armstrong.[2] Catatan Referensi ^ Kesalahan pengutipan: Tag <ref> tidak sah; tidak ditemukan teks untuk ref bernama Plnts ^ Hell...

 

Jules Dumont d'UrvilleNama dalam bahasa asli(fr) Jules Dumont d'Urville BiografiKelahiran23 Mei 1790 Condé-sur-Noireau Kematian8 Mei 1842 (51 tahun)Meudon Penyebab kematianVersailles rail accident (en) Tempat pemakamanPemakaman Montparnasse Data pribadiPendidikanUniversity of Caen Normandy (en) KegiatanSpesialisasiBotani PekerjaanExplorer (en), ahli botani, personel militer, kartografer dan expedition leader (en) Cabang militerFrench Royal Navy (en) Pangkat militercontre-amiral (en) Kary...

 

ChameliPoster FilmSutradaraAnant BalaniSudhir MishraProduserPritish Nandy CommunicationsDitulis olehAnant BalaniSwanand KirkirePemeranKareena KapoorRahul BosePenata musikSandesh ShandilyaIrshad Kamil (lirik)SinematograferAseem BajajDistributorPritish Nandy CommunicationsTanggal rilis 09 Januari 2004 (2004-01-09) Durasi108 menitNegaraIndiaBahasaHindiAnggaranUS$1 juta Chameli adalah sebuah film Hindi India tahun 2004.[1] Film tersebut dibintangi oleh Kareena Kapoor dan Rahul ...

Questa voce o sezione sull'argomento ecologia è ritenuta da controllare. Motivo: Nella voce vengono confusi i concetti simili ma non assimilabili di sostenibilità ambientale con sviluppo sostenibile' Partecipa alla discussione e/o correggi la voce. Segui i suggerimenti del progetto di riferimento. Raggiungere gli obiettivi di sostenibilità permetterà all'uomo di continuare a vivere sulla Terra Terrazzamenti di riso di Batad, Filippine – patrimonio UNESCO La sostenibilità è la ca...

 

此條目需要补充更多来源。 (2018年4月2日)请协助補充多方面可靠来源以改善这篇条目,无法查证的内容可能會因為异议提出而被移除。致使用者:请搜索一下条目的标题(来源搜索:佛光街 — 网页、新闻、书籍、学术、图像),以检查网络上是否存在该主题的更多可靠来源(判定指引)。 Fat Kwong Street佛光街佛光街近何文田廣場道路長度1.31公里(0.81英里)车速限制50公...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!