תכנות לינארי נכתב ע"י אדם שפר הרחבות ועדכונים ע"י רון שמיר ,יוני ,2013מאי 2014 מקור עיקרי CLRS :פרק 29 מה עושים היום? היום נלמד על: ◦ בעיות תכנות לינארי ( Linear Programmingאו .)LP ◦ אלגוריתם הסימפלקס. 2 בעיית תכנות לינארי – נתונים בעית תכנות לינארי מורכבת מ: ◦ קבוצה של 𝑛 משתנים.𝑥1 , … , 𝑥𝑛 : ◦ קבוצה של 𝑚 אי שוויונים )≥ (≤, =,לינאריים במשתנים .לדוגמא: 𝑥1 + 𝑥2 + 4𝑥𝑛 ≤ 6 𝑥12 + 4𝑥4 − 2𝑥17 + 𝑥1 = 22 … 2𝑥4 + 𝑥𝑛−2 − 12𝑥2 ≥ −20 3 ◦ פונקציית מטרה – להביא למינימום או למקסימום פוקנציה לינארית במשתנים .לדוגמא: 𝑚𝑖𝑛𝑖𝑚𝑖𝑧𝑒 3𝑥1 + 5𝑥2 + ⋯ − 𝑥𝑛 /12 פתרונות אפשריים max 𝑥1 + 2𝑥2 4𝑥1 − 𝑥2 ≤ 3 2𝑥1 + 2𝑥2 ≥ −100 x2 10 4 x1 2.5, פתרון אופטימלי פתרון אופטימלי הינו פתרון אפשרי אשר מביא את פונקציית המטרה למקסימום/מינימום. למשל ,עבור התוכנית max 𝑥1 + 2𝑥2 4𝑥1 ≤ 3 2𝑥1 − 2𝑥2 ≥ 0 הפתרון האופימלי הינו . 𝑥1 = 𝑥2 = 3/4במקרה הזה ,הערך של פונקציית המטרה הינו , 9/4וכל פתרון אפשרי אחר יביא לערך נמוך יותר. 5 שלוש תוצאות אפשריות לבעיה קיים פתרון אופטימלי (.)13 לא קיים אף פתרון. 6 הבעיה אינה חסומה (נוכל לקבל פתרון גדול ככל שנרצה). maximize x y x5 yx3 maximize x y yx5 yx3 maximize x y x5 yx3 Example in 2D max x1 = 46/7 x2 = 59/7 x2 x1 + 8x2 subject to: (1) (2) (3) (4) (5) x1 x2 –3x1 + 4x2 4x1 – 3x2 x1 + x2 optimum basic constraints (3) 3 2 14 25 15 (5) (1) Feasible Region (4) (2) x1 7 Source: Andy Mirzayan, York Univ. Example in 3D maximize z z subject to: x y z 3 y2 x0 y0 z0 Optimum (x,y,z)=(0,0,3) y x 8 Source: Andy Mirzayan, York Univ. שאלה – 1#הלוואות בבנק תרגיל :הבנק למשכנתאוילר מציע ארבע סוגי הלוואות: משכנתא ראשונה ב 14%-ריבית (שנתית) ,משכנתא שניה ב 20%-ריבית ,הלוואה לשיפוץ הבית ב 20%-ריבית, והלוואה למימון לימודים ב 10%-ריבית. הבנק רוצה למקסם את רווחיו מהריבית השנתית ,אך נתון תחת הגבלות המדיניות הבאות (האחוזים הינם ביחס לסכומי ההלוואות ולא למספרן): ◦ ◦ 9 ◦ ◦ לבנק מותר להלוות עד 250מיליון שקל בשנה. משכנתאות ראשונות צריכות להיות לפחות 55%מסך המשכנתאות ולפחות 25%מסך מכלל ההלוואות. משכנתאות שניות יכולות להיות עד 25%מכלל ההלוואות. הריבית הממוצעת אינה יכולה לעלות מעל ל.15%- פתרון משכנתא ראשונה ב 14%-ריבית, משכנתא שניה ב 20%-ריבית, הלוואה לשיפוץ הבית ב 20%-ריבית, הלוואה למימון לימודים ב 10%-ריבית. מהם המשתנים שלנו? x1אחוז הלוואות משכנתא ראשונה. x2אחוז הלוואות משכנתא שניה. x3אחוז הלוואות לשיפוץ. x4אחוז הלוואות ללימודים. מהי פונציית המטרה? ) maximize 250(0.14 x1 0.2 x2 0.2 x3 0.1 x4 10 פתרון (המשך) לבנק מותר להלוות עד 250מיליון שקל בשנה. משכנתאות ראשונות צריכות להיות לפחות 55%מסך המשכנתאות ולפחות 25%מסך מכלל ההלוואות. המשכנתאות השניות יכולות להיות עד 25%מכלל ההלוואות הריבית הממוצעת אינה יכולה לעלות מעל ל.15%- מהם האילוצים? x1 0.55x1 x2 0.45 x1 0.55 x2 0 x2 0.25 x1 0.25 0.14 x1 0.2 x2 0.2 x3 0.1 x4 0.15 x1 , x2 , x3 , x4 0 11 x1 x2 x3 x4 1 סיכום הפתרון קיבלנו את התוכנית הבאה: max 250 0.14 ⋅ 𝑥1 +0.2 ⋅ 𝑥2 + 0.2 ⋅ 𝑥3 + 0.1 ⋅ 𝑥4 0.45 ⋅ 𝑥1 − 0.55 ⋅ 𝑥2 ≥ 0 𝑥2 ≤ 0.25 𝑥1 ≥ 0.25 0.14 ⋅ 𝑥1 +0.2 ⋅ 𝑥2 + 0.2 ⋅ 𝑥3 + 0.1 ⋅ 𝑥4 ≤ 0.15 𝑥1 + 𝑥2 + 𝑥3 + 𝑥4 = 1 𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 ≥ 0 12 עוד שימושים בעיות נוספות שנהוג לנסח כתכנות לינארי: ◦ ◦ ◦ ◦ 13 השמת של עובדים למשמרות תחת אילוצים של הגבלת שעות לעובד ,שעות שונות ביום דורשות כמות שונה של עובדים ,כל משמרת צריכה להכיל 𝑥 עובדים ותיקים ,וכו'. חברה עם הרבה מפעלים שמספקת סחורה למגוון חנויות. לכל חנות צריך להחליט איזה מפעל מספק לה סחורה תחת אילוצי עלות משלוח ,כמויות יצור אפשריות ,וכו'. תכנון דיאטה שתביא לכמות מספקת של מרכיבי המזון השונים במינימום עלות. ועוד הרבה... אלגוריתם שפותר בעיות תכנות לינארי יוכל לפתור את כל הבעיות הללו! שאלה - 2#זרימה ותכנות לינארי תרגיל :נתונה רשת זרימה – גרף מכוון 𝐸 ,𝐺 = 𝑉,פונקציית קיבול ,𝑐: 𝐸 → ℝמקור 𝑉 ∈ 𝑠 ,ויעד 𝑉 ∈ 𝑡 .נסחו את בעיית מציאת הזרימה המקסימלית מ 𝑠-ל 𝑡-כבעיית תכנות לינארי. 14 זרימה – תוכנית לינארית מה יהיו המשתנים? ◦ לכל קשת )𝑣 𝑒 = (𝑢,נחזיק משתנה 𝑣𝑢𝑥 שיסמן כמה זרימה עוברת דרך הקשת. כיצד נדאג שהזרימה שנכנסת לקודקוד שווה לזרימה היוצאת ממנו? ◦ לכל קודקוד 𝑡 𝑢 ∈ 𝑉 ∖ 𝑠,נוסיף אילוץ = 𝑢𝑣𝑥 𝑣𝑢𝑥 𝑉∈𝑣 oנדרוש גם 𝑥𝑢𝑣 ≥ 0לכל משתנה 15 𝑉∈𝑣 זרימה – תוכנית לינארית (המשך) מה עדיין חסר בתוכנית? ◦ פונקציית מטרה שתביא למקסימום את גודל הזרימה: } xvs xsv − 𝑉∈𝑣 16 {max 𝑉∈𝑣 זרימה – תוכנית לינארית (עוד המשך) מה עוד חסר בתוכנית? ◦ עדיין לא התייחסנו לקיבולים! ◦ עבור כל קשת 𝐸 ∈ 𝑣 𝑢,ניצור אילוץ 𝑣 𝑥𝑢𝑣 ≤ 𝑐 𝑢, 17 זרימה – תוכנית לינארית (הסוף) } xvs xsv − 𝑉∈𝑣 𝑡 𝑢 ∈ 𝑉 ∖ 𝑠, {max 𝑉∈𝑣 𝑣𝑢𝑥 𝑉∈𝑣 = 𝑢𝑣𝑥 𝑉∈𝑣 𝐸 ∈ 𝑣 𝑥𝑢𝑣 ≤ 𝑐 𝑢, 𝑣 𝑢, 𝐸 ∈ 𝑣 𝑥𝑢𝑣 ≥ 0 𝑢, 18 שאלה 3#זרימה במחיר מינימלי ()Min cost flow אותם נתונים – בתוספת מחיר puvליחידת זרימה על כל קשת )(u,v מחפשים זרימה מקסימלית שמחירה הכולל מינימלי נחשב את ערך הזרימה המקסT , Min (u ,v )E puv xuv נכתוב תוכנית לינארית: s.t x x T vs 19 vV sv vV שאלה - 4#מק"בים ותכנות לינארי תרגיל :תארו את בעיית מציאת מק"ב ממקור יחיד ליעד יחיד כבעיית תכנות לינארי. הגדרת הבעיה -תזכורת :נתונים גרף מכוון )𝐸 , 𝐺 = (𝑉,זוג קודקודים 𝑉 ∈ 𝑡 , 𝑠, ופונקציית משקל 𝑅 → 𝐸 . 𝑤:בנוסף ,ידוע כי אין מעגלים שליליים בגרף .מצאו מק"ב מ 𝑠 −אל 𝑡. 20 פתרון תזכורת :בסיום אלג ,Bellman –Fordלכל קשת ) (u,vמתקייםdv du +w(u,v) : לכל קדקוד vנגדיר משתנה )d(v 21 דוגמא 𝑎 1 𝑡 3 1 4 𝑑 𝑏 ≤1 𝑑 𝑎 ≤2 𝑑 𝑡 ≤3 22 𝑏 𝑠 1 + 3. + 1. + 1. + 1. + 4. = 0. 𝑠 𝑑≤ 𝑠 𝑑≤ 𝑏 𝑑≤ 𝑎 𝑑≤ 𝑏 𝑑≤ 𝑠 𝑎 𝑏 𝑎 𝑡 𝑡 𝑑 𝑑 𝑑 𝑑 𝑑 𝑑 זהירות! :LP אילוצים לינאריים ,פונקצית מטרה לינארית ,ערכי פתרון ממשיים אילוצים לינאריים ,פונקצית מטרה לינארית, ערכי פתרון שלמים)ILP( Integer LP : ספוילר: ◦ :LPבעיה פולינומיאלית ◦ :ILPככל הנראה לא פולינומיאלית (-NPקשה) לא להתבלבל בין LPל!!ILP- 23 קצת היסטוריה – ג'ורג' דנציג בשנות ה 30-וה 40-מספר בעיות נוסחו בצורת תוכניות לינאריות ,אך אף אחד לא הכליל את זה לבעיה כללית אחת. ב ,1947-כחלק מפרוייקט SCOOPשל חייל האוויר האמריקני Danzig ,הציג את הרעיון של תכנות לינארי, ואת אלגוריתם הסימפלקס לפתרון הבעיה. ” "Programmingבשנות ה –40-תכנון ולא תכנות 24 אלגוריתם סימפלקס אלגוריתם Simplexמקבל בעיות תכנות לינארי ומוצא פתרון אופטימלי עבורן (או מודיע שהבעיה אינה חסומה /אינה פיזיבילית) זמן הריצה של האלגוריתם אקספוננציאלי במקרה הגרוע ביותר. במקרה האופייני (על נתונים אמיתיים) זמן הריצה טוב מאוד ,ולכן זהו אלגוריתם נפוץ לבעיה. 25 קצת היסטוריה – הסגר על ברלין 26 לאחר מלחמת העולם השניה ,גרמניה חולקה לארבעה חלקים .ברלין ,שהייתה בתוך החלק הסובייטי ,חולקה גם היא. עם התפתחות המלחמה הקרה ,הסובייטים החליטו לערוך מצור על ברלין. לצורך העברת אספקה לתושבי העיר, האמריקנים יזמו רכבת אווירית. המשבר נמשך פחות משנה וחצי ,אך בזמן הזה התבצעו 276,926טיסות לברלין! הסגר על ברלין ותכנות לינארי 27 תפעול יעיל של הרכבת האווירית היה מבצע מסובך ביותר: ◦ נתונים 𝑥 מטוסים ממספר סוגים .כל סוג יכול להעביר כמות שונה של אספקה. ◦ מטוסים שונים זקוקים למספר שונה של אנשי צוות. ◦ לכל טיסה יש עלות שונה ,וישנו תקציב שבועי שמותר להשתמש בו. ◦ ועוד הרבה פרמטרים נוספים... לצורך פתרון הבעיה השתמשו בשיטות התכנות הלינארי של דנציג. צורה סטנדרטית של בעיית LP n j c x j maximize j 1 for i 1,2,..., m for i 1,2,..., n x j bi n a ij j 1 xi 0 טענה :כל בעיית תכנות לינארי ניתן להמיר לצורה סטנדרטית. 28 המרה לצורה סטנדרטית: פונקציית מטרה בעיה :פונקציית המטרה היא מינימום. פתרון: n xj j d j 1 maximize n j c x j minimize j 1 d j c j for j 1,2,..., n 29 המרה לצורה סטנדרטית : משתנים בעיה :למשתנה xיכול להיות ערך שלילי. פתרון: ' 'x x' x x' , x' ' 0 לדוגמא: 30 2x 4 y z 8 2( x' x' ' ) 4 y z 8 2 x'2 x' '4 y z 8 שני משתנים חדשים יחליפו את 𝑥. המרה לצורה סטנדרטית: שוויונים בעיה :המערכת מכילה שוויון. b n j a x j j 1 פתרון :נחליף את השוויון בשני אי שוויונים. b 31 n j a x j j 1 b n j a x j j 1 המרה לצורה סטנדרטית: אי-שוויונים בעיה :כיוון לא נכון של אי שוויון. b n j a x j j 1 פתרון: xj b n j a j 1 a j a j for i 1,2,..., n b b 32 דוגמא :המרה לצורה סטנדרטית ()1 ()4 ()2 ()5 33 ()3 המרה לצורה סטנדרטית – סיכום ראינו שכל בעיית תכנות לינארי ניתן להמיר לצורה סטנדרטית. אם במקור היו 𝑛 משתנים ו 𝑚 −אילוצים. בצורה הסטדנרטית שמתקבלת ישנם לכל היותר 𝑛 2משתנים ו 2𝑛 + 2𝑚 -אילוצים. 34 Slack Form צורת ה slack-הינה דרך נוספת ליצג את בעיית התכנות לינארי. ◦ אילוצי אי שליליות לכל המשתנים .𝑥𝑗 ≥ 0 ◦ כל שאר האילוצים הם שוויונות ◦ דרישות נוספות – בהמשך. 35 מעבר מצורה סטנדרטית לצורת )1( slack n j c x j maximize j 1 n xn i bi - aij x j x j bi j 1 𝑚 משתני עודף )(slack חדשים: 𝑚𝑥𝑛+1 , … , 𝑥𝑛+ 36 האילוץ ה.i- xi 0 n a ij j 1 גם לכל המשתנים החדשים. דוגמא :המרה לצורת slackהתחלתית 37 מעבר מצורה סטנדרטית לצורת slack סופית ()2 הצגת פונקצית המטרה במונחי המשתנים 𝑛𝑥 𝑥1 , … , n xn i bi - aij x j j 1 n maximize v c j x j j 1 x1 ,..., xn m 0 𝑚 משתני בסיס: 𝑚𝑥𝑛+1 , … , 𝑥𝑛+ 𝑩 קבוצת האינדקסים של משתני הבסיס: : 38 }𝑛 {𝑛 + 1, … , 𝑚 + 𝑛 משתנים לא בסיסיים: 𝑛𝑥 𝑥1 , … , 𝑵 קבוצת האינדקסים של המשתנים לא בסיסיים{1, … , 𝑛} : סיכום Slack Form : n משתנים לא בסיסיים ו m -משתנים בסיסיים. ◦ פונקציית מטרה max v jN c j x j רק משתנים לא בסיסיים. ◦ אילוצי אי שליליות לכל המשתנים .𝑥𝑗 ≥ 0 ◦ לכל משתנה בסיסי קיים שיוויון מהצורה שמכילה xk bi - aij x j jN משתנים לא בסיסיים. 39 משתנה בסיסי. ישנן הרבה צורות slackשקולות פונקציית המטרה. 40 הפתרון המתאים לצורת slack לכל צורת slackנתאים פתרון באופן הבא: ◦ כל המשתנים הלא בסיסיים יקבלו ערך ,0ואז האילוצים יקבעו את הערכים של המשתנים הבסיסיים. מהו הערך של הפתרון? הקבוע בפונקציית המטרה. מתי הפתרון אפשרי? 41 כאשר הקבועים בכל האילוצים הינם אי-שליליים. פיבוט Pivot - צעד של אלגוריתם סימפלקס נקרא פיבוט. כל מה שעושים בצעד כזה הוא לעבור בין שתי צורות slackשקולות. אלגוריתם סימפלקס בקצרה: ◦ מצא צורת slackשהפתרון המתאים לה אפשרי. ◦ כל עוד לא הגענו לפתרון ,עבור לצורת slackאחרת שהערך של הפתרון המתאים לה גדול או שווה לערך של הפתרון הנוכחי. 42 ביצוע צעד פיבוט 9 /(1 / 2) 18 21 /(5 / 2) 8.4 6 / 4 1.5 צריך לבחור את זוג המשתנים שמחליפים ביניהם. 43 ◦ בוחרים משתנה לא בסיסי עם מקדם חיובי בפונקציית המטרה. ◦ בוחרים אילוץ שמביא למינימום את היחס בין הקבוע שבאילוץ לבין מינוס המקדם של המשתנה הלא בסיסי . ביצוע צעד פיבוט (המשך) אנו רוצים להחליף את x3עם .x5 x6 3x2 x3 6 x5 / 4 2 2 44 נשתמש במשוואה הזו על מנת להחליף בין המשתנים בפונקציית המטרה ובשאר האילוצים. ביצוע צעד פיבוט (עוד המשך) כיוון שלקחנו את המשוואה עם היחס הקטן ביותר ,כל הקבועים ישארו אי שליליים. 45 דרך אחרת להסתכל על הצעד לפני הצעד: 46 אחרי הצעד: רצינו להעלות את הערך של .x3העלינו אותו ב ,1.5-כיוון שערך גדול יותר היה מפר את האילוץ .x5 0 הפתרון גדל ב.1.5/2 = 0.75 - בעצם עברנו לצורת ה slack-שמתאימה לפתרון החדש. בפתרון החדש .x5 0 x3 1.5 עוד שאלה שאלה .מה הקשר בין ג'ורג' דנציג לבין מאט דיימון? פתרון .בסרט good will huntingבכיכובו של מאט דיימון (שגם נכתב על ידיו) יש אירוע שמבוסס על דנציג (ההסבר המלא בשיעור). 47 פיבוט – הגדרה פורמלית 𝐵 – basic variables. 𝑁 – non-basic variables. 𝑗𝑥 𝑗𝑐 𝑁∈𝑗 𝐵∈𝑖 𝑗𝑥 𝑗𝑖𝑎 𝑁∈𝑗 𝑧 =𝑣 + 𝑥𝑖 = 𝑏𝑖 − 𝑁 ∪ 𝐵 ∈ 𝑗 𝑥𝑗 ≥ 0 נבחר משתנה לא בסיסי 𝑙𝑥 כך ש.𝑐𝑙 > 0 − נבחר משתנה בסיסי 𝑘𝑥 כך שמתקיים ) 𝑙𝑖𝑎. 𝑏𝑘 /𝑎𝑘𝑙 = min(𝑏𝑖 / נחלק את שני צידי המשוואה של 𝑘𝑥 ב , 𝑎𝑘𝑙 −נעביר את 𝑙𝑥 לצד שמאל ,ואת 𝑘𝑥 לצד ימין. נשתמש במשוואה שהתקבלה כדי להעלים את 𝑙𝑥 משאר האילוצים ומפונקציית המטרה. 𝑖 48 𝑗𝑥 𝑗𝑐 𝑁∈𝑗 𝐵∈𝑖 𝑘𝑥 יוצא מהבסיס, 𝑙𝑥 נכנס ) 𝑙𝑥𝑙𝑘𝑎 − 𝑗𝑥 𝑗𝑖𝑎 𝑁∈𝑗 𝑧 =𝑣 + 𝑥𝑖 = 𝑏𝑖 − 𝑁 ∪ 𝐵 ∈ 𝑗 𝑥𝑗 ≥ 0 𝑗𝑥 𝑗𝑘𝑎 }𝑙{𝑗∈𝑁− 1 𝑘𝑥 𝑙𝑘𝑎 𝑥𝑗 − − 1 𝑘𝑏( 𝑙𝑘𝑎 𝑗𝑘𝑎 𝑎 }𝑙{𝑗∈𝑁− 𝑙𝑘 = 𝑙𝑥𝑙𝑐 𝑐𝑗 𝑥𝑗 + − = 1 𝑘𝑥 𝑙𝑘𝑎 𝑘𝑏 𝑙𝑘𝑎 = 𝑙𝑥 𝑧 =𝑣 + }𝑙{𝑗∈𝑁− 49 𝑙𝐶 𝑘𝑥 𝑙𝑘𝑎 )𝑥𝑗 − 𝑗𝑘𝑎 𝑙𝑘𝑎 𝑙𝑐− 𝑗𝑐(}𝑙{𝑗∈𝑁− + 𝑘𝑏 𝑙𝑐 + 𝑙𝑘𝑎 𝑣 𝑗𝑥 𝑗𝑐 𝑁∈𝑗 𝑘𝑥 יוצא מהבסיס, 𝑙𝑥 נכנס 𝐵∈𝑖 𝑥𝑗 − 𝑗𝑘𝑎 𝑎 }𝑙{𝑗∈𝑁− 𝑙𝑘 = 𝑙𝑥𝑙𝑖𝑎 𝑎𝑖𝑗 𝑥𝑗 − 𝑗𝑘𝑎 1 𝑥𝑗 − 𝑘𝑥 𝑙𝑘𝑎 𝑙𝑘𝑎 𝑙 𝑗∈𝑁− 𝑗𝑘𝑎 𝑙𝑖𝑎 𝑙𝑖𝑎(𝑎𝑖𝑗 − )𝑥𝑗 − 𝑘𝑥 𝑙𝑘𝑎 𝑙𝑘𝑎 𝑘𝑏 − 𝑙𝑘𝑎 50 𝑥𝑖 = 𝑏𝑖 − 𝑁 ∪ 𝐵 ∈ 𝑗 𝑥𝑗 ≥ 0 1 𝑘𝑥 𝑙𝑘𝑎 }𝑙{– 𝐵 ∈ 𝑖 𝑗𝑥 𝑗𝑖𝑎 𝑁∈𝑗 𝑧 =𝑣 + − 𝑙 𝑗∈𝑁− 𝑘𝑏 𝑙𝑘𝑎 = 𝑙𝑥 𝑥𝑖 = 𝑏𝑘 − 𝑙𝑖𝑎 𝑎𝑖𝑗 𝑥𝑗 − 𝑙 𝑗∈𝑁− = 𝑏𝑘 − 𝑙 𝑗∈𝑁− 𝑘𝑏 𝑙𝑖𝑎 = 𝑏𝑘 − − 𝑙𝑘𝑎 פתרונות אפשריים טענה .נניח שביצענו צעד פיבוט על צורת slack המתאימה לפתרון אפשרי .צורת הslack- שתתקבל תתאים גם היא לפתרון אפשרי. הוכחה. ◦ נסמן ב 𝑏𝑖′ -את הקבועים באילוצים החדשים. ◦ מספיק להראות שמתקיים .∀𝑖: 𝑏𝑖′ ≥ 0 ◦≥0 𝑙𝑖𝑎 𝑘𝑏 𝑏𝑖 − 𝑙𝑘𝑎 𝑙𝑖𝑎𝑏𝑘 /𝑎𝑘𝑙 ≤ 𝑏𝑖 / 51 𝑙𝑘𝑎/ = . 𝑏𝑖′ 𝑗𝑥 𝑗𝑘𝑎 𝑁∈𝑗 ) 𝑙𝑖𝑎𝑏𝑘 /𝑎𝑘𝑙 = min(𝑏𝑖 / 𝑖 𝑥𝑙 = 𝑏𝑘 − 𝑥𝑘 + ערך הפתרון החדש טענה .נניח שהרצנו צעד פיבוט על צורת slack המתאימה לפתרון שערכו 𝜈 .צורת הslack- שתתקבל תתאים לפתרון שערכו לפחות 𝜈 . הוכחה. ◦ ◦ ◦ ◦ 52 נסמן ב 𝜈 ′ -את הקבוע בצורת ה slack-החדשה. נרצה להראות שמתקיים .𝜈 ≤ 𝜈 ′ 𝑙𝑘𝑎𝜈 ′ = 𝜈 + 𝑐𝑙 𝑏𝑘 / הטענה מתקיימת כיוון ש.𝑎𝑘𝑙 , 𝑏𝑘 , 𝑐𝑙 ≥ 0 - 𝑙𝑘𝑎/ 𝑗𝑥 𝑗𝑘𝑎 𝑁∈𝑗 𝑥𝑙 = 𝑏𝑘 − 𝑥𝑘 + מתי האלגוריתם מסתיים? מתי נפסיק לבצע צעדי פיבוט ונעצור את האלגוריתם? ◦ כאשר כל המקדמים בפונקציית המטרה שליליים או ,0ולכן לא ניתן לבצע צעד שיגדיל את ערך הפתרון. ◦ עוד לא הראינו:בתנאי העצירה – הפתרון אופטימלי 53 שאלה מה קורה אם כל המקדמים 𝑙𝑖𝑎 חיוביים? ◦ הבעיה אינה חסומה. ◦ נוכל להגדיל את 𝑙𝑥 ככל שנרצה בלי להפר אף אילוץ. 54 האם האלגוריתם יכול להתקע? ראינו שהעדכון בערך של הפתרון המתאים לצורת ה slack-הינו 𝑗𝑘𝑎. 𝑣 ′ = 𝑣 + 𝑐𝑗 𝑏𝑘 / אם ,𝑏𝑘 = 0הצעד לא יגדיל את ערך הפתרון. לכן ,ייתכן שנכנס ללולאה בה האלג' מתקדם במעגל בין מספר פתרונות בעלי אותו הערך. 55 האם האלגוריתם יכול להתקע? (המשך) טענה :אם בכל צעד נבחר את המשתנה הלא בסיסי בעל האינדקס הנמוך ביותר שניתן, האלג' לא יחזור על אותו פתרון פעמיים. ◦ כלומר ,בכל צעד נבחר את המשתנה הראשון בפונקציית המטרה שהמקדם שלו חיובי. לא נוכיח את הטענה. 56 סיכום האלגוריתם אלגוריתם סימפלקס: ◦ מתחיל במציאת צורת slackהמתאימה לפתרון אפשרי. ◦ מבצע סדרת צעדי פיבוט המשנים את הפתרון .כל צעד מוביל לפתרון שערכו גדול או שווה לערך הפתרון הקודם. ◦ ניתן לבצע את האלגוריתם כך שלא יחזור על פתרון שכבר היינו בו. 57 זמן ריצה – פיבוט במהלך צעד פיבוט ,אנו מבצעים: ◦ ◦ ◦ ◦ 𝑛 𝑂 בחירת משתנה לא בסיסי 𝑙𝑥. מציאת המשתנה הבסיסי המתאים 𝑘𝑥𝑂 𝑚 . החלפה בין 𝑘𝑥 𝑥𝑙 ,באילוץ המתאים ל𝑂 𝑛 .𝑥𝑘 - החלפת 𝑙𝑥 בשאר האילוצים ובפונקציית המטרה. 𝑚𝑛 𝑂 סה"כ ,זמן הריצה של צעד הינו 𝑚𝑛 𝑂 58 כמה צעדי פיבוט האלגוריתם יבצע? כמה צורות slackשקולות יכולות להיות לבעיה? ◦ כל צורת slackמכילה 𝑛 משתנים לא בסיסיים ו𝑚- משתנים בסיסיים. ◦ חסם עליון טריוויאלי הוא 𝑛𝑚+ 𝑛< 2𝑚+ 𝑚 59 מספר הדרכים לבחור את קבוצת המשתנים הבסיסיים של צורת ה.slack- זמן ריצה – סימפלקס זמן ריצה: 𝑚𝑛 𝑂 ◦ סיבוכיות צעד פיבוט: ◦ מספר הצעדים שהאלג' מבצע הינו ◦ סה"כ𝑚+𝑛 : 𝑂 𝑛𝑚 ⋅ 2 60 𝑛𝑂 2𝑚+ זהו חסם עליון .האם יש מקרים בהם מספר הצעדים מעריכי? התשובה תלויה בכלל בחירת המשתנה הנכנס לבסיס - כלל הפיבוט. לכללים רבים הראו זמן מעריכי הסיבוכיות של בעיית LP שיטת הסימפלקס לפתרון בעיית LP ◦ מעריכית עבור כללי פיבוט רבים ◦ לא הוכחה כפולינומיאלית לשום כלל ◦ יעילה מאוד באופן מעשי האם קיים אלגוריתם פולינומיאלי כלשהו לבעיית ( ?LPכלומר :האם LPהיא -NPשלמה?) בעייה פתוחה מרכזית -עד "הספוטניק של "1979 61 The New York Times, November 7, 1979 Continued on next slide. Source: Andy Mirzayan, York Univ. עוד קצת היסטוריה שיטת האליפסואיד: ◦ התגלתה ב 1979-על ידי Leonid Khachiyan ◦ פולינומיאלית ,אך בפועל מאוד לא יעילה. שיטת Interior point ◦ הוצעה ב 1984-ע"י Narendra Karmarkar ◦ פולינומיאלית ויעילה עדיין תחום מחקר תוסס 64 עדיין לא סיימנו עם סימפלקס... נראה בשיעור הבא: ◦ כיצד למצוא צורת slackאפשרית התחלתית. ◦ כיצד להוכיח את נכונות האלגוריתם. 65
© Copyright 2024