פתרון - Algorithms

Download Report

Transcript פתרון - Algorithms

‫תרגול ‪ – 13‬עוד תכנות לינארי‬
‫‪0 .5‬‬
‫‪0 .3‬‬
‫‪0 .5‬‬
‫‪0 .5‬‬
‫‪0 .5‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0 .4‬‬
‫‪0 .5‬‬
‫‪0 .3‬‬
‫‪0 .4‬‬
‫‪0 .3‬‬
‫‪0‬‬
‫‪0 .3‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫הבעיה הדואלית‬
‫‪n‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪2‬‬
‫‪c x‬‬
‫‪maximize‬‬
‫מתחילים בייצוג הסטנדרטי‪.‬‬
‫כל אילוץ הופך למשתנה וכל‬
‫‪n‬‬
‫‪.‬‬
‫לאילוץ‬
‫הופך‬
‫משתנה‬
‫‪a‬‬
‫‪x‬‬
‫‪‬‬
‫‪b‬‬
‫‪for‬‬
‫‪i‬‬
‫‪‬‬
‫‪1‬‬
‫‪,‬‬
‫‪2‬‬
‫‪,...,‬‬
‫‪m‬‬
‫‪‬‬
‫‪ij j‬‬
‫‪i‬‬
‫‪j 1‬‬
‫מינימיזציה במקום מקסימיזציה‪.‬‬
‫אי השוויונות משנים כיוון‪.‬‬
‫‪xj  0‬‬
‫‪for j  1,2,...,n‬‬
‫אילוצי החיוביות נשארים‪ ,‬אבל‬
‫בשביל המשתנים החדשים‪.‬‬
‫‪j‬‬
‫‪j‬‬
‫‪j 1‬‬
‫הבעיה הדואלית‬
n
maximize
c x
j 1
n
a
j 1
ij
j
m
x j  bi for i  1,2,...,m
xj  0
minimize
j
i 1
m
a
i 1
for j  1,2,...,n
b y
ij
i
i
yi  c j for j  1,2,...,n
yi  0
for i  1,2,...,m
3
‫דוגמא‬
maximizex1  6 x2
x1  3 x2  9
y1
y2
 5 x1  4 x2  7
