יום חמישי, 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.


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