ביומימיקרי

משמעות המונח ביומימיקרי היא חיקוי החיים (Biomimicry: Bio=life; mimesis=imitate). ביומימיקרי היא דיסיפלינה רב-תחומית המקדמת חיקוי ולמידה מהטבע לפתרון בעיות בדרכים מקיימות.

אבולוציה של תוכנות

מאת: יובל שרמן

הנדסת התוכנה מאמצת שיטות גנטיות לשכלול תוכנות באופן אוטומטי ולשיפורן

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

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

במאמר "איך מחשבים לומדים לשפר תוכנה כך שתהיה יעילה יותר" באתר The Conversation, מוצג מחקר שמתקדם צעד נוסף לעבר תכנות אוטומטי. המחקר משתמש בשיטות של תכנות גנטי ושל הנדסת תוכנה מבוססת חיפוש (Search Based Software Engineering) כדי לשתול פונקציונאליות חדשה בתוכנה קיימת, בצורה אוטומטית. הדוגמה המובאת במאמר היא של תוכנת מסרים מידיים בשם Pidgin, שלה הוספה היכולת לתרגום סימולטאני של הטקסט לשפות נוספות. המערכת ערכה שינויים בקוד המקור של Pidgin, הוסיפה קוד חדש, בדקה גרסאות רבות של התוכנה והמשיכה לשכלל אותה, דור אחרי דור, עד שהשיגה את היעדים שהוצבו עבורה.

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


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