Кіріспе
Екі бағытты іздеу – бағытталған графтарда бастапқы төбеден мақсатты төбеге дейінгі ең қысқа жолды табатын графтық іздеу алгоритмі. Ол бір уақытта екі іздеуді жүргізеді: біреуі бастапқы күйден алға қарай, екіншісі мақсаттан артқа қарай, екеуі кездескенде тоқталады. Бұл тәсілдің себебі көп жағдайларда оның жылдамдығында: мысалы, іздеу мәселесінің күрделілігінің қарапайымдалған моделінде екі іздеу де бұтақтану коэффициенті b болатын ағашқа кеңейеді, ал бастапқы нүктеден мақсатқа дейінгі арақашықтық d болса, екі іздеудің әрқайсысының күрделігі O(bd/2) (үлкен O белгішесімен), ал осы екі іздеудің уақытының қосындысы бастапқы нүктеден мақсатқа дейінгі бір іздеудің O(bd) күрделілігінен әлдеқайда төмен болады. Эндрю Голдберг және басқалар Дийкстра алгоритмінің екі бағытты нұсқасының дұрыс тоқтау шарттарын түсіндірді. A* іздеуі сияқты, екі бағытты іздеуді мақсатқа дейінгі қалған қашықтықтың (алдыңғы ағашта) немесе бастапқы нүктеден (артқа қарай ағашта) эвристикалық бағалауымен басқаруға болады. Алғашқы екі бағытты эвристикалық іздеу алгоритмін жобалап, іске асырған – ол. Бастапқы және мақсатты түйіндерден өсетін іздеу ағаштары шешім кеңістігінің ортасында кездеспеді. BHFFA алгоритмі осы кемшілікті түзетті (Champeaux, 1977). Қабылданған эвристиканы қолданатын бір бағытты A* алгоритмімен табылған шешім ең қысқа жолға ие; де Шампео (1983) сипаттаған BHFFA2 екі бағытты эвристикалық нұсқасы үшін де осы қасиет сақталады. BHFFA2, басқалармен салыстырғанда, BHFFA-ға қарағанда толыққандырақ тоқтау шарттарына ие.
Сипаттама
Екі бағытты эвристикалық іздеу – белгілі бір күйден екінші бір күйге іздеу жасау, сонымен бірге екінші күйден алғашқы күйге де іздеу жүргізу. Ол, егер осы операторлар қолданылса, нәтиже беретін операторлардың жарамды тізімін қайтарады. Кері іздеу үшін операторлардың кері қайтымды болуы қажет сияқты көрінсе де, кез келген түйін үшін оның ата-түйіндер жиынын табу жеткілікті, осы ата-түйіндердің әрқайсысынан осы түйінге жарамды оператор болуы керек. Бұл көбінесе маршрут табу саласындағы бір жолға теңеледі: екі бағытта да жүрудің қажеті жоқ, бірақ көшенің соңында тұрғанда, бағыт ретінде көшенің басын анықтау қажет. Сол сияқты, кері доғалары бар (яғни екі бағытта жүретін доғалар) қабырғалар үшін әр бағыттың құны бірдей болуы міндетті емес. Кері іздеу әрқашан кері құнды қолданады (яғни алға бағытталған доғаның құны). Формальды түрде, егер түйін атасы болса, онда , атадан түйінге дейінгі құн ретінде анықталады. (Auer Kaindl 2004)
While it may seem as though the operators have to be invertible for the reverse search, it is only necessary to be able to find, given any node , the set of parent nodes of such that there exists some valid operator from each of the parent nodes to This has often been likened to a one way street in the route finding domain: it is not necessary to be able to travel down both directions, but it is necessary when standing at the end of the street to determine the beginning of the street as a possible route. Similarly, for those edges that have inverse arcs (i. e. arcs going in both directions) it is not necessary that each direction be of equal cost. The reverse search will always use the inverse cost (i. e. the cost of the arc in the forward direction). More formally, if is a node with parent , then , defined as being the cost from to . (Auer Kaindl 2004)
Екі бағыттағы эвристикалық іздеу тәсілдері
Екі бағытты алгоритмдерді жалпы алғанда үш санатқа бөлуге болады: алдыңғы жақтан алдыңғы жаққа, алдыңғы жақтан артқы жаққа (немесе алдыңғы жақтан соңына дейін) және периметрлік іздеу (Kaindl Kainz 1997). Олар эвристиканы есептеуге қолданылатын функциялар арқылы ерекшеленеді.
Алдыңғы-арқалық
Алдыңғы-артқы алгоритмдер түйіндің мәнін қарсы іздеу ағашының түбірі мен арасындағы эвристикалық бағалауды қолдану арқылы есептейді, немесе алдыңғы-артқы алгоритмдер – үш санаттың ішінде ең көп зерттелгені. Қазіргі кездегі ең жақсы алгоритм (кем дегенде, 15-тік теңбіл доменінде) – Ауер мен Каиндлдің (Auer, Kaindl 2004) жасаған BiMAX BS*F алгоритмі.
Front to Back is the most actively researched of the three categories. The current best algorithm (at least in the Fifteen puzzle domain) is the BiMAX BS*F algorithm, created by Auer and Kaindl (Auer, Kaindl 2004).
Алдыңғы жақтан алдыңғы жаққа
Алдыңғы-алдыңғы алгоритмдер n түйінінің h мәнін n мен кейбір ішкі жиын арасындағы эвристикалық бағалауды қолдану арқылы есептейді. Классикалық мысал – BHFFA (Bidirectional Heuristic Front to Front Algorithm), онда h функциясы ағымдағы түйін мен қарсы жақтан келген түйіндер арасындағы барлық эвристикалық бағалаулардың ең кішісі ретінде анықталады. Немесе, формалды түрде: , мұнда n және o түйіндері арасындағы қашықтықтың қабылданған (яғни, жоғары бағалау емес) эвристикалық бағасын қайтарады. Алдыңғы-алдыңғы алгоритмнің есептеу талаптары өте жоғары. Әрбір n түйіні ашық тізімге қосылғанда, оның h мәні есептелуі керек. Бұл жоғарыда сипатталғандай, n-ден қарсы жақтан келген OPEN жиынындағы әрбір түйінге эвристикалық бағалауды есептеуді қамтиды. OPEN жиындары b > 1 болатын барлық домендер үшін экспоненциалды түрде ұлғаяды.
where returns an admissible (i. e. not overestimating) heuristic estimate of the distance between nodes n and o. Front to Front suffers from being excessively computationally demanding. Every time a node n is put into the open list, its value must be calculated. This involves calculating a heuristic estimate from n to every node in the opposing OPEN set, as described above. The OPEN sets increase in size exponentially for all domains with b > 1.