930 likes | 5.03k Views
A* and AO* Search Algorithm. Hananel Hazan Based on Prof. Larry Manevitz’s slides. דמקה Draughts (or checkers). In the 1950s, Arthur Samuel created one of the first board game-playing programs of any kind
E N D
A* and AO* Search Algorithm HananelHazan Based on Prof. Larry Manevitz’s slides
דמקה Draughts (or checkers) • In the 1950s, Arthur Samuel created one of the first board game-playing programs of any kind • in 2007 scientists at the University of Alberta[13] evolved their "Chinook" program up to the point where it is unbeatable. A brute force approach that took hundreds of computers working nearly 2 decades was used to solve the game,[14] showing that a game of draughts will always end in a stalemate if neither player makes a mistake.[15][16] https://en.wikipedia.org/wiki/Freeciv https://en.wikipedia.org/wiki/Draughts
RPG situation • שימו לב שניתן למצוא שביל עובד גם בין העציץ לקיר, מכיוון שהרשת הנקודות היא צפופה מספיק כדי לספק לנו פתרון מעבר • זה מעולה כאשר יש לנו מרחק קטן לעבור, אבל אם יש לנו מרחק גדול יותר לעבור צפיפות הרשת הופכת להיות בעיה חישובית למחשבים ביתיים. • הפתרון הגדלת הרזולוציה של הרשת.
What is A* Search Good For? • אם קיים פתרון לבעיה, ופונקציה היוריסטית היא אופטימית, מובטח שהאלגוריתם ימצא אותה מכיוון שהאלגוריתם עובר על כל הדרכים האפשריות ומקבל הערכות לגבי המשך הדרך. • האלגוריתם A* דומה לאלגוריתם Best – First החמדני בצורת החיפוש, הוא יותר טוב ממנו בגלל שA* לא חוזר על צמתים שהוא כבר ביקר בהם.
מבוא • כדי להסביר את A* אנו צרכים להבין את : • אלגDijkstra's • אלגBest-First search • אלגHill Climbing
Dijkstra's algorithm • דוגמה להרצת אלגוריתם דייקסטרה • מסמנים את הקודקוד הנוכחי. באיטרציה הראשונה זהו נקודת התחלה כקודקוד שביקרו בו. • עבור כל קודקוד Y שהוא שכן של X וגם לא ביקרנו בו: • Y מעודכן, כך שמרחקו יהיה שווה לערך המינימלי בין שני ערכים: מרחקו הנוכחי, ומשקל הקשת המחברת בין X לבין Y בתוספת המרחק בין S ל-X. • בוחרים קודקודX חדש בתור הקודקוד שמרחקו בשלב הזה מצומת המקור S הוא הקצר ביותר מבין כל הקודקודים בגרף שטרם ביקרנו בהם. • האלגוריתם מסתיים כאשר ביקרנו בכלהקודקודים. https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
אלגBest-First searchאלגHill Climbing • Hill Climbing • אנו נבחר לעבור לצומת הראשונה שהיא גבוה/נמוכה יותר מהנוכחית. • אלגוריתם נכשל / מסתיים כאשר אין גבוה/נמוך יותר (הגענו למקסימום / מינימום מקומי) • Best-First search • אנו נעבור על כל הילדים של אותה צומת וניבחר את הגבוה/נמוך ביותר שמצאנו
A* vs (Best-First, Hill Climbing) • ב Best-First, Hill Climbing הפונקציה היוריסטית היא הערכת המרחק מנקודה הנוכחית למטרה. • A* לוקח בחשבון את המרחק שהאלגוריתם ביצע עד כה g(x). • האלגוריתם קביל (מחזיר פתרון בעל מחיר מינימלי) בתנאי ש-h קבילה. • הוכחת אי עצירה: • האפשרות היחידה לאי עצירה היא מעגל, אולם זה לא יכול לקרות כי נגיע שוב לצומת וניתן לה לכאורה מחיר גבוה יותר ממה שכבר היה לה.
A* • האלגי מחזיק 2 רשימות, רשימה פתוחה ורשימה סגורה. • ברשימה הסגורה נמצאים הצמתים שהם מבוי סתום או שכבר ביקר בהם. • ברשימה הפתוחה נמצאים צמתים שלא הגיע אליהם עם הערך ה ( F(x. • רשימה פתוחה: • הצמתים עם הערך F(x) הנמוך היותר מקבלים את העדיפות הגבוהה ביותר. • בכל צעד האלג לוקח את הצומת הראשונה ברשימה הפתוחה שהיא בעלת הערך F(x) הנמוך ביותר ונותן ערך לכל הבנים של הצומת, הבנים מוכנסים לרשימה הפתוחה, והצומת נכנסת לרשימה הסגורה.
A* • האלגוריתם ממשיך לפתוח צמתים עד ש-הרשימה הפתוחה ריקה או שהוא מקבל ערך שהוא נמוך ביותר מכל הרשימה הפתוחה. • האלגוריתם ימשיך לפתוח צמתים מהרשימה הפתוחה עד שהרשימה תסתיים והתוצאה תהיה המסלול הקצר ביותר למטרה. • חשוב לציין:שהאלגוריתם A* יכול לעבור כמה פעמים את הצומת מטרה מכיוון שיתכן שיש דרך קצרה יותר להגיע למטרה
בעיה לדוגמא http://www.policyalmanac.org/games/aStarTutorial.htm barrier • בוקר טוב עולם Start Point Destination
בעיה לדוגמא Open List • רשימת קניות - מה האפשרויות שלי? • רשימה מקושרת אשר ההורה הוא נקודת התחלה • רשימת מלאי - מה לא צריך לבדוק • ברשימה הזאת יהיו כל הנקודות שנמצאות בהישג יד אבל לא ברי השגה כמו קיר / מחסום / נקודת מוצא Close List Open List Close List
בעיה לדוגמא • שלב הבא הוא שלב הניקוד: • יש לנו את נקודת ההתחלה ונקודת המטרה. • מה שנותר לעשות זה לתת ציון לכל דרך אפשרית שנמצאת ברשימה הפתוחה. סה"כ עלות F = G + H כמה עולה לצעוד מהנקודה ההתחלה לנקודת הנוכחית? כמה אתה מעריך שיעלה לצעוד מהנקודה החדשה לנקודת המטרה?
בעיה לדוגמא • כל הריבוע שמסומן בירוק נכנס לרשימה הפתוחה. • בוחרים את A בגלל שיש לו את הערך הקטן ביותר. B A C A Close List Open List
בעיה לדוגמא • הצעדים האפשריים מA נכנסים לרשימה הפתוחה ומעורכים. • כל המשבצות של הקיר נכנסים לרשימה הסגורה מכיוון שאי אפשר לעבור דרכם. • B ו C נכנסים לרשימה הפתוחה כאפשרויות המשך. • בוחרים אקראית מכיוון ששני הערכים שווים B Aa Ac A Ab Ab Aa C Ac B C A D Close List Open List
בעיה לדוגמא • בחרנו את C ואנו נעריך את כל השכנים של C • יש לנו שני מעומדים D ו F אבל אי אפשר להגיע לF ישירות בגלל הקיר אזי D נבחר (חוקים*) B C Aa D Ac A Ab F Ab B E C Ac Aa E F G D A G Close List Open List
בעיה לדוגמא • אחרי שבחרנו את D והכנסנו את השכנים לרשימה בפתוחה • נימצא שהכרך של F יותר קטן מהשאר (MLO) B Aa A D Ab F C J B K E C Ac Ab E Aa Ac F H| I G D A G Close List Open List M L O
בעיה לדוגמא • עברנו לF ו גם פה אי אפשר לקצר ע"י מעבר ל J ולכן H נבחר B Aa H F A J D Ab C J B K E C Ac Ab E Aa Ac F H I G D A G Close List Open List M L O
בעיה לדוגמא • הפעם ב H אנו יכולים לקצר ע"י מעבר לK שהוא הערך הנמוך יותר • מפה הדרך למטרה היא צעד אחד ברור K B H Aa I F A J D Ab C J B K E C Ac Ab E Aa Ac F H I G D A G Close List Open List M L O
בעיה לדוגמא • אחרי שמצאנו את המטרה אנו בודקים את הנתיבים שנשארו ברשימה הפתוחה • נגלה שההופכי לדרך שעשינו יניב לנו אותו ניקוד לכן נשארנו עם מה שמצאנו
Unbiased A* • מצב שבו פונקציית h מנחשת באופן "נאיבי" כל מצב שיוצג לה הוא טוב בשבילה
A* Heuristics • פונקציה יוריסטית שמעריכה באופן רציף • פונקציה יוריסטית שמעריכה באופן שהוא מוגזם overestimate • זה מה שהינו רוצים להגיע
algorithm A* • דוגמה להרצת אלגוריתם A* כאשר פונקציית היוריסטיקהמעריכה את המרחק למטרה כמוגזם מידי לכן האלג מפתח את צמתים שלא היה צריך ללכת אליהם בדומה ל best-first https://en.wikipedia.org/wiki/A*_search_algorithm
דוגמה לריצה של A* • כאשר אלגוריתם A* רץ עם פונקציה יוריסטית שמעריכה נכון ובצורה אופטימית את המרחק למטרה
What are difference betweenA and AO algorithm? • The main difference between the A*(A star) and AO*(AO star) algorithms is that A* algorithm is a OR graph algorithm and AO* is a AND-OR graph algorithm. • In OR graph algorithm it just find only one solution (i.e. either OR solution means this OR this OR this). • But in the AND-OR graph algorithm it find more than one solution by ANDing two or more branches.
AND Connector OR Connector L. Manevitz Lecture 3
הנחות עבודה • Data Structure • Graph • Marked Connectors (down; unlike A*) • Costs q() maintained on nodes • SOLVED markings • Note: We’ll discuss on acyclic graphs.
AND/OR Graph L. Manevitz Lecture 3
Solution Subgraph L. Manevitz Lecture 3
Solution Subgraph L. Manevitz Lecture 3
Heuristic Values:estimated cost to solution set 0 2 4 1 4 1 2 0 0 L. Manevitz Lecture 3
Basic Idea of A/O* • First top-down graph growing picks out best available partial solution sub-graph from explicit graph. • One leaf node of this graph is expanded • Second, bottom-up cost-revising, connector-marking, SOLVE-labeling. L. Manevitz Lecture 3
AO* Algorithm • Create G = <s> ; q(s) = h (s) If s eTERM mark s SOLVED • Until s labeled SOLVED do: • Compute G’ partial solution subgraph of G by tracing down marked connectors in G from s. • Select n in G’, n not in TERM, n a leaf. • Expand n , place successors in G, for each successor not already in G let q(successor)=h (successor). Label SOLVED all successors in TERM. (If no successors, reset q(n) := infinity ). L. Manevitz Lecture 3
AO* Algorithm cont. • Let S := {n}. • Until S = f do : • Remove a node, m, from S which has no descendent in G also in S (minimal node). • Revise cost for m, (check each connector from m) q(m)=min [c +q(n1)+…+q(nk)]. Mark chosen connector.If all successors their connectors are SOLVED then mark m SOLVED. • If m SOLVED or changed q(m) then add to S all “preferred” parents of m. • End. • End. L. Manevitz Lecture 3
Montone Restriction • h(n) <= c + h(n1) + h(n2) + … h(nk) Where c is cost of connector between n and set of n1, … , nk. This guarantees that h(n) <= h*(n). L. Manevitz Lecture 3
Cost (q(n) ) Values • If n has no successors then q(n) = h (n) • Otherwise working from bottom, • q(n) = connector cost + sum of q(successors) Pick smallest of above; and mark direction. If that direction has all successors SOLVED then n is marked SOLVED. L. Manevitz Lecture 3
AO* weighted Example (Refered From Artificial Intelligence TMH) http://artificialintelligence-notes.blogspot.co.il/2010/07/problem-reduction-with-ao-algorithm.html
Tracing the Algorithm 1 2 1 1 L. Manevitz Lecture 3
Tracing the Algorithm 3 2 1 1 L. Manevitz Lecture 3
Tracing the Algorithm 4 5 1 4 4 1 L. Manevitz Lecture 3
Tracing the Algorithm 4 5 1 4 4 2 2 0 0 L. Manevitz Lecture 3
Tracing the Algorithm 5 5 1 4 4 2 2 0 0 L. Manevitz Lecture 3
Tracing the Algorithm 5 5 1 4 2 0 0 L. Manevitz Lecture 3
Tracing the Algorithm 5 5 1 4 2 0 0 L. Manevitz Lecture 3