גרסא 0.1: תכנית בדיקה עצבנית לעבודה 5 :)

מנהלים: TA_nimrod, TA_Igor, TA_Adi

boazarad
הודעות: 17
הצטרף: 15:16 26/10/2009

גרסא 0.1: תכנית בדיקה עצבנית לעבודה 5 :)

שליחה על ידי boazarad » 01:45 30/12/2009

הרי כולנו יודעים שהרבה יותר כיף לתכנת בג'וואה מאשר לישון, ולכן כתבתי תכנית בדיקה מאסיבית לתרגיל חמש.

התכנית "מגרילה" משוואה מהצורה הנדרשת בתרגיל, ומייצרת עבורה מס' נקודות מידע ע"י הצבת X-אים רנדומליים במשוואה.
אח"כ היא "מאכילה" את האלגוריתם שלנו במידע שהתקבל, ובודקת האם הוא הצליח "לנחש" את המשוואה.

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

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

בהצלחה לכולם!
super_tester.zip
,תכנית בדיקה
(2.17 KiB) הורד 378 פעמים
עדכון: תכנית הבדיקה עודכנה ע"פ המלצותיו של משה. שימו לב שהוא ממליץ להריץ אותה עם:

קוד: בחירת הכל

TEST_ITERATIONS = 100
MAX_ITERATIONS = 100
MUTATION_PROB = 0.5
בפרמטרים אלו התוכנה צפויה לרוץ לאורך זמן רב, אז ודאו את תקינותה עם פרמטרים קטנים יותר בITERATIONS לפני כן.
נערך לאחרונה על ידי boazarad ב 11:27 30/12/2009, נערך פעם 1 בסך הכל.

בר כהן
הודעות: 146
הצטרף: 18:24 22/10/2009

Re: תכנית בדיקה עצבנית לעבודה 5 :)

שליחה על ידי בר כהן » 02:02 30/12/2009

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

עד אז, לילה טוב

Lecturer_Sipper
הודעות: 111
הצטרף: 17:41 05/11/2008

Re: תכנית בדיקה עצבנית לעבודה 5 :)

שליחה על ידי Lecturer_Sipper » 08:56 30/12/2009

boazarad כתב:
super_tester.zip
יפה בועז.
מספר הערות:
1. עבור כל סט של data אתה מריץ ריצה אבולוציונית אחת. זה לא מספיק -- כיוון שזהו אלגוריתם סטוכסטי לא מובטח פתרון.
יותר נכון להריץ מספר פעמים עבור כל קומבינציה של מקדמים ו-data. אתה יכול לקבוע מספר מקסימאלי, ואז להריץ עד מספר זה או עד
מציאת פתרון. שים לב: בכל נסיון כזה יש לייצר RegressionEvolution חדש (כדי לקבל את אוכלוסיה אקראית חדשה) אבל -- עם אותו data (כלומר יש לשמור את generate_data לאורך הנסיונות).

2. הערה קטנה: ב-generate_data, למה לא להגדיר כבר את data להיות בגודל DATA_POINTS X 2 ?
ואז אפשר להמנע מה-new בלולאה.
פרופסור משה זיפר
מרכז הקורס "מבוא לתכנות למערכות מידע"
http://www.moshesipper.com


תמונה

boazarad
הודעות: 17
הצטרף: 15:16 26/10/2009

Re: תכנית בדיקה עצבנית לעבודה 5 :)

שליחה על ידי boazarad » 09:45 30/12/2009

Lecturer_Sipper כתב: יפה בועז.
מספר הערות:
1. עבור כל סט של data אתה מריץ ריצה אבולוציונית אחת. זה לא מספיק -- כיוון שזהו אלגוריתם סטוכסטי לא מובטח פתרון.
יותר נכון להריץ מספר פעמים עבור כל קומבינציה של מקדמים ו-data. אתה יכול לקבוע מספר מקסימאלי, ואז להריץ עד מספר זה או עד
מציאת פתרון. שים לב: בכל נסיון כזה יש לייצר RegressionEvolution חדש (כדי לקבל את אוכלוסיה אקראית חדשה) אבל -- עם אותו data (כלומר יש לשמור את generate_data לאורך הנסיונות).

