הרצאה 3

Adversarial Search
Most of the material is based on the lectures of Prof.
Jonathan Schaeffer from the University of Alberta, Canada
1
Why “Adversarial”? Why Search?
2
‫מדוע "מול יריב" (תחרותי)‬
‫‪ ‬משחקים הם מהתוכנות הראשונות שנכתבו ב ‪AI‬‬
‫‪ ‬את תוכנה ראשונה של שחמט הריצו בשנת ‪!1957‬‬
‫‪http://www.fzibi.com/cchess/cchess.txt‬‬
‫‪‬‬
‫‪ ‬משחקים הם סביבות תחרותיות‬
‫‪ ‬טכניקות לסביבות תחרותיות היו מהראשונות ב ‪AI‬‬
‫‪ ‬טכניקות רבות שפותחו עבור סביבות תחרותיות אפשר‬
‫ליישם גם עבור סביבות לא תחרותיות‬
‫‪3‬‬
‫מדוע חיפוש?‬
‫‪ ‬נתבונן באופן בו אנשים פותרים בעיות לעומת‬
‫האופן שבו מחשבים פותרים בעיות‬
‫‪ ‬לדוגמה נשתמש בשחמט‬
‫‪4‬‬
‫מדוע חיפוש?‬
‫‪ ‬נתבונן לדוגמה בשחמט‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫בכל מצב יש מהלכים אפשריים רבים‬
‫שחקן מומחה בעל מוח אנושי מסתכל רק על מספר אפשרויות‬
‫מה עם השאר? הם כאילו לא קיימים!‬
‫אינטואיציה המבוססת על ניסיון‬
‫‪ ‬למחשב‬
‫‪ ‬אין אינטואיציה‬
‫‪ ‬יש יכולת להביט על מיליוני אפשרויות המשך ולהעריך כל אחד בנפרד‬
‫‪ ‬הערכת אפשרויות באופן סיסטמתי נקרא חיפוש‬
‫‪ ‬שימו לב שחיפוש אפשרי גם בסביבות לא תחרותיות (כגון‬
‫בפאזלים)‬
‫‪5‬‬
‫מה נלמד היום‬
‫‪ ‬כיצד עורכים חיפוש בסביבה תחרותית‬
‫‪ ‬שמתקיימים בה גם התנאים הבאים‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫בדידה (‪)discreet‬‬
‫ניתן להבחין בה (‪)fully observable‬‬
‫דטרמיניסטית (‪)deterministic‬‬
‫‪ ‬חיפוש בסביבות תחרותיות אקראיות‬
‫‪6‬‬
Minimax Search
7
‫מצב‬
‫‪ ‬מצב (באנגלית‪ )State :‬של משחק (כמו ‪ )Ataxx‬כולל‪:‬‬
‫‪ ‬מיקום של כלי המשחק‬
‫‪ ‬של מי התור לעשות מהלך‬
‫‪ ‬הנה מצב התחלתי של ‪:Ataxx‬‬
‫‪ ‬תרגיל‪ :‬תארו מצב זה‬
‫‪ ‬מספר מהלכים אפשריים במצב נקרא פקטור הסתעפות‬
‫‪ ‬באנגלית‪Branching Factor (BF) :‬‬
‫‪ ‬תרגיל‪ :‬מה הוא ‪ BF‬של המצב ההתחלתי ב ‪?Ataxx‬‬
‫‪8‬‬
‫איך סוכן מחליט מה לעשות בתור שלו?‬
‫‪ ‬הלוח נמצא במצב מסוים‬
‫‪ ‬בשיטת ‪ ,Minimax‬הסוכן מעריך מצבים אליהם אפשר להגיע על‬
‫ידי בחירה בקווים מסוימים של המשחק‬
‫‪ ‬על פי רוב‪ ,‬לא ניתן לדעת את הערך האמתי של כל מצב נתון‬
‫‪ ‬לכן מבססים הערכה כזאת על פונקציית תועלת ‪utility function‬‬
‫‪‬‬
‫בתחום חיפוש לפונקציית תועלת קוראים פונקציה יוריסטית או יוריסטיקה‬
‫‪ ‬מטרתו של הסוכן הוא להוביל את המשחק למצבים עם ערך מקסימלי של‬
‫הפונקציה‬
‫‪ ‬לעומתו מטרתו של היריב הוא להוביל את המשחק למצבים עם ערך‬
‫מינימלי של אותה הפונקציה‬
‫‪ ‬תהליך חשיבה זה אפשר להציג כבניית עץ חיפוש כמו שנלמד‬
‫בהמשך‬
‫‪9‬‬
‫דוגמא לפונקציה יוריסטית במשחק שחמט‬
‫‪ ‬בשחמט‪ ,‬אפשר לבסס פונקציה יוריסטית פשוטה על שווי של‬
‫כלים שונים‪ ,‬כגון‪ :‬מלכה שווה ‪ ,9‬אביר שווה ‪ 3‬וכו'‬
‫‪ ‬היוריסטיקה תהיה סכום לינארי משוקלל‪:‬‬
‫)‪h(s) = w1 f1(s) + w2 f2(s) + … + wn fn(s‬‬
‫‪‬‬
‫‪‬‬
‫‪10‬‬
‫‪( w1 = 9‬משקל)‬
‫)‪f1(s) = (number of white queens) – (number of black queens‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫עץ חיפוש‬
‫עץ חיפוש הנו מבנה לוגי‬
‫להצגת חיפוש‬
‫כל קדקוד מקביל למצב‬
‫השורש של העץ מקביל למצב‬
‫הנוכחי‬
‫סימונים לשקופיות הבאות‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫– שחקן הנוכחי בוחר‬
‫מהלך‬
‫– השחקן השני בוחר מהלך‬
‫– שינוי מצב על ידי מהלך ‪3 -1 -4 2‬‬
‫"‪ – "7‬הערכת מצב (ע' להלן)‬
‫‪ ‬המצבים למטה הנם עלים‬
‫‪ ‬אם עלה מופיע ‪ d‬מהלכים‬
‫מהשורש‪ ,‬אזי ‪ d‬הנו עומק‬
‫העלה‬
‫‪11‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪0 -3 -2 4‬‬
‫‪2 3 4 -2‬‬
‫תרגיל‪ :‬מה הוא ה ‪ BF‬של המצבים בחיפוש זה?‬
‫באיזה עומק נמצאים העלים?‬
‫אנחנו אומרים שזה החיפוש לעומק ‪3‬‬
‫באיזה עומק נמצא השורש?‬
‫דוגמת עץ חיפוש‬
‫‪12‬‬
‫איך מעריכים את העלים?‬
‫‪ ‬משתמשים בפונקציה‬
‫יוריסטית כדי להעריך עלה‬
‫‪ ‬באנגלית‪Heuristic :‬‬
‫‪ ‬יוריסטיקה הינה הערכה עד‬
‫כמה המצב טוב עבור השחקן‬
‫שהוא בתור לעשות מהלך‬
‫(כלומר‪ ,‬השורש)‬
‫‪ ‬תרגיל‪:‬‬
‫‪ ‬תציעו יוריסטיקה פשוטה‬
‫עבור ‪Ataxx‬‬
‫‪ ‬מה יהיה ערך של היוריסטיקה‬
‫שלכם עבור מצב זה (התור‬
‫הוא של השחור)‬
‫‪13‬‬
‫‪3 -1 -4 2‬‬
‫‪0 -3 -2 4‬‬
‫‪2 3 4 -2‬‬
‫חיפוש ‪Minimax‬‬
‫‪ ‬המטרה שלנו היא לבחור‬
‫מהלך מהשורש‬
‫‪3‬‬
‫‪ ‬צריכים להעריך את כל הבנים‬
‫של השורש‬
‫‪ ‬נתחיל חיפוש לעומק‬
‫‪2‬‬
‫‪ ‬תרגיל‪ :‬איך הייתם מעריכים‬
‫‪2‬‬
‫‪3‬‬
‫מצב זה?‬
‫‪ ‬מצאנו ‪Principal Variation‬‬
‫– האסטרטגיה הטובה ביותר ‪3 -1 -4 2‬‬
‫עבור שני הצדדים‬
‫‪ ‬ביצעתם חיפוש ‪!Minimax‬‬
‫‪ ‬השורש תמיד ‪MAX‬‬
‫‪ ‬יריבו תמיד ‪MIN‬‬
‫‪14‬‬
‫‪3‬‬
‫‪0‬‬
‫‪4‬‬
‫‪0‬‬
‫‪0 -3 -2 4‬‬
‫‪4‬‬
‫‪3‬‬
‫‪2 3 4 -2‬‬
‫‪ ‬האם יש צורך להסביר למה‬
‫האלגוריתם נקרא ‪?Minimax‬‬
Minimax ‫חיפוש‬
Call:
result = MiniMax( s, depth, MAX );
int MiniMax( state s, int depth, int type ) {
if( end_of_game || depth == 0 ) return( Heuristic( s ) );
if( type == MAX ) {
for( score = -∞, child = 1; child <= NumbSuccessors( s ); child++ ) {
value = MiniMax( Successor( s, child ), depth-1, MIN );
if( value > score ) score = value;
}
}
else {
for( score = +∞, child = 1; child <= NumbSuccessors( s ); child++ ) {
value = MiniMax( Successor( s, child ), depth-1, MAX );
if( value < score ) score = value;
}
‫ כיצד לשנות קוד זה כדי‬:‫ תרגיל‬
}
?‫שיחזיר המהלך הטוב ביותר‬
return( score );
}
15
‫חיפוש ‪ Minimax‬הנו חישוב מקורב של‬
‫‪Nash Equilibrium‬‬
‫‪ ‬תזכורת‪ :‬אסטרטגיה הנה ‪( Nash Equilibrium‬שיווי‬
‫משקל נאש) אם אף שחקן לא יכול להרוויח על ידי‬
‫בחירת אסטרטגיה אחרת אלא אם כן הוא מניח הנחות‬
‫לגבי אסטרטגיה של היריב‬
‫‪ ‬חיפוש ‪ Minimax‬הנו חישוב מקורב (אפרוקסימציה)‬
‫של ‪Nash Equilibrium‬‬
‫‪16‬‬
‫עד איזה עומק לחפש‬
‫‪ ‬נניח שבמשחק פלוני ה ‪ BF‬הוא תמיד ‪b‬‬
‫‪ ‬אם נחפש עד עומק ‪ ,d‬כמה עלים נצטרך‬
‫להעריך?‬
‫‪bd ‬‬
‫‪ ‬דוגמה‪ :‬במצב אפייני בשחמט‪30 ~ BF ,‬‬
‫‪ ‬אז‪ ,‬כדי לחפש לעומק ‪( 6‬שלוש מהלכים לכל צד)‬
‫צריך להעריך ~ ‪ 1,000,000,000‬מצבים‬
‫‪ ‬זה יכול לקחת זמן ממושך‪...‬‬
‫‪ ‬בדרך כלל לסוכן נקצב זמן מוקבל‬
‫‪ ‬על הסוכן לבחור את עומק חיפוש בהתאם‬
‫לזמן העומד לרשותו‬
‫‪ ‬בהמשך נלמד יותר על הנושא‬
‫‪17‬‬
‫‪ ‬תרגיל‪ :‬תסבירו את‬
‫הפורמולה ‪ bd‬ע"י שימוש‬
‫בעץ החיפוש זה‬
Expectimax Search:
Stochastic Adversarial Environments
18
Expectimax ‫חיפוש‬
Minimax ‫ האלגוריתם הבסיסי עבור סביבות נגד יריב הוא‬
Expectimax ‫ אזי האלגוריתם הבסיסי הוא‬,‫ אם יש אקראיות‬
Minimax ‫ יש רק חלק אחד שלא היה קיים ב‬Expectimax ‫ ל‬
Call:
result = ExpectiMax( s, depth, MAX );
int ExpectiMax( state s, int depth, int type ) {
if( end_of_game || depth == 0 ) return( Heuristic( s ) );
score = -∞
if (s is deterministic)
if (type == MAX) score = MAX(Minimax(successor, depth-1, MIN))
else score = MIN(Minimax(successor, depth-1, MAX));
else
if (type == MAX) score = EXP(Minimax(successor, depth-1, MIN))
else score = EXP(Minimax(successor, depth-1, MAX));
return( score );
}
19
‫דוגמת חיפוש ‪Expectimax‬‬
‫‪3‬‬
‫‪2‬‬
‫‪2‬‬
‫‪3‬‬
‫‪2‬‬
‫‪3‬‬
‫‪3 -1 -4 2‬‬
‫‪0.5‬‬
‫‪0.5‬‬
‫‪4‬‬
‫‪0‬‬
‫‪0 -3 -2 4‬‬
‫‪4‬‬
‫‪3‬‬
‫‪2 3 4 -2‬‬
‫‪ ‬מעכשיו נתרכז בסביבות תחרותיות דטרמיניסטיות‬
‫‪20‬‬
Negamax Search
21
‫חיפוש בלי ‪ Min‬ו ‪Max‬‬
‫‪ ‬משחקים עם סכום אפס (‪)Zero-Sum Game‬‬
‫‪ ‬משחק שבו הרווח של שחקן אחד הוא בדיוק ההפסד של‬
‫השחקן השני‬
‫‪ ‬תכונה זו מאפשרת לפשט את ‪Minimax‬‬
‫‪ ‬מבחינת הקוד‬
‫‪ ‬חיפוש למשחקי סכום אפס נקרא ‪Negamax‬‬
‫‪22‬‬
‫חיפוש ‪Negamax‬‬
‫‪ ‬בחיפוש ‪Minimax‬‬
‫היוריסטיקה העריכה עד‬
‫כמה המצב טוב עבור השורש‬
‫(כלומר עבור השחקן שתורו‬
‫לבצע את המהלך בשורש)‬
‫‪ ‬ב ‪ Negamax‬ההערכה היא‬
‫תמיד עבור השחקן שתורו‬
‫לעשות מהלך בקדקוד‬
‫הנוכחי‬
‫‪3‬‬
‫‪-2‬‬
‫‪2‬‬
‫‪0‬‬
‫‪3‬‬
‫‪-3 1 4 -2‬‬
‫‪ ‬שימו לב שכל הקדקודים‬
‫כאן הם ‪!MAX‬‬
‫‪23‬‬
‫‪4‬‬
‫‪-3‬‬
‫‪0‬‬
‫‪0 3 2 -4‬‬
‫‪4‬‬
‫‪3‬‬
‫‪-2 -3 -4 2‬‬
‫‪ ‬תרגיל‪ :‬איך הייתם מעריכים מצב זה?‬
‫‪ ‬תרגיל‪ :‬השוו ערכים של עלים בדוגמה‬
‫זאת ובדוגמה של ‪ .Minimax‬מה‬
‫השתנה? מדוע?‬
Negamax ‫חיפוש‬
Call: result = NegaMax( s, depth);
int NegaMax( state s, int depth) {
if( end_of_game || depth == 0 ) return( Heuristic( s ) );
score = -∞;
for( child = 1; child <= NumbSuccessors( s ); child++ ) {
value = -NegaMax( Successor( s, child ), depth-1);
if( value > score ) score = value;
}
return( score );
}
24
Minimax Search With Alpha-Beta Pruning
25
‫זוכרים את החשבון?‬
‫‪ ‬נניח שבמשחק פלוני ה ‪ BF‬הוא תמיד ‪b‬‬
‫‪ ‬אם נחפש עד עומק ‪ ,d‬כמה עלים נצטרך‬
‫להעריך?‬
‫‪bd ‬‬
‫‪ ‬אמרנו שעל הסוכן לבחור עומק חיפוש‬
‫בהתאם לזמן העומד לרשותו‬
‫‪ ‬האם ישנה אפשרות לחפש יותר לעומק?‬
‫‪ ‬רעיון הכי פשוט (אבל הוא לא כללי – לא תמיד ניתן ליישם אותו)‪:‬‬
‫‪ ‬אולי יש מהלכים שאין צורך לשקול אותם?‬
‫‪ ‬לפעמים אפילו לוקחים סיכון שנחמיץ מהלך טוב כדי לחפש יותר לעומק‬
‫‪ ‬כן! אפשר לחתוך ענפים מסוימים של עץ חיפוש מבלי להתפשר‬
‫איכות המהלך!‬
‫‪26‬‬
‫הרעיון של החיתוך‬
‫‪ ‬אפשר להוכיח שיש ענפים של עץ חיפוש שלא‬
‫יתרמו לתוצאה של החיפוש‬
‫‪ ‬נציג את הרעיון בעזרת דוגמה קטנה‬
‫שחקן זה יכול‬
‫להשיג לפחות ‪2‬‬
‫• שחקן זה יכול להשיג לפחות ‪-1‬‬
‫• זה מקביל ל ‪ 1‬עבור היריב שלו‪.‬‬
‫• אבל היריב יכול להשיג ‪ ,2‬לכן הוא לא‬
‫יבחר מהלך ששם הוא לא יכול להשיג‬
‫יותר מ ‪.1‬‬
‫• לכן אפשר לא להמשיך עם ענף זה‪.‬‬
‫• זה נקרא חיתוך (באנגלית‪)Cut-Off :‬‬
‫• בדוגמה זאת חתכנו שני ענפים‪.‬‬
‫• שימו לב שאפשר לחתוך תת‪-‬עץ גדול!‬
‫‪27‬‬
‫‪2‬‬
‫‪-1‬‬
‫‪-2‬‬
‫‪XX‬‬
‫‪1‬‬
‫‪2‬‬
‫‪5‬‬
‫חיפוש עם חיתוך ‪Alpha-Beta‬‬
‫‪ ‬רעיון זה של חיתוך הנו בסיס לאלגוריתם "חיפוש עם‬
‫חיתוך ‪ "Alpha-Beta‬או פשוט "חיפוש ‪"Alpha-Beta‬‬
‫שמשתמשים בו בסוכני משחק מקצועיים‬
‫‪ ‬אפשר לממש חיתוך ‪ Alpha-Beta‬גם ב ‪ Minimax‬וגם‬
‫ב ‪Negamax‬‬
‫‪ ‬אנחנו נלמד ב ‪Negamax‬‬
‫‪ ‬נתחיל בדוגמה שלנו ואז נכתוב את האלגוריתם‬
‫‪28‬‬
‫חיפוש עם חיתוך ‪Alpha-Beta‬‬
‫‪3 3‬‬
‫‪-3 -3‬‬
‫‪0 0‬‬
‫‪X‬‬
‫‪X‬‬
‫‪3 3‬‬
‫‪ -3 -3‬‬
‫‪4‬‬
‫‪4 0 0‬‬
‫‪2 3‬‬
‫‪X‬‬
‫‪-3 1‬‬
‫‪0 3‬‬
‫‪-2 -3 -4‬‬
‫‪ ‬ערך של קדקודים בצבע כחול לא משפיע על ההחלטה הסופית‬
‫‪29‬‬
‫הרעיון של החיתוך במושגים של ‪ α‬ו ‪β‬‬
‫‪ ‬ביתא (‪ – )β‬הערך הנמוך ביותר שהיריב יכול להכריח‬
‫עבור הקדקוד הנוכחי‬
‫‪α=2‬‬
‫‪2‬‬
‫‪β=-2‬‬
‫‪score=-1‬‬
‫‪-2‬‬
‫‪XX‬‬
‫‪1‬‬
‫‪2‬‬
‫‪5‬‬
‫‪ ‬אלפא (‪ – )α‬הערך המקסימלי שהשחקן הנוכחי יכול‬
‫להכריח עבור עצמו‬
‫‪ ‬למה צריכים את ‪ ?α‬כי ‪ -α‬הוא נהיה ‪ β‬עבור היריב!‬
‫‪30‬‬
‫חיפוש עם חיתוך ‪Alpha-Beta‬‬
‫‪α=3 3‬‬
‫‪α=-3 -3‬‬
‫)‪X(β=-3‬‬
‫‪α=0 0‬‬
‫)‪X(β=-3‬‬
‫‪α=3 3‬‬
‫‪α= 4‬‬
‫‪4 α=3 0‬‬
‫‪α= -3 -3‬‬
‫‪α= 2 3‬‬
‫)‪X(β=3‬‬
‫‪-3 1‬‬
‫‪0 3‬‬
‫‪-2 -3 -4‬‬
‫‪ ‬ערך של קדקודים בצבע כחול לא משפיע על ההחלטה הסופית‬
‫‪31‬‬
Alpha-Beta ‫חיפוש עם חיתוך‬
Call: result = AlphaBeta( s, depth, -∞, +∞);
int AlphaBeta( state s, int depth, int alpha, int beta ) {
if( end_of_game || depth == 0 ) return( Heuristic( s ) );
score = -∞;
for( child = 1; child <= NumbSuccessors( s ); child++ ) {
value = -AlphaBeta( Successor( s, child ),
depth-1, -beta, -alpha );
if( value > score ) score = value;
if( score > alpha ) alpha = score;
if( score >= beta ) break;
}
return( score );
}
32
‫יש להיזהר!‬
‫‪ ‬אלפא‪-‬ביתא מורכב מכמה שורות קוד בלבד‪ ,‬אבל הוא‬
‫לא אלגוריתם פשוט! (במיוחד אחרי שיפורים‬
‫המתוארות בהמשך)‬
‫‪ ‬באג יכול להסתתר זמן רב‪ ,‬עד שפתאום נבחר מהלך‬
‫גרוע (כלומר ערך של עלה לא נכון עולה עד לשורש)‬
‫‪33‬‬
Performance Enhancements for Alpha-Beta
34
‫נתחיל בציטוט‬
)‫ לא רק על משחקים‬,‫(אמרו אותו על חיפוש בכלל‬
“If the search algorithm is really 20 lines
of code, then why is my search routine
over 20 pages of code?”
M. Newborn, 1985
(http://www.cs.mcgill.ca/~newborn)
35
‫אלגוריתם מול שיפורים‬
‫‪ ‬בהינתן בעיה (כל מין סביבה)‪ ,‬בדרך כלל קל יחסית‬
‫לבחור אלגוריתם מתאים‬
‫‪ ‬למשל‪ ,‬אם אני צריך סוכן שישחק שחמט‪ ,‬אני יכול להשתמש ב‬
‫‪Minimax‬‬
‫‪ ‬פעמים רבות האלגוריתם הבסיסי חלש מדי‪ ,‬כלומר אינו‬
‫יכול לתת פתרון של איכות הרצוי בזמן העומד לרשותנו‬
‫‪ ‬במקרים כאלו רוב הכוח של הפתרון יכול לבוא דווקא‬
‫משיפורים‬
‫‪ ‬חיתוך אלפא‪-‬ביתא הנו שיפור עבור חיפוש ‪Minimax‬‬
‫‪36‬‬
‫‪‬‬
‫אבל כולם משתמשים בו ולכן קוראים לאלגוריתם אלפא ביתא‬
‫דוגמה של כוח שיפורים‪15-puzzle :‬‬
‫(שנת ‪)2004‬‬
‫‪37‬‬
‫רעיון בסיס של משפרי אלפא‪-‬ביתא‬
‫‪ ‬מה היה קורה לו היינו שוקלים קודם את המהלך הגרוע יותר?‬
‫‪3 3‬‬
‫‪0‬‬
‫‪3 3‬‬
‫‪-5‬‬
‫‪-3‬‬
‫‪-3‬‬
‫‪X‬‬
‫‪5‬‬
‫‪0‬‬
‫‪4‬‬
‫‪3‬‬
‫‪0‬‬
‫‪5‬‬
‫‪4‬‬
‫חסכנו הערכה של מצב זה (וכל תת‬
‫העץ שלו)!‬
‫‪ ‬הרעיון המרכזי של משפרי אלפא ביתא הוא שאנחנו צריכים‬
‫לשקול את המהלכים הטובים מוקדם ככל האפשר‬
‫‪38‬‬
‫‪3‬‬
‫עד כמה זה חשוב‬
‫‪ ‬נגדיר שני טיפוסי קדקודים‪:‬‬
‫‪ – ALL ‬צריכים לשקול את כל המהלכים‬
‫‪ – CUT ‬קיים אפשרות לחיתוך‬
‫‪ ‬הנה העץ שנקבל אם תמיד נשקול את המהלך הטוב ביותר‬
‫לפני כל המהלכים האחרים‪:‬‬
‫‪all‬‬
‫‪all‬‬
‫‪all‬‬
‫‪cut … cut‬‬
‫‪cut … cut‬‬
‫‪cut … cut‬‬
‫‪cut‬‬
‫‪39‬‬
‫…‬
‫‪cut‬‬
‫‪all‬‬
‫‪all‬‬
‫‪cut … cut‬‬
‫‪all‬‬
‫עד כמה זה חשוב‬
?b ‫ הוא‬BF ‫ אם ה‬d ‫ כמה עלים שקלנו בעומק‬
bd/2 ~ bd/2 + bd/2 - 1 
‫ אז‬,9 ‫ ומחפשים לעומק‬10 ‫ הוא‬BF ‫ אם‬,‫ למשל‬
 Minimax:
 Alpha-beta:
all
all
109
105 + 104
all
= 1,000,000,000
=
110,000
…
all
cut
cut … cut
all
all
cut … cut
cut … cut
cut … cut
cut
40
‫אנו לא יודעים איזה מהלך טוב יותר‬
‫‪ ‬אנו לא יודעים איזה מהלך טוב יותר‬
‫‪ ‬לו היינו יודעים‪ ,‬הרי מלכתחילה לא היינו צריכים לערוך חיפוש!‬
‫‪ ‬לכן‪:‬‬
‫‪ ‬קיימות הרבה דרכים כדי לשער את יעילותה של כל מהלך‬
‫‪ ‬ממיינים את המהלכים בהתאם לשיעור זה‬
‫‪ ‬להלן בקצרה כמה דרכים כדי לשער את טיב המהלך‪:‬‬
‫‪ ‬חיפוש ‪ Minimax‬רדוד (כגון לעומק ‪ 1‬או ‪)2‬‬
‫‪ ‬טבלת טרנספוזיציות‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫הינה טבלת ‪ Hash‬ששומרת את המצבים שפגשנו במהלך החיפוש‬
‫עבור כל מצב שומרים‪ :‬הערכה‪ ,‬המהלך הטוב ביותר‪ ,‬עד איזה עומק היה‬
‫החיפוש ממצב זה‪ ,‬האם ההערכה הייתה מדויקת או היה חיתוך‬
‫לפרטים נוספים (כי רוצים ליצור הסוכן הטוב ביותר בכיתה!) יש ללמוד‬
‫‪ http://webdocs.cs.ualberta.ca/~jonathan/PREVIOUS/Courses/657/Notes/4.DAGs.pdf‬ו‬
‫‪http://webdocs.cs.ualberta.ca/~jonathan/PREVIOUS/Courses/657/Notes/5.IDandMO.pdf‬‬
‫‪41‬‬
Iterative Deepening
42
‫עד איזה עומק לחפש‬
‫‪ ‬אמרנו קודם לכן שאנחנו צריכים לבחור עומק חיפוש‬
‫בהתאם לזמן העומד לרשותנו‬
‫‪ ‬אנחנו יכולים לעשות הערכה כזאת עבור ‪ ,Minimax‬כי‬
‫אנחנו יודעים בערך מה היא כמות העבודה (‪)bd‬‬
‫‪ ‬אבל עם חיתוך אלפא‪-‬ביתא הכול תלוי בהצלחתנו לשקול‬
‫בהקדם מהלכים טובים ( )‬
‫‪ ‬מה הם האפשרויות?‬
‫‪ ‬אם נחפש מדי לעומק‪ ,‬לא תהיה לנו החלטה בזמן‬
‫‪ ‬אם נחפש עד עומק קטן מדי‪ ,‬אז לא נשתמש בזמן העומד לרשותנו‬
‫‪ ‬איזה אפשרות יותר טובה?‬
‫‪ ‬העמקה איטרטיבית אומרת לבחור לכתחילה באפשרות השנייה‬
‫‪43‬‬
‫העמקה איטרטיבית‬
‫‪ ‬מחפשים עד עומק ‪1‬‬
‫‪ ‬נשאר זמן? מחפשים עד עומק ‪2‬‬
‫‪ ‬וכו' עד שנשתמש בכל הזמן‬
‫‪44‬‬
‫יתרונות וחסרונות העמקה איטרטיבית‬
‫‪ ‬חסרונות‪:‬‬
‫‪ ‬רק את האיטרציה האחרונה היינו באמת צריכים – הפסד זמן על‬
‫איטרציות הקודמות‬
‫‪ ‬יתרונות‪:‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪45‬‬
‫משתמשים בכל הזמן‬
‫מקבלים החלטה טובה עד כמה שניתן בזמן העומד לרשותנו‬
‫יש סיכוי גבוה שהמהלך שהיה הכי טוב באיטרציה הקודמת יהיה‬
‫הכי טוב באיטרציה הנוכחית – נשקול אותו ראשון ונחתוך!‬
‫אם השתמשנו בטבלת טרנספוזיציות ( ) ומילאנו אותה‪ ,‬נחסוך‬
‫עבודה רבה באיטרציה הנוכחית !‬
‫‪ ‬חיפוש הנו שיטה מאד חשובה ב ‪AI‬‬
‫‪ ‬בהינתן בעיה‪ ,‬קל יחסית לבחור אלגוריתם מתאים‬
‫‪ ‬פעמים רבות רוב הכוח של הפתרון בא ממשפרי ביצועים‬
‫‪ ‬למדנו כמה אלגוריתמים‪:‬‬
‫‪ Minimax ‬ו ‪Negamax‬‬
‫‪) ( Expectimax ‬‬
‫‪ ‬הצגנו כמה משפרי ביצוע (‬
‫‪ ‬העמקה איטרטיבית‬
‫‪ ‬חיתוך אלפא‪-‬ביתא‬
‫‪46‬‬
‫)‬