תרגול מס' 10 תכנון ליניארי תכנון לינארי הינו כלי שימושי במדעי המחשב. בקורס ראינו כיצד ניתן להציג בעיות שונות במסגרת תכנון לינארי. בנוסף, ראינו שימושים לדואליות של תוכניות לינאריות, אשר מקשרת בין בעיות שונות. בתרגול זה נראה חלופית למשפט Max-Flw-Min-Cut בעזרת תכנון לינארי. זו מבהירה בצורה נוספת את הקשר שבין זרימה מקסימלית לחתך מינימלי, ואת השימושים והכלים אשר תכנון לינארי מספק לנו הן לפתרון בעיות והן להוכחות מתמטיות. ((, ),,, ), N = V E c s t כאשר: = G הוא גרף מכוון. תזכורת רשת זרימה היא רביעייה ( V, E) s V הוא קדקוד המקור. t V הוא קדקוד הבור.. e E לכל c(e) 0 היא פונקצית הקיבולת, אשר מקיימת: c: E R בנוסף מניחים ש : 0 = v) c(u, לכל (u, v) E., f : V V R המקיימת את שלוש התכונות זרימה f ברשת ),, ),, (( הבאות: N = V E c s t היא פונקציה. f ( v, u) c( v, u), v, u V אילוצי קיבול: לכל יש לשים לב, שהזרימה על קשת יכולה להיות שלילית אבל הקיבולת לא. f ( v, u) = f( u, v) f ( u, v ) = 0 vv v, אנטי סימטריה: לכל u V שימור זרימה: לכל מתקיים t} u V \{ s, מתקיים )סכום הזרימה על הצלעות הנכנסות ל- u שווה לסכום הזרימה על הצלעות היוצאות מ- u (.. f = v V f ( s, v) כלומר, s גודל של זרימה f הוא סך הזרימה היוצאת מ-.) f = v V )הגדרה סימטרית סך הזרימה הנכנסת ל- t, כלומר (t f (,v ((, ),,, ). N = V E c s t בעיית הזרימה: מופע: רשת זרימה צריך למצוא: זרימה f ברשת N בעלת גודל מקסימאלי. 1
s S כאשר,) T = V \ S חתך ברשת זרימה: חתך ), ST ( )עם ו-. t T קיבולת של חתך: עבור חתך S קיבולת החתך הוא סך הקיבולות על הצלעות היוצאות מ-, ( ST, ) ונכנסות ל- T, כלומר c(s, T) = c(u, v) u S,v T משפט :(Max-Flw-Min-Cut) גודל זרימה מקסימאלית ברשת שווה לקיבול חתך מינימלי ברשת. נתחיל בהצגת תוכנית לינארית המייצגת את בעיית זרימה מקסימלית. תוכנית לינארית 1 זרימה מקסימלית תהי t) N = ((V, E), c, s, רשת זרימה. נגדיר P להיות אוסף המסלולים )הפשוטים( מ- s ל- t. max f p p P s. t. f p c(e), e E p P e p f p 0, p P הסבר התוכנית הליניארית הנ"ל אינה תרגום ישיר לתוכנית לינארית של בעיית זרימה מקסימלית כפי שהגדרנו אותה. אולם, התוכנית הנ"ל שקולה לבעיית זרימה מקסימלית. ניתן לחשוב על זרימה כפונקציה על מסלולים מ- s ל- t אשר מגדירה כמה יש להזרים על כל מסלול. בתוכנית הנ"ל, המשתנה f p מתאר כמה זרימה יש על גבי מסלול p. בהינתן זרימה על גבי מסלולים, הזרימה העוברת בקשת e היא סכום הזרימה על פני כל המסלולים העוברים ב- e. על מנת לוודא כי אילוצי קיבול לא יופרו, האילוץ המתאים לקשת e בתוכנית הלינארית דורש כי סכום הזרימה הנ"ל יהיה לכל היותר קיבולת הקשת. שימור זרימה מתקיים באופן ישיר לכל מסלול בנפרד, ולכן גם לסכום המסלולים. בהינתן זרימה חוקית :f V V )בצורה הסטנדרטית(, ניתן להראות כי קיימת זרימה חוקית באותו הגודל כך שניתן לתאר אותה בעזרת זרימה על פני אוסף המסלולים P, כפי שמופיע בתוכנית הלינארית. הרעיון הוא שניתן "לפרק" את הזרימה למסלולים בכל שלב נמצא מסלול מ- s ל- t עם זרימה חיובית ממש עליו, ונסיר את הזרימה על גביו מהגרף )את צוואר הבקבוק של הזרימה על גביו(. )הערה: למעוניינים, משפט זה נקרא )Flw Decmpsitin Therem 2
תזכורת: תוכנית דואלית n עבור תוכנית לינארית מהצורה: max c i x i i=1 n s. t a ji x i b j j = 1,, m i=1 x i 0 i = 1,, n m התוכנית הדואלית הינה התוכנית הלינארית הבאה: min b j y j j=1 m s. t a ji y j c i i = 1,, n j=1 y j 0 j = 1,, m תוכנית לינארית 2 הדואלי )חתך מינימלי( y e נבנה את התוכנית הדואלית לתוכנית )1(. עבור כל אילוץ בתוכנית המקורית מוגדר משתנה בתוכנית הדואלית. לכן, לכל קשת e E מוגדר משתנה בתוכנית הדואלית. עבור כל משתנה f p בתוכנית המקורית מוגדר אילוץ בתוכנית הדואלית. יש לעבור על פני כל האילוצים של תוכנית )1(, ובכל אילוץ לבדוק מה המקדם של f. p בתוכנית זו, עבור אילוץ המתאים ל- E e כך ש- p e f p המשתנה f p מופיע עם מקדם 1, ועבור אילוץ המתאים ל- E e כך ש- p e המשתנה לכן, בתוכנית הדואלית, באילוץ המתאים ל- p, המשתנה מופיע עם מקדם 0. y e המתאים לקשתות e p יופיע עם מקדם 1, וכל שאר המשתנים יופיעו עם מקדם 0. בנוסף, המקדם של f p בתוכנית הדואלית האילוץ המתאים ל- p צריך להיות גדול או שווה ל- 1. בפונקציית המטרה של תוכנית )1( הינו 1, ולכן min c(e) y e e E s. t. y e 1 e p y e 0, p P, e E 3
אינטואיציה נרצה להראות כי התוכנית הדואלית מתארת את בעיית חתך מינימלי. נניח תחילה כי תוכנית )2( הינה מעל {0,1}, כלומר {0,1} e y לכל e. E במקרה זה, המשתנים הינם y e משתני אינדיקטור המציינים אילו קשתות יהיו "חוצות חתך" כל הקשתות עבורן = 1 e y. פונקציית המטרה היא סכום הקיבולות של הקשתות הנ"ל. עבור חתך (T,S) ניתן להגדיר פתרון פיזיבילי בו כל קשת e חוצה חתך מקבלת = 1 e y, ועבור שאר הקשתות ל- t קל לראות כי כל מסלול פשוט מ- s y. e = 0 חייב להכיל לפחות קשת חוצה חתך יחידה, ולכן האילוצים מתקיימים. בנוסף, ערך פונקציית המטרה הינו (T.c(S, נניח ויש לנו פתרון אופטימלי לתוכנית )2( בעל ערך x. נסמן ב- F את קבוצת כל הקשתות עבורן = 1 e y. לפי אילוצי התוכנית, בכל מסלול p P קיימת לפחות קשת אחת מ- F. לכן, אם נסיר את קשתות F מהגרף נקבל כי אין מסלול מ- s ל- t. נגדיר את S להיות קבוצת כל הקודקודים הנגישים מ- s לאחר ההסרה, וכן T. = V S אזי (T,S) חתך, וכן לפי הגדרתו כל קשת (v e =,u) חוצה חתך מקיימת e F )אחרת גם v היה נגיש מ- s ), כלומר = 1 e y. בנוסף, לא ייתכן כי קיימת e F שאינה חוצה חתך, אחרת נגדיר = 0 e y ונקבל שכל האילוצים עדיין מתקיימים )חשבו מדוע?(, אך פונקציית המטרה קטנה, בסתירה. כלומר, F היא בדיוק קבוצת כל הקשתות חוצות החתך (T,S). מכאן נובע: c(s, T) = c(e) = c(e) = c(e) y e e הצוח ךתח e F e F = c(e) y e e E = x נרצה עתה להראות כי גם מעל R תוכנית )2( מתארת את בעיית חתך מינימלי. ליתר דיוק, נרצה להראות כי ערך פתרון אופטימלי לתוכנית )2( הינו קיבולת חתך מינימלי ברשת הזרימה. לשם כך נוכיח את 2 הטענות הבאות ) בהמשך(. טענת עזר 1 עבור חתך (T,S) ברשת, קיים פתרון פיזיבילי לתוכנית )2( בעל ערך (T.c(S, טענת עזר 2 עבור פתרון פיזיבילי לתוכנית )2( בעל ערך l, קיים חתך (T,S) ברשת הזרימה כך שמתקיים.c(S, (T l טענה ערך פתרון אופטימלי לתוכנית )2( הינו קיבולת החתך מינימלי ברשת הזרימה. 4
יהי OPT קיבולת של חתך מינימלי ברשת, ויהי FRAC ערך אופטימום של תוכנית )2(. לפי טענת עזר 1, קיים פתרון פיזיבילי לתוכנית )2( בעל ערך.OPT מכך ש- FRAC ערך אופטימום )מינימום( של התוכנית הלינארית נובע כי.FRAC OPT לפי טענת עזר 2, קיים חתך ברשת עם קיבולת לכל היותר.FRAC מאחר ו- OPT ערך של חתך מינימלי ברשת נובע כי.OPT FRAC מסקנה:.OPT = FRAC משפט Max Flw Min Cut גודל זרימה מקסימאלית ברשת שווה לקיבול חתך מינימלי ברשת. לפי משפט דואליות חזקה מתקיים כי ערכי הפתרונות האופטימליים של תוכניות )1( ו-) 2 ( זהים. ערך פתרון אופטימלי לתוכנית )1( הינו גודל זרימה מקסימלית, ואילו ערך פתרון אופטימלי לתוכנית )2(, לפי משפט שהוכחנו עתה, הינו קיבולת החתך המינימלי ברשת, והמשפט נובע. הוכחת טענות עזר טענת עזר 1 עבור חתך (T,S) ברשת, קיים פתרון פיזיבילי לתוכנית )2( בעל ערך (T.c(S, יהי (T,S) חתך ברשת. נגדיר את הפתרון הבא: 1, u S v T (u, v) E: y(u, v) = { 0, else 5 לפי הגדרה מתקיים 0 e y לכל.e E עבור מסלול p, P המסלול מתחיל בקודקוד s S ומסתיים בקודקוד t T ולכן קיימת קשת (v,u) לאורך המסלול כך ש- S u וגם,v T ובפרט = 1 (u,v).y מאחר וכל ה- y e והאילוצים מתקיימים., e p אי-שליליים מתקיים כי 1 e y נחשב את ערך הפתרון הנ"ל. כל קשת (v,u) חוצה חתך תורמת (v c(u, לערך הפתרון, וכל קשת אחרת תורמת 0. לכן ערך הפתרון הינו: (u,v) E u S v T c(u, v) = c(s, T)
טענת עזר 2 עבור פתרון פיזיבילי לתוכנית )2( בעל ערך l, קיים חתך (T,S) ברשת הזרימה כך שמתקיים.c(S, (T l יהי {y e } e E פתרון פיזיבילי לתוכנית )2( המקיים c(e) y e נחשוב על. l = e E y e כמשקלים על צלעות הגרף. תחת פונקציית משקל זו נגדיר לכל קודקוד v V את d[v] להיות משקל מסלול קל ביותר בגרף מ- s ל- v. נשים לב כי הפונקציה מוגדרת היטב מאחר והמשקלים אי-שליליים. בנוסף מתקיים 1,d[t] זאת כי לכל מסלול p מ- s ל- t לפי האילוצים מתקיים כי משקל המסלול מקיים e p, ובפרט הדבר נכון גם עבור מסלול קל ביותר. y e 1 שיטת העיגול המקרי נראה בעזרת ניתוח הסתברותי כי קיים חתך בעל קיבולת לכל היותר l. ביתר פירוט, נראה אלג' אקראי ליצירת חתך ברשת כך שתוחלת הקיבולת של החתך הנוצר היא לכל היותר l. נסיק כי בהכרח קיים חתך שקיבולו לכל היותר l )אחרת כל החתכים בקיבולת גדולה יותר, בסתירה לכך שהתוחלת קטנה(. נבחר באופן מקרי ואחיד (0,1) r. נגדיר r},s = {v V d[v] < וכן.T = V S ברור כי (T,S) חלוקה זרה של קודקודי הגרף. בנוסף, d[s] = 0 < r ולכן s, S וכן לפי אבחנה מקודם d[t] 1 > r ולכן.t T קיבלנו כי T) (S, חתך ברשת. עבור קשת,u), (v E מה ההסתברות לכך שהקשת חוצה חתך? Pr(u S v T) = Pr(d[u] < r d[v]) max{0, d[v] d[u]} הסבר: אם d[v],d[u] זהו מאורע ריק, וההסתברות לכך היא 0. נניח d[v].d[u] < ההסתברות לכך ש- r נופל בקטע כלשהו בתוך (0,1) פרופורציונית לאורך הקטע. במקרה שלנו, הקטע המעניין אותנו הוא d[v]].(d[u], נשים לב, ייתכן כי חלק מהקטע, או כולו מחוץ לתחום (0,1). בכל מקרה, הטווח בו הערך של r צריך להתקבל על מנת שהקשת תהיה חוצה חתך חסום על ידי הקטע.d[v] d[u] ולפיכך ההסתברות היא לכל היותר,(d[u], d[v]] ניזכר בתכונה של מסלולים קלים ביותר )בגרף עם משקלים אי-שליליים(. לכל קשת,u) (v E מתקיים כי מסלול קל ביותר מ- s ל- v, הוא לכל היותר מסלול קל ביותר מ- s ל- u בתוספת משקל הקשת (v,u). 6
במקרה שלנו, עבור קשת (u, v) E מתקיים כי v).d[v] d[u] + y(u, נעביר אגפים ונקבל d[u].y(u, v) d[v] בנוסף, לפי אילוצי התוכנית מתקיים 0 (u,v).y משני אי-שוויוניים אלו מתקיים d[u]}.y (u,v) max{0, d[v] נציב זאת בניתוח ההסתברותי מקודם ונקבל: Pr(u S v T) max{0, d[v] d[u]} y (u,v) עתה, כל שנותר הוא לחשב את תוחלת קיבולת החתך. נשים לב, קשת חוצה חתך תתרום (v c(u, לקיבולת, ואילו קשת שאינה חוצה חתך תתרום 0. עבור קשת,u) (v E נגדיר משתנה מקרי (u,v) X אשר מקבל ערך (v c(u, אם (v,u) קשת חוצה חתך, ו- 0 אחרת. נחשב תוחלת של מ"מ זה: E[X (u,v) ] = c(u, v) Pr(u S v T) + 0 Pr(u T v S) c(u, v) y (u,v) לפי הגדרתנו, קיבולת החתך היא (u,v) (u,v) E X תזכורת ליניאריות התוחלת עבור משתנים מקריים X 1, X 2,, X n מתקיים: E[X 1 + X 2 + + X n ] = E[X 1 ] + E[X 2 ] + + E[X n ] נחשב עתה את תוחלת קיבולת החתך בעזרת לינאריות התוחלת: E[c(S, T)] = E[ X (u,v) ] = E[X (u,v) ] c(u, v) y (u,v) = l (u,v) E (u,v) E (u,v) E הגדרנו תהליך מקרי שתמיד מחזיר חתך חוקי ברשת, כך שתוחלת קיבולת החתך המוחזר היא לכל היותר l. לכן בהכרח קיים ברשת חתך (T,S) המקיים c(s, (T l כנדרש. הערה: באופן כללי, עבור מ"מ מקרי X בעל תוחלת l, בהכרח קיים מאורע בו הוא מקבל ערך לכל היותר l, וקיים מאורע בו הוא מקבל ערך לכל הפחות l. ליתר דיוק, קיימים מאורעות כנ"ל עם הסתברות חיובית ממש. 7