2. הערה קטנה: ב-generate_data, למה לא להגדיר כבר את data להיות בגודל DATA_POINTS X 2 ?
ואז אפשר להמנע מה-new בלולאה.
תודה משה!
לקחתי לתשומת ליבי, ובקרוב אעלה גרסא חדשה עם התיקונים + מדידת זמן ריצה.

Lecturer_Sipper
הודעות: 111
הצטרף: 17:41 05/11/2008

Re: תכנית בדיקה עצבנית לעבודה 5 :)

שליחה על ידי Lecturer_Sipper » 09:59 30/12/2009

boazarad כתב: תודה משה!
לקחתי לתשומת ליבי, ובקרוב אעלה גרסא חדשה עם התיקונים + מדידת זמן ריצה.
[/quote]

נסה את הנסיון הבא:
100 ניסויים, כלומר 100 בעיות רגרסיה אקראיות.
כל ניסוי: עד 100 ריצות אבולוציוניות או עד פתרון isIdeal.
אתה יכול להעלות את pmut ל 0.5 (היות ואנו משתמשים בוורסיה קצת שונה מ-bitwise).

האם פתרת את כל הבעיות? מה מספר הנסיונות (קרי, ריצות אבולוציוניות) הממוצע?

משה
פרופסור משה זיפר
מרכז הקורס "מבוא לתכנות למערכות מידע"
http://www.moshesipper.com


תמונה

boazarad
הודעות: 17
הצטרף: 15:16 26/10/2009

Re: תכנית בדיקה עצבנית לעבודה 5 :)

שליחה על ידי boazarad » 11:23 30/12/2009

שוב תודה על תשומת הלב, תיקנתי את תכנית הבדיקה והוספתי עוד כמה סטטיסטיקות.

בעזרת מיון QuickSort אנחנו מקבלים:

קוד: בחירת הכל

Tests Passed: 100
Tests Failed: 0
Average iterations before solution: 1.0
Average generations before solution: 44
Average runtime per test:  0:0:5
Success rate: 100%
Total runtime : 0:8:20
Total generations : 4405
מיון בועה (אותו הרצנו על מדגם יותר קטן, עקב איטיותו) נותן:

קוד: בחירת הכל

Tests Passed: 20
Tests Failed: 0
Average iterations before solution: 1.05
Average generations before solution: 512
Average runtime per test:  0:2:3
Success rate: 100%
Total runtime : 0:41:0
Total generations : 10243
(ויש סיכוי סביר שטעינו במימוש האלגוריתם, שכן מס' הדורות הממוצע לפתרון בעזרתו גבוהה משמעותית באופן עקבי)

בר כהן
הודעות: 146
הצטרף: 18:24 22/10/2009

Re: גרסא 0.1: תכנית בדיקה עצבנית לעבודה 5 :)

שליחה על ידי בר כהן » 11:30 30/12/2009

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

או שאני החמצתי משהו?

תשלח לי את הקוד והפרמטרים שהרצת, אני אבדוק אצלי :)

boazarad
הודעות: 17
הצטרף: 15:16 26/10/2009

Re: גרסא 0.1: תכנית בדיקה עצבנית לעבודה 5 :)

שליחה על ידי boazarad » 11:38 30/12/2009

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

או שאני החמצתי משהו?

תשלח לי את הקוד והפרמטרים שהרצת, אני אבדוק אצלי :)
בשני המקרים האוכלוסייה מתמיינת בסופו של דבר (הרצנו 100 בדיקות על הQuicksort ו20 על הBubble).
הQuicksort פשוט עובד *הרבה* יותר מהר.
מה שגרם לנו לחשוד בבאג - זו העובדה שבBubble הוא פותר את הבעיה תוך 500~ דורות בממוצע לעומת כ100~ בQuicksort. מה שגרם לנו להאמין שהיישום שלנו של Bubble לא ממיין כמו שצריך. בכל מקרה זה לא משנה, כי בסוף התוכנה ממיינת בQuicksort והBubble נשאר כהערה.

