Кіріспе

Екі бағытты іздеу – бағытталған графтарда бастапқы төбеден мақсатты төбеге дейінгі ең қысқа жолды табатын графтық іздеу алгоритмі. Ол бір уақытта екі іздеуді жүргізеді: біреуі бастапқы күйден алға қарай, екіншісі мақсаттан артқа қарай, екеуі кездескенде тоқталады. Бұл тәсілдің себебі көп жағдайларда оның жылдамдығында: мысалы, іздеу мәселесінің күрделілігінің қарапайымдалған моделінде екі іздеу де бұтақтану коэффициенті b болатын ағашқа кеңейеді, ал бастапқы нүктеден мақсатқа дейінгі арақашықтық d болса, екі іздеудің әрқайсысының күрделігі O(bd/2) (үлкен O белгішесімен), ал осы екі іздеудің уақытының қосындысы бастапқы нүктеден мақсатқа дейінгі бір іздеудің O(bd) күрделілігінен әлдеқайда төмен болады. Эндрю Голдберг және басқалар Дийкстра алгоритмінің екі бағытты нұсқасының дұрыс тоқтау шарттарын түсіндірді. A* іздеуі сияқты, екі бағытты іздеуді мақсатқа дейінгі қалған қашықтықтың (алдыңғы ағашта) немесе бастапқы нүктеден (артқа қарай ағашта) эвристикалық бағалауымен басқаруға болады. Алғашқы екі бағытты эвристикалық іздеу алгоритмін жобалап, іске асырған – ол. Бастапқы және мақсатты түйіндерден өсетін іздеу ағаштары шешім кеңістігінің ортасында кездеспеді. BHFFA алгоритмі осы кемшілікті түзетті (Champeaux, 1977). Қабылданған эвристиканы қолданатын бір бағытты A* алгоритмімен табылған шешім ең қысқа жолға ие; де Шампео (1983) сипаттаған BHFFA2 екі бағытты эвристикалық нұсқасы үшін де осы қасиет сақталады. BHFFA2, басқалармен салыстырғанда, BHFFA-ға қарағанда толыққандырақ тоқтау шарттарына ие.

Сипаттама

Екі бағытты эвристикалық іздеу – белгілі бір күйден екінші бір күйге іздеу жасау, сонымен бірге екінші күйден алғашқы күйге де іздеу жүргізу. Ол, егер осы операторлар қолданылса, нәтиже беретін операторлардың жарамды тізімін қайтарады. Кері іздеу үшін операторлардың кері қайтымды болуы қажет сияқты көрінсе де, кез келген түйін үшін оның ата-түйіндер жиынын табу жеткілікті, осы ата-түйіндердің әрқайсысынан осы түйінге жарамды оператор болуы керек. Бұл көбінесе маршрут табу саласындағы бір жолға теңеледі: екі бағытта да жүрудің қажеті жоқ, бірақ көшенің соңында тұрғанда, бағыт ретінде көшенің басын анықтау қажет. Сол сияқты, кері доғалары бар (яғни екі бағытта жүретін доғалар) қабырғалар үшін әр бағыттың құны бірдей болуы міндетті емес. Кері іздеу әрқашан кері құнды қолданады (яғни алға бағытталған доғаның құны). Формальды түрде, егер түйін атасы болса, онда , атадан түйінге дейінгі құн ретінде анықталады. (Auer Kaindl 2004)

Екі бағыттағы эвристикалық іздеу тәсілдері

Екі бағытты алгоритмдерді жалпы алғанда үш санатқа бөлуге болады: алдыңғы жақтан алдыңғы жаққа, алдыңғы жақтан артқы жаққа (немесе алдыңғы жақтан соңына дейін) және периметрлік іздеу (Kaindl Kainz 1997). Олар эвристиканы есептеуге қолданылатын функциялар арқылы ерекшеленеді.

Алдыңғы-арқалық

Алдыңғы-артқы алгоритмдер түйіндің мәнін қарсы іздеу ағашының түбірі мен арасындағы эвристикалық бағалауды қолдану арқылы есептейді, немесе алдыңғы-артқы алгоритмдер – үш санаттың ішінде ең көп зерттелгені. Қазіргі кездегі ең жақсы алгоритм (кем дегенде, 15-тік теңбіл доменінде) – Ауер мен Каиндлдің (Auer, Kaindl 2004) жасаған BiMAX BS*F алгоритмі.

Алдыңғы жақтан алдыңғы жаққа

Алдыңғы-алдыңғы алгоритмдер n түйінінің h мәнін n мен кейбір ішкі жиын арасындағы эвристикалық бағалауды қолдану арқылы есептейді. Классикалық мысал – BHFFA (Bidirectional Heuristic Front to Front Algorithm), онда h функциясы ағымдағы түйін мен қарсы жақтан келген түйіндер арасындағы барлық эвристикалық бағалаулардың ең кішісі ретінде анықталады. Немесе, формалды түрде: , мұнда n және o түйіндері арасындағы қашықтықтың қабылданған (яғни, жоғары бағалау емес) эвристикалық бағасын қайтарады. Алдыңғы-алдыңғы алгоритмнің есептеу талаптары өте жоғары. Әрбір n түйіні ашық тізімге қосылғанда, оның h мәні есептелуі керек. Бұл жоғарыда сипатталғандай, n-ден қарсы жақтан келген OPEN жиынындағы әрбір түйінге эвристикалық бағалауды есептеуді қамтиды. OPEN жиындары b > 1 болатын барлық домендер үшін экспоненциалды түрде ұлғаяды.