עבור לתוכן

רברסי בפרולוג

Featured Replies

פורסם

שלום, אני כותב עכשיו משחק רברסי בפרולוג, וכמה שאלות:

א. אם אפשר לעשות מערך בפרולוג, כך לייצג את לוח המשחק בצורה קלה יותר?

ב. אני משתמש באלגוריתם מינימקס, ואני צריך לכתוב חוק שיתן ניקוד לכל מהלך שאני אעשה, עכשיו על איזה דגשים אני צריך לשים לב בחוק הזה? איך בדיוק אני מנקד את מצב הלוח לאחר המהלך?

ג. כנראה שלא הבנתי ממש טוב את הגיזום אלפא-ביתא, אני צריך להכניס אליהם לפני שאני מזמן אפס? כדי שבפעם הראשונה ישימו כל משתנה ולאחר מכן יתחילו לראות אם גדול/קטן?

ד. כששולחים את הלוח לקביעת הניקוד שלו, אז לא צריך להתאים חוק כזה לכל שחקן? כלומר אם זה התור שלי אז הפעולות האלה יהיו טובות לי, אז הניקוד יהיה גבוה,

ומקרה שני שזה התור של היריב, והפעולות האלה לא יהיו לטובתו ועדיין יהיה ניקוד גבוה? יש משהו עם הפלוס והמינוס שלא הכי הבנתי, ועם הניקוד הגבוה ביותר...

זהו בנתיים, תודה!

פורסם

א. אפשר להשתמש ברשימות כמו מערכים. זה קצת מעצבן ולכן בחלק מגרסאות הפרולוג יש פרדיקט nth0, nth1 שנותן לך לגשת לתא ה-n ברשימה (בד"כ יש לזה מימוש "נמוך" שמאפשר שימוש יחסית יעיל).

ב. - ד. לא כ"כ הבנתי מה בדיוק את/ה רוצה לעשות, אבל לדעתי יש לך באג בהבנה של עץ מינימקס - אולי שווה לך לבדוק אתר כמו זה: http://www.cs.mcgill.ca/~cs251/OldCourses/1997/topic11/

וזהו. בהצלחה בינתיים.

פורסם
  • מחבר

כן אני עכשיו הבנתי מה לא הבנתי מקודם,

אני חשבתי שהעץ גם מחשב את הניקוד למהלכים של השחקן השני,

אבל בעצם האלגוריתם מתבסס על ההנחה שבכל תור של השחקן השני, הוא יבחר במהלך שתהיה הכי פחות טובה לי (min),

ואני אבחר במהלך שהכי טוב לי (max).

עדיין לא ברור לי התפקיד של המשתנים אלפא וביתא בפונקציית המינימקס עם הגיזום...

האם אני צריך לאפס אותם לפני?

פורסם

לא צריך איפוס צריך inf-,inf+...

הרעיון הוא שאם אתה משחק מול שחקן מקס (כלומר אתה מין) אז אתה יכול לסמוך עליו לקחת את הבחירה הטובה ביותר. אם בתת העץ של בחירה מסוימת יש אוסף ערכים שהוא גדול מהתוצאה הנמוכה ביותר שבדקת עד עכשיו, אתה *יודע* שהתוצאה של תת העץ בבחירה הזו יהיה בהכרח תמיד גדול מתוצאת הבחירה הקודמת הטובה ביותר שלך, ולכן אין טעם להמשיך לבדוק את יתר תת העץ הזה - וזה בדיוק גיזום!

פורסם
  • מחבר

בדיוק את הקטע של למה אני שם Inf+ Inf- לא הבנתי...

כי זה אף פעם הניקוד למהלך לא יהיה יותר גדול מהם :s05:

פורסם

כשאתה מחפש מינימום, אם הערך התחילי הוא inf+, אז ברור שהערך הראשון שתבדוק יהיה קטן ממנו, ולכן הוא ישמר. אח"כ אתה תבדוק את הערך השני, השלישי, וכו'... וכל פעם שתשווה תמצא ערך קטן יותר (ותשמור אותו) או שלא (ותעבור הלאה).

אם הערך התחילי היה 0 למשל, אז יכול להיות שאף ערך שתבדוק לא יהיה קטן ממנו, ואז מציאת המינימום שלך תחזיר 0 (למרות שאין אף ערך כזה!).

אותו דבר לגבי מקסימום (הסתייגות: אם אתה יודע שכל הערכים חיוביים, אז אתה יכול להתחיל מ- 0).

במקרה של מינימקס, פעם מחפשים מינימום ופעם מקסימום (2 שחקנים - מין ומקס), ולכן צריך inf+ ; -inf.

פורסם
  • מחבר

כשאתה מחפש מינימום, אם הערך התחילי הוא inf+, אז ברור שהערך הראשון שתבדוק יהיה קטן ממנו, ולכן הוא ישמר. אח"כ אתה תבדוק את הערך השני, השלישי, וכו'... וכל פעם שתשווה תמצא ערך קטן יותר (ותשמור אותו) או שלא (ותעבור הלאה).

אם הערך התחילי היה 0 למשל, אז יכול להיות שאף ערך שתבדוק לא יהיה קטן ממנו, ואז מציאת המינימום שלך תחזיר 0 (למרות שאין אף ערך כזה!).

אותו דבר לגבי מקסימום (הסתייגות: אם אתה יודע שכל הערכים חיוביים, אז אתה יכול להתחיל מ- 0).

במקרה של מינימקס, פעם מחפשים מינימום ופעם מקסימום (2 שחקנים - מין ומקס), ולכן צריך inf+ ; -inf.

אוקי הבנתי ממש תודה!

אז לפונקציה אני צריך לשלוח בנוסף לתור הנוכחי והלוח את המשתנים אלפא וביתא?

ולפני שאני מזמן את הפונקציה הזאת לשים בהם את הinf- באלפא(מקס) ואת -inf בביתא(מינ)? הרי בתוך הפונקציה אני לא יכול לעשות את זה, כי זה בכל תור ישים שוב ושוב ולא ישמור,

אני צודק?

פורסם

בגדול, אם הבנתי אותך נכון אז אתה צודק.

מה שחשוב זה להקפיד באמת על הגיזום, כלומר לא להמשיך חיפוש כאשר יש לך חסם קטן/גדול מהערך שלך.

בהצלחה.

פורסם
  • מחבר

בגדול, אם הבנתי אותך נכון אז אתה צודק.

מה שחשוב זה להקפיד באמת על הגיזום, כלומר לא להמשיך חיפוש כאשר יש לך חסם קטן/גדול מהערך שלך.

בהצלחה.

כן עשיתי איזה בדיקה ענקית על איזה עץ והבנתי...

רק עכשיו המורה אומר שאי אפשר לעשות רברסי...קצת נדפקתי הייתי אומר...

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים