בקטע הזה מתוארות חלק מהאפשרויות לפותר בעיות הניתוב.
מגבלות חיפוש
מגבלות החיפוש סגרו את פותר הבעיות אחרי שהוא הגיע למגבלה שצוינה, למשל משך הזמן המרבי או מספר הפתרונות שנמצאו. אפשר להגדיר מגבלת חיפוש באמצעות הפרמטרים של החיפוש בפותר. לדוגמה, ראו מגבלות זמן.
בטבלה הבאה מתוארות הגבלות החיפוש הנפוצות ביותר.
שם | Type | ברירת המחדל | תיאור |
---|---|---|---|
solution_limit
|
int64 | kint64max, קינטין מקסימום | לצמצם את מספר הפתרונות שנוצרו במהלך החיפוש. |
time_limit.seconds
|
int64 | kint64max, קינטין מקסימום | יוגבלו בשניות עד לזמן: בחיפוש. |
lns_time_limit.seconds
|
int64 | 100 | יוגבלו בשניות עד לזמן המושקע ב: חיפוש ההשלמה של כל שכונה בחיפוש מקומי. |
אסטרטגיית פתרון ראשונה
שיטת הפתרון הראשונה היא השיטה שבה משתמש פותר הבעיות כדי למצוא פתרון ראשוני. הטבלה הבאה מפרטת את האפשרויות של first_solution_strategy
.
אפשרות | תיאור |
---|---|
AUTOMATIC
|
מאפשר לפותר הבעיות לזהות באיזו אסטרטגיה להשתמש בהתאם למודל שנפתר. |
PATH_CHEAPEST_ARC
|
מתחילים מצומת ההתחלה של המסלול, מחברים אותו לצומת שמייצרים את קטע המסלול הזול ביותר, ואז מרחיבים את המסלול באמצעות צומת בצומת האחרון שנוסף למסלול. |
PATH_MOST_CONSTRAINED_ARC
|
בדומה ל-PATH_CHEAPEST_ARC , אבל קשתות מועלות תחילה באמצעות בורר מבוסס-השוואה, בעל עדיפות גבוהה יותר ל-ARC המוגבל ביותר. כדי להקצות בורר למודל הניתוב, צריך להשתמש בשיטה ArcIsMoreConstrainedThanArc() . |
EVALUATOR_STRATEGY
|
בדומה ל-PATH_CHEAPEST_ARC , רק עלויות של קשת מחושבות באמצעות הפונקציה שהועברה אל SetFirstSolutionEvaluator() . |
SAVINGS
|
אלגוריתם חיסכון (Clarke & Wright). קלארק, ג'י. ורייט, ג'יי וו. "תזמון כלי רכב מתחנת דיפו מרכזית למספר נקודות מסירה" , מחקר תפעולי, כרך 12, 1964, עמ' 568-581. |
SWEEP
|
אלגוריתם מטאטא (וורן והולידיי). אזכור אנתוני רן ולוח הזמנים של כלי הרכב אלן הולידיי ממחסן אחד או יותר למספר נקודות תפעוליות של נקודות מסירה מחקר רבעוני (1970-1977), כרך 23, 3 (1 בספטמבר) 1972), עמ' 333-344. |
CHRISTOFIDES
|
האלגוריתם של כריסטופדים (הוא למעשה וריאציה של האלגוריתם של ChristoTrustes באמצעות התאמה מקסימלית במקום התאמה מקסימלית. זה לא מבטיח שהגורם המשוער הוא 3/2 של קירבה לאיש מכירות שנוסע). פועל במודלים כלליים של ניתוב רכב על ידי הרחבת נתיב עד שלא ניתן להוסיף לו צמתים. אזכור של ניקו כריסטופידס, ניתוח המקרה הגרוע ביותר של היוריסטיקה חדשה לבעיית אנשי המכירות המטיילים, דוח 388, בית הספר למנהל עסקים תעשייתי ב-CMU, 1976. |
ALL_UNPERFORMED
|
ביטול ההפעלה של כל הצמתים. חשוב למצוא פתרון רק אם הצמתים הם אופציונליים (הם רכיב של אילוץ ניתוק עם עלות סופית של עונש). |
BEST_INSERTION
|
כדי ליצור פתרון באופן קבוע, מכניסים את הצומת הזול ביותר במיקום הכי זול. עלות ההכנסה מבוססת על פונקציית העלות הגלובלית של מודל הניתוב. החל מ-2/2012, הוא פועל רק בדגמים עם צמתים אופציונליים (עם עלויות עונשין סופיות). |
PARALLEL_CHEAPEST_INSERTION
|
כדי ליצור פתרון באופן חוזר ונשנה, צריך להכניס את הצומת הזול ביותר במיקום הזול ביותר. עלות ההכנסה מבוססת על פונקציית העלות של קשת. מהיר יותר מ-BEST_INSERTION . |
LOCAL_CHEAPEST_INSERTION
|
כדי ליצור פתרון באופן חוזר, מקצים כל צומת במיקום הזול ביותר. עלות ההכנסה מבוססת על פונקציית העלות של קשת. שונה מ-PARALLEL_CHEAPEST_INSERTION לפי הצומת שנבחר להוספה, וכאן צמתים נלקחים בחשבון לפי סדר היצירה שלהם. מהיר יותר מ-PARALLEL_CHEAPEST_INSERTION . |
GLOBAL_CHEAPEST_ARC
|
מחברים באופן קבוע שני צמתים שמייצרים את קטע המסלול הזול ביותר. |
LOCAL_CHEAPEST_ARC
|
בחרו את הצומת הראשון עם חליפין ללא חיבור, וחברו אותו לצומת שייצור את קטע המסלול הזול ביותר. |
FIRST_UNBOUND_MIN_VALUE
|
בחרו את הצומת הראשון עם חליפין ללא גבולות וחברו אותו לצומת הזמין הראשון. היא מקבילה לשיטה CHOOSE_FIRST_UNBOUND בשילוב עם ASSIGN_MIN_VALUE (cf.trains_solver.h). |
סטטוס חיפוש
ניתן להחזיר את הסטטוס של חיפוש באמצעות השיטה status
של מודל הניתוב.
הנה קוד Python להדפסת הסטטוס של חיפוש:
print("Solver status: ", solver.status())
המשמעות היא הדפסת מספר שלם במשמעות הבאה:
ערך | תיאור |
---|---|
0 |
ROUTING_NOT_SOLVED : הבעיה עדיין לא נפתרה. |
1 |
ROUTING_SUCCESS : הבעיה נפתרה. |
2
|
ROUTING_PARTIAL_SUCCESS_LOCAL_OPTIMUM_NOT_REACHED : הבעיה נפתרה בהצלחה אחרי שהתקשרתם אל RoutingModel.Solve() , רק שלא התקבלה תמיכה ברמה המקומית. אם תשאירו עוד זמן, תוכלו לפתור את הבעיה. |
3 |
ROUTING_FAIL : לא נמצא פתרון לבעיה. |
4 |
ROUTING_FAIL_TIMEOUT : הגעת למגבלת הזמן לפני חיפוש פתרון. |
5 |
ROUTING_INVALID : המודל, הפרמטרים של המודל או הסימונים לא תקינים. |
6 |
ROUTING_INFEASIBLE : הבעיה הוכחה כלא אפשרית. |
אפשרויות חיפוש מקומי
בטבלה הבאה מפורטות האפשרויות לאסטרטגיות חיפוש מקומיות (שנקראות גם מטא-נתונים). במאמר שינוי שיטת החיפוש מופיעות דוגמאות להגדרת האפשרויות האלה.
אפשרות | תיאור |
---|---|
AUTOMATIC |
מאפשר לפותר הבעיות לבחור במטא-נתונים. |
GREEDY_DESCENT |
המערכת מקבלת אזורים מקומיים המסייעים בשיפור העלות (הפחתת העלויות) עד שמגיעים לסכום מינימלי מקומי. |
GUIDED_LOCAL_SEARCH |
משתמש בחיפוש מקומי מודרך כדי לצאת מהמינימה המקומית. (cf. חיפוש מקומי מודרך) זהו בדרך כלל המטא-נתונים היעילים ביותר בניתוב כלי רכב. |
SIMULATED_ANNEALING |
משתמש בסימולציה של חיטוי כדי לצאת ממינימה מקומית (cf. Simuling Annealing). |
TABU_SEARCH |
משתמשת בחיפוש Tabu כדי לצאת מ-Minima מקומי (cf. חיפוש טאבו). |
GENERIC_TABU_SEARCH |
משתמשת בחיפוש בכרטיסיות כדי למצוא ערך שוויוני של פתרון, כדי לסמן בתו בריחה מסביבה מקומית. |
בקרת ריבוי
שם | Type | ברירת המחדל | תיאור |
---|---|---|---|
use_full_propagation
|
בוליאני | true | שימוש באילוצים עם ריבוי מלא במודל ניתוב (במקום רק הפצת אור בלבד). הטמעה מלאה נדרשת רק כשמשתמשים בחיפוש שמתמקד בעומק או במודלים המחייבים הטמעה חזקה כדי להשלים את הערך של המשתנים המשניים. שינוי ההגדרה ל-true יאט את החיפוש ברוב המקרים, וכך יגדיל את צריכת הזיכרון בכל המקרים. |