בול פגיעה

niminet

New member
בול פגיעה

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

אלדד26

New member
הממממ

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

שאקל

New member
מה הבעיה?

קודם אתה צריך להבין איך בול פגיעה משחקים. נניח ויש לי מספר רנדומלי שהמחשב בחר והוא 1456 המשתמש הקיש 2546 הבדיקה בפונקציה תקבל: 2 פגיעות 1 בול שים לב שכדי לקבל את מספר הפגיעות אתה צריך לחסר ממנו את מספר הבולים. עכשיו המחשב צריך לעשות בדיקה לדעתי ולגלות איזה מספר מתוך ה-4 הוא הבול. ברגע שגילינו מנסים לגלות את הבול הבא. תזכור שבבול פגיעה כל ספרה מופיעה פעם אחת ואין חזרות. אתה רק צריך לבדוק ספרות מ-0 עד 9 ברגע שיש בול. זה בקצרה.
 

niminet

New member
לא ידעתי

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

שאקל

New member
יעילות?

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

אלדד26

New member
אתה מפספס את הפואנטה.

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

שאקל

New member
נכון אבל

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

niminet

New member
../images/Emo52.gif

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

אלדד26

New member
בכל זאת יהיה מעניין

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

kawa

New member
אתה מתכוון.. ?

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

באפט

New member
בול פגיעה

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

kawa

New member
יש לי המון רעיונות

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

niminet

New member
כבר יצרתי כזה

הדיון היה על AI שמנחש סדרה של מספרים. תקראי את ההודעה "סליחה".
 

singo2002

New member
פתרון

יצרתי משחק כזה בjava גם applet וגם jsp אם תרצה שלח לי הודעה ואני אשלח לך את האתר עליו זה נמצא כולל soure code
 
אתה מוזמן להוריד את הקוד והמשחק שלי

בניתי בעבר את המשחק הזה בפסקל, ואתה יכול להוריד אותו, כולל את קוד המקור שלו, מהאתר www.upload.co.il תהנה.
 

niminet

New member
../images/Emo2.gif!!!חבר´ה תקראו את זה!!!../images/Emo2.gif

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