בר כהן
הודעות: 146
הצטרף: 18:24 22/10/2009

Re: גרסא 0.1: תכנית בדיקה עצבנית לעבודה 5 :)

שליחה על ידי בר כהן » 12:29 30/12/2009

לפי הפרמטרים של משה והבדיקה של בועז (עם מיון בועות):

קוד: בחירת הכל

Tests Passed: 100
Tests Failed: 0
Average iterations before solution: 1.02
Average generations before solution: 67
Average runtime per test:  0:0:5:775
Success rate: 100%
Total runtime : 0:9:37:595
Total generations : 6790

קוד: בחירת הכל

Tests Passed: 100
Tests Failed: 0
Average iterations before solution: 1.0
Average generations before solution: 46
Average runtime per test:  0:0:3:750
Success rate: 100%
Total runtime : 0:6:15:71
Total generations : 4698
אפשר נראה לי להסיק שזה בהחלט סטוכסטי כפי שנאמר :)

matandro
הודעות: 68
הצטרף: 15:16 26/10/2009

Re: גרסא 0.1: תכנית בדיקה עצבנית לעבודה 5 :)

שליחה על ידי matandro » 12:36 31/12/2009

רק לידע כללי עדיף לא להשתמש ב-calendar כבונים טיימר ביצועים

http://java.sun.com/j2se/1.5.0/docs/api ... l#nanoTime()
עדיף לעבוד עם שעון מערכת
נותן לך יותר דיוק ולא מפריע לביצועים כי הוא בסה"כ לוקח את הזמן מהמערכת ברגע המבוקש (בדיוק של מילי שניות למרות שכתוב שם ננו אבל זה יספיק כל עוד אתה לא בודק ביצועי חומרה וזה לא משהו שעושים ב-java)

boazarad
הודעות: 17
הצטרף: 15:16 26/10/2009

Re: גרסא 0.1: תכנית בדיקה עצבנית לעבודה 5 :)

שליחה על ידי boazarad » 14:37 31/12/2009

matandro כתב:רק לידע כללי עדיף לא להשתמש ב-calendar כבונים טיימר ביצועים

http://java.sun.com/j2se/1.5.0/docs/api ... l#nanoTime()
עדיף לעבוד עם שעון מערכת
נותן לך יותר דיוק ולא מפריע לביצועים כי הוא בסה"כ לוקח את הזמן מהמערכת ברגע המבוקש (בדיוק של מילי שניות למרות שכתוב שם ננו אבל זה יספיק כל עוד אתה לא בודק ביצועי חומרה וזה לא משהו שעושים ב-java)
תודה מתן, האמת שגיגלתי מדידת זמן בג'אווה, ופשוט יישמתי את הדבר הראשון שנקרה בדרכי. הנחתי שזה לא ישפיע יותר מידי על הביצועים, שכן המדידה מתחשת רק פעמיים לאורך התוכנית, ובכמות מספקת של איטרציות, זה ממש לא משמעותי.
בכל מקרה - אני איישם את ההמלצה שלך בגרסא 0.2 :)

ortal_at
הודעות: 9
הצטרף: 23:50 28/10/2009

Re: גרסא 0.1: תכנית בדיקה עצבנית לעבודה 5 :)

שליחה על ידי ortal_at » 22:46 02/01/2010

היי,
קודם כל תודה רבה על הבדיקות.. :)

יש לי איזושהי בעיה כשאני מריצה אותן, אני יושבת עליה כבר כמה שעות ולא מבינה מה הסיבה..
אם אחד המקדמים (a,b,c,d,e) מגיע ל-127 (לא קורה בכל איטרציה), אני נכנסת למין לולאה אינסופית כזאת, "מוגרלים" לי אותם המקדמים, ומודפסת לי אותה השורה..
כלומר, לדוגמא:

