1 of 13

אלגוריתמים 2 – תרגול 9

תכנות לינארי

2 of 13

תזכורת

  •  

 

3 of 13

שלבים למידול בעייה בתכנות לינארי

1. הגדרת משתנים (X)

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

2. הגדרת מטרה (min/max)

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

3. הגדרת הגבלות (Ax <= b)

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

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

4 of 13

דוגמה – שידוך מקסימלי

  •  

5 of 13

תרגיל – זרימה ברשת

 

 

 

קלט:

גרף, כלומר קדקדים וצלעות.

נק' התחלה o נק' סיום n

פונקציית קיבולת לצלעות

מטרה:

מהו המקסימום זרימה האפשרי ברשת?

6 of 13

Linear Regression

  •  

7 of 13

הפרדת נקודות

  •  

8 of 13

הפרדת נקודות – הכללה לפולינום

  •  

9 of 13

קבוצה בת״ל מקסימלית

  •  

 

10 of 13

שידוך בעל משקל מקסימלי

  •  

11 of 13

טענה: המשקל האופטימלי בממשיים = האופטימלי בשלמים

  •  

12 of 13

 

13 of 13

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

Welcome to CVXPY 1.3 — CVXPY 1.3 documentation