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

יום חמישי, 21 באפריל 2016

פחית משקה אופטימלית

נניח שעליכם לתכנן פחית משקה על פי אילוצים מסויימים. למשל, גובה הפחית (h) חייב להיות קטן מ-15 ס"מ (בגלל המרווח בין מדפים בסופרמרקט). אילוץ נוסף שעליכם להתחשב בו, למשל, הוא שכמות המשקה בפחית צריכה להיות 300 מ"ל (נסמן את רדיוס הפחית באות r, ואז למעשה יש לעמוד בתנאי h*pi*r^2=300). כמו כן, משיקולי יציבות של הפחית – נדרש לשמור על יחס מסוים בין גובהה ורדיוסה – למשל, על גובה הפחית לא להיות גדול מארבע פעמים הרדיוס שלה (או, אם נעביר אגף, נקבל: 4*r-h>=0). ולסיום, משיקולי עלות של חומר הגלם המשמש לייצור מעטפת הפחית – יש למזער את פונקציית המחיר S(r,h)=2*pi*r*h+2*pi*r^2, המורכבת משטח המכסים (עליון ותחתון) ומשטח מעטפת הגליל שביניהם. אם נוציא גורם משותף ונגדיר וקטור x המכיל את משתני התכנון גובה ורדיוס, הרי שפונקצית המטרה sodaCost הינה:


האם יש דרך נוחה לפתור את בעיית האופטימיזציה הזו ?

התשובה היא כמובן כן, בעזרת MATLAB.

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

