Transcript Document

‫פרוייקט מסכם‬
‫‪Game of life‬‬
‫ואוטומטים תאיים‬
‫דותן אשכנזי‬
‫מטרות הפרוייקט?‬
‫•‬
‫•‬
‫•‬
‫•‬
‫כתיבת קוד ארוך‬
‫עבודה עם ממשק ייצוג גרפי ‪GUI‬‬
‫בנייה של סימולציות מחשב והדגמה שלהן‬
‫העשרת הידע האישי שלי ושלכם‬
‫סימולציה (או הדמיה) היא חיקוי של מציאות מורכבת באמצעות‬
‫מודל מתאים‪ .‬מטרת הסימולציה הינה לייצג מאפיינים מסוימים‬
‫בהתנהגותה של מערכת‪ ,‬למטרות שונות‪.‬‬
‫נושא הפרוייקט‪ :‬לימוד והבנה של 'משחק החיים'‪ ,‬כדוגמה‬
‫לסימולציה בעזרת מחשב‪.‬‬
‫‪2‬‬
‫מהו אוטומט תאי?‬
‫• אוטומט תאי הוא אוסף של יחידות קטנות על לוח(תאים)‪,‬‬
‫אשר התנהגותן נקבעת על ידי כללים פשוטים‪ ,‬ומושפעת‬
‫ממצב השכנים של יחידות אלו‪.‬‬
‫‪3‬‬
‫'‪'Game of life‬‬
‫• 'משחק החיים' הוא מקרה פרטי של אוטומטים תאיים‪.‬‬
‫• משחק החיים הנו משחק לשחקן יחיד‪ ,‬שהומצא בשנת‬
‫‪ 1970‬על ידי המתמטיקאי הבריטי ג'ון הורטון קונווי‪.‬‬
‫לרוב‪ ,‬ניתן להגדיר משחק זה כ"משחק לאפס שחקנים"‪,‬‬
‫כיוון שלרוב ההחלטה היחידה שהשחקן צריך לקבל היא‬
‫מה המצב ההתחלתי של המשחק‪ ,‬ולאחר מכן המשחק‬
‫ממשיך ללא תלות בהחלטות השחקן‪.‬‬
‫המשחק מתבצע בדרך־כלל באמצעות מחשב‪ ,‬אך ניתן‬
‫לשחק בו גם ידנית‪ ,‬באמצעות כלי כתיבה ונייר משבצות‪.‬‬
‫‪4‬‬
‫אופן ביצוע המשחק‬
‫• המשחק מתחיל בטבלה ריקה‬
‫• השחקן צובע חלק מן‬
‫המשבצות כדי להגיע לתצורה‬
‫התחלתית‪ ,‬או שהמחשב בוחר תאים באופן כלשהו‬
‫(למשל אקראי)‪ .‬על המשבצות הצבועות נאמר כי‬
‫הן מייצגות יצורים חיים חברותיים‪.‬‬
‫לכל יצור יכולים להיות עד ‪ 8‬שכנים‪.‬‬
‫‪5‬‬
‫• היצורים מתקדמים לשלב הבא‪ ,‬לפי הכללים הבאים‪:‬‬
‫ כל יצור שיש לו שכן ‪ 1‬או שאין לו שכנים כלל‪ ,‬מת‬‫מבדידות‪.‬‬
‫ כל יצור שיש לו יותר מ‪ 3-‬שכנים מת מצפיפות‪.‬‬‫ כל משבצת ריקה שיש לה בדיוק ‪ 3‬שכנים קמה לתחייה‪.‬‬‫ כל יצור שיש לו ‪ 2‬או ‪ 3‬שכנים לא משתנה (עד לתור‬‫הבא)‪.‬‬
‫‪6‬‬
7
‫דוגמאות‬
‫‪8‬‬
9
Blinker
10
Glider
11
12
‫המשחק נגמר כאשר האוכלוסייה יכולה‪:‬‬
‫ להיכחד כולה‬‫ להגיע למצב שיווי משקל‪:‬‬‫• צורות קבועות סטטיות‪.‬‬
‫• רצף צורות מחזוריות (באנגלית ‪()oscillator‬כדוגמת ה‪)"Blinker"-‬‬
‫ עדיין לא הוכחה ההשערה שהמשחק יכול גם להמשיך עד אין‬‫סוף מבלי להפסיק להשתנות או ליצור צורות באופן אקראי‪.‬‬
‫‪13‬‬
‫סופיות‬-‫דוגמאות לצורות מחזוריות אין‬
The Clock
The Star
The
French
Kiss
14
The Galaxy
‫מתמטיקאים רבים חקרו את חוקי המשחק בניסיון למצוא חוקיות‬
‫בצורות מסוימות ומחזורי חיים מעניינים‪ ,‬אחד מהם היה ביל‬
‫גוספר שהמציא בשנת ‪ 1970‬את ‪ ,Gosper glider gun‬מדובר‬
‫בצורה שחוזרת על עצמה ותוך כדי היא יוצרת צורות מסוג‬
‫"‪ "Glider‬ומשגרת אותם לכיוון מסוים‪.‬‬
‫הוכח שצורה זו היא אין‪-‬סופית והיה מדובר בצורה הראשונה‬
‫שיוצרת צורות נעות אחרות‪ ,‬עד היום צורה זו היא הצורה הקטנה‬
‫ביותר שהצליחו למצוא שעושה פעולה מסוג זה‪.‬‬
‫קונווי טען שלא ניתן ליצור צורה עם מספר תאים מוגבל שתיצור‬
‫מספר תאים בלתי מוגבל‪ ,‬אין‪-‬סופי‪ ,‬והוא הציע פרס בשווי של‬
‫‪ $50‬למי שיוכיח אחרת‪ ,‬גוספר שמע על כך וזה מה שהניע אותו‬
‫לחקור את המשחק‪ ,‬גוספר המשיך לחקור את המשחק גם לאחר‬
‫שאסף את הפרס והוא פיתח אותו מאוד‪.‬‬
‫‪15‬‬
16
‫צורה דומה שיוצרת מלא ‪Gosper glider gun‬‬
‫‪17‬‬
‫מראה רציף כולל של המשחק‬
‫‪18‬‬
‫אז למה זה בכלל טוב לנו?‬
‫‬‫‬‫‬‫‪-‬‬
‫ניתן להשתמש ברעיון של המשחק ולהתאים את החוקים‬
‫שלו לדברים מסוימים שאנו רוצים לחזות את התפתחותם‪,‬‬
‫למשל אם נשנה את החוקים כמו שצריך נוכל "להלביש"‬
‫את המשחק על דברים כמו‪:‬‬
‫חיזוי התפתחות שריפות ביער(תא מסומן מייצג עץ שרוף)‬
‫חיזוי צמיחה של פרדסים ושדות(תא מסומן מייצג גידולים)‬
‫חיזוי תהליך מדבור(תא מסומן מייצג מדבר)‬
‫חיזוי התפתחות בקטריות בצלחת פטרי‪ ,‬או כל צורת חיים‬
‫אחרת (תא מסומן מייצג תא חי)‬
‫‪19‬‬
‫איך מתאימים את המשחק למטרות‬
‫השונות?‬
‫• שינוי תנאי בדידות‪ /‬צפיפות‪ /‬לידה‬
‫• בדיקה של חלק מהשכנים(רק שכנים מצד ימין‬
‫ומלמטה‪ ,‬וכו‪)...‬‬
‫• שינוי ברדיוס הבדיקה ‪ -‬במקום לבדוק תא אחד‬
‫מכל כיוון נבדוק יותר תאים מכל כיוון‪ ,‬כך התא‬
‫יהיה תלוי יותר בסביבתו‪.‬‬
‫‪20‬‬
‫• נתינת משקל לכל תא – לכל תא יהיה משקל כלשהו‬
‫וכל תא ישפיע בצורה שונה על התא הנבדק בהתאם‬
‫למשקלו‪.‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0.3‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1.5‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0.3‬‬
‫‪1.5‬‬
‫‪1.5‬‬
‫‪0.3‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1.5‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0.3‬‬
‫‪0‬‬
‫‪0‬‬
‫‪21‬‬
‫הופעת כתמים ופסים אצל בעלי חיים‬
‫• בשנים ‪ 1952-1954‬גילה אלן טיורינג (‪ )Turing‬תבנית המגיבה‬
‫ל"תומכים‪-‬דוחים"‪ ,‬חלק מסביבה של איבר מסוים תתמוך בשינוי‬
‫ותקדם אותו בעוד שחלק אחר מסביבת האיבר ידחה אותו ויאט את‬
‫התפתחותו‪.‬‬
‫• דוגמה טובה לתבנית אותה גילה דיוויד יאנג נמצאת ביצירה של‬
‫כתמים ופסים אצל בעלי חיים‪ ,‬לכל בעל חיים יש כתמים התחלתיים‬
‫בהתאם לגנים שלו וכל כתם כזה משחרר ‪ 2‬חומרים כימיים אל‬
‫סביבתו‪:‬‬
‫ האחד "תומך" שנמצא בסביבה הקרובה (למשל ברדיוס ‪ )1‬משום‬‫שהוא נספג מהר יותר בסביבה והוא פחות עמיד‪ ,‬ואז ניתן לומר‬
‫שהיא מכילה מזרזי פיגמנטציה‪.‬‬
‫ השני "דוחה" שמגיע עד הסביבה הקצת יותר רחוקה (למשל‬‫ברדיוס ‪ )3‬משום שהוא יותר עמיד ונספג יותר לאט בגוף‪ ,‬ואז ניתן‬
‫לומר שהיא מכילה מעכבי פיגמנטציה‪.‬‬
‫‪22‬‬
‫לכל סוג יש משקל (למשל ‪ 1.5‬למזרזים ו‪ -0.3 -‬למעכבים)‪ ,‬בחישוב‬
‫ההשפעה הכללית של הסביבה על תא נשווה את סכום משקלי התאים‬
‫"התומכים" לסכום משקלי התאים "הדוחים"‪ ,‬הסכום הגדול יותר הוא‬
‫שיקבע את מצב התא‪.‬‬
‫‪23‬‬
‫שינוי במשקלי התאים‪ ,‬בגודל הסביבות וצורתן יוצר‬
‫דוגמאות פרווה מגוונות‪.‬‬
‫אצל כל בעל חיים חוקי התבנית משתנים בהתאם לגנים‬
‫שלו ולכן לכל בעל חיים יש תבנית פרווה‪/‬עור שונה‪.‬‬
‫שינויים מסויימים יגרמו להופעת פסים ושינויים אחרים‬
‫יגרמו להופעת כתמים(כמו למשל בדיקת רדיוס גדולה יותר‬
‫מצידי התא או נתינת משקל גדול יותר לתאים שמעל‬
‫ומתחת לתא)‪.‬‬
‫‪24‬‬
25
26
strips - ‫פסים‬
spots - ‫כתמים‬
27
‫שילוב של פסים וכתמים – ‪spots and strips‬‬
‫‪28‬‬
‫הקוד והמשחק‬
‫‪29‬‬
‫חבילות הנחוצות למימוש הקוד‬
‫• ‪ – PIL‬נותן למעבד יכולות עיבוד תמונה כמו גם‬
‫פתיחה‪ ,‬שמירה ושינוי של תמונות‪.‬‬
‫• ‪ – Swampy‬מכילה בתוכה את ‪Graphical ( GUI‬‬
‫‪ ,)User Interface‬ממשק המסוגל לתקשר עם‬
‫האדם באמצעות ייצוג גרפי ולחיצות עכבר‬
‫ומקלדת‪.‬‬
‫‪30‬‬
‫שלד הקוד‬
‫יבוא החבילות הנדרשות – ‪Import‬‬
‫מימוש פונקציות לתמונה – ‪GUI Functions‬‬
‫מימוש חוקי משחק חיים‪Game Of Life Functions-‬‬
‫מימוש חוקים למודל טורינג ‪Young/Turing model-‬‬
‫יצירת תבנית המשחק והתמונה – ‪GUI packing‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫‪31‬‬
‫מקרא ערכים‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫'‪ - '10‬מספר מחזורי חיים ולחיצה על ‪ live‬להצגת התמונה לאחר מספר זה‬
‫'‪ - '%live‬מספר בין ‪ 0‬ל ‪ 100‬שמהווה את ההסתברות ליצירת תא מסומן‬
‫ביצירה הראשונית של התמונה‬
‫'‪ - 'height + width‬גודל המטריצה‬
‫'‪ - 'Radius‬מקבל מספר כלשהו שיהווה את רדיוס הבדיקה של התאים‪,‬‬
‫כלומר מספר התאים שיבדקו מכל כיוון של התא הנבחר יהיה המספר שיוכנס‬
‫'‪ - 'loneliness‬בדידות‪ ,‬אם מספר השכנים יהיה המספר שהוכנס ומטה התא‬
‫ימות‬
‫'‪ - 'Density‬צפיפות‪ ,‬אם מספר השכנים יהיה המספר שהוכנס ומעלה התא‬
‫ימות‬
‫'‪ - 'LowerBorn‬מינימום טווח השכנים שיצרו תא חי‬
‫'‪ - 'UpperBorn‬מקסימום טווח השכנים שיצרו תא חי >> הערות לטווח‪:‬‬
‫המינימום והמקסימום נחשבים כחלק מהטווח‪ ,‬במידה ורוצים לבדוק רק‬
‫מספר אחד של שכנים אפשר פשוט להכניס את אותו המספר בשני המשתנים‪.‬‬
‫‪32‬‬
‫מקרא כפתורים‬
‫כפתורי ‪GUI‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫'‪ – '...‬עיון‬
‫'‪ – 'Save‬שמור‬
‫'‪ – 'Load‬פתח‪/‬טען‬
‫'‪ – 'Delete‬מחק‬
‫'‪ – 'B&W‬הפוך תמונה לשחור ולבן‬
‫'‪ – 'Rotate‬סובב תמונה‬
‫'‪ – 'Quit‬צא‬
‫כפתורי משחק‬
‫'‪ – 'Generation‬התקדמות במחזור חיים בודד‬
‫'‪ – 'Young Spots Model‬שימוש בחוק של המודל של יאנג לצורך עשיית‬
‫כתמים‬
‫'‪ – 'Young Strips Model‬שימוש בחוק של המודל של יאנג לצורך עשיית‬
‫פסים‬
‫'‪ – 'Live‬התקדמות של מספר מחזורי חיים ברצף לפי הערך שהוכנס‬
‫'‪ – 'New Matrix‬יצירת סביבה חדשה‬
‫‪33‬‬
‫הדרכה לפני תחילת משחק‬
‫כמה עניינים טכניים לפני תחילת משחק‪:‬‬
‫• קוד המשחק רץ עם פייתון גרסה ‪ .2.7‬ולכן יהיה עליך להתקין קודם את זה‬
‫(אפשר על אותו מחשב שיש בו פייתון ‪ 3‬שאנחנו עובדים איתו בקורס‪ .‬פשוט‬
‫תצטרך לפתוח את הגרסה המתאימה בכל פעם)‪ .‬הנה הקישור‪:‬‬
‫‪http://www.python.org/ftp/python/2.7/python-2.7.msi‬‬
‫לאחר מכן יש להתקין שתי חבילות‪:‬‬
‫• ‪ - PIL‬שהיא ‪ Python imaging library‬לטיפול בתמונות‪ ,‬מהקישור הבא‪:‬‬
‫‪http://effbot.org/downloads/PIL-1.1.7.win32-py2.7.exe‬‬
‫• ו‪ ,swampy -‬שהיא חבילה מאוד נוחה לטיפול בממשק גרפי (‪ ,)GUI‬לפי‬
‫ההנחיות בשקף ‪ 3‬במצגת הבאה(מתוך מבוא למדעי המחשב באונ' תל אביב)‪:‬‬
‫‪http://www.cs.tau.ac.il/courses/pyProg/1213a/recitations/ta12.pdf‬‬
‫המצגת מסבירה גם איך להשתמש בממשק גרפי באמצעות החבילה הזו‪.‬‬
‫• אחרי כל זה‪ ,‬עליך לפנות לקוד המשחק הנקרא ‪ Life-swampy-project‬לפתוח‬
‫אותו באמצעות ‪ IDLE‬וללחוץ ‪ , F5‬כעת תיפתח לכם תבנית המשחק ותוכלו‬
‫להתחיל לשחק‪.‬‬
‫משחק מהנה!‬
‫‪34‬‬
‫קישורים מעניינים‬
‫ יש‬,‫ פינה שמאלית למעלה‬,'‫• סימולציה מעניינת של 'משחק החיים‬
:‫צורך בג'אוה‬
http://www.ibiblio.org/lifepatterns/
:‫• קישורים ממש מעניינים בנושא אוטומטים תאיים‬
http://classes.yale.edu/fractals/CA/welcome.html
‫ המסביר את המודל של‬Reaction–diffusion system ‫• הערך‬
:‫טיורינג בויקיפדיה‬
http://en.wikipedia.org/wiki/Reaction-diffusion_system
:‫ בויקיפדיה‬PATTERN FORMATION ‫• הערך‬
http://en.wikipedia.org/wiki/Pattern_formation
:‫ בויקיפדיה המסביר על תבניות בטבע‬Patterns in nature ‫• הערך‬
http://en.wikipedia.org/wiki/Patterns_in_nature
35
‫נספחים‬
‫• אתגר‪ :‬נסה למצוא את החוקים בצורה הבאה‪:‬‬
‫רמז‪ :‬הצורה קיימת בתיקיית הדוגמאות‪.‬‬
‫• "משחק החיים" נמצא גם באופנה‪ ,‬בטוח ראיתם את הסמל‬
‫הבא לא רק על חולצות אלא גם על תיקים וכו'‪ ,‬כעת אתם‬
‫יודעים את מקורו‪.‬‬
‫‪36‬‬
‫תמונות שמורות לתרגול מתיקיית הדוגמאות‬
Height+
Weight
Loneliness
Density
LowerBorn
UpperBorn
‫שם‬
10
1
4
3
3
smileyN10
10
1
4
3
3
smiley2N10
10
1
4
3
3
smiley3N10
50
1
4
3
3
gliderN50
200
1
4
3
3
sunSqrsN200
200
1
4
3
3
fleetingButer
flyN200
200
1
4
2
3
R-23-200
40
2
6
3
3
Swimer2633-40
37
1 ‫עבור כל התמונות מדובר ברדיוס‬