קוד: בחירת הכל

generation 36 best: a=108 b=8 c=96 d=0 e=112, fitness: 2.407168463655338E11
generation 37 best: a=108 b=8 c=96 d=0 e=116, fitness: 2.407165830609669E11
generation 38 best: a=108 b=8 c=96 d=0 e=116, fitness: 2.407165830609669E11
generation 39 best: a=108 b=8 c=96 d=0 e=116, fitness: 2.407165830609669E11
generation 40 best: a=108 b=8 c=96 d=0 e=120, fitness: 2.4071631978839996E11
generation 41 best: a=108 b=8 c=96 d=0 e=124, fitness: 2.4071605654783304E11
generation 42 best: a=108 b=8 c=96 d=0 e=124, fitness: 2.4071605654783304E11
generation 43 best: a=108 b=8 c=96 d=0 e=124, fitness: 2.4071605654783304E11
generation 44 best: a=108 b=8 c=96 d=0 e=126, fitness: 2.4071592493954968E11
generation 45 best: a=108 b=8 c=96 d=0 e=126, fitness: 2.4071592493954968E11
generation 46 best: a=108 b=8 c=96 d=0 e=124, fitness: 2.4071605654783304E11
generation 47 best: a=108 b=8 c=96 d=0 e=125, fitness: 2.4071599074269128E11
generation 48 best: a=108 b=8 c=96 d=0 e=126, fitness: 2.4071592493954968E11
generation 49 best: a=108 b=8 c=96 d=0 e=126, fitness: 2.4071592493954968E11
generation 50 best: a=108 b=8 c=96 d=0 e=127, fitness: 2.4071585913840784E11
generation 51 best: a=108 b=8 c=96 d=0 e=127, fitness: 2.4071585913840784E11
generation 52 best: a=108 b=8 c=96 d=0 e=127, fitness: 2.4071585913840784E11
generation 53 best: a=108 b=8 c=96 d=0 e=127, fitness: 2.4071585913840784E11
generation 54 best: a=108 b=8 c=96 d=0 e=127, fitness: 2.4071585913840784E11
generation 55 best: a=108 b=8 c=96 d=0 e=127, fitness: 2.4071585913840784E11
generation 56 best: a=108 b=8 c=96 d=0 e=127, fitness: 2.4071585913840784E11
generation 57 best: a=108 b=8 c=96 d=0 e=127, fitness: 2.4071585913840784E11
מה יכולה להיות הבעיה?
תודה רבה!!
אורטל.

danny
הודעות: 64
הצטרף: 12:32 23/10/2009

Re: גרסא 0.1: תכנית בדיקה עצבנית לעבודה 5 :)

שליחה על ידי danny » 13:05 03/01/2010

קוד: בחירת הכל

DONE!
Tests Passed: 20
Tests Failed: 0
Average iterations before solution: 1.5
Average runtime per test:  0:1:8
Success rate: 100%
Total runtime : 0:22:47

Process completed.
Error is Created. Truth is Eternal. Error, or Creation, will be Burned up, & then, & not till Then, Truth or Eternity will appear

TA_nimrod
הודעות: 196
הצטרף: 00:07 17/11/2008

Re: גרסא 0.1: תכנית בדיקה עצבנית לעבודה 5 :)

שליחה על ידי TA_nimrod » 14:54 04/01/2010

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

Lagogo
הודעות: 3
הצטרף: 18:12 28/12/2009

Re: גרסא 0.1: תכנית בדיקה עצבנית לעבודה 5 :)

שליחה על ידי Lagogo » 17:26 04/01/2010

היי, סיימנו את העבודה (נראה לנו..) והרצנו את הבדיקה עם הנתונים של 100, 100 ו-0.5...
הזמן ריצה היה 55 שניות והוא עבר את כל ה-100 בדיקות ולא נכשל באף אחת...
זה תקין נכון? :P

שלח תגובה

חזור אל “- מבוא למדעי המחשב 2010”