נפתח את ממשק המשתמש המוזכר לעיל בעזרת הפקודה optimtool, ונזין לתוך חלקו השמאלי את הנתונים השונים כפי שמופיע בתמונה למטה (ניתן ללחוץ עליה להגדלה). יש לשים לב שפרט לקריאה לפונקצית המחיר (תוך שימוש באופרטור ה-@), הוזנו אי-השיוויון הלינארי (שיקולי היציבות של הפחית, אחרי שהבאנו אותם לצורה A*x<=b), הגבול התחתון של פרמטרי התכנון (רדיוס וגובה אי-שליליים), הגבול העליון שלהם (כאמור גובה קטן מ-15 ס"מ, אין מגבלה על הרדיוס) האילוץ הלא-לינארי (כמות המשקה בפחית. הפונקציה fooNonLin מובאת בהמשך, וגם לה קוראים בעזרת אופרטור ה-@) וערכים התחלתיים לאלגוריתם האופטימיזציה (רדיוס של 5 ס"מ, גובה של 4 ס"מ).



לאחר לחיצה על start, מתחיל תהליך האופטימיזציה, ובתמונה הבאה ניתן לראות מה פרמטרי התכנון שנמצאו כאופטימליים (מסומן בירוק - רדיוס של 3.6 ס"מ, גובה של 7.2) ולאיזה ערך הם הביאו את פונקציית המטרה (בצהוב). את התוצאות (ואף את הגדרת הבעיה) ניתן להעביר ל-workspace באמצעות האופציה המתאימה בתפריט File.


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

יום שלישי, 1 בינואר 2013

אז מה היה לנו ?

הבלוג MATLAB with Fun יחגוג בחודש הבא 3 שנים להיווסדו, וזה זמן טוב לעשות כמה סיכומים.

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

בין היתר, יכלתם לקרוא ב-2012 על החידושים בכלי MATLAB ו-Simulink בשתי הגרסאות שיצאו במהלכה (R2012a, R2012b), על יכולות של כלים שונים (כלי אופטימיזציה, כלים לשוק הפיננסי, Wavelet ,SimEvents וכו'...) ועל דרכים ליעל את שיטות העבודה, הקוד והסימולציות שלכם
(System Objects, Simulation Data Inspector, Model Referencing, האצת ביצועים באמצעות FPGA וכו'...). ואפילו יכלתם להוריד קוד MATLAB המסמלץ את פעולת מערכת כיפת ברזל !

העלאת מספר הפוסטים בחודש הביאה לעלייה מרשימה בנתוני הגלישה בבלוג, על פי אתר Google Analytics. בהשוואה ל-2011, חלה ב-2012 עליה במספר הביקורים
בבלוג (31%), במספר המבקרים הייחודיים בו (37%), במספר הדפים הנצפים
בו (33%), בזמן הביקור הממוצע באתר (17%) ובמספר התגובות (88%, הפוסט הכי מטוקבק, אגב, הוא "גילוי פנים בעזרת MATLAB" – קיבל 11 תגובות בחצי שנה).

לפני כשלושה חודשים, הבלוג אפילו הוזכר במסגרת הבלוג "MATLAB Spoken Here" של חברת MathWorks, בפוסט שעסק בקהילות MATLAB ברחבי העולם !

לסיום, הנה רשימת חמשת הפוסטים הנקראים ביותר מאז השקת הבלוג, מהפופולרי ביותר והלאה, אתם מוזמנים לקרוא את אלה שפספסתם:

1. כנגד ארבעה System Toolboxes דיברה תורה (פורסם לפני 20 חודשים)

2. כל המוסיף גורע מזמן הריצה (פורסם לפני 18 חודשים)

3. כיפת ברזל (פוסט של אריאל רובננקו שפורסם לפני 12 חודשים)

4. מה חדש ב-MATLAB ו-Simulink בגרסת R2012a ? (פורסם לפני 10 חודשים)

5. MATLAB 8 ו-Simulink 8 כבר כאן ! (פורסם רק לפני 4 חודשים וכבר במקום החמישי, מסתמן כלהיט היסטרי...)

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

יום ראשון, 15 באפריל 2012

אופטימיות לגבי כלי האופטימיזציה


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

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

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

האופטימיזציה בסביבת MATLAB מתבצעת באמצעות שני כלים:

1) Optimization Toolbox – אוסף של אלגוריתמים איטרטיבים, נפוצים בתעשיה, המוצאים פתרונות אופטימליים באמצעות חישוב נגזרות (Steepest Descent). בין האלגוריתמים:
  •  fmincon- אלגוריתם למציאת מינימום לבעיות בעלות פונקצית מטרה לא לינארית, תחת אילוצים שונים (לינאריים ולא לינאריים).
  •  fminmax- אלגוריתם למציאת מינימום לבעיות MinMax, תחת אילוצים שונים.
  •  Linear Programming- לפתרון בעיות בעלות פונקצית מטרה לינארית, תחת אילוצים שונים.
  •  Quadratic Programming- לפתרון בעיות קוואדרטיות, תחת אילוצים שונים.
 האוסף העשיר של האלגוריתמים ב-Optimization Toolbox מאפשר לפתור מגוון רחב של בעיות, וזמני הריצה שלהם עד ההתכנסות לפתרון בהחלט סבירים. החסרון המרכזי של הכלי הוא שתמיד קיים סיכוי שהפתרון שמצאנו לבעיה הוא מינימום מקומי ולא מינימום גלובלי.
 2) Global Optimization Toolbox – אוסף של שיטות היוריסטיות למציאת פתרונות אופטימליים גלובלים (הכלי לא מבוסס על חישובי נגזרות). בין האלגוריתמים:
  •  Simulated Annealing- אלגוריתם הממדל את הפיסיקה של תהליך קירור של מתכת. האלגוריתם עובד טוב במיוחד כאשר מרחב חיפוש הפתרון הוא גדול והבעיה היא ללא אילוצים.
  •  Genetic Algorithm- אלגוריתם איטרטיבי זה ממדל תהליך אבולוציוני למציאת פתרונות אופטימליים, והינו נפוץ לביצוע אופטימיזציה גלובלית תחת אילוצים שונים. האלגוריתם מתאים במיוחד לפתרון בעיות אופטימיזציה קומבינטוריות (דוגמת בעית הסוכן הנוסע) בתוך מרחב חיפוש גדול .
  •  Direct Search- אלגוריתם איטרטיבי אשר בכל איטרציה מחפש בסביבה הקרובה של נקודה כלשהי נקודות בהן ערך הפונקציה נמוך יותר, ואם מוצא אחת כזו - הוא בוחר בה כנקודת התחלה לאיטרציה הבאה. האלגוריתם מתאים במיוחד לבעיות בהן פונקצית המטרה איננה גזירה או אינה רציפה. 
היתרון של ה-Global Optimization Toolbox הוא באלגוריתמים המאפשרים למצוא פתרון גלובלי בתוך אוסף גדול של מינימות מקומיות ומאפשרים לפתור בעיות אופטימזיציה קומבינטוריות.

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

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