אלגוריתם חיפוש A*

thrall

New member
אלגוריתם חיפוש A*

היי, מישהו יכול לתת הסבר קצר על A*, אני לא ממש מצליח להבין איך מחשבים את המשקל של כל ענף זאת אומרת אני יודע זה שווה למה שעלה לנו עד עכשיו + היוריסטיקה שלנו, אבל לא יוצא לי כמו למרצה :S מצורפת תמונה מהמצגת שלו, אם מישהו יכול לפענח אני אשמח, ואם יש שם טעות אשמח אם תגידו בנוסף אם מישהו יכול להדגים על עץ קטן גם כן אשמח
 

kand100

New member
אין טעות בשקף....

אני חושב שהכי כדאי להסביר בעזרת הדוגמה שבשקף. אבל, קודם, הערה קטנה : A* מנהל שתי רשימות של צמתים . ברשימה אחת נמצאים כל הצמתים ש-A* כבר פרש (הרשימה הסגורה) וברשימה השנייה כל הצמתים ש-A* עדיין לא פרש (הרשימה הפתוחה). בהתחלה, A* פורש את הצומת הראשון (במקרה שלנו,makamba) הוא שם את makamba ברשימה הסגורה (כי הוא כבר פרש אותו) ואת הבנים שלו (mabanda ו- rutana) ברשימה הפתוחה. עכשיו הוא מסתכל על מה שיש לו ברשימה הפתוחה : לכל צומת הוא מחשב את הערך שלו באופן הבא : היוריסטיקה + מחיר הדרך שנעשתה עד לאותו צומת. במקרה שלנו ההיוריסטיקה של mabanda היא 75 ומחיר המסלול הוא 15. ולכן סה"כ 90. באותו אופן, הערך של rutana הוא 20+80=100. (כארש ההיריוסטיקה היא 80 ומחיר הדרך הוא 20) לאחר, ש-A* מסיים לחשב את כל הערכים של כל הצמתים ברשימה הפתוחה הוא בוחר לפרוש את הצומת עם הערך הכי נמוך. במקרה שלנו זה mabanda . ואז שוב חוזר התהליך : הוא פורש את mabanda , מכניס אותו לרשימה הסגורה ומכניס את הבנים שלו לרשימה הפתוחה ושוב מחשב את הערך של כל הצמתים שנמצאים ברשימה הפתוחה ושוב לוקח את הצומת עם הערך הכי נמוך (הפעם ל-ruatna יש את הערך הכי נמוך ולכן A* יבחר לפרוש אותו). התהליך נגמר כאשר A* מגיע לצומת המטרה (כלומר, צומת שההיוריסטיקה שלו היא 0). הערות : * אם יש תיקו בין הערכים עם הערך הכי נמוך ברשימה הפתוחה אז A* יבחר את צומת המטרה מביניהם. אם אף אחד לא צומת מטרה אז הצומת יבחר אקראיתמבין הצמתים עם הערך הכי נמוך. * יתכן שנפגוש שוב צומת שכבר שמנו ברשימה הסגורה. במקרה כזה נחזיר את הצומת לרשימה הפתוחה אם הערך החדש נמוך יותר מהערך הישן. באותו אופן, אם פגשנו צומת שנמצא כרגע ברשימה הפתוחה אז נעדכן את הערך שלו אם הערך החגש נמוך מהישן. מקווה שעזרתי....
 
למעלה