שיחה:תכנות מתקדם ב-Java/פולימורפיזם/תרגילים

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי
קפיצה לניווט קפיצה לחיפוש

אני מעריך את המאמץ עד עמקי נפשי[עריכה]

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

31.44.137.17 20:43, 22 באפריל 2015 (IDT)

ערכתי את האלוגריתם של מחלקת AIPlayer[עריכה]

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

בין אם אתם מסכימים עם ההסבר הזה ובין אם לאו ברוך שזו אסטרטגיה טובה יותר, ואפשר להוכיח את זה. ערכתי את הקוד כך שהמחשב יריץ 1,000,000 משחקים ברצף בין שתי שחקנים עם שתי השיטות הללו (האסטרטגיה הנוכחית והקודמת) והתוצאה הייתה ניצחון של האסטרטגיה החדשה ב- 63% מהמשחקים. כשבדקתי את האסטרטגיה הקודמת (בחירת המספר האמצעי) מול השחקן "מחשב מהמר" (שבוחר מספר אקראי בתחום האפשרי לפי הניחושים הקודמים) התברר שהשחקן שזורק מספרים אקראיים מנצח את השחקן בעל ה"אסטרטגיה" (השגויה) ב 53% מהמשחקים (שזה אומר שעדיף ניחושים אקראיים על ה"אסטרטגיה" הזו).

תוכלו לבדוק זאת בעצמכם.

נ.ב. הספר הזה מעולה, למדתי דרכו java בלי שום רקע לימודי במחשבים או בתכנות.

תודה לכולם.

יוסף 24/08/16