בקטע הזה מתוארות חלק מהאפשרויות של פותר הבעיות בניתוב.
מגבלות חיפוש
מגבלות החיפוש מסיימים את הפותר לאחר שהוא מגיע למגבלה שצוינה, למשל משך הזמן המקסימלי או מספר הפתרונות שנמצאו. אפשר להגדיר חיפוש דרך פרמטרי החיפוש של הפותר. צפייה דוגמה למגבלות זמן.
בטבלה הבאה מתוארות מגבלות החיפוש הנפוצות ביותר.
שם | סוג | ברירת מחדל | תיאור |
---|---|---|---|
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 , אבל קשתות הן
באמצעות בורר מבוסס-השוואה שיעניק את
בקשת מוגבלת קודם. כדי להקצות בורר למודל הניתוב, משתמשים
ArcIsMoreConstrainedThanArc() . |
EVALUATOR_STRATEGY
|
דומה ל-PATH_CHEAPEST_ARC , חוץ מהעלויות של קשת
מוערכים באמצעות הפונקציה שמועברת
SetFirstSolutionEvaluator() . |
SAVINGS
|
אלגוריתם חיסכון (Clarke ו-Wright). אזכורים של Clarke, G. & רייט, ג'. וו. "תזמון רכבים מתחנה מרכזית למספר נקודות משלוח" , מחקר תפעול, כרך 12, 1964, pp. 568-581. |
SWEEP
|
אלגוריתם סריקה (Wren ו-Holliday). הפניה לאנתוני רן & אלן הולידיי – תזמון מחשבים של כלי רכב מתחנה אחת או יותר למספר נקודות מסירה תפעוליות מחקר רבעוני (1970-1977), כרך 23, מס' 3 (ספטמבר, 1972), עמודים 333-344. |
CHRISTOFIDES
|
אלגוריתם כריסטופידס (הוא למעשה וריאנט של אלגוריתם כריסטופידס משתמש בהתאמה מקסימלית במקום במקסימום התאמה, והיא לא מבטיחה את הגורם השלישי או שניים של הקירוב אנשי מכירות בתחום הנסיעות). פועלת על מודלים גנריים של ניתוב רכבים הרחבת נתיב עד שלא ניתן להוסיף אליו צמתים. הזכר את ניקוס כריסטופידס, ניתוח המקרה הגרוע ביותר של היוריסטיקה חדשה בעיית אנשי המכירות לנסיעות, דוח 388, בית הספר ללימודי לתואר שני לתעשייה ניהול, CMU, 1976. |
ALL_UNPERFORMED
|
הגדרת כל הצמתים כלא פעילים. מוצא פתרון רק אם הצמתים הן אופציונליות (זהו רכיב של מגבלת מעבר עם עלות עונשית סופית). |
BEST_INSERTION
|
לפתח פתרון באופן חזרתי על ידי הוספת הצומת במיקום הזול ביותר שלו; עלות ההכנסה מבוססת על פונקציית העלות של מודל הניתוב. החל מ-2/2012, התכונה פועלת רק במודלים עם צמתים אופציונליים (עם עלויות קנס סופיות). |
PARALLEL_CHEAPEST_INSERTION
|
לפתח פתרון באופן חזרתי באמצעות הכנסת
הצומת הזול ביותר במיקום הזול ביותר; עלות ההכנסה מבוססת על
את פונקציית Arc cost. הוא מהיר יותר מ-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.
אילוץ_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. Simulated Annaling). |
TABU_SEARCH |
משתמש בחיפוש טאבו כדי לבלוט ערך מינימום מקומי (cf. חיפוש בכרטיסיות). |
GENERIC_TABU_SEARCH |
משתמש בחיפוש טאבו על הערך האובייקטיסטי של הפתרון, כדי לסמן בתו בריחה (escape) מיקום מקומי מינימום. |
בקרת הפצה
שם | סוג | ברירת מחדל | תיאור |
---|---|---|---|
use_full_propagation
|
בוליאני | true | שימוש באילוצים בהפצה מלאה במודל הניתוב (במקום בהפצה אור בלבד). מסך מלא ההפצה נחוצה רק כשמשתמשים בחיפוש עומק הראשון או במודלים שדורשות הפצה חזקה כדי להשלים את הערך של משתנים. שינוי ההגדרה ל-True יאט את החיפוש ברוב המקרים, ולהגדיל את צריכת הזיכרון בכל המקרים. |