y3
x1  2 x2  18
x1 , x2  0
minimize18y1  9 y2  7 y3
y1  y2  5 y3  1
2 y1  3 y2  4 y3  6
y1 , y2 , y3  0
‫ למטריצת המקדמים‬transpose ‫ עשינו‬
4
‫שאלה ‪ – 1‬זיווג שברי )‪(fractional matching‬‬
‫‪ ‬תרגיל‪ :‬מצאו תוכנית לינארית לבעיה הבאה‪ ,‬והסבירו מהי‬
‫הבעיה המתאימה לתוכנית הדואלית לה‪ :‬נתון גרף לא מכוון‬
‫)‪.G  (V , E‬‬
‫◦ אנחנו רוצים לתת משקל אי שלילי לכל קשת בגרף כך‬
‫שסכום משקלי הקשתות יהיה מקסימאלי‪.‬‬
‫◦ לכל קודקוד בגרף‪ ,‬סכום משקלי הקשתות הסמוכות אליו‬
‫הינו לכל היותר ‪.1‬‬
‫‪5‬‬
‫‪ ‬איזו בעיה התוכנית הייתה פותרת אם היינו דורשים‬
‫שהמשתנים יכילו רק ערכים שלמים?‬
‫זיווג שברי ‪ -‬דוגמא‬
‫‪0 .5‬‬
‫‪0 .3‬‬
‫‪0 .5‬‬
‫‪0 .5‬‬
‫‪0 .5‬‬
‫‪6‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0 .4‬‬
‫‪0 .5‬‬
‫‪0 .3‬‬
‫‪0 .4‬‬
‫‪0 .3‬‬
‫‪0‬‬
‫‪0 .3‬‬
‫‪1‬‬
‫‪0‬‬
‫‪0‬‬
‫‪1‬‬
‫פתרון – התכנית הפרימאלית‬
‫‪ ‬לכל קשת ‪ e  E‬ניצור משתנה‬
‫‪ ‬לכל קודקוד ‪ v  V‬ניצור אילוץ (בהמשך נקרא לו ‪.) yv‬‬
‫‪.xe‬‬
‫‪x‬‬
‫‪e‬‬
‫‪maximize‬‬
‫‪eE‬‬
‫‪for v  1,2,..., V‬‬
‫‪for i  1,2,..., E‬‬
‫‪7‬‬
‫‪1‬‬
‫‪x‬‬
‫‪e‬‬
‫‪v e‬‬
‫‪xe  0‬‬
‫סכום על כל‬
‫הקשתות‬
‫אשר מכילות‬
‫את הקודקוד‪.‬‬
‫פתרון – התכנית הדואלית‬
E
maximize
x
minimize
for v  1,2,...,V
y
e 1
x
ve
e
1
xe  0
V
e
v 1
ve
for e  1,2,..., E
‫ משתנה לכל קשת‬
‫ אילוץ לכל קודקוד‬
y
v
1
yv  0
v
for e  1,2,..., E
for v  1,2,...,V
‫ משתנה לכל קודקוד‬
‫ אילוץ לכל קשת‬
8
‫משמעות התכנית הדואלית‬
‫‪V‬‬
‫‪y‬‬
‫‪v‬‬
‫‪minimize‬‬
‫‪v 1‬‬
‫‪for e  1,2,..., E‬‬
‫‪for v  1,2,...,V‬‬
‫‪1‬‬
‫‪v‬‬
‫‪y‬‬
‫‪ve‬‬
‫‪yv  0‬‬
‫‪ ‬מה הבעיה שהתוכנית הדואלית פותרת?‬
‫‪9‬‬
‫◦ רוצים לתת משקל אי שלילי לכל קודקוד‪ ,‬כך שסכום‬
‫משקלי כל הקודקודים מינימאלי‪.‬‬
‫◦ עבור כל קשת‪ ,‬סכום משקלי הקודקודים שהיא נוגעת‬
‫בהם נדרש להיות לפחות ‪.1‬‬
‫משמעות התכנית הדואלית בשלמים‬
‫‪V‬‬
‫‪ ‬איזו בעיה התוכנית הייתה‬
‫פותרת אם היינו דורשים‬
‫שהמשתנים יכילו רק ערכים‬
‫שלמים?‬
‫‪j‬‬
‫‪y‬‬
‫‪minimize‬‬
‫‪j 1‬‬
‫‪for i  1,2,..., E‬‬
‫‪for v  1,2,...,V‬‬
‫‪1‬‬
‫‪y‬‬
‫‪v‬‬
‫‪yv  0‬‬
‫• כל קודקוד מקבל ‪ 0‬או ‪( 1‬למה לא יותר מ‪.)?1-‬‬
‫• לכן כל קודקוד נבחר או לא נבחר‪.‬‬
‫• מחפשים קבוצה בגודל מינימאלי של קודקודים‪.‬‬
‫• מה האילוץ? לפחות קודקוד אחד יגע בכל קשת‪.‬‬
‫• זאת בעיית ‪ – Vertex Cover‬מציאת קבוצה מינימאלית של קודקודים‬
‫כך שכל קשת נוגעת בלפחות קודקוד אחד מהקבוצה‪.‬‬
‫‪10‬‬
‫‪vei‬‬
‫משמעות התכנית הדואלית בשלמים‬
‫‪y‬‬
‫‪v 1‬‬
‫‪v‬‬
‫• ‪ – Vertex Cover‬מציאת קבוצה‬
‫מינימאלית של קודקודים כך שכל קשת‬
‫נוגעת בלפחות קודקוד אחד מהקבוצה‪.‬‬
‫‪0 .5‬‬
‫‪11‬‬
‫‪0 .5‬‬
‫‪0 .5‬‬
‫‪0 .5‬‬
‫‪0 .5‬‬
‫‪minimize‬‬
‫‪V‬‬
‫‪for e  1,2,..., E‬‬
‫‪for v  1,2,...,V‬‬
‫‪1‬‬
‫‪y‬‬
‫‪ve‬‬
‫‪v‬‬
‫‪yv  0‬‬
‫משפט הדואליות‬
‫‪ ‬משפט‪ .‬אם לבעיית תכנות לינארי קיים פתרון פיזיבילי‬
‫אופטימאלי‪ ,‬אז ערך הפתרון האופטימאלי של הבעיה‬
‫הפרימאלית יהיה זהה לערך הפתרון האופטימאלי של‬
‫‪.‬‬
‫הדואלית‬
‫הבעיה‬
‫‪0 .5‬‬
‫‪0 .5‬‬
‫‪0 .5‬‬
‫‪0 .5‬‬
‫‪0 .5‬‬
‫‪0 .5‬‬
‫‪0 .5‬‬
‫‪0‬‬
‫‪0 .5‬‬
‫‪0‬‬
‫‪0 .5‬‬
‫‪0 .5‬‬
‫שאלה ‪ – 2‬פיזיביליות לינארית‬
‫פיזיביליות לינארית (‪ - )LF‬נתונים ‪ m‬אי‪-‬שיוויונים‬
‫לינאריים ב‪ n -‬משתנים‪ .‬עלינו למצוא הצבה של ערכים‬
‫למשתנים אשר תספק את כל האילוצים‪.‬‬
‫‪ (1‬נתון אלג' לפתרון בעיות ‪ .LP‬הסבירו כיצד ניתן להשתמש בו‬
‫על מנת לפתור בעיית ‪.LF‬‬
‫‪ (2‬נתון אלג' לפתרון בעיות ‪ .LF‬הסבירו כיצד ניתן להשתמש בו‬
‫על מנת לפתור בעיית ‪ .LP‬ניתן להניח שקיים לבעיה פתרון‬
‫אופטימלי‪.‬‬
‫‪13‬‬
‫פתרון סעיף ‪1‬‬
‫‪ (1‬נתון אלגוריתם לפתרון בעיות ‪ .LP‬הסבירו כיצד ניתן להשתמש‬
‫בו על מנת לפתור בעיית ‪.LF‬‬
‫פתרון‪ :‬נוסיף לבעיה פונקציית מטרה כלשהי‪ ,‬ונקבל בעיית‬
‫תכנות לינארי‪.‬‬
‫למשל‪.Minimize 0 ,‬‬
‫את הבעיה שהתקבלה ניתן לפתור בעזרת האלגוריתם הנתון‪.‬‬
‫‪14‬‬
‫פתרון סעיף ‪2‬‬
‫‪ )2‬נתון אלגוריתם לפתרון בעיות ‪ .LF‬הסבירו כיצד ניתן להשתמש בו‬
‫על מנת לפתור בעיית ‪.LP‬‬
‫פתרון‪ :‬נשתמש גם באילוצים של התוכנית הפרימאלית וגם‬
‫באילוצים של התוכנית הדואלית (כל אחת עם סט‬
‫משתנים משלה)‪.‬‬
‫‪n‬‬
‫‪m‬‬
‫‪ ‬נוסיף אילוץ‬
‫‪c x  by‬‬
‫‪i‬‬
‫‪i‬‬
‫‪‬‬
‫‪i 1‬‬
‫‪j‬‬
‫‪j‬‬
‫‪‬‬
‫‪j 1‬‬
‫כלומר‪ ,‬אנו דורשים שהפתרון הפרימאלי יהיה שווה לפתרון‬
‫הדואלי‪ .‬זה יתקיים רק עבור הפתרונות האופטימליים‪.‬‬
‫‪15‬‬
‫שאלה ‪ – 3‬זרימה‬
‫‪ ‬תרגיל‪ :‬נתונה רשת זרימה ‪ . V , E, s, t‬תהי ‪ P‬קבוצת כל‬
‫המסלולים מ‪ s -‬ל‪ . t -‬להלן תוכנית לינארית‪:‬‬
‫‪maximize x p‬‬
‫‪pP‬‬
‫‪e  E‬‬
‫‪p  P‬‬
‫)‪ c (e‬‬
‫‪p‬‬
‫‪x‬‬
‫‪eP‬‬
‫‪xp  0‬‬
‫◦ מה היא מחשבת?‬
‫◦ אם המשתנים בתוכנית הדואלית היו מקבלים רק ערכים‬
‫שלמים‪ ,‬מה היה הפתרון שלה מייצג?‬
‫‪16‬‬
‫שאלה ‪ – 3‬פתרון‬
‫‪maximize x p‬‬
‫‪pP‬‬
‫‪e  E‬‬
‫)‪ c (e‬‬
‫‪p  P‬‬
‫◦ הערך ‪ x p‬מייצג את כמות הזרימה שאנחנו מעבירים‬
‫במסלול ‪. p‬‬
‫◦ האילוצים מוודאים שבכל קשת לא תעבור יותר זרימה‬
‫מהקיבול שלה‪.‬‬
‫◦ אנחנו רוצים למקסם את הזרימה במערכת‪.‬‬
‫‪17‬‬
‫‪p‬‬
‫‪x‬‬
‫‪eP‬‬
‫‪xp  0‬‬
‫ – התוכנית הדואלית‬3 ‫שאלה‬
maximize x p
minimize c (e) ye
x
y
pP
eP
p
 c ( e ) e  E
xp  0
eP
p  P
eE
e
1
ye  0
p  P
e  E
18
‫שאלה ‪ – 3‬התוכנית הדואלית‬
‫אם המשתנים בתוכנית הדואלית‬
‫היו מקבלים רק ערכים שלמים‪,‬‬
‫מה הפתרון שלה היה מייצג?‬
‫‪minimize c (e) ye‬‬
‫‪eE‬‬
‫‪p  P‬‬
‫‪1‬‬
‫‪e  E‬‬
‫• כל קשת מקבלת ‪ 0‬או ‪( 1‬למה לא יותר מ‪.)?1-‬‬
‫• לכן כל קשת נבחרת או לא נבחרת‪.‬‬
‫• האילוצים מחייבים שלפחות קשת אחת תיבחר מכל מסלול‪.‬‬
‫• מנסים להביא למינימום את הקיבולים של הקשתות הנבחרות‪.‬‬
‫• מה זה מזכיר לנו?‬
‫‪19‬‬
‫‪e‬‬
‫‪y‬‬
‫‪eP‬‬
‫‪ye  0‬‬
‫שאלה ‪ – 3‬חתך מינימאלי‬
‫‪ ‬למה זה חתך?‬
‫◦ נקרא לקבוצת הקשתות ש"נבחרו" ‪.C -‬‬
‫◦ נוכל לזרוק את הקשתות ב‪ ,C-‬להריץ ‪ BFS‬מהמקור‪ ,‬ולהכניס את‬
‫כל הקודקודים שמצאנו ל‪ .S-‬שאר הקודקודים יהיו ב‪.T-‬‬
‫◦ מהמינימליות של ‪ ,C‬לא יהיו קשתות בין שני קודקודים באותו צד‬
‫של החתך‪.‬‬
‫‪ ‬למה החתך מינימלי?‬
‫◦ חתך מינימלי הוא פתרון פיזיבילי לבעיה‪.‬‬
‫◦ לא ייתכן פתרון עם ערך קטן יותר‪ ,‬כיוון שאז היה קיים חתך קטן‬
‫יותר‪.‬‬
‫‪20‬‬
‫שאלה ‪ – 4‬צעצועים לחתולים‬
‫גליל‬
‫עמוד‬
‫‪21‬‬
‫שאלה ‪ – 4‬צעצועים לחתולים‬
‫יש לנו מפעל לצעצועי חיות‪.‬‬
‫אנחנו מוכרים גליל ב ‪ ₪ 45‬ועמוד ב‪. ₪ 35-‬‬
‫יש לנו ‪ 1000‬מ"ר של בד‪ ,‬וצריך ‪ 10‬מ"ר לייצר גליל ו‪ 3-‬מ"ר לעמוד‪.‬‬
‫יש לנו ‪ 250‬פרחים‪ ,‬וצריכים ‪ 2‬פרחים לעמוד ופרח אחד לגליל‪.‬‬
‫יש לנו ‪ 500‬מטר חבל‪ ,‬וצריך ‪ 7‬מטר חבל לעמוד‪.‬‬
‫‪22‬נרצה למקסם את הרווח‪.‬‬
‫שאלה ‪ – 4‬צעצועים לחתולים‬
‫רווח‬
‫בד‬
‫פרחים‬
‫חבל‬
‫‪maximize45x1  35x2‬‬
‫‪10x1  3 x2  1000‬‬
‫‪x1  2 x2  250‬‬
‫גלילים ופרחים‬
‫‪7 x2  500‬‬
‫‪x1 , x2  0‬‬
‫אנחנו מוכרים גליל ב ‪ ₪ 45‬ועמוד ב‪. ₪ 35-‬‬
‫יש לנו ‪ 1000‬מ"ר של בד‪ ,‬וצריך ‪ 10‬מ"ר לגליל ו‪ 3-‬מ"ר לעמוד‪.‬‬
‫יש לנו ‪ 250‬פרחים וצריכים ‪ 2‬פרחים לעמוד ופרח אחד לגליל‪.‬‬
‫יש לנו ‪ 500‬מטר חבל‪ ,‬וצריך ‪ 7‬מטר חבל לעמוד‪.‬‬
‫נרצה למקסם את הרווח‪.‬‬
‫‪23‬‬
‫ – הבעיה הדואלית‬4 ‫שאלה‬
maximize45x1  35x2
10x1  3 x2  1000
x1  2 x2  250
7 x2  500
x1 , x2  0
minimize1000y1  250y2  500y3
10 y1  y2  45
3 y1  2 y2  7 y3  35
y1 , y2 , y3  0
24
‫שאלה ‪ – 4‬הבעיה הדואלית‬
‫חידה‪ :‬כמה יצטרכו לשלם לנו כדי שישתלם לנו למכור?‬
‫כמה הוא משלם‬
‫‪minimize1000y1  250y2  500y3‬‬
‫תשלום על ‪ 10‬מ"ר בד ‪ +‬פרח צריך‬
‫להיות יותר מ‪₪ 45-‬‬
‫תשלום על ‪ 3‬מ"ר בד ‪ 2 +‬פרחים ‪7+‬‬
‫מטר חבל צריך להיות יותר מ‪₪ 35-‬‬
‫‪10 y1  y2  45‬‬
‫‪3 y1  2 y2  7 y3  35‬‬
‫‪y1 , y2 , y3  0‬‬
‫יחידה אחת מהמשאב‬
‫‪25‬‬
‫שאלה ‪ – 4‬הפרימאלית והדואלית‬
‫‪maximize45x1  35x2‬‬
‫מחיר כפול כמות‬
‫‪10x1  3 x2  1000‬‬
‫כמות כפול מחיר‬
‫כמות‬
‫‪minimize1000y1  250y2  500y3‬‬
‫מחיר‬
‫‪10 y1  y2  45‬‬
‫‪3 y1  2 y2  7 y3  35‬‬
‫‪y1 , y2 , y3  0‬‬
‫‪26‬‬
‫‪x1  2 x2  250‬‬
‫‪7 x2  500‬‬
‫‪x1 , x2  0‬‬
‫מחיר ליחידה‬
‫שאלה ‪ – 4‬שיוויון הפתרונות‬
‫• מתי נסכים למכור?‬
‫• אם ישלמו את הרווח המקסימאלי שלנו ומעלה‪ ,‬ישתלם לנו למכור‪.‬‬
‫‪27‬‬
‫ולסיום‬
‫בהצלחה בבחינה!‬