נשלח בתאריך: 28 February 2009 בשעה 01:28 | | IP רשוּם
|
|
|
|
שלום,
אלגוריתם מיני-מקס דורש מבנה עץ מיוחד ופונקציית הערכה לכל שלב במשחק.
מבנה העץ - כל רמה של העץ היא תור במשחק כאשר ראש העץ הינו תור שחקן המחשב. כל קודקוד בעץ הינו מצב אפשרי במשחק. קודקודים באותה רמה מציינים מהלכים אפשריים לשחקן שכעת תורו לשחק. מסלול בעץ שמתחיל בשורש ומסתיים בעלה, הינו אוסף מהלכים חוקיים העלולים להתרחש במשחק. העלים צריכים להימצא ברמת עץ שהיא תורו של שחקן יריב. *תוספת הכרחית לשלבי האלגוריתם עצמו - כל קודקוד יוכל להחזיק בנוסף גם ערך מספרי, שיאותחל בשלב הריצה.
פונקציית הערכה (היוריסטית)- פונקציה המקבלת מצב לוח ומחזירה ערך מספרי המשתנה בהתאם לטובתו של השחקן המלאכותי. כלומר, אם מצב הלוח טוב לשחקן המלאכותי (לדוגמא מקרב לאכילת שחקן, או ליצירת מלך, או לניצחון). אז הפונקציה תחזיר לדוגמא ערך מספרי קרוב ל-10. אם המצב רע לשחקן המלאכותי אזי הפונקציה לדוגמא תחזיר ערך קרוב ל-0. באופן כללי ישנם הגדרות לבניית פונקציה היוריסטית נכונה המשרתת את הבעיה, הייתי מציע לך לקרוא עליהם טיפה בשביל להבין איך לבנות זאת נכון.
הרעיון הכללי מאחורי האלגוריתם- בונים את העץ. ברמת העלים מעריכים את המצבים בעזרת פונקצית הערכה. מבעבעים את ערכי המצבים לפי הערכים שהתקבלו, כאשר הבחירה נעשית לפי טובתו של השחקן הנוכחי. הערך שמתקבל בשורש העץ מציע איזה מהמהלכים כדאי לעשות.
לדוגמא בדמקה - בניית העץ - 1. בשורש העץ מופיע מצב הלוח הנוכחי. 2. ניצור את כל המהלכים האפשריים לשחקן המלאכותי כבנים. 3. בעבור כל בן ניצור לו בנים שהם כל המהלכים האפשריים לשחקן היריב. 4. נחזור על תהליך 2 ו-3 עד גובה קבוע מראש, או עד אשר אין יותר מהלכים לעשות. הערכה - 1. נבצע הערכה ברמת העלים בלבד. 2. ברמה אחת מעלה כל אב לקבוצת עלים מסויימת הוא בחירה של השחקן היריב, לכן באופן רציונאלי הבחירה תעשה כרעה ביותר מבחינת השחקן המלאכותי. כלומר, הערך שיתקבל בכל אב יהיה זה הנמוך ביותר מבין בניו, ומכאן המיני. 3. כעת כל אב לקבוצת בנים הוא בחירה לשחקן המלאכותי, לכן יבחר הערך הגבוה ביותר מבין הבנים, ומפה המקס. 4. ממשיכים בצעדים 2-3 עד אשר מגיעים לשורש העץ. בחירה - בודקים מי מבין הבנים בעבע את ערכו אל שורש העץ ובוחרים בו כמהלך הכדאי ביותר.
זהו זה, פשוט וקל.
שיהיה בהצלחה.
|