עבור לתוכן

ה-AI הראשון שלי

Featured Replies

פורסם

משום מה תמיד אחרי אחת וחצי אני מקבל מוזה לתכנות. WTF...

טוב אז זה המצב:

יש לי משחק איקס-עיגול בסיסי (הכנה לדבר האמיתי - משחק 'צוללות', אבל עד אז אני עוד צריך לשכלל את "יכולות" ה-swing שלי).

יש לי את כל המתודות והתוכנה והכל עובד טיפ-טופ. אפשר, כעיקרון, להריץ משחק שלם בין שני שחקנים אנושיים (בתנאי ששניהם על אותו מחשב, זה עוד בקונסול).

רציתי לבנות מצב משחק של המשתמש VS המחשב.

גיליתי שאני לא הכי מבין בזה. הכנתי מצב-ביניים שהמחשב בוחר משבצת פנויה ראנדומלית. sucks כי השכנה בת השמונה שלי יכולה לנצח את המחשב בלי בעיות.

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

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

אם זה משנה, השפה היא ג'אווה ואני משתמש באקליפס.

תודה רבה מראש.

פורסם

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

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

מנוע מבוסס חוקים הוא פשוט רשימה מתועדפת של חוקים. חוק מורכב משאלה והחלטה (כמו if-then בלי else. למעשה רשימת החוקים שבאה אחרי כל חוק היא ה else שלו)

למשל חוק ראשון יגיד "אם קיים תנאי לניצחון - אזי קבע מיקום האיקס ברצף היוצר ניצחון"

חוק שני יגיד "אם קיים תנאי לניצחון של היריב - אזי קבע מיקום האיקס כך שיחסום את הרצף של היריב"

וכך הלאה. עם הזמן תוכל לשכלל את המנוע שלך ע"י הוספת חוקים.

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

מילון המושגים מרחיב ומפרש את הטקסט של החוק.

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

כל מושג הוא מחלקה שיש לה הגדרה טקסטואלית (למשל "תנאי לניצחון") ומתודה שמבצעת את ההגדרה על מבנה הנתונים. במקרב זה מתודה שמחזירה את הקואורדינטות של הרצף שנמצא שעונה להגדרה

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

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

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

יש לך עוד הרבה עבודת עיצוב פה (הגדרת ממשקים וכיוב) אבל האסטרטגיה בגדול כתובה פה.

בהצלחה

פורסם

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

תסתכל פה

http://en.wikipedia.org/wiki/Tic_tac_toe

תחת Strategy

פשוט צריך לממש את האלגוריתם שמתואר שם זה הכל

בהצלחה

פורסם

הדרך "הנכונה" היא לממש אלגוריתם Minimax

http://en.wikipedia.org/wiki/Minimax

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

פורסם
  • מחבר

תודה לכולם. אני מעדיף לנסות לפתח קודם בעצמי בלי לראות קודים קיימים, אני חושב שככה אוכל להבין יותר לעומק את מהות ה-AI למשחקים מורכבים יותר (צוללות).

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

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

זה מאוד מעניין, בהרבה יותר מעניין מכל מה שניסיתי לעשות עד עכשיו ועולה בהמון רמות מעל הכיתה. I feel chilly inside.

פורסם

יואב אני שמח על ההתלהבות והענין.

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

בהצלחה

ארכיון

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

דיונים חדשים